24 :
verbosity(conf.getUntrackedParameter<unsigned
int>(
"verbosity", 0)),
29 testCRC(conf.getParameter<unsigned
int>(
"testCRC")),
30 testID(conf.getParameter<unsigned
int>(
"testID")),
34 EC_min(conf.getUntrackedParameter<unsigned
int>(
"EC_min", 10)),
35 BC_min(conf.getUntrackedParameter<unsigned
int>(
"BC_min", 10)),
37 EC_fraction(conf.getUntrackedParameter<double>(
"EC_fraction", 0.6)),
38 BC_fraction(conf.getUntrackedParameter<double>(
"BC_fraction", 0.6)) {}
42 map<TotemFramePosition, RawToDigiConverter::Record> &records) {
48 for (
auto &
p :
mapping.VFATMapping) {
51 records[
p.first] = {&
p.second,
nullptr, st};
62 bool problemsPresent =
false;
63 bool stopProcessing =
false;
66 auto records_it = records.find(fr.Position());
67 if (records_it == records.end()) {
75 record.status.setMissing(
false);
76 record.status.setNumberOfClustersSpecified(
record.frame->isNumberOfClustersPresent());
77 record.status.setNumberOfClusters(
record.frame->getNumberOfClusters());
81 problemsPresent =
true;
84 fes <<
" invalid footprint" << endl;
87 record.status.setFootprintError();
88 stopProcessing =
true;
94 problemsPresent =
true;
97 fes <<
" CRC failure" << endl;
100 record.status.setCRCError();
101 stopProcessing =
true;
106 (
record.frame->getChipID() & 0xFFF) != (
record.info->hwID & 0xFFF)) {
108 fes <<
" ID mismatch (data: 0x" << hex <<
record.frame->getChipID() <<
", mapping: 0x" <<
record.info->hwID
109 <<
dec <<
", symbId: " <<
record.info->symbolicID.symbolicID <<
")" << endl;
112 record.status.setIDMismatch();
113 stopProcessing =
true;
119 string message = (stopProcessing) ?
"(and will be dropped)" :
"(but will be used though)";
121 ees <<
" Frame at " << fr.Position() <<
" seems corrupted " << message <<
":" << endl;
124 ees <<
" Frame at " << fr.Position() <<
" seems corrupted " << message <<
"." << endl;
132 if (fr.Data()->isECPresent())
133 ECChecker.
Fill(fr.Data()->getEC(), fr.Position());
135 if (fr.Data()->isBCPresent())
136 BCChecker.
Fill(fr.Data()->getBC(), fr.Position());
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;
155 if (
verbosity > 0 && !ees.rdbuf()->str().empty()) {
157 LogWarning(
"Totem") <<
"Error in RawToDigiConverter::runCommon > "
158 <<
"event contains the following problems:" << endl
159 << ees.rdbuf() << endl;
161 LogWarning(
"Totem") <<
"Error in RawToDigiConverter::runCommon > "
162 <<
"event contains problems." << endl;
167 for (
const auto &it : records) {
168 if (!it.second.status.isOK()) {
170 m[it.second.status]++;
182 map<TotemFramePosition, Record> records;
188 for (
auto &
p : records) {
193 uint8_t chipPosition = chipId.
chip();
197 record.status.setChipPosition(chipPosition);
200 if (
record.status.isOK()) {
208 anMa = analysisIter->second;
210 record.status.setFullyMaskedOut();
212 record.status.setPartiallyMaskedOut();
216 unsigned short offset = chipPosition * 128;
217 const vector<unsigned char> &activeChannels =
record.frame->getActiveChannels();
219 for (
auto ch : activeChannels) {
240 map<TotemFramePosition, Record> records;
246 for (
auto &
p : records) {
252 if (
record.status.isOK()) {
277 map<TotemFramePosition, Record> records;
283 for (
auto &
p : records) {
285 if (!
record.status.isOK())
301 auto channelwaveformPtr = records.find(frameposdata);
302 auto eventInfoPtr = records.find(frameposEvtInfo);
304 if (channelwaveformPtr != records.end() && eventInfoPtr != records.end()) {
305 Record &channelwaveform = records[frameposdata];
311 (
const uint8_t *)
eventInfo.frame->getData());
313 if (totemSampicFrame.valid()) {
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());
326 totemSampicFrame.getFPGATimestamp(),
327 totemSampicFrame.getTimestampA(),
328 totemSampicFrame.getTimestampB(),
329 totemSampicFrame.getCellInfo(),
330 totemSampicFrame.getSamples(),
336 mapping.getTimingChannel(totemSampicFrame.getHardwareId());
338 if (totemSampicFrame.getFWVersion() < 0x30)
342 LogWarning(
"Totem") <<
"Error in RawToDigiConverter::TotemTiming > "
343 <<
"HwId not recognized! hwId: " << std::hex
344 << (
unsigned int)totemSampicFrame.getHardwareId() << endl;
346 detId.setPlane(SWpair.
plane % 4);
347 detId.setChannel(SWpair.
channel);
348 detId.setRP(SWpair.
plane / 4);
352 const int HWplane = totemSampicFrame.getDetPlane() % 16;
353 const int HWchannel = totemSampicFrame.getDetChannel() % 16;
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;
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;
369 detId.setPlane(HWplane % 4);
370 detId.setChannel(HWchannel);
371 detId.setRP(HWplane / 4);
388 ees << vit.first << endl;
390 for (
const auto &it : vit.second)
391 ees <<
" " << it.first <<
" : " << it.second << endl;
394 LogWarning(
"Totem") <<
"RawToDigiConverter: error summary (error signature : number of such events)\n"
398 LogInfo(
"Totem") <<
"RawToDigiConverter: no errors to be reported.";
407 ees <<
" " << it.first <<
" : " << it.second << endl;
410 <<
"RawToDigiConverter: frames found in data, but not in the mapping (frame position : number of events)\n"
414 LogInfo(
"Totem") <<
"RawToDigiConverter: no unknown frames to be reported.";