44 , fMultiBlockMode{false}
75 if ( (trigger_type > 0) && (trigger_type <=
MAX_PSFACT)) {
76 return psfact[trigger_type - 1];
79 Warning(
"CodaDecoder::GetPrescaleFactor",
"Requested prescale factor for "
80 "undefined trigger type %d", trigger_type );
89 if( ret !=
HED_OK )
return ret;
105 *
fDebugFile <<
"CodaDecode:: Loading event ... " << endl
106 <<
"evbuffer ptr " << hex << evbuffer << dec << endl;
110 cerr <<
"CODA version not set (=" <<
fDataVersion <<
"). "
111 <<
"Do SetCodaVersion(codaData->getCodaVersion()) first" << endl;
115 cerr <<
"Unsupported CODA version = " <<
fDataVersion <<
"). Need 2 or 3."
116 <<
"Cannot analyze these data. Twonk."<<endl;
122 throw std::logic_error(
"Event buffer changed while processing multiblock "
123 "data. Do not read new events while DataCached() "
127 throw std::logic_error(
"Attempt to decode more events in block than "
128 "available (blkidx >= block_size). Logic error. "
183 if (ret !=
HED_OK )
return ret;
191 cerr <<
"Warning: Event type " <<
event_type <<
" decoding only "
192 <<
"supported for CODA data version 3 or higher" << endl;
245 if(
fMap->isFastBus(iroc) ) {
257 if(
fMap->isBankStructure(iroc) ) {
259 *
fDebugFile <<
"\nCodaDecode::Calling bank_decode "
260 << iroc <<
" " << ipt <<
" " << iptmax
265 catch(
const logic_error&
e ) {
266 Error(
"CodaDecoder::bank_decode",
"ERROR: %s",
e.what());
273 if( !
fMap->isAllBanks(iroc) ) {
275 *
fDebugFile <<
"\nCodaDecode::Calling roc_decode "
276 << iroc <<
" " << ipt <<
" " << iptmax
280 status =
roc_decode(iroc, evbuffer, ipt, iptmax);
282 catch(
const logic_error&
e ) {
283 Error(
"CodaDecoder::roc_decode",
"ERROR: %s",
e.what());
291 constexpr UInt_t bankinfo_bit = 65;
310 bank_tag = (evbuffer[1] & 0xffff0000) >> 16;
336 if( tag >= 0xff00 ) {
354 cerr <<
"CodaDecoder:: WARNING: Undefined CODA 3 event type, tag = "
355 <<
"0x" << hex << tag << dec << endl;
397 const char*
const here =
"CodaDecoder::trigBankDecode";
410 Error(
here,
"CODA 3 format error: Physics event with block size 0");
417 Error(
here,
"CODA 3 format error: %s",
e.what() );
438 const auto*
p = evbuf + pos;
440 if( blen < 2 || blen + 1 >
len ) {
447 UInt_t tag = (*
p & 0xFFFF0000) >> 16;
448 UInt_t npad = (*
p & 0x0000C000) >> 14;
449 UInt_t dtyp = (*
p & 0x00003F00) >> 8;
450 UInt_t blksz = (*
p & 0x000000FF);
470 if( npad != 0 && npad != 2 ) {
484 return Fill(evbuf, pos+2, blen-1);
507 return "Bad argument";
509 return "Invalid length";
511 return "Invalid padding size";
513 return "Unsupported data type";
517 return "Unknown error";
523 static const char* typtxt[] = {
543 return typtxt[dtyp_];
623 const char*
const here =
"CodaDecoder::daqConfigDecode";
630 size_t nbefore = cfg->strings.size();
632#define CFGEVT1 Decoder::DAQCONFIG_FILE1
633#define CFGEVT2 Decoder::DAQCONFIG_FILE2
636 Error(
here,
"Invalid bank tag word %#x in event type %u",
644 Error(
here,
"Bank decoding error %s", bankinfo.Errtxt());
648 auto len = bankinfo.len_;
651 const auto*
c =
reinterpret_cast<const char*
>(evbuf + pos);
652 cfg->strings.emplace_back(
c,
c + 4 * bankinfo.len_ - bankinfo.npad_);
654 Warning(
here,
"Unsupported data type %#x in event type %u",
657 pos += bankinfo.len_;
660 const size_t iparse = 0;
661 if( iparse >= nbefore )
676 cout <<
"EPICS data "<<endl;
680 cout <<
"Prescale data "<<endl;
684 cout <<
"DAQ config file 1 "<<endl;
688 cout <<
"DAQ config file 2 "<<endl;
692 cout <<
"LHRS scaler event "<<endl;
696 cout <<
"SBS scaler event "<<endl;
700 cout <<
"High voltage data event "<<endl;
705 cout << endl <<
"--- Special event type " <<
event_type << endl << endl;
708 char *cbuf = (
char *)evbuffer;
709 size_t elen =
sizeof(int)*(evbuffer[0]+1);
710 cout <<
"Dump of event buffer . Len = "<<elen<<endl;
712 for (
size_t ii=0; ii<elen; ii++) cout << cbuf[ii];
724 if( (
a.key >> 16) < (
b.key >> 16) )
726 else if( (
a.key >> 16) > (
b.key >> 16) )
728 return a.pos <
b.pos;
732 cout <<
"Banks found (event " <<
event_num <<
"):" << endl;
733 cout <<
" roc bank pos len" << endl;
734 for(
const auto&
b : banks ) {
737 cout << dec << setw(4) << roc
744 cout <<
"Sum" << setw(23) <<
sum << endl;
749 uint32_t blkSize, uint32_t tsroc )
752 throw std::invalid_argument(
"CODA block size must be > 0");
755 len = evbuffer[0] + 1;
756 tag = (evbuffer[1] & 0xffff0000) >> 16;
757 nrocs = evbuffer[1] & 0xff;
759 const uint32_t*
p = evbuffer + 2;
765 uint32_t slen = *
p & 0xffff;
766 if( slen != 2*(1 + (withRunInfo() ? 1 : 0) + (withTimeStamp() ? blkSize : 0)))
768 const auto*
q = (
const uint64_t*) (
p + 1);
770 runInfo = withRunInfo() ? *
q++ : 0;
771 evTS = withTimeStamp() ?
q :
nullptr;
774 if(
p-evbuffer >=
len )
781 uint32_t slen = *
p & 0xffff;
782 if( slen != (blkSize-1)/2 + 1 )
784 evType = (
const uint16_t*) (
p + 1);
796 for( uint32_t i = 0; i < nrocs; ++i ) {
797 if(
p-evbuffer >=
len )
798 throw coda_format_error(
"Past end of bank while scanning trigger bank segments");
799 uint32_t slen = *
p & 0xffff;
800 uint32_t rocnum = (*
p & 0xff000000) >> 24;
801 if( rocnum == tsroc ) {
824 UInt_t key = (roc << 16) + bank;
825 auto theBank = find(ALL(
bankdat), key);
841 Error(
"CodaDecoder::LoadFromMultiBlock",
842 "Not in multiblock mode or block already done. Logic error. "
847 Error(
"CodaDecoder::LoadFromMultiBlock",
848 "Uninitialized while processing event blocks. Logic error. "
855 if( mod && mod->IsMultiBlockMode() )
861 for(
auto slot :
fMap->GetUsedSlots(roc) ) {
862 assert(
fMap->slotUsed(roc, slot));
867 auto* mod = sd->GetModule();
872 auto module_blksz = mod->GetBlockSize();
874 *
fDebugFile <<
"cross chk blk size " << roc <<
" " << slot <<
" "
877 cerr <<
"ERROR::CodaDecoder:: inconsistent block size between trig. bank and module "
878 <<
" in roc/slot = " << roc <<
"/" << slot <<
" (\"" << mod->GetName() <<
"\"), "
879 <<
"trigger bank = " <<
block_size <<
", module = " << module_blksz
880 <<
". Ignoring module for this event."
885 if( mod->IsMultiBlockMode() ) {
886 sd->LoadNextEvBuffer();
888 if( sd->BlockIsDone() )
905 assert( evbuffer &&
fMap );
908 ostr <<
"ROC number " << roc <<
" out of range";
909 throw logic_error(ostr.str());
912 throw logic_error(
"Stop point exceeds event length (?!)");
926 if( Nslot == 0 || Nslot ==
kMaxUInt ) {
930 *
fDebugFile <<
"CodaDecode:: roc_decode:: WARNING: Undefined ROC # "
931 << dec << roc <<
", event " <<
event_num << endl;
935 Warning(
"roc_decode",
"ROC %d found in data but NOT in cratemap. "
936 "Ignoring it.", roc);
943 *
fDebugFile <<
"CodaDecode:: roc_decode:: roc# " << dec << roc
944 <<
" nslot " << Nslot << endl;
946 assert(
fMap->GetUsedSlots(roc).size() == Nslot);
949 vector<pair<UInt_t,THaSlotData*>> slots_todo; slots_todo.reserve(Nslot);
950 for(
auto slot :
fMap->GetUsedSlots(roc) ) {
951 assert(
fMap->slotUsed(roc, slot));
953 if(
fMap->getBank(roc, slot) >= 0 )
955 slots_todo.emplace_back(slot,
crateslot[
idx(roc,slot)].get());
958 if( slots_todo.empty() )
963 bool is_fastbus =
fMap->isFastBus(roc);
965 std::reverse( ALL(slots_todo) );
974 const UInt_t*
p = evbuffer + ipt;
975 const UInt_t* pstop = evbuffer + istop;
978 while(
p++ < pstop ) {
980 *
fDebugFile <<
"CodaDecode::roc_decode:: evbuff " << (
p - evbuffer)
981 <<
" " << hex << *
p << dec << endl;
986 bool update_nextidx =
true;
987 for(
UInt_t i = nextidx; i < slots_todo.size(); ++i ) {
988 UInt_t slot = slots_todo[i].first;
992 auto* sd = slots_todo[i].second;
995 *
fDebugFile <<
"roc_decode:: slot logic " << roc <<
" " << slot;
998 UInt_t nwords = sd->LoadIfSlot(
p, pstop);
1000 if( sd->IsMultiBlockMode() )
1002 if( sd->BlockIsDone() )
1006 *
fDebugFile <<
"CodaDecode:: roc_decode:: after LoadIfSlot "
1007 <<
p + ((nwords > 0) ? nwords - 1 : 0) <<
" " << pstop
1008 <<
" " << hex << *
p <<
" " << dec << nwords << endl;
1012 *
fDebugFile <<
"CodaDecode:: slot " << slot <<
" is DONE "
1017 if( update_nextidx )
1020 }
else if( update_nextidx ) {
1022 update_nextidx =
false;
1027 catch(
const exception&
e ) {
1028 cerr <<
e.what() << endl;
1043 assert( evbuffer &&
fMap );
1046 ostr <<
"ROC number " << roc <<
" out of range";
1047 throw logic_error(ostr.str());
1050 throw logic_error(
"Stop point exceeds event length (?!)");
1052 if (!
fMap->isBankStructure(roc))
1057 *
fDebugFile <<
"CodaDecode:: bank_decode ... " << roc <<
" " << ipt
1058 <<
" " << istop << endl;
1062 while (pos < istop) {
1064 UInt_t head = evbuffer[pos+1];
1065 UInt_t bank = head >> 16;
1067 *
fDebugFile <<
"bank 0x" << hex << bank <<
" head 0x" << head
1068 <<
" len 0x" <<
len << dec << endl;
1070 UInt_t key = (roc << 16) + bank;
1080 for(
auto slot :
fMap->GetUsedSlots(roc) ) {
1081 assert(
fMap->slotUsed(roc,slot));
1087 *
fDebugFile <<
"CodaDecoder::bank_decode: loading bank "
1088 << roc <<
" " << slot <<
" " << bank <<
" "
1089 << theBank->pos <<
" " << theBank->len << endl;
1091 sd->LoadBank(evbuffer, theBank->pos, theBank->len);
1092 if( sd->IsMultiBlockMode() )
1094 if( sd->BlockIsDone() )
1107 cout <<
"Into FillBankData v1 " << dec << roc <<
" " << bank <<
" "
1108 <<
offset <<
" " << num << endl;
1110 *
fDebugFile <<
"Check FillBankData " << roc <<
" " << bank << endl;
1114 UInt_t jk = (roc << 16) + bank;
1115 auto bankInfo = find(ALL(
bankdat), jk);
1116 if( bankInfo ==
bankdat.end() ) {
1117 cerr <<
"FillBankData::ERROR: bankdat not in current event "<<endl;
1120 UInt_t pos = bankInfo->pos;
1123 cout <<
"FillBankData: pos, len " << pos <<
" " <<
len << endl;
1125 *
fDebugFile <<
"FillBankData pos, len " << pos <<
" " <<
len << endl;
1136 memcpy(rdat,
buffer+ilo, ihi-ilo);
1153 *
fDebugFile <<
"CodaDecode:: TestBit on : Flag data ? "
1154 << hex << word << dec << endl;
1155 UInt_t stdslot = word >> 27;
1160 UInt_t upword = word >> 16;
1164 if( word == 0x00ff )
1170 UInt_t slot = word >> 11;
1171 UInt_t nhit = word & 0x7ff;
1172 cout <<
"CodaDecoder: WARNING: Fastbus slot ";
1173 cout << slot <<
" has extra hits " << nhit << endl;
1180 UInt_t datascan = *(evbuffer+3);
1181 cout <<
"CodaDecoder: WARNING: Synch problems !" << endl;
1182 cout <<
"Data scan word 0x" << hex << datascan << dec << endl;
1189 if( (word >> 8) == 0xbf ) {
1214 if( (evbuffer[1]&0xffff) != 0x10cc ) std::cout<<
"Warning, header error"<<std::endl;
1218 UInt_t pos = evbuffer[2]+3;
1222 UInt_t iroc = (evbuffer[pos+1]&0xff0000)>>16;
1226 cout <<
"ERROR in EvtTypeHandler::FindRocs "<<endl;
1227 cout <<
" illegal ROC number " <<dec<<iroc<<endl;
1244 *
fDebugFile <<
" CodaDecode:: roc num "<<iroc<<
" pos "<<
rocdat[iroc].pos<<
" len "<<
rocdat[iroc].len<<endl;
1268 UInt_t iroc = (evbuffer[pos+1]&0x0fff0000)>>16;
1281 printf(
" ****ERROR: Trigger and Physics Block sizes do not match (%d != %d)\n",
nroc,
tbank.
nrocs);
1284 printf(
"This might indicate a file written with EVIO 4 that was a CODA 2 file\n");
1285 printf(
"Try analyzer->SetCodaVersion(2) in the analyzer script.\n");
1303 *
fDebugFile <<
" Event # Time Stamp Event Type"<<endl;
1338 for(
auto iroc :
fMap->GetUsedCrates() ) {
1339 assert(
fMap->crateUsed(iroc));
1340 for(
auto islot :
fMap->GetUsedSlots(iroc) ) {
1341 assert(
fMap->slotUsed(iroc, islot));
1344 *
fDebugFile <<
"CodaDecode:: crate, slot " << iroc <<
" " << islot
1345 <<
" Dev type = " <<
crateslot[
idx(iroc, islot)]->devType()
1350 catch(
const exception&
e ) {
1351 cerr <<
e.what() << endl;
1366 if( !evbuffer )
return;
1368 *
fDebugFile <<
"\n\n Raw Data Dump " << endl;
1373 *
fDebugFile << dec <<
"\n evbuffer[" << ipt <<
"] = ";
1374 for(
UInt_t k = j; k < j+5; k++ ) {
1375 *
fDebugFile << hex << evbuffer[ipt++] <<
" ";
1379 *
fDebugFile << dec <<
"\n evbuffer[" << ipt <<
"] = ";
1381 *
fDebugFile << hex << evbuffer[ipt++] <<
" ";
1392 *
fDebugFile<<
"Comparing cratemap rocs with found rocs"<<endl;
1395 if( !
fMap->crateUsed(iroc) ) {
1396 *
fDebugFile <<
"ERROR CompareRocs:: roc " << iroc <<
" in data but not in map" << endl;
1400 if( !
fMap->crateUsed(iroc1) )
continue;
1404 if (iroc1 == iroc2) {
1409 if (!ifound) *
fDebugFile <<
"ERROR: CompareRocs: roc "<<iroc1<<
" in cratemap but not found data"<<endl;
1417 const UInt_t*
p = evbuffer+ipt;
1418 const UInt_t* pstop = evbuffer+istop;
1419 while(
p++ < pstop ) {
1436 if( !
fMap->isFastBus(iroc) )
continue;
1443 *
fDebugFile <<
"FB slot in cratemap and in data. (good!). "
1444 <<
"roc = "<<iroc<<
" slot = "<<islot<<endl;
1447 *
fDebugFile <<
"FB slot in data, but NOT in cratemap (bad!). "
1448 <<
"roc = "<<iroc<<
" slot = "<<islot<<endl;
1449 Warning(
"ChkFbSlots",
"Fastbus module in (roc,slot) = (%d,%d) "
1450 "found in data but NOT in cratemap !", iroc, islot);
1452 }
else if( inMap ) {
1454 *
fDebugFile <<
"FB slot NOT in data, but in cratemap (bad!). "
1455 <<
"roc = "<<iroc<<
" slot = "<<islot<<endl;
1490 const UInt_t HEAD_OFF1 = 2;
1491 const UInt_t HEAD_OFF2 = 4;
1492 static const char*
const pstr[] = {
"ps1",
"ps2",
"ps3",
"ps4",
1493 "ps5",
"ps6",
"ps7",
"ps8",
1494 "ps9",
"ps10",
"ps11",
"ps12" };
1498 for(
UInt_t j = 0; j < 8; j++ ) {
1499 UInt_t k = j + HEAD_OFF1;
1504 Warning(
"prescale_decode",
"Mismatch in prescale factor: "
1505 "Trig %u oldps %u TS_PRESCALE %d. Setting to TS_PRESCALE",
1511 cout <<
"%% TS psfact "<<dec<<j<<
" "<<
psfact[j]<<endl;
1523 if (trig < 4) psmax = 16777216;
1524 if (trig > 7) ps = 1;
1528 else if (ps !=
psfact[trig]) {
1529 Warning(
"prescale_decode",
"Mismatch in prescale factor: "
1530 "Trig %d oldps %d prescale.dat %d, Keeping old value",
1534 cout <<
"** psfact[ "<<trig+1<<
" ] = "<<
psfact[trig]<<endl;
1558 static const char*
const here =
"prescale_decode_coda3";
1563 const UInt_t HEAD_OFF1 = 2;
1564 const UInt_t HEAD_OFF2 = 4;
1565 UInt_t super_big = 999999;
1566 static const char*
const pstr[] = {
"ps1",
"ps2",
"ps3",
"ps4",
1567 "ps5",
"ps6",
"ps7",
"ps8",
1568 "ps9",
"ps10",
"ps11",
"ps12" };
1573 for(
UInt_t j = 0; j < 8; j++ ) {
1574 UInt_t k = j + HEAD_OFF1;
1580 "Trig %u oldps %u TS_PRESCALE %d. Setting to TS_PRESCALE",
1586 cout <<
"%% TS psfact "<<dec<<j<<
" "<<
psfact[j]<<endl;
1601 }
else if( ps == 0 ) {
1603 }
else if( ps >= 1 && ps <= 16 ) {
1605 ps = 1 + (1U << (ps - 1));
1608 Error(
here,
"Invalid prescale = %ld in prescale.dat. "
1609 "Must be between -1 and 16", ps);
1614 else if( ps !=
psfact[trig] ) {
1616 "Trig %d oldps %d prescale.dat %ld, Keeping old value",
1620 cout <<
"** psfact[ " << trig + 1 <<
" ] = " <<
psfact[trig] << endl;
1631 if (version != 2 && version != 3) {
1632 cout <<
"ERROR::CodaDecoder::SetCodaVersion version " << version;
1633 cout <<
" must be 2 or 3 only." << endl;
1634 cout <<
"Not setting CODA version ! " << endl;
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
static const char *const here
uint32_t Fill(const uint32_t *evbuffer, uint32_t blkSize, uint32_t tsroc)
bool withTriggerBits() const
Int_t physics_decode(const UInt_t *evbuffer)
Int_t prescale_decode_coda2(const UInt_t *evbuffer)
Int_t prescale_decode_coda3(const UInt_t *evbuffer)
virtual Int_t LoadIfFlagData(const UInt_t *evbuffer)
BankDat_t * CheckForBank(UInt_t roc, UInt_t slot)
Int_t daqConfigDecode(const UInt_t *evbuf)
void ChkFbSlot(UInt_t roc, const UInt_t *evbuffer, UInt_t ipt, UInt_t istop)
std::vector< UInt_t > psfact
virtual void SetRunTime(ULong64_t tloc)
static BankInfo GetBank(const UInt_t *evbuf, UInt_t pos, UInt_t len)
virtual Int_t init_slotdata()
virtual Int_t interpretCoda3(const UInt_t *buffer)
virtual UInt_t GetPrescaleFactor(UInt_t trigger) const
void PrintBankInfo() const
virtual Int_t LoadFromMultiBlock()
std::vector< BankDat_t > bankdat
Int_t roc_decode(UInt_t roc, const UInt_t *evbuffer, UInt_t ipt, UInt_t istop)
Int_t SetCodaVersion(Int_t version)
virtual Int_t FillBankData(UInt_t *rdat, UInt_t roc, Int_t bank, UInt_t offset=0, UInt_t num=1) const
std::vector< bool > fbfound
virtual Bool_t DataCached()
Int_t bank_decode(UInt_t roc, const UInt_t *evbuffer, UInt_t ipt, UInt_t istop)
std::vector< UInt_t > irn
Int_t FindRocsCoda3(const UInt_t *evbuffer)
static UInt_t InterpretBankTag(UInt_t tag)
void dump(const UInt_t *evbuffer) const
virtual Int_t LoadEvent(const UInt_t *evbuffer)
void debug_print(const UInt_t *evbuffer) const
Int_t LoadTrigBankInfo(UInt_t index_buffer)
virtual Int_t trigBankDecode(const UInt_t *evbuffer)
Int_t FindRocs(const UInt_t *evbuffer)
void string_from_evbuffer(const UInt_t *evbuffer, UInt_t nlen)
long getSignedInt(const char *s) const
unsigned int getint(const char *s) const
Bool_t TestBitNumber(UInt_t bitnumber) const
void SetBitNumber(UInt_t bitnumber, Bool_t value=kTRUE)
std::ofstream * fDebugFile
virtual Int_t init_slotdata()
std::vector< UShort_t > fSlotClear
virtual ULong64_t GetEvTime() const
UInt_t idx(UInt_t crate, UInt_t slot) const
std::vector< std::unique_ptr< Decoder::THaSlotData > > crateslot
std::unique_ptr< Decoder::THaCrateMap > fMap
virtual void FindUsedSlots()
std::unique_ptr< THaBenchmark > fBench
Bool_t PrescanModeEnabled() const
std::vector< UShort_t > fSlotUsed
virtual void makeidx(UInt_t crate, UInt_t slot)
std::array< RocDat_t, Decoder::MAXROC > rocdat
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual void Error(const char *method, const char *msgfmt,...) const
unsigned long long ULong64_t
static constexpr auto MAXROCSLOT_FB
static const UInt_t MAXSLOT_FB
static const UInt_t PRESTART_EVTYPE
static const UInt_t DAQCONFIG_FILE1
static const UInt_t END_EVTYPE
static const UInt_t SBSSCALER_EVTYPE
static const UInt_t HV_DATA_EVTYPE
static const UInt_t DAQCONFIG_FILE2
static const Int_t MAXBANK
static const UInt_t PRESCALE_EVTYPE
static const UInt_t GO_EVTYPE
static const UInt_t SCALER_EVTYPE
static const UInt_t EPICS_EVTYPE
static const UInt_t MAX_PHYS_EVTYPE
static const UInt_t TS_PRESCALE_EVTYPE
static const UInt_t MAXROC
ESigned GetSigned() const
EDataSize GetDataSize() const
const char * Typtxt() const
EIntFloat GetFloat() const
Int_t Fill(const UInt_t *evbuf, UInt_t pos, UInt_t len)
const char * Errtxt() const