@@ -115,58 +115,52 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
115115 const FEDRawData& fedData = fed_buffers->FEDData (fedId);
116116
117117 int nWords = fedData.size () / sizeof (uint64_t );
118- LogDebug (" GEMRawToDigiModule " ) << " fedId:" << fedId << " words: " << nWords;
118+ LogDebug (" " ) << " fedId:" << fedId << " words: " << nWords;
119119
120120 if (nWords < 5 )
121121 continue ;
122122
123123 // trailer checks
124124 FEDTrailer trailer (fedData.data () + fedData.size () - FEDTrailer::length);
125- if (not trailer.check ()) {
126- edm::LogWarning (" GEMRawToDigiModule" ) << " FED trailer check failed\n " ;
127- }
128- if (trailer.fragmentLength () * sizeof (uint64_t ) != fedData.size ()) {
129- edm::LogWarning (" GEMRawToDigiModule" ) << " FED fragment size mismatch: " << trailer.fragmentLength ()
130- << " (fragment length) vs " << nWords << " (data size) words\n " ;
125+
126+ bool failTrailerCheck = false , failTrailerMatch = false ;
127+ if (!trailer.check () || (trailer.fragmentLength () * sizeof (uint64_t ) != fedData.size ())) {
128+ failTrailerCheck = true ;
131129 }
132130
133131 const unsigned char * data = fedData.data ();
134132 const uint64_t * word = reinterpret_cast <const uint64_t *>(data);
135133 auto amc13Event = gemRawToDigi_->convertWordToAMC13Event (word);
136134
137135 if (amc13Event == nullptr ) {
138- LogDebug (" GEMRawToDigiModule " ) << " amc13Event FAILED to unpack " ;
136+ LogDebug (" " ) << " AMC13Event FAILED to be produced " ;
139137 continue ;
140138 }
141- if (gemRawToDigi_->amcError () || gemRawToDigi_->vfatError ()) {
142- edm::LogWarning (" GEMRawToDigiModule" )
143- << " amcError:" << gemRawToDigi_->amcError () << " vfatError:" << gemRawToDigi_->vfatError ();
144- }
145- // compare trailers
146- if (amc13Event->fragmentLength () != trailer.fragmentLength ()) {
147- edm::LogWarning (" GEMRawToDigiModule" ) << " fragmentLength mismatch" ;
148- }
149- if (amc13Event->crc () != trailer.crc ()) {
150- edm::LogWarning (" GEMRawToDigiModule" ) << " crc mismatch" ;
151- }
152- if (amc13Event->evtStatus () != trailer.evtStatus ()) {
153- edm::LogWarning (" GEMRawToDigiModule" ) << " evtStatus mismatch" ;
154- }
155- if (amc13Event->ttsBits () != trailer.ttsBits ()) {
156- edm::LogWarning (" GEMRawToDigiModule" ) << " ttsBits mismatch" ;
139+
140+ // compare trailers found by last word of fedData.size() and gemRawToDigi
141+ // caused by error in no. of AMC, GEB or VFAT stored in FEDs
142+ if ((amc13Event->fragmentLength () != trailer.fragmentLength ()) || (amc13Event->crc () != trailer.crc ()))
143+ failTrailerMatch = true ;
144+
145+ LogDebug (" " ) << " Event bx:" << iEvent.bunchCrossing () << " lv1Id:" << iEvent.id ().event ()
146+ << " orbitNumber:" << iEvent.orbitNumber ();
147+ LogDebug (" " ) << " AMC13 bx:" << amc13Event->bxId () << " lv1Id:" << int (amc13Event->lv1Id ())
148+ << " orbitNumber:" << amc13Event->orbitNumber ();
149+
150+ if (failTrailerCheck || failTrailerMatch) {
151+ // best to skip these events since FED is most likely corrupt
152+ edm::LogWarning (" " ) << " FED trailer: fail check? " << failTrailerCheck << " fail match? " << failTrailerMatch;
153+ continue ;
157154 }
158155
159- LogDebug (" GEMRawToDigiModule" ) << " Event bx:" << iEvent.bunchCrossing () << " lv1Id:" << iEvent.id ().event ()
160- << " orbitNumber:" << iEvent.orbitNumber ();
161- LogDebug (" GEMRawToDigiModule" ) << " AMC13 bx:" << amc13Event->bxId () << " lv1Id:" << int (amc13Event->lv1Id ())
162- << " orbitNumber:" << amc13Event->orbitNumber ();
156+ bool unknownChamber = false , unknownVFat = false , badVfat = false ;
163157
164158 // Read AMC data
165159 for (auto amcData : *(amc13Event->getAMCpayloads ())) {
166160 uint16_t amcBx = amcData.bx ();
167161 uint8_t amcNum = amcData.amcNum ();
168- LogDebug (" GEMRawToDigiModule " ) << " AMC no.:" << int (amcData.amcNum ()) << " bx:" << int (amcData.bx ())
169- << " lv1Id:" << int (amcData.l1A ()) << " orbitNumber:" << int (amcData.orbitNum ());
162+ LogDebug (" " ) << " AMC no.:" << int (amcData.amcNum ()) << " bx:" << int (amcData.bx ())
163+ << " lv1Id:" << int (amcData.l1A ()) << " orbitNumber:" << int (amcData.orbitNum ());
170164
171165 // Read GEB data
172166 for (auto gebData : *amcData.gebs ()) {
@@ -175,13 +169,13 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
175169
176170 // check if Chamber exists.
177171 if (!gemROMap->isValidChamber (geb_ec)) {
178- edm::LogWarning (" GEMRawToDigiModule" ) << " InValid: amcNum " << int (amcNum) << " gebId " << int (gebId);
172+ unknownChamber = true ;
173+ LogDebug (" " ) << " InValid: amcNum " << int (amcNum) << " gebId " << int (gebId);
179174 continue ;
180175 }
181176
182177 GEMROMapping::chamDC geb_dc = gemROMap->chamberPos (geb_ec);
183178 GEMDetId gemChId = geb_dc.detId ;
184- LogDebug (" GEMRawToDigiModule" ) << " GEB bx:" << int (gebData.bcOH ()) << " lv1Id:" << int (gebData.ecOH ());
185179
186180 // Read vfat data
187181 for (auto vfatData : *gebData.vFATs ()) {
@@ -191,20 +185,19 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
191185
192186 // check if ChipID exists.
193187 if (!gemROMap->isValidChipID (vfat_ec)) {
194- edm::LogWarning ( " GEMRawToDigiModule " )
195- << " InValid: amcNum " << int (amcNum) << " gebId " << int (gebId) << " vfatId " << int (vfatId)
196- << " vfat Pos " << int (vfatData.position ());
188+ unknownVFat = true ;
189+ LogDebug ( " " ) << " InValid: amcNum " << int (amcNum) << " gebId " << int (gebId) << " vfatId " << int (vfatId)
190+ << " vfat Pos " << int (vfatData.position ());
197191 continue ;
198192 }
199193
200194 // check vfat data
201195 if (vfatData.quality ()) {
202- edm::LogWarning ( " GEMRawToDigiModule " )
203- << " Quality " << int (vfatData.quality ()) << " b1010 " << int (vfatData.b1010 ()) << " b1100 "
204- << int (vfatData.b1100 ()) << " b1110 " << int (vfatData.b1110 ());
196+ badVfat = true ;
197+ LogDebug ( " " ) << " Quality " << int (vfatData.quality ()) << " b1010 " << int (vfatData.b1010 ()) << " b1100 "
198+ << int (vfatData.b1100 ()) << " b1110 " << int (vfatData.b1110 ());
205199 if (vfatData.crc () != vfatData.checkCRC ()) {
206- edm::LogWarning (" GEMRawToDigiModule" )
207- << " DIFFERENT CRC :" << vfatData.crc () << " " << vfatData.checkCRC ();
200+ LogDebug (" " ) << " DIFFERENT CRC :" << vfatData.crc () << " " << vfatData.checkCRC ();
208201 }
209202 }
210203
@@ -232,11 +225,9 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
232225
233226 GEMDigi digi (stripId, bx);
234227
235- LogDebug (" GEMRawToDigiModule" ) << " VFATbx:" << int (vfatData.bc ()) << " lv1Id:" << int (vfatData.ec ());
236- LogDebug (" GEMRawToDigiModule" )
237- << " fed: " << fedId << " amc:" << int (amcNum) << " geb:" << int (gebId) << " vfat:" << vfat_dc.localPhi
238- << " ,type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip ()
239- << " bx:" << digi.bx ();
228+ LogDebug (" " ) << " fed: " << fedId << " amc:" << int (amcNum) << " geb:" << int (gebId)
229+ << " vfat:" << vfat_dc.localPhi << " ,type: " << vfat_dc.vfatType << " id:" << gemId
230+ << " ch:" << chMap.chNum << " st:" << digi.strip () << " bx:" << digi.bx ();
240231
241232 outGEMDigis.get ()->insertDigi (gemId, digi);
242233
@@ -267,6 +258,11 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
267258 outAMC13Event.get ()->insertDigi (amc13Event->bxId (), AMC13Event (*amc13Event));
268259 }
269260
261+ if (unknownChamber || unknownVFat || badVfat) {
262+ edm::LogWarning (" " ) << " unpacking error: unknown Chamber " << unknownChamber << " unknown VFat " << unknownVFat
263+ << " bad VFat " << badVfat;
264+ }
265+
270266 } // end of amc13Event
271267
272268 iEvent.put (std::move (outGEMDigis));
0 commit comments