CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes
RawToDigiConverter Class Reference

Collection of code to convert TOTEM raw data into digi. More...

#include <RawToDigiConverter.h>

Classes

struct  Record
 

Public Member Functions

void printSummaries () const
 Print error summaries. More...
 
 RawToDigiConverter (const edm::ParameterSet &conf)
 
void run (const VFATFrameCollection &coll, const TotemDAQMapping &mapping, const TotemAnalysisMask &mask, edm::DetSetVector< TotemRPDigi > &digi, edm::DetSetVector< TotemVFATStatus > &status)
 Creates RP digi. More...
 
void run (const VFATFrameCollection &coll, const TotemDAQMapping &mapping, const TotemAnalysisMask &mask, edm::DetSetVector< CTPPSDiamondDigi > &digi, edm::DetSetVector< TotemVFATStatus > &status)
 Creates Diamond digi. More...
 
void run (const VFATFrameCollection &coll, const TotemDAQMapping &mapping, const TotemAnalysisMask &mask, edm::DetSetVector< TotemTimingDigi > &digi, edm::DetSetVector< TotemVFATStatus > &status)
 Creates Totem Timing digi. More...
 

Private Types

enum  TestFlag { tfNoTest, tfWarn, tfErr }
 

Private Member Functions

void runCommon (const VFATFrameCollection &input, const TotemDAQMapping &mapping, std::map< TotemFramePosition, Record > &records)
 Common processing for all VFAT based sub-systems. More...
 

Private Attributes

double BC_fraction
 
unsigned int BC_min
 
double EC_fraction
 the minimal required (relative) occupancy of the most frequent counter value to be accepted More...
 
unsigned int EC_min
 the minimal required number of frames to determine the most frequent counter value More...
 
std::map< TotemFramePosition,
std::map< TotemVFATStatus,
unsigned int > > 
errorSummary
 error summaries More...
 
unsigned int printErrorSummary
 
unsigned int printUnknownFrameSummary
 
unsigned int testBCMostFrequent
 
unsigned int testCRC
 
unsigned int testECDAQ
 
unsigned int testECMostFrequent
 
unsigned int testECRaw
 
unsigned int testFootprint
 flags for which tests to run More...
 
unsigned int testID
 
std::map< TotemFramePosition,
unsigned int > 
unknownSummary
 
unsigned char verbosity
 

Detailed Description

Collection of code to convert TOTEM raw data into digi.

Definition at line 26 of file RawToDigiConverter.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

RawToDigiConverter::RawToDigiConverter ( const edm::ParameterSet conf)

Definition at line 23 of file RawToDigiConverter.cc.

24  : verbosity(conf.getUntrackedParameter<unsigned int>("verbosity", 0)),
25  printErrorSummary(conf.getUntrackedParameter<unsigned int>("printErrorSummary", 1)),
26  printUnknownFrameSummary(conf.getUntrackedParameter<unsigned int>("printUnknownFrameSummary", 1)),
27 
28  testFootprint(conf.getParameter<unsigned int>("testFootprint")),
29  testCRC(conf.getParameter<unsigned int>("testCRC")),
30  testID(conf.getParameter<unsigned int>("testID")),
31  testECMostFrequent(conf.getParameter<unsigned int>("testECMostFrequent")),
32  testBCMostFrequent(conf.getParameter<unsigned int>("testBCMostFrequent")),
33 
34  EC_min(conf.getUntrackedParameter<unsigned int>("EC_min", 10)),
35  BC_min(conf.getUntrackedParameter<unsigned int>("BC_min", 10)),
36 
37  EC_fraction(conf.getUntrackedParameter<double>("EC_fraction", 0.6)),
38  BC_fraction(conf.getUntrackedParameter<double>("BC_fraction", 0.6)) {}
T getUntrackedParameter(std::string const &, T const &) const
unsigned int testECMostFrequent
unsigned int printErrorSummary
unsigned int testFootprint
flags for which tests to run
unsigned int printUnknownFrameSummary
unsigned char verbosity
unsigned int testBCMostFrequent
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
double EC_fraction
the minimal required (relative) occupancy of the most frequent counter value to be accepted ...
unsigned int EC_min
the minimal required number of frames to determine the most frequent counter value ...

Member Function Documentation

void RawToDigiConverter::printSummaries ( ) const

Print error summaries.

Definition at line 382 of file RawToDigiConverter.cc.

References errorSummary, printErrorSummary, printUnknownFrameSummary, and unknownSummary.

Referenced by TotemVFATRawToDigi::endStream().

382  {
383  // print error summary
384  if (printErrorSummary) {
385  if (!errorSummary.empty()) {
386  stringstream ees;
387  for (const auto &vit : errorSummary) {
388  ees << vit.first << endl;
389 
390  for (const auto &it : vit.second)
391  ees << " " << it.first << " : " << it.second << endl;
392  }
393 
394  LogWarning("Totem") << "RawToDigiConverter: error summary (error signature : number of such events)\n"
395  << endl
396  << ees.rdbuf();
397  } else {
398  LogInfo("Totem") << "RawToDigiConverter: no errors to be reported.";
399  }
400  }
401 
402  // print summary of unknown frames (found in data but not in the mapping)
404  if (!unknownSummary.empty()) {
405  stringstream ees;
406  for (const auto &it : unknownSummary)
407  ees << " " << it.first << " : " << it.second << endl;
408 
409  LogWarning("Totem")
410  << "RawToDigiConverter: frames found in data, but not in the mapping (frame position : number of events)\n"
411  << endl
412  << ees.rdbuf();
413  } else {
414  LogInfo("Totem") << "RawToDigiConverter: no unknown frames to be reported.";
415  }
416  }
417 }
unsigned int printErrorSummary
unsigned int printUnknownFrameSummary
Log< level::Info, false > LogInfo
std::map< TotemFramePosition, unsigned int > unknownSummary
std::map< TotemFramePosition, std::map< TotemVFATStatus, unsigned int > > errorSummary
error summaries
Log< level::Warning, false > LogWarning
void RawToDigiConverter::run ( const VFATFrameCollection coll,
const TotemDAQMapping mapping,
const TotemAnalysisMask mask,
edm::DetSetVector< TotemRPDigi > &  digi,
edm::DetSetVector< TotemVFATStatus > &  status 
)

Creates RP digi.

Definition at line 176 of file RawToDigiConverter.cc.

References TotemAnalysisMask::analysisMask, TotemRPDetId::chip(), edm::DetSet< T >::emplace_back(), edm::DetSetVector< T >::find_or_insert(), RawToDigiConverter::Record::frame, TotemVFATAnalysisMask::fullMask, VFATFrame::getActiveChannels(), RawToDigiConverter::Record::info, TotemVFATStatus::isOK(), TotemVFATAnalysisMask::maskedChannels, hltrates_dqm_sourceclient-live_cfg::offset, AlCaHLTBitMon_ParallelJobs::p, TotemRPDetId::planeId(), edm::DetSet< T >::push_back(), GlobalPosition_Frontier_DevDB_cff::record, runCommon(), TotemVFATStatus::setChipPosition(), TotemVFATStatus::setFullyMaskedOut(), TotemVFATStatus::setPartiallyMaskedOut(), RawToDigiConverter::Record::status, TotemSymbID::symbolicID, and TotemVFATInfo::symbolicID.

Referenced by Types.EventID::cppID(), Types.LuminosityBlockID::cppID(), and TotemVFATRawToDigi::run().

180  {
181  // structure merging vfat frame data with the mapping
182  map<TotemFramePosition, Record> records;
183 
184  // common processing - frame validation
185  runCommon(input, mapping, records);
186 
187  // second loop over data
188  for (auto &p : records) {
189  Record &record = p.second;
190 
191  // calculate ids
192  TotemRPDetId chipId(record.info->symbolicID.symbolicID);
193  uint8_t chipPosition = chipId.chip();
194  TotemRPDetId detId = chipId.planeId();
195 
196  // update chipPosition in status
197  record.status.setChipPosition(chipPosition);
198 
199  // produce digi only for good frames
200  if (record.status.isOK()) {
201  // find analysis mask (needs a default=no mask, if not in present the mapping)
203  anMa.fullMask = false;
204 
205  auto analysisIter = analysisMask.analysisMask.find(record.info->symbolicID);
206  if (analysisIter != analysisMask.analysisMask.end()) {
207  // if there is some information about masked channels - save it into conversionStatus
208  anMa = analysisIter->second;
209  if (anMa.fullMask)
210  record.status.setFullyMaskedOut();
211  else
212  record.status.setPartiallyMaskedOut();
213  }
214 
215  // create the digi
216  unsigned short offset = chipPosition * 128;
217  const vector<unsigned char> &activeChannels = record.frame->getActiveChannels();
218 
219  for (auto ch : activeChannels) {
220  // skip masked channels
221  if (!anMa.fullMask && anMa.maskedChannels.find(ch) == anMa.maskedChannels.end()) {
222  DetSet<TotemRPDigi> &digiDetSet = rpData.find_or_insert(detId);
223  digiDetSet.emplace_back(offset + ch);
224  }
225  }
226  }
227 
228  // save status
229  DetSet<TotemVFATStatus> &statusDetSet = finalStatus.find_or_insert(detId);
230  statusDetSet.push_back(record.status);
231  }
232 }
Detector ID class for TOTEM Si strip detectors.
Definition: TotemRPDetId.h:30
Contains data on masked channels of a VFAT.
void push_back(const T &t)
Definition: DetSet.h:66
void runCommon(const VFATFrameCollection &input, const TotemDAQMapping &mapping, std::map< TotemFramePosition, Record > &records)
Common processing for all VFAT based sub-systems.
static std::string const input
Definition: EdmProvDump.cc:47
decltype(auto) emplace_back(Args &&...args)
Definition: DetSet.h:68
TotemRPDetId planeId() const
Definition: TotemRPDetId.h:62
bool fullMask
whether all channels of the VFAT shall be masked
std::set< unsigned char > maskedChannels
list of channels to be masked
void RawToDigiConverter::run ( const VFATFrameCollection coll,
const TotemDAQMapping mapping,
const TotemAnalysisMask mask,
edm::DetSetVector< CTPPSDiamondDigi > &  digi,
edm::DetSetVector< TotemVFATStatus > &  status 
)

Creates Diamond digi.

Definition at line 234 of file RawToDigiConverter.cc.

References edm::DetSet< T >::emplace_back(), edm::DetSetVector< T >::find_or_insert(), RawToDigiConverter::Record::frame, VFATFrame::getEC(), pps::diamond::vfat::getHptdcErrorFlag(), pps::diamond::vfat::getLeadingEdgeTime(), pps::diamond::vfat::getMultihit(), pps::diamond::vfat::getThresholdVoltage(), pps::diamond::vfat::getTrailingEdgeTime(), RawToDigiConverter::Record::info, TotemVFATStatus::isOK(), AlCaHLTBitMon_ParallelJobs::p, edm::DetSet< T >::push_back(), GlobalPosition_Frontier_DevDB_cff::record, runCommon(), TotemVFATStatus::setEC(), RawToDigiConverter::Record::status, TotemSymbID::symbolicID, and TotemVFATInfo::symbolicID.

Referenced by Types.EventID::cppID(), and Types.LuminosityBlockID::cppID().

238  {
239  // structure merging vfat frame data with the mapping
240  map<TotemFramePosition, Record> records;
241 
242  // common processing - frame validation
243  runCommon(coll, mapping, records);
244 
245  // second loop over data
246  for (auto &p : records) {
247  Record &record = p.second;
248 
249  // calculate ids
250  CTPPSDiamondDetId detId(record.info->symbolicID.symbolicID);
251 
252  if (record.status.isOK()) {
253  // update Event Counter in status
254  record.status.setEC(record.frame->getEC() & 0xFF);
255 
256  // create the digi
257  DetSet<CTPPSDiamondDigi> &digiDetSet = digi.find_or_insert(detId);
258  digiDetSet.emplace_back(pps::diamond::vfat::getLeadingEdgeTime(*record.frame),
261  pps::diamond::vfat::getMultihit(*record.frame),
263  }
264 
265  // save status
266  DetSet<TotemVFATStatus> &statusDetSet = status.find_or_insert(detId);
267  statusDetSet.push_back(record.status);
268  }
269 }
uint32_t getLeadingEdgeTime(const VFATFrame &frame)
get timing information for single leading edge
void push_back(const T &t)
Definition: DetSet.h:66
void runCommon(const VFATFrameCollection &input, const TotemDAQMapping &mapping, std::map< TotemFramePosition, Record > &records)
Common processing for all VFAT based sub-systems.
reference find_or_insert(det_id_type id)
Definition: DetSetVector.h:234
VFATFrame::word getMultihit(const VFATFrame &frame)
flag stating whether the HPTDC channel encountered multiple hits
uint32_t getTrailingEdgeTime(const VFATFrame &frame)
get timing information for single trailing edge
VFATFrame::word getHptdcErrorFlag(const VFATFrame &frame)
retrieve the list of error/status flags for the HPTDC when the frame was recorded ...
decltype(auto) emplace_back(Args &&...args)
Definition: DetSet.h:68
uint32_t getThresholdVoltage(const VFATFrame &frame)
retrieve the threshold voltage for this channel
Detector ID class for CTPPS Timing Diamond detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bit...
void RawToDigiConverter::run ( const VFATFrameCollection coll,
const TotemDAQMapping mapping,
const TotemAnalysisMask mask,
edm::DetSetVector< TotemTimingDigi > &  digi,
edm::DetSetVector< TotemVFATStatus > &  status 
)

Creates Totem Timing digi.

Definition at line 271 of file RawToDigiConverter.cc.

References TotemDAQMapping::TotemTimingPlaneChannelPair::channel, TauDecayModes::dec, edm::DetSetVector< T >::find_or_insert(), RawToDigiConverter::Record::frame, VFATFrame::getData(), TotemFramePosition::getGOHId(), TotemFramePosition::getIdxInFiber(), TotemFramePosition::getOptoRxId(), TotemFramePosition::getSubSystemId(), TotemDAQMapping::getTimingChannel(), TotemFramePosition::getTOTFEDId(), RawToDigiConverter::Record::info, TotemVFATStatus::isOK(), AlCaHLTBitMon_ParallelJobs::p, TotemDAQMapping::TotemTimingPlaneChannelPair::plane, edm::DetSet< T >::push_back(), GlobalPosition_Frontier_DevDB_cff::record, runCommon(), RawToDigiConverter::Record::status, TotemSymbID::symbolicID, TotemVFATInfo::symbolicID, and verbosity.

Referenced by Types.EventID::cppID(), and Types.LuminosityBlockID::cppID().

275  {
276  // structure merging vfat frame data with the mapping
277  map<TotemFramePosition, Record> records;
278 
279  // common processing - frame validation
280  runCommon(coll, mapping, records);
281 
282  // second loop over data
283  for (auto &p : records) {
284  Record &record = p.second;
285  if (!record.status.isOK())
286  continue;
287 
288  const TotemFramePosition *framepos = &p.first;
289 
290  if (((framepos->getIdxInFiber() % 2) == 0) && (framepos->getIdxInFiber() < 14)) {
291  //corresponding channel data are always in the neighbouring idx in fiber
292 
293  TotemFramePosition frameposdata(framepos->getSubSystemId(),
294  framepos->getTOTFEDId(),
295  framepos->getOptoRxId(),
296  framepos->getGOHId(),
297  (framepos->getIdxInFiber() + 1));
298  TotemFramePosition frameposEvtInfo(
299  framepos->getSubSystemId(), framepos->getTOTFEDId(), framepos->getOptoRxId(), framepos->getGOHId(), 0xe);
300 
301  auto channelwaveformPtr = records.find(frameposdata);
302  auto eventInfoPtr = records.find(frameposEvtInfo);
303 
304  if (channelwaveformPtr != records.end() && eventInfoPtr != records.end()) {
305  Record &channelwaveform = records[frameposdata];
306  Record &eventInfo = records[frameposEvtInfo];
307 
308  // Extract all the waveform information from the raw data
309  TotemSampicFrame totemSampicFrame((const uint8_t *)record.frame->getData(),
310  (const uint8_t *)channelwaveform.frame->getData(),
311  (const uint8_t *)eventInfo.frame->getData());
312 
313  if (totemSampicFrame.valid()) {
314  // create the digi
315  TotemTimingEventInfo eventInfoTmp(totemSampicFrame.getEventHardwareId(),
316  totemSampicFrame.getL1ATimestamp(),
317  totemSampicFrame.getBunchNumber(),
318  totemSampicFrame.getOrbitNumber(),
319  totemSampicFrame.getEventNumber(),
320  totemSampicFrame.getChannelMap(),
321  totemSampicFrame.getL1ALatency(),
322  totemSampicFrame.getNumberOfSentSamples(),
323  totemSampicFrame.getOffsetOfSamples(),
324  totemSampicFrame.getPLLInfo());
325  TotemTimingDigi digiTmp(totemSampicFrame.getHardwareId(),
326  totemSampicFrame.getFPGATimestamp(),
327  totemSampicFrame.getTimestampA(),
328  totemSampicFrame.getTimestampB(),
329  totemSampicFrame.getCellInfo(),
330  totemSampicFrame.getSamples(),
331  eventInfoTmp);
332  // calculate ids
333  TotemTimingDetId detId(record.info->symbolicID.symbolicID);
334 
336  mapping.getTimingChannel(totemSampicFrame.getHardwareId());
337  // for FW Version > 0 plane and channel are encoded in the dataframe
338  if (totemSampicFrame.getFWVersion() < 0x30) // Mapping not present in HW, read from SW for FW versions < 3.0
339  {
340  if (SWpair.plane == -1 || SWpair.channel == -1) {
341  if (verbosity > 0)
342  LogWarning("Totem") << "Error in RawToDigiConverter::TotemTiming > "
343  << "HwId not recognized! hwId: " << std::hex
344  << (unsigned int)totemSampicFrame.getHardwareId() << endl;
345  } else {
346  detId.setPlane(SWpair.plane % 4);
347  detId.setChannel(SWpair.channel);
348  detId.setRP(SWpair.plane / 4); // Top:0 or Bottom:1
349  }
350  } else // Mapping read from HW, checked by SW
351  {
352  const int HWplane = totemSampicFrame.getDetPlane() % 16;
353  const int HWchannel = totemSampicFrame.getDetChannel() % 16;
354 
355  if (SWpair.plane == -1 || SWpair.channel == -1) {
356  if (verbosity > 0)
357  LogWarning("Totem") << "Warning in RawToDigiConverter::TotemTiming > "
358  << "HwId not recognized! hwId: " << std::hex
359  << (unsigned int)totemSampicFrame.getHardwareId()
360  << "\tUsing plane and ch from HW without check!" << endl;
361  } else {
362  if (verbosity > 0 && (SWpair.plane != HWplane || SWpair.channel != HWchannel))
363  LogWarning("Totem") << "Warning in RawToDigiConverter::TotemTiming > "
364  << "Hw mapping different from SW mapping. hwId: " << std::hex
365  << (unsigned int)totemSampicFrame.getHardwareId() << "HW: " << std::dec << HWplane
366  << ":" << HWchannel << "\tSW " << SWpair.plane << ":" << SWpair.channel
367  << "\tUsing plane and ch from HW!" << endl;
368  }
369  detId.setPlane(HWplane % 4);
370  detId.setChannel(HWchannel);
371  detId.setRP(HWplane / 4); // Top:0 or Bottom:1
372  }
373 
374  DetSet<TotemTimingDigi> &digiDetSet = digi.find_or_insert(detId);
375  digiDetSet.push_back(digiTmp);
376  }
377  }
378  }
379  }
380 }
void push_back(const T &t)
Definition: DetSet.h:66
void runCommon(const VFATFrameCollection &input, const TotemDAQMapping &mapping, std::map< TotemFramePosition, Record > &records)
Common processing for all VFAT based sub-systems.
unsigned short getIdxInFiber() const
unsigned short getTOTFEDId() const
unsigned short getOptoRxId() const
reference find_or_insert(det_id_type id)
Definition: DetSetVector.h:234
unsigned short getSubSystemId() const
the getters and setters below are deprecated
const TotemTimingPlaneChannelPair getTimingChannel(const uint8_t hwId) const
Given the hardware ID, returns the corresponding Plane, Channel pair (TotemTimingPlaneChannelPair) ...
unsigned short getGOHId() const
Hw Id mapping for Totem Timing (dynamical mapping in Sampic)
unsigned char verbosity
Log< level::Warning, false > LogWarning
Detector ID class for CTPPS Totem Timing detectors. Bits [19:31] : Assigend in CTPPSDetId Calss Bits ...
void RawToDigiConverter::runCommon ( const VFATFrameCollection input,
const TotemDAQMapping mapping,
std::map< TotemFramePosition, Record > &  records 
)
private

Common processing for all VFAT based sub-systems.

Definition at line 40 of file RawToDigiConverter.cc.

References CounterChecker::Analyze(), BC_fraction, BC_min, CounterChecker::BCChecker, VFATFrame::checkCRC(), VFATFrame::checkFootprint(), TauDecayModes::dec, EC_fraction, EC_min, CounterChecker::ECChecker, errorSummary, CounterChecker::Fill(), RawToDigiConverter::Record::frame, VFATFrame::getChipID(), VFATFrame::getNumberOfClusters(), TotemVFATInfo::hwID, RawToDigiConverter::Record::info, VFATFrameCollection::Iterator::IsEnd(), VFATFrame::isIDPresent(), VFATFrame::isNumberOfClustersPresent(), visualization-live-secondInstance_cfg::m, AlCaHLTBitMon_ParallelJobs::p, printErrorSummary, GlobalPosition_Frontier_DevDB_cff::record, TotemVFATStatus::setCRCError(), TotemVFATStatus::setFootprintError(), TotemVFATStatus::setIDMismatch(), TotemVFATStatus::setMissing(), TotemVFATStatus::setNumberOfClusters(), TotemVFATStatus::setNumberOfClustersSpecified(), RawToDigiConverter::Record::status, TotemSymbID::symbolicID, TotemVFATInfo::symbolicID, testBCMostFrequent, testCRC, testECMostFrequent, testFootprint, testID, tfErr, tfNoTest, unknownSummary, verbosity, and TotemDAQMapping::VFATMapping.

Referenced by run().

42  {
43  // EC and BC checks (wrt. the most frequent value), BC checks per subsystem
46 
47  // initialise structure merging vfat frame data with the mapping
48  for (auto &p : mapping.VFATMapping) {
49  TotemVFATStatus st;
50  st.setMissing(true);
51  records[p.first] = {&p.second, nullptr, st};
52  }
53 
54  // event error message buffer
55  stringstream ees;
56 
57  // associate data frames with records
58  for (VFATFrameCollection::Iterator fr(&input); !fr.IsEnd(); fr.Next()) {
59  // frame error message buffer
60  stringstream fes;
61 
62  bool problemsPresent = false;
63  bool stopProcessing = false;
64 
65  // skip data frames not listed in the DAQ mapping
66  auto records_it = records.find(fr.Position());
67  if (records_it == records.end()) {
68  unknownSummary[fr.Position()]++;
69  continue;
70  }
71 
72  // update record
73  Record &record = records_it->second;
74  record.frame = fr.Data();
75  record.status.setMissing(false);
76  record.status.setNumberOfClustersSpecified(record.frame->isNumberOfClustersPresent());
77  record.status.setNumberOfClusters(record.frame->getNumberOfClusters());
78 
79  // check footprint
80  if (testFootprint != tfNoTest && !record.frame->checkFootprint()) {
81  problemsPresent = true;
82 
83  if (verbosity > 0)
84  fes << " invalid footprint" << endl;
85 
86  if (testFootprint == tfErr) {
87  record.status.setFootprintError();
88  stopProcessing = true;
89  }
90  }
91 
92  // check CRC
93  if (testCRC != tfNoTest && !record.frame->checkCRC()) {
94  problemsPresent = true;
95 
96  if (verbosity > 0)
97  fes << " CRC failure" << endl;
98 
99  if (testCRC == tfErr) {
100  record.status.setCRCError();
101  stopProcessing = true;
102  }
103  }
104  // check the id mismatch
105  if (testID != tfNoTest && record.frame->isIDPresent() &&
106  (record.frame->getChipID() & 0xFFF) != (record.info->hwID & 0xFFF)) {
107  if (verbosity > 0)
108  fes << " ID mismatch (data: 0x" << hex << record.frame->getChipID() << ", mapping: 0x" << record.info->hwID
109  << dec << ", symbId: " << record.info->symbolicID.symbolicID << ")" << endl;
110 
111  if (testID == tfErr) {
112  record.status.setIDMismatch();
113  stopProcessing = true;
114  }
115  }
116 
117  // if there were errors, put the information to ees buffer
118  if (verbosity > 0 && problemsPresent) {
119  string message = (stopProcessing) ? "(and will be dropped)" : "(but will be used though)";
120  if (verbosity > 2) {
121  ees << " Frame at " << fr.Position() << " seems corrupted " << message << ":" << endl;
122  ees << fes.rdbuf();
123  } else
124  ees << " Frame at " << fr.Position() << " seems corrupted " << message << "." << endl;
125  }
126 
127  // if there were serious errors, do not process this frame
128  if (stopProcessing)
129  continue;
130 
131  // fill EC and BC values to the statistics
132  if (fr.Data()->isECPresent())
133  ECChecker.Fill(fr.Data()->getEC(), fr.Position());
134 
135  if (fr.Data()->isBCPresent())
136  BCChecker.Fill(fr.Data()->getBC(), fr.Position());
137  }
138 
139  // analyze EC and BC statistics
141  ECChecker.Analyze(records, (testECMostFrequent == tfErr), ees);
142 
144  BCChecker.Analyze(records, (testBCMostFrequent == tfErr), ees);
145 
146  // add error message for missing frames
147  if (verbosity > 1) {
148  for (const auto &p : records) {
149  if (p.second.status.isMissing())
150  ees << "Frame for VFAT " << p.first << " is not present in the data." << endl;
151  }
152  }
153 
154  // print error message
155  if (verbosity > 0 && !ees.rdbuf()->str().empty()) {
156  if (verbosity > 1)
157  LogWarning("Totem") << "Error in RawToDigiConverter::runCommon > "
158  << "event contains the following problems:" << endl
159  << ees.rdbuf() << endl;
160  else
161  LogWarning("Totem") << "Error in RawToDigiConverter::runCommon > "
162  << "event contains problems." << endl;
163  }
164 
165  // increase error counters
166  if (printErrorSummary) {
167  for (const auto &it : records) {
168  if (!it.second.status.isOK()) {
169  auto &m = errorSummary[it.first];
170  m[it.second.status]++;
171  }
172  }
173  }
174 }
unsigned int testECMostFrequent
unsigned int printErrorSummary
Class for finding the most popular both EC and BC counter, and filling the conversion status &#39;wrong E...
unsigned int testFootprint
flags for which tests to run
the VFATFrameCollection interator
void setMissing(bool val=true)
unsigned char verbosity
std::map< TotemFramePosition, unsigned int > unknownSummary
unsigned int testBCMostFrequent
std::map< TotemFramePosition, TotemVFATInfo > VFATMapping
std::map< TotemFramePosition, std::map< TotemVFATStatus, unsigned int > > errorSummary
error summaries
bool IsEnd()
returns whether the iterator points over the end of the collection
double EC_fraction
the minimal required (relative) occupancy of the most frequent counter value to be accepted ...
Log< level::Warning, false > LogWarning
unsigned int EC_min
the minimal required number of frames to determine the most frequent counter value ...

Member Data Documentation

double RawToDigiConverter::BC_fraction
private

Definition at line 81 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::BC_min
private

Definition at line 78 of file RawToDigiConverter.h.

Referenced by runCommon().

double RawToDigiConverter::EC_fraction
private

the minimal required (relative) occupancy of the most frequent counter value to be accepted

Definition at line 81 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::EC_min
private

the minimal required number of frames to determine the most frequent counter value

Definition at line 78 of file RawToDigiConverter.h.

Referenced by runCommon().

std::map<TotemFramePosition, std::map<TotemVFATStatus, unsigned int> > RawToDigiConverter::errorSummary
private

error summaries

Definition at line 84 of file RawToDigiConverter.h.

Referenced by printSummaries(), and runCommon().

unsigned int RawToDigiConverter::printErrorSummary
private

Definition at line 63 of file RawToDigiConverter.h.

Referenced by printSummaries(), and runCommon().

unsigned int RawToDigiConverter::printUnknownFrameSummary
private

Definition at line 64 of file RawToDigiConverter.h.

Referenced by printSummaries().

unsigned int RawToDigiConverter::testBCMostFrequent
private

Definition at line 75 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::testCRC
private

Definition at line 70 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::testECDAQ
private

Definition at line 73 of file RawToDigiConverter.h.

unsigned int RawToDigiConverter::testECMostFrequent
private

Definition at line 74 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::testECRaw
private

Definition at line 72 of file RawToDigiConverter.h.

unsigned int RawToDigiConverter::testFootprint
private

flags for which tests to run

Definition at line 69 of file RawToDigiConverter.h.

Referenced by runCommon().

unsigned int RawToDigiConverter::testID
private

Definition at line 71 of file RawToDigiConverter.h.

Referenced by runCommon().

std::map<TotemFramePosition, unsigned int> RawToDigiConverter::unknownSummary
private

Definition at line 85 of file RawToDigiConverter.h.

Referenced by printSummaries(), and runCommon().

unsigned char RawToDigiConverter::verbosity
private

Definition at line 61 of file RawToDigiConverter.h.

Referenced by run(), and runCommon().