33 std::shared_ptr<TMidasEvent>
event = std::static_pointer_cast<
TMidasEvent>(rawEvent);
38 switch(event->GetEventId()) {
41 if((banksize = event->LocateBank(
nullptr,
"WFDN", &ptr)) > 0) {
43 }
else if((banksize = event->LocateBank(
nullptr,
"GRF1", &ptr)) > 0) {
45 }
else if((banksize = event->LocateBank(
nullptr,
"GRF2", &ptr)) > 0) {
47 }
else if((banksize = event->LocateBank(
nullptr,
"GRF3", &ptr)) > 0) {
49 }
else if((banksize = event->LocateBank(
nullptr,
"GRF4", &ptr)) > 0) {
51 }
else if((banksize = event->LocateBank(
nullptr,
"CAEN", &ptr)) > 0) {
53 }
else if((banksize = event->LocateBank(
nullptr,
"CPHA", &ptr)) > 0) {
55 }
else if((banksize = event->LocateBank(
nullptr,
"MADC", &ptr)) > 0) {
57 if((banksize = event->LocateBank(
nullptr,
"EMMT", &ptr)) > 0) {
61 }
else if((banksize = event->LocateBank(
nullptr,
"EMMT", &ptr)) > 0) {
65 std::cout<<
DRED<<std::endl<<
"Unknown bank in midas event #"<<
event->GetSerialNumber()<<
RESET_COLOR<<std::endl;
72 if((banksize = event->LocateBank(
nullptr,
"CAEN", &ptr)) > 0) {
74 }
else if((banksize = event->LocateBank(
nullptr,
"CPHA", &ptr)) > 0) {
81 if((banksize = event->LocateBank(
nullptr,
"MSRD", &ptr)) > 0) {
82 EPIXToScalar(reinterpret_cast<float*>(ptr), banksize, event->GetSerialNumber(),
event->GetTimeStamp());
84 event->IncrementGoodFrags();
90 TXMLOdb* odb =
new TXMLOdb(event->GetData(),
event->GetDataSize());
92 TXMLNode* node = odb->
FindPath(
"/Runinfo/Stop time binary");
94 std::stringstream str(node->GetText());
99 std::cout<<
"Warning, ODB stop time of last subrun ("<<odbTime<<
") does not match midas time of last event in this subrun ("<<
event->GetTimeStamp()<<
")!"<<std::endl;
101 runInfo->SetRunStop(event->GetTimeStamp());
103 runInfo->SetRunLength();
108 }
catch(
const std::bad_alloc&) {
113 if(frags <= 0 && event->GetEventId() < 0x8000 && !
TGRSIOptions::Get()->SuppressErrors()) {
114 event->SetBankList();
115 event->Print(Form(
"a%i", (-1 * frags) - 1));
128 int NumFragsFound = 0;
129 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
130 eventFrag->SetDaqTimeStamp(event->GetTimeStamp());
131 eventFrag->SetDaqId(event->GetSerialNumber());
134 uint32_t dword = *(data + x);
140 std::cout<<
RED<<
"Setting TriggerId ("<<
hex(dword, 8)<<
") failed on midas event: "<<
DYELLOW<<
event->GetSerialNumber()<<
RESET_COLOR<<std::endl;
148 std::cout<<
RED<<x<<
" Setting TimeStamp failed on midas event: "<<
DYELLOW<<
event->GetSerialNumber()<<
RESET_COLOR<<std::endl;
153 for(; x < size; x++) {
155 type = (dword & 0xf0000000) >> 28;
156 value = (dword & 0x0fffffff);
164 if((chan !=
nullptr) && strncmp(
"Tr", chan->GetName(), 2) == 0) {
166 }
else if((chan !=
nullptr) && strncmp(
"RF", chan->GetName(), 2) == 0) {
177 if(((*(data + x + 1)) & 0xf0000000) != 0xe0000000) {
178 std::shared_ptr<TFragment> transferfrag = std::make_shared<TFragment>(*eventFrag);
179 eventFrag = std::make_shared<TFragment>();
180 eventFrag->SetDaqTimeStamp(transferfrag->GetDaqTimeStamp());
181 eventFrag->SetDaqId(transferfrag->GetDaqId());
182 eventFrag->SetTriggerId(transferfrag->GetTriggerId());
183 eventFrag->SetTimeStamp(transferfrag->GetTimeStamp());
187 event->IncrementGoodFrags();
189 std::shared_ptr<TFragment> transferfrag = std::make_shared<TFragment>(*eventFrag);
192 event->IncrementGoodFrags();
194 return NumFragsFound;
201 case 0x6: temp_led = value;
break;
215 return NumFragsFound;
221 currentFrag->SetAddress(static_cast<int32_t>(0x00ffffff & value));
228 if(currentFrag->GetWaveform()->size() > (100000)) {
229 std::cout<<
"number of wave samples found is to great"<<std::endl;
233 if((value & 0x00002000) != 0u) {
234 int temp = value & 0x00003fff;
236 temp = (temp & 0x00001fff) + 1;
237 currentFrag->AddWaveformSample(static_cast<Short_t>(-temp));
239 currentFrag->AddWaveformSample(static_cast<Short_t>(value & 0x00001fff));
241 if(((value >> 14) & 0x00002000) != 0u) {
242 int temp = (value >> 14) & 0x00003fff;
244 temp = (temp & 0x00001fff) + 1;
245 currentFrag->AddWaveformSample(static_cast<Short_t>(-temp));
247 currentFrag->AddWaveformSample(static_cast<Short_t>((value >> 14) & 0x00001fff));
256 currentFrag->SetCfd(int32_t(value & 0x07ffffff));
272 if(chan ==
nullptr) {
278 if((dig_type.compare(0, 5,
"Tig10") == 0) || (dig_type.compare(0, 5,
"TIG10") == 0)) {
279 if((value & 0x02000000) != 0u) {
280 charge = (-((~(
static_cast<int32_t
>(value) & 0x01ffffff)) & 0x01ffffff) + 1);
282 charge = (value & 0x03ffffff);
284 }
else if((dig_type.compare(0, 5,
"Tig64") == 0) || (dig_type.compare(0, 5,
"TIG64") == 0)) {
285 if((value & 0x00200000) != 0u) {
286 charge = (-((~(
static_cast<int32_t
>(value) & 0x001fffff)) & 0x001fffff) + 1);
288 charge = ((value & 0x003fffff));
291 if((value & 0x02000000) != 0u) {
292 charge = (-((~(
static_cast<int32_t
>(value) & 0x01ffffff)) & 0x01ffffff) + 1);
294 charge = ((
static_cast<int32_t
>(value) & 0x03ffffff));
297 currentFragment->SetCharge(charge);
303 if((value & 0xf0000000) != 0x80000000) {
306 value = value & 0x0fffffff;
311 currentFrag->SetTriggerId((uint64_t)(LastTriggerIdHiBits + value +
fMaxTriggerId));
312 std::cout<<
DBLUE<<
"We are looping new trigger id = "<<currentFrag->GetTriggerId()<<
", last trigger hi bits = "<<LastTriggerIdHiBits<<
", last trigger lo bits = "<<LastTriggerIdLoBits<<
", value = "<<value<<
RESET_COLOR<<std::endl;
314 currentFrag->SetTriggerId(static_cast<uint64_t>(LastTriggerIdHiBits + value));
317 currentFrag->SetTriggerId(static_cast<uint64_t>(LastTriggerIdHiBits + value));
320 currentFrag->SetTriggerId((uint64_t)(LastTriggerIdHiBits + value -
fMaxTriggerId));
321 std::cout<<
DRED<<
"We are backwards looping new trigger id = "<<currentFrag->GetTriggerId()<<
", last trigger hi bits = "<<LastTriggerIdHiBits<<
", last trigger lo bits = "<<LastTriggerIdLoBits<<
", value = "<<value<<
RESET_COLOR<<std::endl;
323 currentFrag->SetTriggerId(static_cast<uint64_t>(LastTriggerIdHiBits + value));
328 fLastTriggerId =
static_cast<unsigned long>(currentFrag->GetTriggerId());
335 for(
int x = 0; x < 10; x++) {
337 if(((*data) >> 28) == 0xa) {
341 long timestamplow = -1;
342 long timestamphigh = -1;
345 if(!((*data & 0xf0000000) == 0xa0000000)) {
346 std::cout<<
"here 0?\t"<<
hex(*data,8)<<std::endl;
350 unsigned int time[5] = {0};
353 while((*(data + x) & 0xf0000000) == 0xa0000000) {
354 time[x] = *(data + x);
365 if(time[0] != time[1]) {
366 timestamplow = time[0] & 0x00ffffff;
367 timestamphigh = time[1] & 0x00ffffff;
372 if(time[0] == time[1] && time[0] != time[2]) {
373 if(((time[0] & 0x0f000000) != 0x00000000) && ((time[2] & 0x0f000000) != 0x01000000)) {
376 timestamplow = time[0] & 0x00ffffff;
377 timestamphigh = time[2] & 0x00ffffff;
378 }
else if(time[0] != time[1] && time[1] == time[2]) {
379 if(((time[0] & 0x0f000000) != 0x00000000) && ((time[1] & 0x0f000000) != 0x01000000)) {
382 timestamplow = time[0] & 0x00ffffff;
383 timestamphigh = time[1] & 0x00ffffff;
387 timestamplow = time[0] & 0x00ffffff;
388 timestamphigh = time[1] & 0x00ffffff;
394 if(time[0] == time[1] && time[2] == time[3]) {
395 if(((time[0] & 0x0f000000) != 0x00000000) && ((time[2] & 0x0f000000) != 0x01000000)) {
398 timestamplow = time[0] & 0x00ffffff;
399 timestamphigh = time[1] & 0x00ffffff;
401 if(((time[0] & 0x0f000000) != 0x00000000) && ((time[1] & 0x0f000000) != 0x01000000)) {
404 timestamplow = time[0] & 0x00ffffff;
405 timestamphigh = time[1] & 0x00ffffff;
410 if(timestamplow > -1 && timestamphigh > -1) {
412 currentFrag->SetTimeStamp((timestamphigh<<24) + timestamplow);
430 for(
int index = 0; index < size;) {
431 if(((data[index]) & 0xf0000000) == 0x80000000) {
435 words =
GriffinDataToFragment(&data[index], size - index, bank, event->GetSerialNumber(),
event->GetTimeStamp());
440 std::cout<<std::endl<<e.
what();
446 event->IncrementGoodFrags();
458 std::cout<<
DRED<<
"//**********************************************//"<<
RESET_COLOR<<std::endl;
459 std::cout<<
DRED<<
"Bad things are happening. Failed on datum "<<index<<
RESET_COLOR<<std::endl;
460 event->Print(Form(
"a%i", index));
461 std::cout<<
DRED<<
"//**********************************************//"<<
RESET_COLOR<<std::endl;
463 std::string errfilename =
"error.log";
473 FILE* originalstdout = stdout;
474 FILE* errfileptr = freopen(errfilename.c_str(),
"a", stdout);
475 std::cout<<
"//**********************************************//"<<std::endl;
477 std::cout<<
"//**********************************************//"<<std::endl;
479 stdout = originalstdout;
497 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
503 bool multipleErrors =
false;
519 eventFrag->SetDaqTimeStamp(midasTime);
520 eventFrag->SetDaqId(midasSerialNumber);
524 if((eventFrag->GetModuleType() == 1 || eventFrag->GetModuleType() == 4) && eventFrag->GetAddress() == 0xffff) {
528 if(eventFrag->GetDetectorType() == 0xf) {
532 if((chan !=
nullptr) && strncmp(
"RF", chan->GetName(), 2) == 0){
545 multipleErrors =
true;
555 for(; x < size; x++) {
556 if((data[x] >> 28) == 0xe)
return x;
585 multipleErrors =
true;
601 multipleErrors =
true;
611 multipleErrors =
true;
615 std::vector<Int_t> tmpCharge;
616 std::vector<Short_t> tmpIntLength;
617 std::vector<Int_t> tmpCfd;
619 for(; x < size; x++) {
620 uint32_t dword = data[x];
621 uint32_t packet = dword >> 28;
622 uint32_t value = dword & 0x0fffffff;
635 multipleErrors =
true;
637 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
651 if((value & 0x3fff) == (eventFrag->GetChannelId() & 0x3fff)) {
654 if(((value >> 14) & 0x1) == 0x1) {
655 if(((value >> 16) & 0xff) != 0) {
656 std::cout<<
BLUE<<
hex(eventFrag->GetAddress(),4)<<
": NIOS code finished with error "<<
hex((value >> 16) & 0xff,2)<<
RESET_COLOR<<std::endl;
661 if((eventFrag->GetModuleType() == 1) || (bank >
EBank::kGRF2)) {
662 eventFrag->SetAcceptedChannelId((value >> 14) & 0x3fff);
664 eventFrag->SetAcceptedChannelId(0);
676 multipleErrors =
true;
678 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
692 if(eventFrag->GetModuleType() == 1 && bank ==
EBank::kGRF4) {
693 if(tmpCfd.size() != 1) {
701 multipleErrors =
true;
703 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
706 eventFrag->SetCfd(tmpCfd[0]);
713 if(tmpCharge.size() != tmpIntLength.size() || tmpCharge.size() != tmpCfd.size()) {
721 multipleErrors =
true;
723 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
726 for(
size_t h = 0; h < tmpCharge.size(); ++h) {
727 eventFrag->SetCharge(tmpCharge[h]);
728 eventFrag->SetKValue(tmpIntLength[h]);
729 eventFrag->SetCfd(tmpCfd[h]);
744 if((eventFrag->GetTimeStamp() & 0x0fffffff) <
748 eventFrag->AppendTimeStamp(((
fLastTimeStampMap[eventFrag->GetAddress()] >> 28) + 1)<<28);
750 eventFrag->AppendTimeStamp(
fLastTimeStampMap[eventFrag->GetAddress()] & 0x3fff0000000);
757 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
770 multipleErrors =
true;
772 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
784 multipleErrors =
true;
786 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
801 multipleErrors =
true;
803 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
814 multipleErrors =
true;
816 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
820 std::cout<<
"This bank not yet defined."<<std::endl;
827 switch(eventFrag->GetModuleType()) {
834 if(((data[x] & 0x80000000) == 0x0) && x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
835 Short_t tmp = (data[x] & 0x7c000000) >> 21;
836 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
840 tmpIntLength.push_back(tmp | ((data[x] & 0x7c000000) >> 26));
841 tmpCfd.push_back(data[x] & 0x03ffffff);
848 multipleErrors =
true;
850 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
856 (data[x + 1] & 0x80000000) == 0x0) {
857 Short_t tmp = (data[x] & 0x7c000000) >> 17;
858 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
862 tmpIntLength.push_back(tmp | ((data[x] & 0x7fc00000) >> 22));
863 tmpCfd.push_back(data[x] & 0x003fffff);
871 multipleErrors =
true;
873 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
880 if((data[x] & 0x80000000) == 0x0 && x + 1 < size &&
881 (data[x + 1] & 0x80000000) == 0x0) {
882 Short_t tmp = ((data[x] & 0x7c000000) >> 17) |
883 (((data[x] & 0x40000000) == 0x40000000) ? 0xc000 : 0x0);
887 if(
false && (data[x] & 0x02000000) == 0x02000000) {
888 tmpCharge.push_back(std::numeric_limits<int>::max());
890 tmpCharge.push_back((data[x] & 0x01ffffff) |
891 (((data[x] & 0x01000000) == 0x01000000)
896 tmpIntLength.push_back(tmp | ((data[x] & 0x7fc00000) >> 22));
897 tmpCfd.push_back(data[x] & 0x003fffff);
900 if(x + 2 < size && (data[x + 1] & 0x80000000) == 0x0 && (data[x + 2] & 0x80000000) == 0x0) {
902 tmpIntLength.push_back((data[x] & 0x3fff) | (((data[x] & 0x2000) == 0x2000) ? 0xc000 : 0x0));
905 if((data[x] & 0x02000000) == 0x02000000) {
906 tmpCharge.push_back(std::numeric_limits<int>::max());
908 tmpCharge.push_back((data[x] & 0x01ffffff) |
909 (((data[x] & 0x01000000) == 0x01000000)
915 if(x + 2 < size && (data[x + 1] & 0x80000000) == 0x0 && (data[x + 2] & 0x80000000) == 0x0) {
917 tmpIntLength.push_back((data[x] & 0x3fff) | (((data[x] & 0x2000) == 0x2000) ? 0xc000 : 0x0));
918 tmpIntLength.push_back((data[x] >> 16) |
919 (((data[x] & 0x20000000) == 0x20000000) ? 0xc000 : 0x0));
921 if((data[x] & 0x02000000) == 0x02000000) {
922 tmpCharge.push_back(std::numeric_limits<int>::max());
924 tmpCharge.push_back((data[x] & 0x01ffffff) |
925 (((data[x] & 0x01000000) == 0x01000000)
931 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
933 if((data[x] & 0x02000000) == 0x02000000) {
934 tmpCharge.push_back(std::numeric_limits<int>::max());
936 tmpCharge.push_back((data[x] & 0x01ffffff) |
937 (((data[x] & 0x01000000) == 0x01000000)
942 tmpIntLength.pop_back();
944 }
else if((data[x + 1] & 0x80000000) == 0x0) {
947 }
else if((data[x + 1] & 0x80000000) == 0x0) {
954 while(x < size && (data[x] & 0xf0000000) != 0xe0000000) {
962 multipleErrors =
true;
964 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
970 std::cout<<
DRED<<
"Error, bank type "<<
static_cast<std::underlying_type<EBank>::type
>(bank)<<
" not implemented yet"<<
RESET_COLOR<<std::endl;
977 multipleErrors =
true;
979 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
986 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
987 Short_t tmp = (data[x] & 0x7c000000) >> 21;
988 tmpCharge.push_back((data[x] & 0x03ffffff) | (((data[x] & 0x02000000) == 0x02000000)
992 tmpIntLength.push_back(tmp | ((data[x] & 0x7c000000) >> 26));
993 tmpCfd.push_back(data[x] & 0x03ffffff);
1000 multipleErrors =
true;
1002 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1007 if(bank >
EBank::kGRF2 && (eventFrag->GetDetectorType() == 6 || eventFrag->GetDetectorType() == 10 ||
1008 eventFrag->GetDetectorType() == 11)) {
1010 if(x + 1 < size && (data[x + 1] & 0x80000000) == 0x0) {
1021 multipleErrors =
true;
1023 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1030 std::cout<<
DRED<<
"Error, module type "<<eventFrag->GetModuleType()<<
" not implemented yet"<<
RESET_COLOR<<std::endl;
1037 multipleErrors =
true;
1039 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1051 multipleErrors =
true;
1053 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
1060 if((value & 0xf0000000) != 0x80000000) {
1072 frag->SetModuleType((value & 0x00e00000) >> 21);
1073 frag->SetNumberOfPileups((value & 0x001c0000) >> 18);
1074 frag->SetAddress((value & 0x0003fff0) >> 4);
1075 frag->SetDetectorType((value & 0x0000000f));
1087 frag->SetNumberOfPileups((value & 0x0c000000) >> 26);
1088 frag->SetModuleType((value & 0x03800000) >> 23);
1090 frag->SetAddress((value & 0x000ffff0) >> 4);
1091 frag->SetDetectorType((value & 0x0000000f));
1096 frag->SetModuleType((value & 0x0e000000) >> 25);
1097 frag->SetNumberOfWords((value & 0x01f00000) >> 20);
1098 frag->SetAddress((value & 0x000ffff0) >> 4);
1099 frag->SetDetectorType((value & 0x0000000f));
1103 std::cout<<
"This bank is not yet defined."<<std::endl;
1113 if((value & 0xc0000000) != 0x00000000) {
1119 frag->SetTriggerBitPattern(value >> 16);
1124 frag->SetTriggerBitPattern(value >> 16);
1125 frag->SetNumberOfPileups(value & 0x1f);
1128 default:
return false;
1136 if((value & 0x80000000) != 0x00000000) {
1140 frag->SetTriggerId(value & 0x7FFFFFFF);
1147 if((value & 0xf0000000) != 0x90000000) {
1150 frag->SetChannelId(value & 0x0fffffff);
1157 if((value & 0xf0000000) != 0xd0000000) {
1160 if((value & 0x0f000000) == 0x0f000000 && frag->GetNetworkPacketNumber() > 0) {
1161 if(frag->GetZc() != 0) {
1165 frag->SetZc(value & 0x00ffffff);
1167 frag->SetNetworkPacketNumber(value & 0x0fffffff);
1175 if((value & 0xf0000000) != 0xa0000000) {
1179 frag->SetTimeStamp(value & 0x0fffffff);
1186 if(frag->GetWaveform()->size() > 100000) {
1187 std::cout<<
"number of wave samples found is too great"<<std::endl;
1192 frag->AddWaveformSample((value & 0x2000) != 0u ? static_cast<Short_t>((value & 0x3fff) | 0xc000)
1193 : static_cast<Short_t>(value & 0x3fff));
1194 value = value >> 14;
1195 frag->AddWaveformSample((value & 0x2000) != 0u ? static_cast<Short_t>((value & 0x3fff) | 0xc000)
1196 : static_cast<Short_t>(value & 0x3fff));
1204 if((value & 0xf0000000) != 0xb0000000) {
1207 frag->SetDeadTime((value & 0x0fffc000) >> 14);
1209 frag->AppendTimeStamp(static_cast<Long64_t>(value & 0x00003fff)<<28);
1216 if(frag->GetCcShort() != 0 || frag->GetCcLong() != 0) {
1219 frag->SetCcShort(value & 0x7ffff);
1220 frag->SetCcLong(value >> 19);
1227 if(frag->GetZc() != 0) {
1230 frag->SetZc(value & 0x003fffff);
1231 frag->SetCcLong(frag->GetCcLong() | ((value & 0x7fe00000) >> 12));
1241 double rfFreq = -1.0;
1245 int failedWord = -1;
1248 for(
int i = 0; i < size; i++) {
1255 uint32_t dword = data[x];
1256 uint32_t packet = dword >> 28;
1257 uint32_t value = dword & 0x0fffffff;
1262 rfFreq =
static_cast<double>(value);
1270 if((data[x] >> 28) == 0xb) {
1272 ts |= ((tshigh & 0x00003fff)<<28);
1278 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1288 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1304 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1308 frag->SetTimeStamp(ts);
1315 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1318 if((data[x]==data[x+1])&&(data[x]==data[x+2])&&(data[x]==data[x+3])){
1323 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1328 for(
int i = 0; i < 4; i++) {
1330 uint32_t dword = data[x];
1331 uint32_t packet = dword >> 28;
1334 if((packet) == 0xe){
1339 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1342 if((i!=2)&&(dword == 0)){
1347 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*frag, data, size, failedWord,
false));
1351 if(dword & (1<<29)){
1354 for(
int j=0;j<30;j++){
1360 for(
int j=pos+1;j<30;j++){
1363 rfPar[i] =
static_cast<double>(-1.0*(dword & 0x03ffffff));
1365 rfPar[i] =
static_cast<double>(dword & 0x03ffffff);
1375 rfPar[0] = rfPar[0] / rfPar[3];
1376 rfPar[1] = rfPar[1] / rfPar[3];
1377 rfPar[2] = rfPar[2] / rfPar[3];
1378 double T = 1.34217728E9 / rfFreq;
1379 double A = sqrt(rfPar[1] * rfPar[1] + rfPar[0] * rfPar[0]);
1380 double s = -rfPar[0] / A;
1381 double c = rfPar[1] / A;
1382 double rfPhaseShift;
1384 rfPhaseShift = acos(c) * T / (2 * TMath::Pi());
1386 rfPhaseShift = (1 - acos(c) / (2 * TMath::Pi())) * T;
1391 frag->SetCharge(static_cast<float>(T));
1392 frag->SetCfd(static_cast<float>(rfPhaseShift) * 1.6f);
1412 for(; x < size; x++) {
1413 uint32_t dword = data[x];
1414 uint32_t packet = dword & 0xf0000000;
1415 uint32_t value = dword & 0x0fffffff;
1449 if((value & 0xf0000000) != 0x00000000) {
1452 ppgevent->
SetNewPPG(value & 0x0fffffff);
1458 ppgevent->
SetOldPPG(value & 0x0fffffff);
1465 if((value & 0xf0000000) != 0xd0000000) {
1496 int failedWord = -1;
1512 for(
int i = 0; i < 4; ++i) {
1529 if(scalerType == 0) {
1531 }
else if(scalerType == 1) {
1533 scalerEvent->ResizeScaler();
1548 if((value >> 28) != 0xd) {
1559 if((value >> 28) != 0xa) {
1570 if((value >> 28) != 0xe || (value & 0xff) != (scalerEvent->
GetLowTimeStamp() >> 20)) {
1574 type = (value >> 24 & 0xf);
1587 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
1589 int nofFragments = 0;
1595 for(
int board = 0; w < size; ++board) {
1597 if(data[w]>>28 != 0xa) {
1598 if(data[w] == 0x0) {
1600 if(data[w++] != 0x0) {
1602 std::cerr<<board<<
". board - failed on first word, found empty word, but not all following words were empty: "<<w-1<<
" 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w-1]<<std::dec<<std::setfill(
' ')<<std::endl;
1607 return nofFragments;
1610 std::cerr<<board<<
". board - failed on first word 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<
", highest nibble should have been 0xa!"<<std::endl;
1614 int32_t numWordsBoard = data[w++]&0xfffffff;
1615 if(w - 1 + numWordsBoard > size) {
1617 std::cerr<<
"0 - Missing words, at word "<<w-1<<
", expecting "<<numWordsBoard<<
" more words for board "<<board<<
" (bank size "<<size<<
")"<<std::endl;
1621 uint8_t boardId = data[w]>>27;
1623 uint8_t channelMask = data[w++]&0xff;
1625 uint32_t boardTime = data[w++];
1632 for(uint8_t channel = 0; channel < 16; channel += 2) {
1633 if(((channelMask>>(channel/2)) & 0x1) == 0x0) {
1637 if(data[w]>>31 != 0x1) {
1639 std::cerr<<
"Failed on first word 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<
", highest bit should have been set!"<<std::endl;
1643 int32_t numWords = data[w++]&0x3fffff;
1646 std::cerr<<
"1 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1650 if(((data[w]>>29) & 0x3) != 0x3) {
1652 std::cerr<<
"Failed on second word 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<
", bits 29 and 30 should have been set!"<<std::endl;
1656 bool dualTrace = ((data[w]>>31) == 0x1);
1657 bool extras = (((data[w]>>28) & 0x1) == 0x1);
1658 bool waveform = (((data[w]>>27) & 0x1) == 0x1);
1659 uint8_t extraFormat = ((data[w]>>24) & 0x7);
1665 int numSampleWords = 4*(data[w++]&0xffff);
1668 std::cerr<<
"2 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1672 int eventSize = numSampleWords+2;
1673 if(extras) ++eventSize;
1674 if(numWords%eventSize != 2 && !(eventSize == 2 && numWords%eventSize == 0)) {
1676 std::cerr<<numWords<<
" words in channel aggregate, event size is "<<eventSize<<
" => "<<
static_cast<double>(numWords-2.)/
static_cast<double>(eventSize)<<
" events?"<<std::endl;
1682 for(
int ev = 0; ev < (numWords-2)/eventSize; ++ev) {
1683 eventFrag->SetDaqTimeStamp(boardTime);
1684 eventFrag->SetAddress(0x8000 + (boardId * 0x100) + channel + (data[w]>>31));
1685 if(eventFrag->GetAddress() == 0x8000) eventFrag->SetDetectorType(9);
1686 else eventFrag->SetDetectorType(6);
1688 eventFrag->SetTimeStamp(data[w] & 0x7fffffff);
1691 if(w + numSampleWords >= size) {
1693 std::cerr<<
"3 - Missing "<<numSampleWords<<
" waveform words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1697 for(
int s = 0;
s < numSampleWords && w < size; ++
s, ++w) {
1704 eventFrag->AddWaveformSample(data[w]&0xffff);
1705 eventFrag->AddWaveformSample((data[w]>>16)&0xffff);
1710 eventFrag->AddWaveformSample(data[w]&0xffff);
1711 eventFrag->AddWaveformSample((data[w]>>16)&0xffff);
1719 std::cerr<<
"3 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1726 switch(extraFormat) {
1729 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w]&0xffff0000)<<15);
1732 eventFrag->SetNetworkPacketNumber((data[w]>>12)&0xf);
1737 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w]&0xffff0000)<<15);
1740 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w]&0xffff0000)<<15);
1741 eventFrag->SetCfd(data[w]&0x3ff);
1742 eventFrag->SetNetworkPacketNumber((data[w]>>12)&0xf);
1749 eventFrag->SetAcceptedChannelId(data[w]&0xffff);
1750 eventFrag->SetChannelId(data[w]>>16);
1758 if(data[w] != 0x12345678) {
1760 std::cerr<<
"Failed to get debug data word 0x12345678, got "<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<std::endl;
1770 eventFrag->SetCcShort(data[w]&0x7fff);
1771 eventFrag->SetCcLong((data[w]>>15) & 0x1);
1772 eventFrag->SetCharge(static_cast<Int_t>(data[w++]>>16));
1776 event->IncrementGoodFrags();
1781 return nofFragments;
1787 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
1789 int nofFragments = 0;
1795 for(
int board = 0; w < size; ++board) {
1797 if(data[w]>>28 != 0xa) {
1798 if(data[w] == 0x0) {
1800 if(data[w++] != 0x0) {
1802 std::cerr<<board<<
". board - failed on first word, found empty word, but not all following words were empty: "<<w-1<<
" 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w-1]<<std::dec<<std::setfill(
' ')<<std::endl;
1807 return nofFragments;
1810 std::cerr<<board<<
". board - failed on first word 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<
", highest nibble should have been 0xa!"<<std::endl;
1814 int32_t numWordsBoard = data[w++]&0xfffffff;
1815 if(w - 1 + numWordsBoard > size) {
1817 std::cerr<<
"0 - Missing words, at word "<<w-1<<
", expecting "<<numWordsBoard<<
" more words for board "<<board<<
" (bank size "<<size<<
")"<<std::endl;
1821 uint8_t boardId = data[w]>>27;
1824 uint8_t channelMask = data[w++]&0xff;
1826 uint32_t boardTime = data[w++];
1833 for(uint8_t channel = 0; channel < 8; ++channel) {
1835 if(((channelMask>>channel) & 0x1) == 0x0) {
1839 if(data[w]>>31 != 0x1) {
1841 std::cerr<<
"Failed on first word 0x"<<
std::hex<<std::setw(8)<<std::setfill(
'0')<<data[w]<<std::dec<<std::setfill(
' ')<<
", highest bit should have been set (to get format info)!"<<std::endl;
1845 int32_t numWords = data[w++]&0x7fffffff;
1848 std::cerr<<
"1 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1855 bool extras = (((data[w]>>28) & 0x1) == 0x1);
1856 bool waveform = (((data[w]>>27) & 0x1) == 0x1);
1857 uint8_t extraFormat = ((data[w]>>24) & 0x7);
1874 int numSampleWords = 4*(data[w++]&0xffff);
1877 std::cerr<<
"2 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1881 int eventSize = numSampleWords+2;
1882 if(extras) ++eventSize;
1883 if(numWords%eventSize != 2 && !(eventSize == 2 && numWords%eventSize == 0)) {
1885 std::cerr<<numWords<<
" words in channel aggregate, event size is "<<eventSize<<
" ("<<numWords%eventSize<<
") => "<<
static_cast<double>(numWords-2.)/
static_cast<double>(eventSize)<<
" events?"<<std::endl;
1891 for(
int ev = 0; ev < (numWords-2)/eventSize; ++ev) {
1892 eventFrag->SetDaqTimeStamp(boardTime);
1893 eventFrag->SetAddress(0x8000 + (boardId * 0x100) + channel + (data[w]>>31));
1894 eventFrag->SetDetectorType(0);
1896 eventFrag->SetTimeStamp(data[w++] & 0x7fffffff);
1898 if(w + numSampleWords >= size) {
1900 std::cerr<<
"3 - Missing "<<numSampleWords<<
" waveform words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1904 for(
int s = 0;
s < numSampleWords && w < size; ++
s, ++w) {
1908 eventFrag->AddWaveformSample(data[w]&0xffff);
1909 eventFrag->AddWaveformSample((data[w]>>16)&0xffff);
1914 std::cerr<<
"3 - Missing words, got only "<<w-1<<
" words for channel "<<channel<<
" (bank size "<<size<<
")"<<std::endl;
1921 switch(extraFormat) {
1924 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w]&0xffff0000)<<15);
1927 eventFrag->SetTimeStamp(eventFrag->GetTimeStamp() |
static_cast<uint64_t
>(data[w]&0xffff0000)<<15);
1928 eventFrag->SetCfd(data[w]&0xffff);
1931 eventFrag->SetAcceptedChannelId(data[w]&0xffff);
1932 eventFrag->SetChannelId(data[w]>>16);
1949 eventFrag->SetCharge(static_cast<Int_t>(data[w]&0xffff));
1964 event->IncrementGoodFrags();
1969 return nofFragments;
1981 int NumFragsFound = 1;
1982 std::shared_ptr<TEpicsFrag> EXfrag = std::make_shared<TEpicsFrag>();
1984 EXfrag->fDaqTimeStamp = midasTime;
1985 EXfrag->fDaqId = midasSerialNumber;
1987 for(
int x = 0; x < size; x++) {
1988 EXfrag->fData.push_back(data[x]);
1993 return NumFragsFound;
2011 int numFragsFound = 0;
2012 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
2017 eventFrag->SetDetectorType(12);
2020 uint32_t dword = *(data + x);
2023 uint32_t adcchannel;
2025 uint32_t adctimestamp;
2026 uint32_t adchightimestamp;
2028 eventFrag->SetTimeStamp(0);
2029 for(x=size; x-- > 0; ) {
2030 dword = *(data + x);
2031 type = (dword & 0xf0000000) >> 28;
2035 if((dword & 0x00800000) != 0) {
2036 adchightimestamp=dword&0x0000ffff;
2037 eventFrag->AppendTimeStamp((static_cast<Long64_t>(adchightimestamp))*static_cast<Long64_t>(0x0000000040000000));
2038 xferhfts = eventFrag->GetTimeStamp();
2039 }
else if ((dword & 0x04000000) != 0) {
2040 adcchannel = (dword>>16)&0x1F;
2041 adcdata = (dword & 0xfff);
2042 std::shared_ptr<TFragment> transferfrag = std::make_shared<TFragment>(*eventFrag);
2043 transferfrag->SetCharge(static_cast<Int_t>(adcdata));
2044 transferfrag->SetAddress(0x800000 + adcchannel);
2046 if(chan ==
nullptr) {
2057 eventFrag =
nullptr;
2058 return numFragsFound;
2065 adctimestamp =(dword&0x3FFFFFFF);
2066 eventFrag->AppendTimeStamp(static_cast<Long64_t>(adctimestamp));
2072 return numFragsFound;
2083 int numFragsFound = 0;
2084 std::shared_ptr<TFragment> eventFrag = std::make_shared<TFragment>();
2085 eventFrag->SetDaqTimeStamp(event->GetTimeStamp());
2086 eventFrag->SetDaqId(event->GetSerialNumber());
2087 eventFrag->SetDetectorType(13);
2090 int failedWord = -1;
2092 bool multipleErrors =
false;
2093 uint32_t tmpTimestamp = 0;
2094 uint32_t tmpAddress = 0;
2097 std::vector<uint32_t> addresses;
2098 std::vector<uint32_t> charges;
2101 for(x=0; x < size; ++x) {
2102 switch((data[x] >> 27) & 0x1F) {
2104 eventFrag->SetModuleType(data[x] & 0x1f);
2105 eventFrag->SetAcceptedChannelId((data[x] >> 5) & 0x3fffff);
2108 tmpAddress = (data[x] >> 16) & 0x300;
2109 eventFrag->SetChannelId((data[x] >> 12) & 0xfff);
2110 eventFrag->SetNetworkPacketNumber(data[x] & 0xfff);
2118 addresses.push_back(0x900000 + ((data[x] >> 19) & 0xff ) );
2119 charges.push_back(data[x] & 0x7ffff);
2122 if((tmpAddress != ((data[x] >> 16) & 0x300)) || (eventFrag->GetChannelId() != ((data[x] >> 12) & 0xfff))) {
2129 multipleErrors =
true;
2131 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2133 eventFrag->SetNumberOfPileups(data[x] & 0xfff);
2136 eventFrag->SetAddress((data[x] >> 16) & 0x300);
2137 eventFrag->SetCharge(static_cast<Int_t>((data[x]) & 0xFFF));
2143 multipleErrors =
true;
2145 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2148 tmpTimestamp = (data[x] & 0x7FFFFFF) << 5;
2155 tmpTimestamp= tmpTimestamp | ((data[x]) & 0x1f);
2163 ts +=
static_cast<Long64_t
>(0x100000000)*static_cast<Long64_t>(
wraparoundcounter);
2164 ts = ts *
static_cast<Long64_t
>(5);
2172 eventFrag->SetTimeStamp(ts);
2175 if(addresses.size() != charges.size()) {
2176 std::cout<<
"Something went horribly wrong, the number of addresses read "<<addresses.size()<<
" doesn't match the number of charges read "<<charges.size()<<std::endl;
2179 for(
size_t i = 0; i < addresses.size(); ++i) {
2183 for (ii=0; ii<i; ii++) {
2184 if (addresses[i]==addresses[ii]) {
2190 eventFrag->SetAddress(addresses[i]);
2191 eventFrag->SetCharge(static_cast<Int_t>(charges[i]));
2209 multipleErrors =
true;
2211 Push(*
fBadOutputQueue, std::make_shared<TBadFragment>(*eventFrag, data, size, failedWord, multipleErrors));
2216 return numFragsFound;
bool IgnoreMissingChannel() const
bool SetGRIFChannelTriggerId(uint32_t, const std::shared_ptr< TFragment > &)
static TChannel * GetChannel(unsigned int temp_address, bool warn=false)
bool SetGRIFTimeStampLow(uint32_t, const std::shared_ptr< TFragment > &)
bool fNoWaveforms
The flag to turn wave_forms on or off.
bool SetGRIFPsd(uint32_t, const std::shared_ptr< TFragment > &)
static uint32_t wraparoundcounter
void SetTIGWave(uint32_t, const std::shared_ptr< TFragment > &)
bool fFragmentHasWaveform
bool SetGRIFNetworkPacket(uint32_t, const std::shared_ptr< TFragment > &)
bool ReconstructTimeStamp() const
bool SetGRIFPrimaryFilterPattern(uint32_t, const std::shared_ptr< TFragment > &, EBank)
static TGRSIOptions * Get(int argc=0, char **argv=nullptr)
Do not use!
bool SetGRIFCc(uint32_t, const std::shared_ptr< TFragment > &)
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TBadFragment > > > fBadOutputQueue
bool SetScalerNetworkPacket(uint32_t, TScalerData *)
TFragmentMap fFragmentMap
Class that holds a map of fragments per address, takes care of calculating charges for GRF4 banks...
void SetScaler(size_t index, UInt_t scaler)
int GriffinDataToPPGEvent(uint32_t *data, int size, unsigned int midasSerialNumber=0, time_t midasTime=0)
int RFScalerToFragment(uint32_t *data, const int size, const std::shared_ptr< TFragment > &frag)
void GoodFragment(const std::shared_ptr< const TFragment > &)
static TDeadtimeScalerQueue * Get()
void SetTIGAddress(uint32_t, const std::shared_ptr< TFragment > &)
int EmmaTdcDataToFragment(uint32_t *data, const int size, std::shared_ptr< TMidasEvent > &event)
void SetOldPPG(EPpgPattern oldPpg)
bool SetGRIFDeadTime(uint32_t, const std::shared_ptr< TFragment > &)
int TigressDataToFragment(uint32_t *data, int size, std::shared_ptr< TMidasEvent > &event)
static TRunInfo * Get(bool verbose=false)
unsigned long fLastTriggerId
The last Trigged ID in the raw File.
bool SetPPGLowTimeStamp(uint32_t, TPPGData *)
std::string hex(T val, int width=-1)
void SetNetworkPacketId(UInt_t networkId)
bool SetNewPPGPattern(uint32_t, TPPGData *)
static uint32_t lasttimestamp
const char * GetDigitizerTypeString() const
void SetHighTimeStamp(UInt_t highTime)
void SetHighTimeStamp(UInt_t highTime)
bool SetPPGHighTimeStamp(uint32_t, TPPGData *)
void SetNewPPG(EPpgPattern newPpg)
int GriffinDataToFragment(uint32_t *data, int size, EBank bank, unsigned int midasSerialNumber=0, time_t midasTime=0)
int CaenPhaToFragment(uint32_t *data, int size, std::shared_ptr< TMidasEvent > &event)
std::shared_ptr< ThreadsafeQueue< std::shared_ptr< TEpicsFrag > > > fScalerOutputQueue
bool SetGRIFPrimaryFilterId(uint32_t, const std::shared_ptr< TFragment > &)
std::map< UInt_t, Long64_t > fLastTimeStampMap
bool SetTIGTriggerID(uint32_t, const std::shared_ptr< TFragment > &)
int EPIXToScalar(float *data, int size, unsigned int midasSerialNumber=0, time_t midasTime=0)
void SetAddress(UInt_t address)
TXMLNode * FindPath(const char *path, TXMLNode *node=nullptr)
void AddData(TPPGData *pat)
bool SetPPGNetworkPacket(uint32_t, TPPGData *)
int CaenPsdToFragment(uint32_t *data, int size, std::shared_ptr< TMidasEvent > &event)
std::vector< std::shared_ptr< ThreadsafeQueue< std::shared_ptr< const TFragment > > > > fGoodOutputQueues
int ProcessGriffin(uint32_t *data, const int &size, const EBank &bank, std::shared_ptr< TMidasEvent > &event)
static TRateScalerQueue * Get()
bool SetScalerHighTimeStamp(uint32_t, TScalerData *, int &)
void SetLowTimeStamp(UInt_t lowTime)
static std::string GetEpicsVariableName(const int &i)
int GriffinDataToScalerEvent(uint32_t *data, int address)
void SetNetworkPacketId(UInt_t packet)
void SetTIGCharge(uint32_t, const std::shared_ptr< TFragment > &)
bool SetGRIFHeader(uint32_t, const std::shared_ptr< TFragment > &, EBank)
const unsigned long fMaxTriggerId
The last trigger ID Called.
bool SetTIGTimeStamp(uint32_t *, const std::shared_ptr< TFragment > &)
void SetTIGLed(uint32_t, const std::shared_ptr< TFragment > &)
UInt_t GetLowTimeStamp() const
static uint32_t countsbetweenwraps
bool SetGRIFWaveForm(uint32_t, const std::shared_ptr< TFragment > &)
bool SetScalerLowTimeStamp(uint32_t, TScalerData *)
void BadFragment(Short_t detType)
bool Add(std::shared_ptr< TFragment >, std::vector< Int_t >, std::vector< Short_t >)
static TGRSIOptions * fOptions
Static pointer to TGRSIOptions, gets set on the first call of GriffinDataToFragment.
void SetLowTimeStamp(UInt_t lowTime)
bool fIgnoreMissingChannel
flag that's set to TGRSIOptions::IgnoreMissingChannel
const char * what() const noexcept override
int Process(std::shared_ptr< TRawEvent >) override
bool SuppressErrors() const
void SetTIGCfd(uint32_t, const std::shared_ptr< TFragment > &)
bool fRecordDiag
The flag to turn on diagnostics recording.
bool SetScalerValue(int, uint32_t, TScalerData *)
int SetBankList()
create the list of data banks, return number of banks
int EmmaMadcDataToFragment(uint32_t *data, const int size, std::shared_ptr< TMidasEvent > &event)
bool SetOldPPGPattern(uint32_t, TPPGData *)
void Push(ThreadsafeQueue< std::shared_ptr< const TBadFragment >> &queue, const std::shared_ptr< TBadFragment > &frag)