26 #include "art_root_io/TFileService.h" 39 #include "artdaq-core/Data/Fragment.hh" 40 #include "artdaq-core/Data/ContainerFragment.hh" 43 #include "dam/HeaderFragmentUnpack.hh" 44 #include "dam/DataFragmentUnpack.hh" 45 #include "dam/TpcFragmentUnpack.hh" 46 #include "dam/TpcStreamUnpack.hh" 47 #include "dam/access/WibFrame.hh" 48 #include "dam/access/Headers.hh" 49 #include "dam/access/TpcStream.hh" 50 #include "dam/access/TpcRanges.hh" 51 #include "dam/access/TpcToc.hh" 52 #include "dam/access/TpcPacket.hh" 53 #include "dam/RceFragmentUnpack.hh" 165 bool _processRCE(
art::Event &
evt, RawDigits& raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm);
167 art::Event &
evt, RawDigits& raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm);
168 bool _process_RCE_AUX(
const artdaq::Fragment& frag, RawDigits& raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm,
size_t ntickscheck);
171 bool _processFELIX(
art::Event &
evt, RawDigits& raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm);
173 RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm);
174 bool _process_FELIX_AUX(
const artdaq::Fragment& frag, RawDigits& raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm);
184 std::vector<int> emptyivec;
262 if (_make_histograms)
267 fIncorrectTickNumbers = tFileService->make<TH1D>(
"fIncorrectTickNumbers",
"Channels with Unexpected Number of Ticks", 45, -0.5, 14.5);
282 fParticipRCE = tFileService->make<TH1I>(
"fParticipRCE",
"Participating RCE channels", 130, 0.5, 15000.5);
286 fParticipFELIX = tFileService->make<TH1I>(
"fParticipFELIX",
"Participating FELIX channels", 100, 0.5, 3000.5);
290 fDuplicatesNumber = tFileService->make<TH1I>(
"fDuplicatesNumber",
"Number of Duplucated Channels", 200, 0.5, 200.5);
295 fErrorsNumber = tFileService->make<TH1D>(
"fErrorsNumber",
"Channels with Errors", 45, -0.5, 14.5);
296 fErrorsNumber->GetXaxis()->SetTitle(
"Number of channels with errors");
306 fFragSizeRCE = tFileService->make<TH1I>(
"fFragSizeRCE",
"RCE Fragment Size", 100, 0.5, 288000000.5);
307 fFragSizeRCE->GetXaxis()->SetTitle(
"Size of RCE Fragments (bytes)");
309 fFragSizeFELIX = tFileService->make<TH1I>(
"fFragSizeFELIX",
"FELIX Fragment Size", 100, 0.5, 57600000.5);
310 fFragSizeFELIX->GetXaxis()->SetTitle(
"Size of FELIX Fragments (bytes)");
336 _processRCE(e,raw_digits,rd_timestamps,rd_ts_assocs,rdpm,tspm);
337 _processFELIX(e,raw_digits,rd_timestamps,rd_ts_assocs,rdpm,tspm);
352 MF_LOG_WARNING(
"PDSPTPCRawDecoder:") <<
"Wrong Total number of Channels " << raw_digits.size()
364 statuses.emplace_back(
true,
false,1);
373 unsigned int statword=0;
386 size_t n_rce_frags = 0;
387 bool have_data=
false;
388 bool have_data_nc=
false;
400 if (!
_rceProcContNCFrags(cont_frags, n_rce_frags,
true, evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
412 if (!
_rceProcContNCFrags(frags, n_rce_frags,
false, evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
426 for (
size_t ihandle=0; ihandle<fraghv.size(); ++ihandle)
428 if (fraghv.at(ihandle).provenance()->inputTag().instance().find(
"TPC") != std::string::npos)
430 if (fraghv.at(ihandle).isValid())
432 if (fraghv.at(ihandle).provenance()->inputTag().instance().find(
"Container") != std::string::npos)
435 if (!
_rceProcContNCFrags(fraghv.at(ihandle), n_rce_frags,
true,
evt, raw_digits, timestamps, tsassocs, rdpm, tspm) )
443 if (!
_rceProcContNCFrags(fraghv.at(ihandle), n_rce_frags,
false,
evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
462 return have_data || have_data_nc;
472 for (
auto const& frag : *frags)
474 rcebytes = rcebytes + (frag.sizeBytes());
482 std::vector<size_t> nticksvec;
483 for (
auto const& frag : *frags)
493 artdaq::ContainerFragment cont_frag(frag);
494 for (
size_t ii = 0; ii < cont_frag.block_count(); ++ii)
505 if (nticksvec.size() == 0)
507 MF_LOG_WARNING(
"_process_RCE:") <<
" No valid nticks to check. Discarding Event.";
513 size_t nticksmedian = TMath::Median(nticksvec.size(),nticksvec.data()) + 0.01;
517 for (
auto const& frag : *frags)
521 bool process_flag =
true;
526 MF_LOG_WARNING(
"_process_RCE:") <<
" Small RCE fragment size: " << frag.sizeBytes() <<
" Discarding Event on request.";
534 MF_LOG_WARNING(
"_process_RCE:") <<
" Small RCE fragment size: " << frag.sizeBytes() <<
" Discarding just this fragment on request.";
536 process_flag =
false;
544 artdaq::ContainerFragment cont_frag(frag);
545 for (
size_t ii = 0; ii < cont_frag.block_count(); ++ii)
547 if (
_process_RCE_AUX(*cont_frag[ii], raw_digits, timestamps, tsassocs, rdpm, tspm, nticksmedian)) ++n_rce_frags;
552 if (
_process_RCE_AUX(frag, raw_digits, timestamps,tsassocs, rdpm, tspm, nticksmedian)) ++n_rce_frags;
561 const artdaq::Fragment& frag,
562 std::vector<size_t> &nticksvec
568 std::ios oldState(
nullptr);
569 oldState.copyfmt(std::cout);
571 std::cout <<
"RCE Fragment: all numbers in hex " <<
std::hex 572 <<
" SequenceID = " << frag.sequenceID()
573 <<
" fragmentID = " << frag.fragmentID()
574 <<
" fragmentType = " << (unsigned)frag.type()
575 <<
" Timestamp = " << frag.timestamp() <<
std::endl;
576 std::cout <<
"Offset Data";
577 artdaq::Fragment fragloc(frag);
578 unsigned char *dbegin =
reinterpret_cast<unsigned char *
>(fragloc.dataAddress());
579 size_t dsize = fragloc.dataSizeBytes();
581 for (
size_t bcounter=0; bcounter<dsize;++bcounter)
583 if ( (offcounter % 8) == 0 )
592 std::cout.copyfmt(oldState);
599 TString outfilename=
"rce";
600 outfilename += frag.sequenceID();
602 outfilename += frag.fragmentID();
603 outfilename+=
".fragment";
604 rce.
save(outfilename.Data());
605 std::cout <<
"Saved an RCE fragment with " << rce.
size() <<
" streams: " << outfilename <<
std::endl;
608 artdaq::Fragment cfragloc(frag);
609 size_t cdsize = cfragloc.dataSizeBytes();
610 const uint64_t* cdptr = (uint64_t
const*) (cfragloc.dataBeginBytes() + 12);
611 HeaderFragmentUnpack
const cdheader(cdptr);
613 if (cdsize>16) cdsize -= 16;
614 bool isOkay = RceFragmentUnpack::isOkay(cdptr,cdsize);
637 for (
int i = 0; i < rce.
size(); ++i)
641 size_t n_ticks = rce_stream->getNTicks();
642 nticksvec.push_back(n_ticks);
648 const artdaq::Fragment& frag,
659 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
" RCE fragment type " << (
int) frag.type() <<
" doesn't match expected value: " <<
_rce_fragment_type <<
" Discarding RCE fragment";
671 artdaq::Fragment cfragloc(frag);
672 size_t cdsize = cfragloc.dataSizeBytes();
673 const uint64_t* cdptr = (uint64_t
const*) (cfragloc.dataBeginBytes() + 12);
674 HeaderFragmentUnpack
const cdheader(cdptr);
676 if (cdsize>16) cdsize -= 16;
677 bool isOkay = RceFragmentUnpack::isOkay(cdptr,cdsize);
680 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"RCE Fragment isOkay failed: " << cdsize <<
" Discarding this fragment";
690 uint32_t ch_counter = 0;
691 for (
int i = 0; i < rce.
size(); ++i)
694 size_t n_ch = rce_stream->getNChannels();
695 size_t n_ticks = rce_stream->getNTicks();
696 if (n_ticks == 0)
continue;
697 auto const identifier = rce_stream->getIdentifier();
698 uint32_t crateNumber = identifier.getCrate();
699 uint32_t slotNumber = identifier.getSlot();
700 uint32_t fiberNumber = identifier.getFiber();
705 bool apafound =
true;
709 for (
unsigned int j=0; j<adsiz; ++j)
731 MF_LOG_WARNING(
"_process_RCE:") <<
"Bad crate number, discarding fragment on request: " 732 << (
int) crateNumber;
736 if (slotNumber > 4 || fiberNumber == 0 || fiberNumber > 4)
740 MF_LOG_WARNING(
"_process_RCE:") <<
"Bad slot, fiber number, discarding fragment on request: " 741 <<
" " << slotNumber <<
" " << fiberNumber;
754 TpcStream
const &
stream = rce_stream->getStream ();
755 TpcToc toc (stream.getToc ());
756 TpcPacket pktRec (stream.getPacket ());
757 TpcPacketBody pktBdy (pktRec.getRecord ());
758 int npkts = toc.getNPacketDscs ();
759 for (
int ipkt = 0; ipkt < npkts; ++ipkt)
761 TpcTocPacketDsc pktDsc (toc.getPacketDsc (ipkt));
762 unsigned int o64 = pktDsc.getOffset64 ();
763 unsigned int pktType = pktDsc.getType ();
764 unsigned nWibFrames = pktDsc.getNWibFrames ();
765 WibFrame
const *wf = pktBdy.getWibFrames (pktType, o64);
766 for (
unsigned iwf = 0; iwf < nWibFrames; ++iwf)
768 auto const &colddata = wf->getColdData ();
769 auto cvt0 = colddata[0].getConvertCount ();
771 std::cout <<
"RCE coldata convert count: " << cvt0 <<
std::endl;
788 size_t ntc10 = ( 0.9 * (
float) ntickscheck );
790 n_ticks == ntickscheck ||
792 (crateNumber == 3 && slotNumber == 3 && fiberNumber == 2) &&
793 n_ticks < ntickscheck && n_ticks > ntc10)
797 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"Nticks differs from median or FEMB302 nticks not expected: " << n_ticks <<
" " 798 << ntickscheck <<
" Discarding this fragment";
807 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"Nticks not the required value: " << n_ticks <<
" " 829 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"Nticks different for two channel streams: " << n_ticks
848 size_t buffer_size = n_ch * n_ticks;
854 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"n_ch*nticks too large: " << n_ch <<
" * " << n_ticks <<
" = " <<
865 if (
_buffer.capacity() < buffer_size)
874 int16_t* adcs =
_buffer.data();
875 bool sgmcdretcode = rce_stream->getMultiChannelData(adcs);
880 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"getMutliChannelData returns error flag: " 881 <<
" c:s:f:ich: " << crateNumber <<
" " << slotNumber <<
" " << fiberNumber <<
" Discarding Data";
892 unsigned int crateloc = crateNumber;
896 for (
size_t i_ch = 0; i_ch < n_ch; i_ch++)
911 v_adc.push_back(adcs[i_tick+_rce_fix110_nticks]);
915 v_adc.push_back(v_adc.back());
921 for (
size_t i_tick = 0; i_tick < n_ticks; i_tick++)
923 v_adc.push_back(adcs[i_tick]);
941 MF_LOG_WARNING(
"_process_RCE_AUX:") <<
"Duplicate Channel: " << offlineChannel
942 <<
" c:s:f:ich: " << crateNumber <<
" " << slotNumber <<
" " << fiberNumber <<
" " << i_ch <<
" Discarding Data";
959 auto uncompressed_nticks = v_adc.size();
968 raw::RawDigit raw_digit(offlineChannel, uncompressed_nticks, v_adc, cflag);
970 raw_digits.push_back(raw_digit);
973 timestamps.push_back(rdtimestamp);
976 auto const rawdigitptr = rdpm(raw_digits.size()-1);
977 auto const rdtimestampptr = tspm(timestamps.size()-1);
978 tsassocs.
addSingle(rawdigitptr,rdtimestampptr);
989 size_t n_felix_frags = 0;
990 bool have_data=
false;
991 bool have_data_nc=
false;
1003 if (!
_felixProcContNCFrags(cont_frags, n_felix_frags,
true, evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
1014 have_data_nc =
true;
1015 if (!
_felixProcContNCFrags(frags, n_felix_frags,
false, evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
1029 for (
size_t ihandle=0; ihandle<fraghv.size(); ++ihandle)
1031 if (fraghv.at(ihandle).provenance()->inputTag().instance().find(
"FELIX") != std::string::npos)
1033 if (fraghv.at(ihandle).isValid())
1035 if (fraghv.at(ihandle).provenance()->inputTag().instance().find(
"Container") != std::string::npos)
1038 if (!
_felixProcContNCFrags(fraghv.at(ihandle), n_felix_frags,
true,
evt, raw_digits, timestamps, tsassocs, rdpm, tspm) )
1045 have_data_nc =
true;
1046 if (!
_felixProcContNCFrags(fraghv.at(ihandle), n_felix_frags,
false,
evt, raw_digits, timestamps, tsassocs, rdpm, tspm))
1075 return have_data || have_data_nc;
1084 size_t felixbytes = 0;
1085 for (
auto const& frag : *frags)
1087 felixbytes = felixbytes + (frag.sizeBytes());
1092 for (
auto const& frag : *frags)
1096 bool process_flag =
true;
1101 MF_LOG_WARNING(
"_process_FELIX:") <<
" Small FELIX fragment size: " << frag.sizeBytes() <<
" Discarding Event on request.";
1109 MF_LOG_WARNING(
"_process_FELIX:") <<
" Small FELIX fragment size: " << frag.sizeBytes() <<
" Discarding just this fragment on request.";
1111 process_flag =
false;
1119 artdaq::ContainerFragment cont_frag(frag);
1120 for (
size_t ii = 0; ii < cont_frag.block_count(); ++ii)
1122 if (
_process_FELIX_AUX(*cont_frag[ii], raw_digits, timestamps, tsassocs, rdpm, tspm)) ++n_felix_frags;
1127 if (
_process_FELIX_AUX(frag, raw_digits, timestamps,tsassocs, rdpm, tspm)) ++n_felix_frags;
1150 std::ios oldState(
nullptr);
1151 oldState.copyfmt(std::cout);
1153 std::cout <<
"FELIX Fragment: all numbers in hex " <<
std::hex 1154 <<
" SequenceID = " << frag.sequenceID()
1155 <<
" fragmentID = " << frag.fragmentID()
1156 <<
" fragmentType = " << (unsigned)frag.type()
1157 <<
" Timestamp = " << frag.timestamp() <<
std::endl;
1158 std::cout <<
"Offset Data";
1159 artdaq::Fragment fragloc(frag);
1160 unsigned char *dbegin =
reinterpret_cast<unsigned char *
>(fragloc.dataAddress());
1161 size_t dsize = fragloc.dataSizeBytes();
1162 size_t offcounter=0;
1163 for (
size_t bcounter=0; bcounter<dsize;++bcounter)
1165 if ( (offcounter % 8) == 0 )
1174 std::cout.copyfmt(oldState);
1193 uint8_t slot = felix.
slot_no(0);
1197 bool apafound =
true;
1201 for (
unsigned int j=0; j<adsiz; ++j)
1223 MF_LOG_WARNING(
"_process_FELIX:") <<
"Bad crate number, discarding fragment on request: " 1233 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
"Invalid slot: s=" << (
int) slot <<
" discarding FELIX data.";
1242 std::cout <<
"FELIX Coldata convert count: " << (
int) first_coldata_convert_count <<
std::endl;
1250 if (n_frames == 0)
return true;
1258 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
"n_channels*n_frames too large: " << n_channels <<
" * " << n_frames <<
" = " <<
1274 for (
unsigned int iframe=0; iframe<n_frames; ++iframe)
1282 <<
" Discarding Data";
1298 for(
unsigned ch = 0; ch < n_channels; ++ch) {
1302 unsigned int fiberloc = 0;
1307 else if (fiber == 2)
1313 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
" Fiber number " << (
int) fiber <<
" is expected to be 1 or 2 -- revisit logic";
1323 unsigned int chloc = ch;
1329 unsigned int crateloc =
crate;
1344 for(
unsigned int nframe=0;nframe<waveform.size();nframe++){
1350 v_adc.push_back(waveform.at(nframe));
1357 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
"Nticks not the required value: " << v_adc.size() <<
" " 1379 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
"Nticks different for two channel streams: " << v_adc.size()
1400 MF_LOG_WARNING(
"_process_FELIX_AUX:") <<
"Duplicate Channel: " << offlineChannel
1401 <<
" c:s:f:ich: " << (
int) crate <<
" " << (
int) slot <<
" " << (
int) fiber <<
" " << (
int) ch <<
" Discarding Data";
1416 auto n_ticks = v_adc.size();
1424 raw::RawDigit raw_digit(offlineChannel, n_ticks, v_adc, cflag);
1426 raw_digits.push_back(raw_digit);
1429 timestamps.push_back(rdtimestamp);
1432 auto const rawdigitptr = rdpm(raw_digits.size()-1);
1433 auto const rdtimestampptr = tspm(timestamps.size()-1);
1434 tsassocs.
addSingle(rawdigitptr,rdtimestampptr);
1445 size_t asiz = v_adc.size();
1457 imed = TMath::Median(asiz,v_adc.data()) + 0.01;
1459 sigma = TMath::RMS(asiz,v_adc.data());
1465 for (
size_t i=0; i<asiz; ++i)
1467 if (v_adc[i] < imed) s1++;
1468 if (v_adc[i] == imed) sm++;
1472 float mcorr = (-0.5 + (0.5*(
float) asiz - (
float) s1)/ ((
float) sm) );
static constexpr size_t num_ch_per_frame
long int _max_offline_channel
size_t total_frames() const
enum raw::_compress Compress_t
bool _felixProcContNCFrags(art::Handle< artdaq::Fragments > frags, size_t &n_felix_frags, bool is_container, art::Event &evt, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm)
Collection of charge vs time digitized from a single readout channel.
TpcStreamUnpack const * get_stream(int i) const
uint8_t slot_no(const unsigned &frame_ID=0) const
Handle< PROD > getHandle(SelectorBase const &) const
uint8_t crate_no(const unsigned &frame_ID=0) const
std::vector< raw::RDStatus > RDStatuses
EDProducer(fhicl::ParameterSet const &pset)
bool _drop_events_with_small_felix_frags
unsigned int _full_tick_count
bool _duplicate_channel_checklist[15360]
bool _drop_events_with_small_rce_frags
std::vector< short > ADCvector_t
Type representing a (compressed) vector of ADC counts.
art::PtrMaker< raw::RawDigit > RDPmkr
bool _processFELIX(art::Event &evt, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm)
QTextStream & hex(QTextStream &s)
unsigned int _default_crate_if_unexpected
unsigned int _full_channel_count
bool _print_coldata_convert_count
unsigned int _tick_count_this_event
std::vector< raw::RawDigit > RawDigits
unsigned int duplicate_channels
size_t _rce_buffer_size_checklimit
std::vector< std::string > _rce_input_labels
art::Assns< raw::RawDigit, raw::RDTimeStamp > RDTsAssocs
unsigned int GetOfflineNumberFromDetectorElements(unsigned int crate, unsigned int slot, unsigned int fiber, unsigned int fembchannel, FelixOrRCE frswitch)
bool _rce_save_frags_to_files
bool _rceProcContNCFrags(art::Handle< artdaq::Fragments > frags, size_t &n_rce_frags, bool is_container, art::Event &evt, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm)
bool _process_RCE_AUX(const artdaq::Fragment &frag, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm, size_t ntickscheck)
bool _drop_small_rce_frags
bool _enforce_full_channel_count
bool _processRCE(art::Event &evt, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm)
bool _initialized_tick_count_this_event
#define DEFINE_ART_MODULE(klass)
std::vector< int16_t > _buffer
bool _felix_enforce_fragment_type_match
bool _felix_check_buffer_size
size_t _felix_frag_small_size
struct dune::tde::crate crate
art::PtrMaker< raw::RDTimeStamp > TSPmkr
std::vector< Handle< PROD > > getMany(SelectorBase const &selector=MatchAllSelector{}) const
unsigned int _rce_fix110_nticks
TH1D * fIncorrectTickNumbers
size_t _felix_buffer_size_checklimit
unsigned int incorrect_ticks
ProductID put(std::unique_ptr< PROD > &&edp, std::string const &instance={})
void produce(art::Event &e) override
void computeMedianSigma(raw::RawDigit::ADCvector_t &v_adc, float &median, float &sigma)
long int _min_offline_channel
size_t _rce_frag_small_size
uint16_t coldata_convert_count(const unsigned &frame_ID, const uint8_t &block_num) const
std::vector< int > _apas_to_decode
bool _enforce_full_tick_count
bool removeCachedProduct(Handle< PROD > &) const
bool _enforce_no_duplicate_channels
Q_EXPORT QTSManip setw(int w)
void save(const std::string &filepath) const
bool _rce_check_buffer_size
void _process_RCE_nticksvf(const artdaq::Fragment &frag, std::vector< size_t > &nticksvec)
bool _rce_drop_frags_with_badsf
uint8_t fiber_no(const unsigned &frame_ID=0) const
adc_v get_ADCs_by_channel(const uint8_t channel_ID) const
uint16_t wib_errors(const unsigned &frame_ID=0) const
bool _DiscardedCorruptData
unsigned int error_counter
PDSPTPCRawDecoder(fhicl::ParameterSet const &p)
void SetPedestal(float ped, float sigma=1.)
Set pedestal and its RMS (the latter is 0 by default)
void addSingle(Ptr< left_t > const &left, Ptr< right_t > const &right, data_t const &data)
bool _enforce_same_tick_count
void Compress(std::vector< short > &adc, raw::Compress_t compress)
Compresses a raw data buffer.
PDSPTPCRawDecoder & operator=(PDSPTPCRawDecoder const &)=delete
bool _felix_useInputLabels
#define MF_LOG_WARNING(category)
bool _drop_small_felix_frags
bool _felix_drop_frags_with_badsf
bool _process_FELIX_AUX(const artdaq::Fragment &frag, RawDigits &raw_digits, RDTimeStamps ×tamps, RDTsAssocs &tsassocs, RDPmkr &rdpm, TSPmkr &tspm)
Q_EXPORT QTSManip setfill(int f)
bool _rce_drop_frags_with_badc
bool _rce_enforce_fragment_type_match
const unsigned int _duplicate_channel_checklist_size
std::vector< Fragment > Fragments
unsigned int ChipFromOfflineChannel(unsigned int offlineChannel) const
Returns chip number.
double median(sqlite3 *db, std::string const &table_name, std::string const &column_name)
QTextStream & endl(QTextStream &s)
std::string _output_label
bool _felix_drop_frags_with_badc
std::vector< raw::RDTimeStamp > RDTimeStamps
std::vector< std::string > _felix_input_labels
uint64_t timestamp(const unsigned &frame_ID=0) const