9 #include <pxd/modules/pxdUnpacking/PXDPostErrorCheckerModule.h>
13 using namespace Belle2::PXD::PXDError;
27 setDescription(
"PXD: Check Post Unpacking for DAQ errors");
28 setPropertyFlags(c_ParallelProcessingCertified);
30 PXDError::PXDErrorFlags defaulterrormask;
31 defaulterrormask[c_nrEVENT_STRUCT ] = 1;
32 defaulterrormask[c_nrFRAME_TNR_MM ] = 1;
33 defaulterrormask[c_nrMETA_MM ] = 1;
34 defaulterrormask[c_nrONSEN_TRG_FIRST ] = 1;
36 defaulterrormask[c_nrDHC_END_MISS ] = 1;
37 defaulterrormask[c_nrNR_FRAMES_TO_SMALL ] = 1;
39 defaulterrormask[c_nrDATA_OUTSIDE ] = 1;
41 defaulterrormask[c_nrDHC_START_SECOND ] = 1;
43 defaulterrormask[c_nrFIX_SIZE ] = 1;
44 defaulterrormask[c_nrDHE_CRC ] = 1;
46 defaulterrormask[c_nrDHC_UNKNOWN ] = 1;
47 defaulterrormask[c_nrHEADERTYPE_INV ] = 1;
48 defaulterrormask[c_nrPACKET_SIZE ] = 1;
49 defaulterrormask[c_nrMAGIC ] = 1;
51 defaulterrormask[c_nrFRAME_NR ] = 1;
52 defaulterrormask[c_nrFRAME_SIZE ] = 1;
53 defaulterrormask[c_nrHLTROI_MAGIC ] = 1;
54 defaulterrormask[c_nrMERGER_TRIGNR ] = 1;
56 defaulterrormask[c_nrDHP_SIZE ] = 1;
57 defaulterrormask[c_nrDHE_DHP_DHEID ] = 1;
58 defaulterrormask[c_nrDHE_DHP_PORT ] = 1;
61 defaulterrormask[c_nrDHE_START_END_ID ] = 1;
62 defaulterrormask[c_nrDHE_START_ID ] = 1;
63 defaulterrormask[c_nrDHE_START_WO_END ] = 1;
68 defaulterrormask[c_nrDHE_ACTIVE ] = 1;
71 defaulterrormask[c_nrSENDALL_TYPE ] = 1;
72 defaulterrormask[c_nrNOTSENDALL_TYPE ] = 1;
73 defaulterrormask[c_nrDHP_DBL_HEADER ] = 1;
74 defaulterrormask[c_nrHEADER_ERR ] = 1;
76 defaulterrormask[c_nrHEADER_ERR_GHOST ] = 1;
77 defaulterrormask[c_nrSUSP_PADDING ] = 1;
78 defaulterrormask[c_nrDHC_WIE ] = 1;
79 defaulterrormask[c_nrDHE_WIE ] = 1;
81 defaulterrormask[c_nrROW_OVERFLOW ] = 1;
83 defaulterrormask[c_nrDHP_DHP_FRAME_DIFFER ] = 1;
84 defaulterrormask[c_nrDHP_DHE_FRAME_DIFFER ] = 1;
86 defaulterrormask[c_nrDHE_ID_INVALID ] = 1;
87 defaulterrormask[c_nrDHC_DHCID_START_END_MM ] = 1;
88 defaulterrormask[c_nrDHE_END_WO_START ] = 1;
89 defaulterrormask[c_nrDHC_END_DBL ] = 1;
91 defaulterrormask[c_nrMETA_MM_DHC ] = 1;
92 defaulterrormask[c_nrMETA_MM_DHE ] = 1;
94 defaulterrormask[c_nrUNEXPECTED_FRAME_TYPE ] = 1;
96 defaulterrormask[c_nrMETA_MM_DHC_ERS ] = 1;
98 defaulterrormask[c_nrMETA_MM_ONS_HLT ] = 1;
104 defaulterrormask[c_nrDHE_START_THIRD ] = 1;
106 defaulterrormask[c_nrFAKE_NO_FAKE_DATA ] = 1;
109 addParam(
"PXDDAQEvtStatsName", m_PXDDAQEvtStatsName,
"The name of the StoreObjPtr of input PXDDAQEvtStats", std::string(
""));
110 addParam(
"PXDRawHitsName", m_PXDRawHitsName,
"The name of the StoreArray of input PXDRawHits", std::string(
""));
111 addParam(
"PXDRawAdcsName", m_PXDRawAdcsName,
"The name of the StoreArray of input PXDRawAdcs", std::string(
""));
112 addParam(
"PXDRawROIsName", m_PXDRawROIsName,
"The name of the StoreArray of input PXDRawROIs", std::string(
""));
115 addParam(
"CriticalErrorMask", crit,
"Set error mask for which data is removed (0=none, 1=default, other undefined yet)", 1);
118 m_criticalErrorMask = 0;
119 B2INFO(
"Disabling critical error mask");
122 m_criticalErrorMask = defaulterrormask;
125 B2FATAL(
"Undefined value for criticalErrorMaskSet");
130 addParam(
"IgnoreTriggerGate", m_ignoreTriggerGate,
"Ignore different triggergate between DHEs",
true);
131 addParam(
"IgnoreDHPFrame", m_ignoreDHPFrame,
"Ignore different dhp frame between DHEs",
true);
138 m_storeDAQEvtStats.isRequired();
141 m_storeRawHits.isOptional(m_PXDRawHitsName);
142 m_storeRawAdc.isOptional(m_PXDRawAdcsName);
143 m_storeROIs.isOptional(m_PXDRawROIsName);
145 B2DEBUG(25,
"The set error mask is $" << std::hex << m_criticalErrorMask);
161 bool had_dhe =
false;
162 unsigned short triggergate = 0;
163 unsigned short dheframenr = 0;
164 std::map <int, int> found_dhe;
165 PXDErrorFlags mask{};
166 B2DEBUG(25,
"Iterate PXD Packets for this Event");
167 for (
auto& pkt : *m_storeDAQEvtStats) {
168 B2DEBUG(25,
"Iterate DHC in Pkt " << pkt.getPktIndex());
169 for (
auto& dhc : pkt) {
170 B2DEBUG(25,
"Iterate DHE in DHC " << dhc.getDHCID());
171 for (
auto& dhe : dhc) {
172 B2DEBUG(25,
"Iterate DHP in DHE " << dhe.getDHEID() <<
" TrigGate " << dhe.getTriggerGate() <<
" FrameNr " << dhe.getFrameNr());
173 found_dhe[dhe.getDHEID()]++;
175 if (dhe.getTriggerGate() != triggergate) {
176 if (!m_ignoreTriggerGate) B2WARNING(
"Trigger Gate of DHEs not identical" <<
LogVar(
"Triggergate 1",
177 triggergate) <<
LogVar(
"TriggerGate 2", dhe.getTriggerGate()));
178 mask [c_nrEVT_TRG_GATE_DIFFER] =
true;
180 if (dhe.getFrameNr() != dheframenr) {
181 if (!m_ignoreDHPFrame) B2WARNING(
"Frame Nr of DHEs not identical" <<
LogVar(
"FrameNr 1", dheframenr) <<
LogVar(
"FrameNr 2",
183 mask [c_nrEVT_TRG_FRM_NR_DIFFER] =
true;
186 triggergate = dhe.getTriggerGate();
187 dheframenr = dhe.getFrameNr();
190 for (
auto& dhp : dhe) {
191 B2DEBUG(25,
"DHP " << dhp.getChipID() <<
" Framenr " << dhp.getFrameNr());
196 for (
auto it = dhe.cm_begin(); it < dhe.cm_end(); ++it) {
197 if (std::get<2>(*it) == 63) {
200 B2DEBUG(25,
"DHP data loss (CM=63) in " <<
LogVar(
"DHE", dhe.getDHEID()) <<
LogVar(
"DHP",
int(std::get<0>(*it))) <<
LogVar(
"Row",
205 if (error) B2WARNING(
"DHP data loss (CM=63) in " <<
LogVar(
"DHE", dhe.getDHEID()));
212 for (
auto& a : found_dhe) {
213 if (a.second > 1) B2WARNING(
"More than one packet for same DHE ID " << a.first);
226 m_storeDAQEvtStats->addErrorMask(mask);
227 m_storeDAQEvtStats->setCritErrorMask(m_criticalErrorMask);
228 m_storeDAQEvtStats->Decide();
229 if (!m_storeDAQEvtStats->isUsable()) {
231 m_storeRawHits.clear();
233 m_storeRawAdc.clear();
234 setReturnValue(
false);
The PXD DAQ Post Unpacking Error Check.
void initialize() override final
Initialize.
void event() override final
Event.
Class to store variables with their name which were sent to the logging service.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Namespace to encapsulate code needed for simulation and reconstrucion of the PXD.
Abstract base class for different kinds of events.