Skip to content

Commit

Permalink
Merge pull request #31928 from jshlee/gem-unpacker-crashprot-CMSSW_11…
Browse files Browse the repository at this point in the history
…_1_4

GEM unpacker: crash protection from bad FEDs
  • Loading branch information
cmsbuild committed Oct 24, 2020
2 parents 90a5154 + a7c4f7a commit 3dab8f2
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc
Expand Up @@ -84,6 +84,8 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
amc13Event->setCDFHeader(*word);
amc13Event->setAMC13Header(*(++word));

bool unknownChamber = false, unknownVFat = false, badVfat = false;

// Readout out AMC headers
for (uint8_t i = 0; i < amc13Event->nAMC(); ++i)
amc13Event->addAMCheader(*(++word));
Expand All @@ -104,6 +106,14 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve

uint8_t gebId = gebData->inputID();
GEMROMapping::chamEC geb_ec = {fedId, amcNum, gebId};

// check if Chamber exists.
if (!gemROMap->isValidChamber(geb_ec)) {
unknownChamber = true;
LogDebug("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId);
continue;
}

GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec);
GEMDetId gemChId = geb_dc.detId;

Expand All @@ -119,19 +129,20 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve

// check if ChipID exists.
if (!gemROMap->isValidChipID(vfat_ec)) {
edm::LogWarning("GEMRawToDigiModule")
<< "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId) << " vfatId " << int(vfatId)
<< " vfat Pos " << int(vfatData->position());
unknownVFat = true;
LogDebug("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId) << " vfatId "
<< int(vfatId) << " vfat Pos " << int(vfatData->position());
continue;
}

// check vfat data
if (vfatData->quality()) {
edm::LogWarning("GEMRawToDigiModule")
badVfat = true;
LogDebug("GEMRawToDigiModule")
<< "Quality " << int(vfatData->quality()) << " b1010 " << int(vfatData->b1010()) << " b1100 "
<< int(vfatData->b1100()) << " b1110 " << int(vfatData->b1110());
if (vfatData->crc() != vfatData->checkCRC()) {
edm::LogWarning("GEMRawToDigiModule")
<< "DIFFERENT CRC :" << vfatData->crc() << " " << vfatData->checkCRC();
LogDebug("GEMRawToDigiModule") << "DIFFERENT CRC :" << vfatData->crc() << " " << vfatData->checkCRC();
}
}

Expand Down Expand Up @@ -200,6 +211,11 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve
outAMC13Event.get()->insertDigi(amc13Event->bxId(), AMC13Event(*amc13Event));
}

if (unknownChamber || unknownVFat || badVfat) {
edm::LogWarning("GEMRawToDigiModule") << "unpacking error: unknown Chamber " << unknownChamber << " unknown VFat "
<< unknownVFat << " bad VFat " << badVfat;
}

} // end of amc13Event

iEvent.put(std::move(outGEMDigis));
Expand Down

0 comments on commit 3dab8f2

Please sign in to comment.