From 5e03f73729fb82be14b0c2bd9a7445100b512724 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Mon, 19 Oct 2020 03:12:12 +0900 Subject: [PATCH 01/10] GEMDigiToRawModule - fix AMC size in packing only 12 AMCs can be readout GEMRawToDigiModule - fix gem digi bx --- .../plugins/GEMDigiToRawModule.cc | 128 +++++++++--------- .../plugins/GEMRawToDigiModule.cc | 43 ++++-- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 4 + 3 files changed, 98 insertions(+), 77 deletions(-) diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index f9160ca142dcf..41011b3ed4745 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -52,9 +52,9 @@ DEFINE_FWK_MODULE(GEMDigiToRawModule); using namespace gem; GEMDigiToRawModule::GEMDigiToRawModule(const edm::ParameterSet& pset) - : event_type_(pset.getParameter("eventType")), - digi_token(consumes(pset.getParameter("gemDigi"))), - useDBEMap_(pset.getParameter("useDBEMap")) { + : event_type_(pset.getParameter("eventType")), + digi_token(consumes(pset.getParameter("gemDigi"))), + useDBEMap_(pset.getParameter("useDBEMap")) { produces(); if (useDBEMap_) { gemEMapToken_ = esConsumes(); @@ -123,37 +123,36 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } } - for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { + for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { uint32_t amc13EvtLength = 0; std::unique_ptr amc13Event = std::make_unique(); - for (auto const& gemBx : gemBxMap) { - int bx = gemBx.first; - GEMDigiCollection inBxGemDigis = gemBx.second; - - for (uint8_t amcNum = 0; amcNum < GEMeMap::maxAMCs_; ++amcNum) { - uint32_t amcSize = 0; - std::unique_ptr amcData = std::make_unique(); - - for (uint8_t gebId = 0; gebId < GEMeMap::maxGEBs_; ++gebId) { - std::unique_ptr gebData = std::make_unique(); - GEMROMapping::chamEC geb_ec{fedId, amcNum, gebId}; - - if (!gemROMap->isValidChamber(geb_ec)) - continue; - GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec); - - auto vfats = gemROMap->getVfats(geb_dc.detId); - for (auto const& vfat_ec : vfats) { - GEMROMapping::vfatDC vfat_dc = gemROMap->vfatPos(vfat_ec); - GEMDetId gemId = vfat_dc.detId; - uint16_t vfatId = vfat_ec.vfatAdd; - - bool hasDigi = false; - + for (uint8_t amcNum = 0; amcNum < GEMeMap::maxAMCs_; ++amcNum) { + uint32_t amcSize = 0; + std::unique_ptr amcData = std::make_unique(); + + for (uint8_t gebId = 0; gebId < GEMeMap::maxGEBs_; ++gebId) { + std::unique_ptr gebData = std::make_unique(); + GEMROMapping::chamEC geb_ec{fedId, amcNum, gebId}; + + if (!gemROMap->isValidChamber(geb_ec)) + continue; + GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec); + + auto vfats = gemROMap->getVfats(geb_dc.detId); + for (auto const& vfat_ec : vfats) { + GEMROMapping::vfatDC vfat_dc = gemROMap->vfatPos(vfat_ec); + GEMDetId gemId = vfat_dc.detId; + uint16_t vfatId = vfat_ec.vfatAdd; + + for (auto const& gemBx : gemBxMap) { + int bc = BX_id + gemBx.first; + + bool hasDigi = false; uint64_t lsData = 0; ///(geb_dc.vfatVer, bx, 0, vfatId, lsData, msData); + auto vfatData = std::make_unique(geb_dc.vfatVer, bc, 0, vfatId, lsData, msData); gebData->addVFAT(*vfatData); - - } // end of vfats in GEB - - if (!gebData->vFATs()->empty()) { - amcSize += 2; - gebData->setChamberHeader(gebData->vFATs()->size() * 3, gebId); - gebData->setChamberTrailer(0, 0, gebData->vFATs()->size() * 3); - amcData->addGEB(*gebData); } + + } // end of vfats in GEB + + if (!gebData->vFATs()->empty()) { + amcSize += 2; + gebData->setChamberHeader(gebData->vFATs()->size() * 3, gebId); + gebData->setChamberTrailer(LV1_id, BX_id, gebData->vFATs()->size() * 3); + amcData->addGEB(*gebData); + } + } // end of GEB loop + + if (!amcData->gebs()->empty()) { + amcSize += 5; + amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); + amcData->setAMCheader2(amcNum, OrN, 1); + amcData->setGEMeventHeader(amcData->gebs()->size(), 0); + LogDebug("GEMDigiToRawModule") << "davCnt: "<< int(amcData->davCnt()); + amc13Event->addAMCpayload(*amcData); + // AMC header in AMC13Event + uint8_t Blk_No = 0; + uint8_t AMC_No = 0; + uint16_t BoardID = 0; + amc13Event->addAMCheader(amcSize, Blk_No, AMC_No, BoardID); + amc13EvtLength += amcSize + 1; // AMC data size + AMC header size + } - } // end of GEB loop - - if (!amcData->gebs()->empty()) { - amcSize += 5; - amcData->setAMCheader1(amcSize, bx, LV1_id, amcNum); - amcData->setAMCheader2(amcNum, OrN, 1); - amcData->setGEMeventHeader(amcData->gebs()->size(), 0); - amc13Event->addAMCpayload(*amcData); - // AMC header in AMC13Event - uint8_t Blk_No = 0; - uint8_t AMC_No = 0; - uint16_t BoardID = 0; - amc13Event->addAMCheader(amcSize, Blk_No, AMC_No, BoardID); - amc13EvtLength += amcSize + 1; // AMC data size + AMC header size - } - - } // end of AMC loop - } // end of BX loop - + } // end of AMC loop + if (!amc13Event->getAMCpayloads()->empty()) { // CDFHeader amc13Event->setCDFHeader(event_type_, LV1_id, BX_id, fedId); @@ -226,9 +225,14 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve LogDebug("GEMDigiToRawModule") << " EvtLength: " << int(EvtLength); amc13Event->setCDFTrailer(EvtLength); + LogDebug("GEMDigiToRawModule") << "getAMCpayloads: "<< amc13Event->getAMCpayloads()->size(); + LogDebug("GEMDigiToRawModule") << " nAMC: "<< int(amc13Event->nAMC()) + << " LV1_id: "<< int(LV1_id) + << " BX_id: "<< int(BX_id); + amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data - } // end of FED loop + }// end of FED loop // read out amc13Events into fedRawData for (const auto& amc13e : amc13Events) { @@ -270,7 +274,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve uint64_t* w = reinterpret_cast(fedRawData.data()); for (const auto& word : words) { - LogDebug("GEMDigiToRawModule") << std::bitset<64>(word); + //std::cout << std::bitset<64>(word) <(pset.getParameter("InputLabel"))), - useDBEMap_(pset.getParameter("useDBEMap")), - unPackStatusDigis_(pset.getParameter("unPackStatusDigis")), - gemRawToDigi_(std::make_unique()) { + : fed_token(consumes(pset.getParameter("InputLabel"))), + useDBEMap_(pset.getParameter("useDBEMap")), + unPackStatusDigis_(pset.getParameter("unPackStatusDigis")), + gemRawToDigi_(std::make_unique()) { produces(); if (unPackStatusDigis_) { produces("vfatStatus"); @@ -122,14 +122,25 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve const uint64_t* word = reinterpret_cast(data); + // const uint64_t* w = word; + // for (int i =0; i< nWords;i++) { + // std::cout << std::bitset<64>(*(w++)) << std::endl; + // } + auto amc13Event = gemRawToDigi_->convertWordToAMC13Event(word); - if (amc13Event == nullptr) + if (amc13Event == nullptr){ + LogDebug("GEMRawToDigiModule") << "amc13Event does not exists"; continue; - + } + LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() << " orbitNumber:" << iEvent.orbitNumber(); + LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) << " orbitNumber:" << amc13Event->orbitNumber(); + // Read AMC data for (auto amcData : *(amc13Event->getAMCpayloads())) { + uint16_t amcBx = amcData.bx(); uint8_t amcNum = amcData.amcNum(); + LogDebug("GEMRawToDigiModule") << "AMC bx:" << int(amcData.bx()) << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); // Read GEB data for (auto gebData : *amcData.gebs()) { @@ -137,6 +148,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve GEMROMapping::chamEC geb_ec = {fedId, amcNum, gebId}; GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec); GEMDetId gemChId = geb_dc.detId; + LogDebug("GEMRawToDigiModule") << "GEB bx:" << int(gebData.bcOH()) << " lv1Id:" << int(gebData.ecOH()); //Read vfat data for (auto vfatData : *gebData.vFATs()) { @@ -147,18 +159,18 @@ 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()); + << "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") - << "Quality " << int(vfatData.quality()) << " b1010 " << int(vfatData.b1010()) << " b1100 " - << int(vfatData.b1100()) << " b1110 " << int(vfatData.b1110()); + << "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(); + << "DIFFERENT CRC :" << vfatData.crc() << " " << vfatData.checkCRC(); } } @@ -166,7 +178,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve vfatData.setPhi(vfat_dc.localPhi); GEMDetId gemId = vfat_dc.detId; - int bx(vfatData.bc()); + int bx = vfatData.bc()-amcBx; for (int chan = 0; chan < VFATdata::nChannels; ++chan) { uint8_t chan0xf = 0; @@ -186,10 +198,11 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve GEMDigi digi(stripId, bx); + LogDebug("GEMRawToDigiModule") << "VFATbx:" << int(vfatData.bc()) << " lv1Id:" << int(vfatData.ec()); LogDebug("GEMRawToDigiModule") - << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi - << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() - << " bx:" << digi.bx(); + << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi + << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() + << " bx:" << digi.bx(); outGEMDigis.get()->insertDigi(gemId, digi); diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index 9409da674cbe0..95344cce2aae1 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -2,6 +2,7 @@ * \author J. Lee, Yechan Kang - UoS */ #include "EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" using namespace gem; @@ -12,6 +13,7 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amc13Event->setAMC13Header(*(++word)); // Readout out AMC headers + LogDebug("GEMRawToDigi") << "nAMC: "<< int(amc13Event->nAMC()); for (uint8_t i = 0; i < amc13Event->nAMC(); ++i) amc13Event->addAMCheader(*(++word)); @@ -22,11 +24,13 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amcData.setAMCheader2(*(++word)); amcData.setGEMeventHeader(*(++word)); + LogDebug("GEMRawToDigi") << "davCnt: "<< int(amcData.davCnt()); // Fill GEB for (uint8_t j = 0; j < amcData.davCnt(); ++j) { auto gebData = GEBdata(); gebData.setChamberHeader(*(++word)); + LogDebug("GEMRawToDigi") << "vfatWordCnt: "<< int(gebData.vfatWordCnt()); // Fill vfat for (uint16_t k = 0; k < gebData.vfatWordCnt() / 3; k++) { auto vfatData = VFATdata(); From 066c85943151405087a00ad3ad6a0c0415737ec3 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Mon, 19 Oct 2020 03:46:17 +0900 Subject: [PATCH 02/10] remove commented code --- EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc | 1 - EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 41011b3ed4745..62a5ea4f1910f 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -274,7 +274,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve uint64_t* w = reinterpret_cast(fedRawData.data()); for (const auto& word : words) { - //std::cout << std::bitset<64>(word) <(data); - - // const uint64_t* w = word; - // for (int i =0; i< nWords;i++) { - // std::cout << std::bitset<64>(*(w++)) << std::endl; - // } - auto amc13Event = gemRawToDigi_->convertWordToAMC13Event(word); if (amc13Event == nullptr){ From d7cec9eb41ec635e29670a6838f4b5983d0d16a2 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Tue, 20 Oct 2020 03:36:36 +0900 Subject: [PATCH 03/10] added more sanity checks --- DataFormats/GEMDigi/interface/AMC13Event.h | 4 + .../GEMRawToDigi/interface/GEMRawToDigi.h | 4 + .../plugins/GEMDigiToRawModule.cc | 65 +++++++-------- .../plugins/GEMRawToDigiModule.cc | 80 ++++++++++++++----- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 23 ++++-- 5 files changed, 117 insertions(+), 59 deletions(-) diff --git a/DataFormats/GEMDigi/interface/AMC13Event.h b/DataFormats/GEMDigi/interface/AMC13Event.h index 3f05e675acc48..3e44aba5b28be 100644 --- a/DataFormats/GEMDigi/interface/AMC13Event.h +++ b/DataFormats/GEMDigi/interface/AMC13Event.h @@ -82,6 +82,10 @@ namespace gem { void setCDFTrailer(uint64_t word) { cdft_ = word; } void setCDFTrailer(uint32_t EvtLength); uint64_t getCDFTrailer() const { return cdft_; } + uint32_t fragmentLength() const { return CDFTrailer{cdft_}.evtLength; } + uint16_t crc() const { return CDFTrailer{cdft_}.crcCDF; } + uint8_t evtStatus() const { return CDFTrailer{cdft_}.evtStat; } + uint8_t ttsBits() const { return CDFTrailer{cdft_}.tts; } int bxId() const { return (int8_t)CDFHeader{cdfh_}.bxId; } uint32_t lv1Id() const { return CDFHeader{cdfh_}.lv1Id; } diff --git a/EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h b/EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h index 4aa9e5d10019d..f5997127a4756 100644 --- a/EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h +++ b/EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h @@ -9,7 +9,11 @@ class GEMRawToDigi { public: std::unique_ptr convertWordToAMC13Event(const uint64_t* word); + bool vfatError() const { return vfatError_; } + bool amcError() const { return amcError_; } private: + bool vfatError_; + bool amcError_; }; #endif diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 62a5ea4f1910f..32d8035987e33 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -52,9 +52,9 @@ DEFINE_FWK_MODULE(GEMDigiToRawModule); using namespace gem; GEMDigiToRawModule::GEMDigiToRawModule(const edm::ParameterSet& pset) - : event_type_(pset.getParameter("eventType")), - digi_token(consumes(pset.getParameter("gemDigi"))), - useDBEMap_(pset.getParameter("useDBEMap")) { + : event_type_(pset.getParameter("eventType")), + digi_token(consumes(pset.getParameter("gemDigi"))), + useDBEMap_(pset.getParameter("useDBEMap")) { produces(); if (useDBEMap_) { gemEMapToken_ = esConsumes(); @@ -100,9 +100,11 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve std::vector> amc13Events; amc13Events.reserve(FEDNumbering::MAXGEMFEDID - FEDNumbering::MINGEMFEDID + 1); - uint32_t LV1_id = iEvent.id().event(); - uint16_t BX_id = iEvent.bunchCrossing(); - uint32_t OrN = iEvent.orbitNumber(); + int LV1_id = iEvent.id().event(); + int BX_id = iEvent.bunchCrossing(); + int OrN = iEvent.orbitNumber(); + LogDebug("GEMDigiToRawModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() + << " orbitNumber:" << iEvent.orbitNumber(); // making map of bx GEMDigiCollection // each bx will be saved as new AMC13Event, so GEMDigiCollection needs to be split into bx @@ -130,6 +132,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (uint8_t amcNum = 0; amcNum < GEMeMap::maxAMCs_; ++amcNum) { uint32_t amcSize = 0; std::unique_ptr amcData = std::make_unique(); + amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); for (uint8_t gebId = 0; gebId < GEMeMap::maxGEBs_; ++gebId) { std::unique_ptr gebData = std::make_unique(); @@ -144,14 +147,14 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve GEMROMapping::vfatDC vfat_dc = gemROMap->vfatPos(vfat_ec); GEMDetId gemId = vfat_dc.detId; uint16_t vfatId = vfat_ec.vfatAdd; - + for (auto const& gemBx : gemBxMap) { - int bc = BX_id + gemBx.first; - - bool hasDigi = false; + int bc = amcData->bx() + gemBx.first; + + bool hasDigi = false; uint64_t lsData = 0; ///(geb_dc.vfatVer, bc, 0, vfatId, lsData, msData); + LogDebug("GEMDigiToRawModule") + << "VFAT bx:" << bc << " bx:" << int(vfatData->bc()) << " orbitNumber:" << iEvent.orbitNumber(); gebData->addVFAT(*vfatData); } - - } // end of vfats in GEB + + } // end of vfats in GEB if (!gebData->vFATs()->empty()) { amcSize += 2; gebData->setChamberHeader(gebData->vFATs()->size() * 3, gebId); gebData->setChamberTrailer(LV1_id, BX_id, gebData->vFATs()->size() * 3); amcData->addGEB(*gebData); - } - } // end of GEB loop + } + } // end of GEB loop if (!amcData->gebs()->empty()) { amcSize += 5; amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); amcData->setAMCheader2(amcNum, OrN, 1); amcData->setGEMeventHeader(amcData->gebs()->size(), 0); - LogDebug("GEMDigiToRawModule") << "davCnt: "<< int(amcData->davCnt()); + LogDebug("GEMDigiToRawModule") << "davCnt: " << int(amcData->davCnt()); amc13Event->addAMCpayload(*amcData); // AMC header in AMC13Event - uint8_t Blk_No = 0; - uint8_t AMC_No = 0; - uint16_t BoardID = 0; - amc13Event->addAMCheader(amcSize, Blk_No, AMC_No, BoardID); - amc13EvtLength += amcSize + 1; // AMC data size + AMC header size + amc13Event->addAMCheader(amcSize, 0, amcNum, 0); + amc13EvtLength += amcSize + 1; // AMC data size + AMC header size } - } // end of AMC loop - + } // end of AMC loop + if (!amc13Event->getAMCpayloads()->empty()) { // CDFHeader amc13Event->setCDFHeader(event_type_, LV1_id, BX_id, fedId); @@ -225,14 +227,13 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve LogDebug("GEMDigiToRawModule") << " EvtLength: " << int(EvtLength); amc13Event->setCDFTrailer(EvtLength); - LogDebug("GEMDigiToRawModule") << "getAMCpayloads: "<< amc13Event->getAMCpayloads()->size(); - LogDebug("GEMDigiToRawModule") << " nAMC: "<< int(amc13Event->nAMC()) - << " LV1_id: "<< int(LV1_id) - << " BX_id: "<< int(BX_id); - + LogDebug("GEMDigiToRawModule") << "getAMCpayloads: " << amc13Event->getAMCpayloads()->size(); + LogDebug("GEMDigiToRawModule") << " nAMC: " << int(amc13Event->nAMC()) << " LV1_id: " << int(LV1_id) + << " BX_id: " << int(BX_id); + amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data - }// end of FED loop + } // end of FED loop // read out amc13Events into fedRawData for (const auto& amc13e : amc13Events) { diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index 6522d4dc163f2..c9ef35651d35c 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -10,6 +10,7 @@ #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/FEDRawData/interface/FEDNumbering.h" #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h" +#include "DataFormats/FEDRawData/interface/FEDTrailer.h" #include "DataFormats/GEMDigi/interface/AMC13Event.h" #include "DataFormats/GEMDigi/interface/GEMAMC13EventCollection.h" #include "DataFormats/GEMDigi/interface/GEMAMCdataCollection.h" @@ -57,10 +58,10 @@ DEFINE_FWK_MODULE(GEMRawToDigiModule); using namespace gem; GEMRawToDigiModule::GEMRawToDigiModule(const edm::ParameterSet& pset) - : fed_token(consumes(pset.getParameter("InputLabel"))), - useDBEMap_(pset.getParameter("useDBEMap")), - unPackStatusDigis_(pset.getParameter("unPackStatusDigis")), - gemRawToDigi_(std::make_unique()) { + : fed_token(consumes(pset.getParameter("InputLabel"))), + useDBEMap_(pset.getParameter("useDBEMap")), + unPackStatusDigis_(pset.getParameter("unPackStatusDigis")), + gemRawToDigi_(std::make_unique()) { produces(); if (unPackStatusDigis_) { produces("vfatStatus"); @@ -118,28 +119,66 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve if (nWords < 5) continue; - + + // trailer checks + FEDTrailer trailer(fedData.data() + fedData.size() - FEDTrailer::length); + if (not trailer.check()) { + edm::LogWarning("GEMRawToDigiModule") << " FED trailer check failed\n"; + } + if (trailer.fragmentLength() * sizeof(uint64_t) != fedData.size()) { + edm::LogWarning("GEMRawToDigiModule") << " FED fragment size mismatch: " << trailer.fragmentLength() + << " (fragment length) vs " << nWords << " (data size) words\n"; + } + const unsigned char* data = fedData.data(); const uint64_t* word = reinterpret_cast(data); auto amc13Event = gemRawToDigi_->convertWordToAMC13Event(word); - if (amc13Event == nullptr){ - LogDebug("GEMRawToDigiModule") << "amc13Event does not exists"; + if (amc13Event == nullptr) { + LogDebug("GEMRawToDigiModule") << "amc13Event FAILED to unpack"; continue; } - LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() << " orbitNumber:" << iEvent.orbitNumber(); - LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) << " orbitNumber:" << amc13Event->orbitNumber(); - + if (gemRawToDigi_->amcError() || gemRawToDigi_->vfatError()) { + edm::LogWarning("GEMRawToDigiModule") + << " amcError:" << gemRawToDigi_->amcError() << " vfatError:" << gemRawToDigi_->vfatError(); + } + // compare trailers + if (amc13Event->fragmentLength() != trailer.fragmentLength()) { + edm::LogWarning("GEMRawToDigiModule") << " fragmentLength miss match"; + } + if (amc13Event->crc() != trailer.crc()) { + edm::LogWarning("GEMRawToDigiModule") << " crc miss match"; + } + if (amc13Event->evtStatus() != trailer.evtStatus()) { + edm::LogWarning("GEMRawToDigiModule") << " evtStatus miss match"; + } + if (amc13Event->ttsBits() != trailer.ttsBits()) { + edm::LogWarning("GEMRawToDigiModule") << " ttsBits miss match"; + } + + LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() + << " orbitNumber:" << iEvent.orbitNumber(); + LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) + << " orbitNumber:" << amc13Event->orbitNumber(); + // Read AMC data for (auto amcData : *(amc13Event->getAMCpayloads())) { uint16_t amcBx = amcData.bx(); uint8_t amcNum = amcData.amcNum(); - LogDebug("GEMRawToDigiModule") << "AMC bx:" << int(amcData.bx()) << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); + LogDebug("GEMRawToDigiModule") << "AMC no.:" << int(amcData.amcNum()) << " bx:" << int(amcData.bx()) + << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); // Read GEB data for (auto gebData : *amcData.gebs()) { uint8_t gebId = gebData.inputID(); GEMROMapping::chamEC geb_ec = {fedId, amcNum, gebId}; + + // check if Chamber exists. + if (!gemROMap->isValidChamber(geb_ec)) { + edm::LogWarning("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId); + continue; + } + GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec); GEMDetId gemChId = geb_dc.detId; LogDebug("GEMRawToDigiModule") << "GEB bx:" << int(gebData.bcOH()) << " lv1Id:" << int(gebData.ecOH()); @@ -153,18 +192,19 @@ 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()); + << "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") - << "Quality " << int(vfatData.quality()) << " b1010 " << int(vfatData.b1010()) << " b1100 " - << int(vfatData.b1100()) << " b1110 " << int(vfatData.b1110()); + << "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(); + << "DIFFERENT CRC :" << vfatData.crc() << " " << vfatData.checkCRC(); } } @@ -172,7 +212,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve vfatData.setPhi(vfat_dc.localPhi); GEMDetId gemId = vfat_dc.detId; - int bx = vfatData.bc()-amcBx; + int bx = vfatData.bc() - amcBx; for (int chan = 0; chan < VFATdata::nChannels; ++chan) { uint8_t chan0xf = 0; @@ -194,9 +234,9 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve LogDebug("GEMRawToDigiModule") << "VFATbx:" << int(vfatData.bc()) << " lv1Id:" << int(vfatData.ec()); LogDebug("GEMRawToDigiModule") - << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi - << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() - << " bx:" << digi.bx(); + << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi + << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() + << " bx:" << digi.bx(); outGEMDigis.get()->insertDigi(gemId, digi); diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index 95344cce2aae1..df6731384b191 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -7,13 +7,16 @@ using namespace gem; std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t* word) { + vfatError_ = false; + amcError_ = false; + auto amc13Event = std::make_unique(); amc13Event->setCDFHeader(*word); amc13Event->setAMC13Header(*(++word)); // Readout out AMC headers - LogDebug("GEMRawToDigi") << "nAMC: "<< int(amc13Event->nAMC()); + LogDebug("GEMRawToDigi") << "nAMC: " << int(amc13Event->nAMC()); for (uint8_t i = 0; i < amc13Event->nAMC(); ++i) amc13Event->addAMCheader(*(++word)); @@ -24,13 +27,13 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amcData.setAMCheader2(*(++word)); amcData.setGEMeventHeader(*(++word)); - LogDebug("GEMRawToDigi") << "davCnt: "<< int(amcData.davCnt()); + LogDebug("GEMRawToDigi") << "davCnt: " << int(amcData.davCnt()); // Fill GEB for (uint8_t j = 0; j < amcData.davCnt(); ++j) { auto gebData = GEBdata(); gebData.setChamberHeader(*(++word)); - LogDebug("GEMRawToDigi") << "vfatWordCnt: "<< int(gebData.vfatWordCnt()); + LogDebug("GEMRawToDigi") << "vfatWordCnt: " << int(gebData.vfatWordCnt()); // Fill vfat for (uint16_t k = 0; k < gebData.vfatWordCnt() / 3; k++) { auto vfatData = VFATdata(); @@ -42,16 +45,22 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t } // end of vfat loop gebData.setChamberTrailer(*(++word)); - if (gebData.vfatWordCnt() != gebData.vfatWordCntT()) - return nullptr; + if (gebData.vfatWordCnt() != gebData.vfatWordCntT()) { + vfatError_ = true; + edm::LogWarning("GEMRawToDigi") << "VFAT word count miss match between header and trailer"; + } amcData.addGEB(gebData); } // end of geb loop amcData.setGEMeventTrailer(*(++word)); amcData.setAMCTrailer(*(++word)); - if (amc13Event->getAMCsize(i) != amcData.dataLength()) - return nullptr; + LogDebug("GEMRawToDigi") << "amcData.dataLength(): " << int(amcData.dataLength()) + << " amc13Event->getAMCsize(i): " << int(amc13Event->getAMCsize(i)); + if (amc13Event->getAMCsize(i) != amcData.dataLength()) { + amcError_ = true; + edm::LogWarning("GEMRawToDigi") << "AMC size miss match"; + } amc13Event->addAMCpayload(amcData); } // end of amc loop From ff40bab0807069026917f2b82f528e57b1d3d0da Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Tue, 20 Oct 2020 09:43:13 +0900 Subject: [PATCH 04/10] typo --- EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc | 8 ++++---- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index c9ef35651d35c..b41b7cb7e5d6f 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -144,16 +144,16 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } // compare trailers if (amc13Event->fragmentLength() != trailer.fragmentLength()) { - edm::LogWarning("GEMRawToDigiModule") << " fragmentLength miss match"; + edm::LogWarning("GEMRawToDigiModule") << " fragmentLength mismatch"; } if (amc13Event->crc() != trailer.crc()) { - edm::LogWarning("GEMRawToDigiModule") << " crc miss match"; + edm::LogWarning("GEMRawToDigiModule") << " crc mismatch"; } if (amc13Event->evtStatus() != trailer.evtStatus()) { - edm::LogWarning("GEMRawToDigiModule") << " evtStatus miss match"; + edm::LogWarning("GEMRawToDigiModule") << " evtStatus mismatch"; } if (amc13Event->ttsBits() != trailer.ttsBits()) { - edm::LogWarning("GEMRawToDigiModule") << " ttsBits miss match"; + edm::LogWarning("GEMRawToDigiModule") << " ttsBits mismatch"; } LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index df6731384b191..623cfa82494d3 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -47,7 +47,8 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t gebData.setChamberTrailer(*(++word)); if (gebData.vfatWordCnt() != gebData.vfatWordCntT()) { vfatError_ = true; - edm::LogWarning("GEMRawToDigi") << "VFAT word count miss match between header and trailer"; + edm::LogWarning("GEMRawToDigi") << "VFAT word count mismatch between header:" << gebData.vfatWordCnt() + << " and trailer:" << gebData.vfatWordCntT(); } amcData.addGEB(gebData); @@ -55,11 +56,10 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amcData.setGEMeventTrailer(*(++word)); amcData.setAMCTrailer(*(++word)); - LogDebug("GEMRawToDigi") << "amcData.dataLength(): " << int(amcData.dataLength()) - << " amc13Event->getAMCsize(i): " << int(amc13Event->getAMCsize(i)); if (amc13Event->getAMCsize(i) != amcData.dataLength()) { amcError_ = true; - edm::LogWarning("GEMRawToDigi") << "AMC size miss match"; + edm::LogWarning("GEMRawToDigi") << "AMC size mismatch - AMC13:" << int(amc13Event->getAMCsize(i)) + << " AMC:" << int(amcData.dataLength()); } amc13Event->addAMCpayload(amcData); From d89b13e838ed72bed7ad15cf53fb757823277ea7 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Wed, 21 Oct 2020 05:48:51 +0900 Subject: [PATCH 05/10] reduced warnings to 1 per FED --- DataFormats/GEMDigi/interface/AMC13Event.h | 12 ++- .../plugins/GEMDigiToRawModule.cc | 19 +--- .../plugins/GEMRawToDigiModule.cc | 86 +++++++++---------- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 7 -- 4 files changed, 54 insertions(+), 70 deletions(-) diff --git a/DataFormats/GEMDigi/interface/AMC13Event.h b/DataFormats/GEMDigi/interface/AMC13Event.h index 3e44aba5b28be..6ccfe5d991189 100644 --- a/DataFormats/GEMDigi/interface/AMC13Event.h +++ b/DataFormats/GEMDigi/interface/AMC13Event.h @@ -39,9 +39,15 @@ namespace gem { union CDFTrailer { uint64_t word; struct { - uint64_t tts : 8; // tts (first 4 bits) - uint64_t evtStat : 4; // event status - uint64_t crcCDF : 20; // CDF crc (first 16 bits) + uint64_t res1 : 2; + uint64_t crcModified : 1; + uint64_t moreTrailers : 1; + uint64_t tts : 4; // tts + uint64_t evtStat : 4; // event status + uint64_t res2 : 2; + uint64_t slinkError : 1; + uint64_t wrongFedId : 1; + uint64_t crcCDF : 16; // CDF crc uint64_t evtLength : 24; // event length uint64_t eventType : 4; // Event Type uint64_t cbA : 4; // 0xA diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 32d8035987e33..036c2f8170b89 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -103,8 +103,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve int LV1_id = iEvent.id().event(); int BX_id = iEvent.bunchCrossing(); int OrN = iEvent.orbitNumber(); - LogDebug("GEMDigiToRawModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() - << " orbitNumber:" << iEvent.orbitNumber(); // making map of bx GEMDigiCollection // each bx will be saved as new AMC13Event, so GEMDigiCollection needs to be split into bx @@ -175,10 +173,9 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve else msData |= 1UL << (chMap.chNum - 64); - LogDebug("GEMDigiToRawModule") - << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) - << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId - << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); + LogDebug("") << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) + << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId + << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); } if (!hasDigi) @@ -186,8 +183,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // only make vfat with hits amcSize += 3; auto vfatData = std::make_unique(geb_dc.vfatVer, bc, 0, vfatId, lsData, msData); - LogDebug("GEMDigiToRawModule") - << "VFAT bx:" << bc << " bx:" << int(vfatData->bc()) << " orbitNumber:" << iEvent.orbitNumber(); gebData->addVFAT(*vfatData); } @@ -206,7 +201,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); amcData->setAMCheader2(amcNum, OrN, 1); amcData->setGEMeventHeader(amcData->gebs()->size(), 0); - LogDebug("GEMDigiToRawModule") << "davCnt: " << int(amcData->davCnt()); amc13Event->addAMCpayload(*amcData); // AMC header in AMC13Event amc13Event->addAMCheader(amcSize, 0, amcNum, 0); @@ -224,13 +218,8 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve amc13Event->setAMC13Trailer(BX_id, LV1_id, BX_id); //CDF trailer uint32_t EvtLength = amc13EvtLength + 4; // 2 header and 2 trailer - LogDebug("GEMDigiToRawModule") << " EvtLength: " << int(EvtLength); amc13Event->setCDFTrailer(EvtLength); - LogDebug("GEMDigiToRawModule") << "getAMCpayloads: " << amc13Event->getAMCpayloads()->size(); - LogDebug("GEMDigiToRawModule") << " nAMC: " << int(amc13Event->nAMC()) << " LV1_id: " << int(LV1_id) - << " BX_id: " << int(BX_id); - amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data } // end of FED loop @@ -277,7 +266,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (const auto& word : words) { *(w++) = word; } - LogDebug("GEMDigiToRawModule") << " words " << words.size(); + LogDebug("") << " words " << words.size(); } iEvent.put(std::move(fedRawDataCol)); diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index b41b7cb7e5d6f..c38953816623d 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -115,19 +115,17 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve const FEDRawData& fedData = fed_buffers->FEDData(fedId); int nWords = fedData.size() / sizeof(uint64_t); - LogDebug("GEMRawToDigiModule") << "fedId:" << fedId << " words: " << nWords; + LogDebug("") << "fedId:" << fedId << " words: " << nWords; if (nWords < 5) continue; // trailer checks FEDTrailer trailer(fedData.data() + fedData.size() - FEDTrailer::length); - if (not trailer.check()) { - edm::LogWarning("GEMRawToDigiModule") << " FED trailer check failed\n"; - } - if (trailer.fragmentLength() * sizeof(uint64_t) != fedData.size()) { - edm::LogWarning("GEMRawToDigiModule") << " FED fragment size mismatch: " << trailer.fragmentLength() - << " (fragment length) vs " << nWords << " (data size) words\n"; + + bool failTrailerCheck = false, failTrailerMatch = false; + if (!trailer.check() || (trailer.fragmentLength() * sizeof(uint64_t) != fedData.size())) { + failTrailerCheck = true; } const unsigned char* data = fedData.data(); @@ -135,38 +133,34 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve auto amc13Event = gemRawToDigi_->convertWordToAMC13Event(word); if (amc13Event == nullptr) { - LogDebug("GEMRawToDigiModule") << "amc13Event FAILED to unpack"; + LogDebug("") << "AMC13Event FAILED to be produced"; continue; } - if (gemRawToDigi_->amcError() || gemRawToDigi_->vfatError()) { - edm::LogWarning("GEMRawToDigiModule") - << " amcError:" << gemRawToDigi_->amcError() << " vfatError:" << gemRawToDigi_->vfatError(); - } - // compare trailers - if (amc13Event->fragmentLength() != trailer.fragmentLength()) { - edm::LogWarning("GEMRawToDigiModule") << " fragmentLength mismatch"; - } - if (amc13Event->crc() != trailer.crc()) { - edm::LogWarning("GEMRawToDigiModule") << " crc mismatch"; - } - if (amc13Event->evtStatus() != trailer.evtStatus()) { - edm::LogWarning("GEMRawToDigiModule") << " evtStatus mismatch"; - } - if (amc13Event->ttsBits() != trailer.ttsBits()) { - edm::LogWarning("GEMRawToDigiModule") << " ttsBits mismatch"; + + // compare trailers found by last word of fedData.size() and gemRawToDigi + // caused by error in no. of AMC, GEB or VFAT stored in FEDs + if ((amc13Event->fragmentLength() != trailer.fragmentLength()) || (amc13Event->crc() != trailer.crc())) + failTrailerMatch = true; + + LogDebug("") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() + << " orbitNumber:" << iEvent.orbitNumber(); + LogDebug("") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) + << " orbitNumber:" << amc13Event->orbitNumber(); + + if (failTrailerCheck || failTrailerMatch) { + // best to skip these events since FED is most likely corrupt + edm::LogWarning("") << "FED trailer: fail check? " << failTrailerCheck << " fail match? " << failTrailerMatch; + continue; } - LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() - << " orbitNumber:" << iEvent.orbitNumber(); - LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) - << " orbitNumber:" << amc13Event->orbitNumber(); + bool unknownChamber = false, unknownVFat = false, badVfat = false; // Read AMC data for (auto amcData : *(amc13Event->getAMCpayloads())) { uint16_t amcBx = amcData.bx(); uint8_t amcNum = amcData.amcNum(); - LogDebug("GEMRawToDigiModule") << "AMC no.:" << int(amcData.amcNum()) << " bx:" << int(amcData.bx()) - << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); + LogDebug("") << "AMC no.:" << int(amcData.amcNum()) << " bx:" << int(amcData.bx()) + << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); // Read GEB data for (auto gebData : *amcData.gebs()) { @@ -175,13 +169,13 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // check if Chamber exists. if (!gemROMap->isValidChamber(geb_ec)) { - edm::LogWarning("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId); + unknownChamber = true; + LogDebug("") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId); continue; } GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec); GEMDetId gemChId = geb_dc.detId; - LogDebug("GEMRawToDigiModule") << "GEB bx:" << int(gebData.bcOH()) << " lv1Id:" << int(gebData.ecOH()); //Read vfat data for (auto vfatData : *gebData.vFATs()) { @@ -191,20 +185,19 @@ 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("") << "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") - << "Quality " << int(vfatData.quality()) << " b1010 " << int(vfatData.b1010()) << " b1100 " - << int(vfatData.b1100()) << " b1110 " << int(vfatData.b1110()); + badVfat = true; + LogDebug("") << "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("") << "DIFFERENT CRC :" << vfatData.crc() << " " << vfatData.checkCRC(); } } @@ -232,11 +225,9 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve GEMDigi digi(stripId, bx); - LogDebug("GEMRawToDigiModule") << "VFATbx:" << int(vfatData.bc()) << " lv1Id:" << int(vfatData.ec()); - LogDebug("GEMRawToDigiModule") - << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi - << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() - << " bx:" << digi.bx(); + LogDebug("") << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) + << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId + << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); outGEMDigis.get()->insertDigi(gemId, digi); @@ -267,6 +258,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("") << "unpacking error: unknown Chamber " << unknownChamber << " unknown VFat " << unknownVFat + << " bad VFat " << badVfat; + } + } // end of amc13Event iEvent.put(std::move(outGEMDigis)); diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index 623cfa82494d3..c906553669b57 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -16,7 +16,6 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amc13Event->setAMC13Header(*(++word)); // Readout out AMC headers - LogDebug("GEMRawToDigi") << "nAMC: " << int(amc13Event->nAMC()); for (uint8_t i = 0; i < amc13Event->nAMC(); ++i) amc13Event->addAMCheader(*(++word)); @@ -27,13 +26,11 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amcData.setAMCheader2(*(++word)); amcData.setGEMeventHeader(*(++word)); - LogDebug("GEMRawToDigi") << "davCnt: " << int(amcData.davCnt()); // Fill GEB for (uint8_t j = 0; j < amcData.davCnt(); ++j) { auto gebData = GEBdata(); gebData.setChamberHeader(*(++word)); - LogDebug("GEMRawToDigi") << "vfatWordCnt: " << int(gebData.vfatWordCnt()); // Fill vfat for (uint16_t k = 0; k < gebData.vfatWordCnt() / 3; k++) { auto vfatData = VFATdata(); @@ -47,8 +44,6 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t gebData.setChamberTrailer(*(++word)); if (gebData.vfatWordCnt() != gebData.vfatWordCntT()) { vfatError_ = true; - edm::LogWarning("GEMRawToDigi") << "VFAT word count mismatch between header:" << gebData.vfatWordCnt() - << " and trailer:" << gebData.vfatWordCntT(); } amcData.addGEB(gebData); @@ -58,8 +53,6 @@ std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t amcData.setAMCTrailer(*(++word)); if (amc13Event->getAMCsize(i) != amcData.dataLength()) { amcError_ = true; - edm::LogWarning("GEMRawToDigi") << "AMC size mismatch - AMC13:" << int(amc13Event->getAMCsize(i)) - << " AMC:" << int(amcData.dataLength()); } amc13Event->addAMCpayload(amcData); From deaa6455dc7c7e1f754a787ceceb77b952efac1a Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Wed, 21 Oct 2020 17:13:41 +0900 Subject: [PATCH 06/10] added back edm::Log category strings --- .../plugins/GEMDigiToRawModule.cc | 9 ++-- .../plugins/GEMRawToDigiModule.cc | 43 ++++++++++--------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 036c2f8170b89..3c181e4315562 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -173,9 +173,10 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve else msData |= 1UL << (chMap.chNum - 64); - LogDebug("") << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) - << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId - << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); + LogDebug("GEMDigiToRawModule") + << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) + << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId + << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); } if (!hasDigi) @@ -266,7 +267,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (const auto& word : words) { *(w++) = word; } - LogDebug("") << " words " << words.size(); + LogDebug("GEMDigiToRawModule") << " words " << words.size(); } iEvent.put(std::move(fedRawDataCol)); diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index c38953816623d..b409745e6c407 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -115,7 +115,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve const FEDRawData& fedData = fed_buffers->FEDData(fedId); int nWords = fedData.size() / sizeof(uint64_t); - LogDebug("") << "fedId:" << fedId << " words: " << nWords; + LogDebug("GEMRawToDigiModule") << "fedId:" << fedId << " words: " << nWords; if (nWords < 5) continue; @@ -133,7 +133,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve auto amc13Event = gemRawToDigi_->convertWordToAMC13Event(word); if (amc13Event == nullptr) { - LogDebug("") << "AMC13Event FAILED to be produced"; + LogDebug("GEMRawToDigiModule") << "AMC13Event FAILED to be produced"; continue; } @@ -142,14 +142,15 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve if ((amc13Event->fragmentLength() != trailer.fragmentLength()) || (amc13Event->crc() != trailer.crc())) failTrailerMatch = true; - LogDebug("") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() - << " orbitNumber:" << iEvent.orbitNumber(); - LogDebug("") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) - << " orbitNumber:" << amc13Event->orbitNumber(); + LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event() + << " orbitNumber:" << iEvent.orbitNumber(); + LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13Event->bxId() << " lv1Id:" << int(amc13Event->lv1Id()) + << " orbitNumber:" << amc13Event->orbitNumber(); if (failTrailerCheck || failTrailerMatch) { // best to skip these events since FED is most likely corrupt - edm::LogWarning("") << "FED trailer: fail check? " << failTrailerCheck << " fail match? " << failTrailerMatch; + edm::LogWarning("GEMRawToDigiModule") + << "FED trailer: fail check? " << failTrailerCheck << " fail match? " << failTrailerMatch; continue; } @@ -159,8 +160,8 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (auto amcData : *(amc13Event->getAMCpayloads())) { uint16_t amcBx = amcData.bx(); uint8_t amcNum = amcData.amcNum(); - LogDebug("") << "AMC no.:" << int(amcData.amcNum()) << " bx:" << int(amcData.bx()) - << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); + LogDebug("GEMRawToDigiModule") << "AMC no.:" << int(amcData.amcNum()) << " bx:" << int(amcData.bx()) + << " lv1Id:" << int(amcData.l1A()) << " orbitNumber:" << int(amcData.orbitNum()); // Read GEB data for (auto gebData : *amcData.gebs()) { @@ -170,7 +171,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // check if Chamber exists. if (!gemROMap->isValidChamber(geb_ec)) { unknownChamber = true; - LogDebug("") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId); + LogDebug("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId); continue; } @@ -186,18 +187,19 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // check if ChipID exists. if (!gemROMap->isValidChipID(vfat_ec)) { unknownVFat = true; - LogDebug("") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId) << " vfatId " << int(vfatId) - << " vfat Pos " << int(vfatData.position()); + LogDebug("GEMRawToDigiModule") << "InValid: amcNum " << int(amcNum) << " gebId " << int(gebId) << " vfatId " + << int(vfatId) << " vfat Pos " << int(vfatData.position()); continue; } // check vfat data if (vfatData.quality()) { badVfat = true; - LogDebug("") << "Quality " << int(vfatData.quality()) << " b1010 " << int(vfatData.b1010()) << " b1100 " - << int(vfatData.b1100()) << " b1110 " << int(vfatData.b1110()); + LogDebug("GEMRawToDigiModule") + << "Quality " << int(vfatData.quality()) << " b1010 " << int(vfatData.b1010()) << " b1100 " + << int(vfatData.b1100()) << " b1110 " << int(vfatData.b1110()); if (vfatData.crc() != vfatData.checkCRC()) { - LogDebug("") << "DIFFERENT CRC :" << vfatData.crc() << " " << vfatData.checkCRC(); + LogDebug("GEMRawToDigiModule") << "DIFFERENT CRC :" << vfatData.crc() << " " << vfatData.checkCRC(); } } @@ -225,9 +227,10 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve GEMDigi digi(stripId, bx); - LogDebug("") << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) - << " vfat:" << vfat_dc.localPhi << ",type: " << vfat_dc.vfatType << " id:" << gemId - << " ch:" << chMap.chNum << " st:" << digi.strip() << " bx:" << digi.bx(); + LogDebug("GEMRawToDigiModule") + << " fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat:" << vfat_dc.localPhi + << ",type: " << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip() + << " bx:" << digi.bx(); outGEMDigis.get()->insertDigi(gemId, digi); @@ -259,8 +262,8 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } if (unknownChamber || unknownVFat || badVfat) { - edm::LogWarning("") << "unpacking error: unknown Chamber " << unknownChamber << " unknown VFat " << unknownVFat - << " bad VFat " << badVfat; + edm::LogWarning("GEMRawToDigiModule") << "unpacking error: unknown Chamber " << unknownChamber << " unknown VFat " + << unknownVFat << " bad VFat " << badVfat; } } // end of amc13Event From ef24cdce1496ee59f63c23ecff1ae666b4da7876 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Thu, 22 Oct 2020 03:35:14 +0900 Subject: [PATCH 07/10] fix bx issues for mc using vfat v2 --- EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc | 3 +-- EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 3c181e4315562..c620328127bd6 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -101,7 +101,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve amc13Events.reserve(FEDNumbering::MAXGEMFEDID - FEDNumbering::MINGEMFEDID + 1); int LV1_id = iEvent.id().event(); - int BX_id = iEvent.bunchCrossing(); + uint8_t BX_id(iEvent.bunchCrossing()); int OrN = iEvent.orbitNumber(); // making map of bx GEMDigiCollection @@ -130,7 +130,6 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve for (uint8_t amcNum = 0; amcNum < GEMeMap::maxAMCs_; ++amcNum) { uint32_t amcSize = 0; std::unique_ptr amcData = std::make_unique(); - amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); for (uint8_t gebId = 0; gebId < GEMeMap::maxGEBs_; ++gebId) { std::unique_ptr gebData = std::make_unique(); diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index b409745e6c407..4aea0fc923bb9 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -207,7 +207,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve vfatData.setPhi(vfat_dc.localPhi); GEMDetId gemId = vfat_dc.detId; - int bx = vfatData.bc() - amcBx; + int bx(vfatData.bc() - amcBx); for (int chan = 0; chan < VFATdata::nChannels; ++chan) { uint8_t chan0xf = 0; From 9eaf2ce80705a71c1fb386cc254c90a72cff91ed Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Thu, 22 Oct 2020 22:13:20 +0900 Subject: [PATCH 08/10] GEMDigiToRawModule - always make AMCs --- .../GEMObjects/interface/GEMROMapping.h | 2 +- CondFormats/GEMObjects/interface/GEMeMap.h | 8 +++-- DataFormats/GEMDigi/interface/AMCdata.h | 2 +- .../plugins/GEMDigiToRawModule.cc | 30 +++++++++---------- .../plugins/GEMRawToDigiModule.cc | 4 +-- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 3 +- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/CondFormats/GEMObjects/interface/GEMROMapping.h b/CondFormats/GEMObjects/interface/GEMROMapping.h index dfd1b86ba0664..d904951513b88 100644 --- a/CondFormats/GEMObjects/interface/GEMROMapping.h +++ b/CondFormats/GEMObjects/interface/GEMROMapping.h @@ -7,7 +7,7 @@ class GEMROMapping { public: struct chamEC { - unsigned int fedId; + int fedId; uint8_t amcNum; uint8_t gebId; bool operator<(const chamEC& r) const { diff --git a/CondFormats/GEMObjects/interface/GEMeMap.h b/CondFormats/GEMObjects/interface/GEMeMap.h index f662690ee0d52..00f9ec7af5a36 100644 --- a/CondFormats/GEMObjects/interface/GEMeMap.h +++ b/CondFormats/GEMObjects/interface/GEMeMap.h @@ -19,7 +19,7 @@ class GEMeMap { void convertDummy(GEMROMapping& romap); struct GEMChamberMap { - std::vector fedId; + std::vector fedId; std::vector amcNum; std::vector gebId; std::vector gemNum; @@ -59,9 +59,11 @@ class GEMeMap { static const int vfatVerV3_ = 3; // VFAT v3 static const int vfatTypeV3_ = 11; // VFAT v3 static const int chipIdMask_ = 0xfff; // chipId mask for 12 bits + static const int maxAMCs_ = 15; // 4 bits for AMC no. static const int maxGEBs_ = 32; // 5 bits for GEB id - static const int maxAMCs_ = 16; // 4 bits for AMC no. - static const int maxVFatGE0_ = 12; // vFat per eta partition, not known yet for ME0 + static const int maxGEB0_ = 30; // Not known yet for ME0 + static const int maxGEB1_ = 12; // 12 for GE11 + static const int maxVFatGE0_ = 3; // vFat per eta partition, not known yet for ME0 static const int maxVFatGE11_ = 3; // vFat per eta partition in GE11 static const int maxVFatGE21_ = 6; // vFat per eta partition in GE21 static const int maxChan_ = 128; // channels per vFat diff --git a/DataFormats/GEMDigi/interface/AMCdata.h b/DataFormats/GEMDigi/interface/AMCdata.h index 016c0e077d859..2835303916da7 100644 --- a/DataFormats/GEMDigi/interface/AMCdata.h +++ b/DataFormats/GEMDigi/interface/AMCdata.h @@ -92,7 +92,7 @@ namespace gem { uint8_t amcNum() const { return AMCheader1{amch1_}.AMCnum; } uint16_t boardId() const { return AMCheader2{amch2_}.boardID; } - uint16_t orbitNum() const { return AMCheader2{amch2_}.orbitNum; } + int16_t orbitNum() const { return AMCheader2{amch2_}.orbitNum; } uint8_t param3() const { return AMCheader2{amch2_}.param3; } uint8_t param2() const { return AMCheader2{amch2_}.param2; } uint8_t param1() const { return AMCheader2{amch2_}.param1; } diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index c620328127bd6..e24a0c7dc0bad 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -123,7 +123,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } } - for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { + for (int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { uint32_t amc13EvtLength = 0; std::unique_ptr amc13Event = std::make_unique(); @@ -146,7 +146,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve uint16_t vfatId = vfat_ec.vfatAdd; for (auto const& gemBx : gemBxMap) { - int bc = amcData->bx() + gemBx.first; + int bc = BX_id + gemBx.first; bool hasDigi = false; uint64_t lsData = 0; ///vFATs()->empty()) { + if (!gebData->vFATs()->empty()) { amcSize += 2; gebData->setChamberHeader(gebData->vFATs()->size() * 3, gebId); gebData->setChamberTrailer(LV1_id, BX_id, gebData->vFATs()->size() * 3); amcData->addGEB(*gebData); - } + } } // end of GEB loop - if (!amcData->gebs()->empty()) { - amcSize += 5; - amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); - amcData->setAMCheader2(amcNum, OrN, 1); - amcData->setGEMeventHeader(amcData->gebs()->size(), 0); - amc13Event->addAMCpayload(*amcData); - // AMC header in AMC13Event - amc13Event->addAMCheader(amcSize, 0, amcNum, 0); - amc13EvtLength += amcSize + 1; // AMC data size + AMC header size - } + amcSize += 5; + amcData->setAMCheader1(amcSize, BX_id, LV1_id, amcNum); + amcData->setAMCheader2(amcNum, OrN, 1); + amcData->setGEMeventHeader(amcData->gebs()->size(), 0); + amc13Event->addAMCpayload(*amcData); + // AMC header in AMC13Event + amc13Event->addAMCheader(amcSize, 0, amcNum, 0); + amc13EvtLength += amcSize + 1; // AMC data size + AMC header size } // end of AMC loop @@ -218,9 +216,9 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve amc13Event->setAMC13Trailer(BX_id, LV1_id, BX_id); //CDF trailer uint32_t EvtLength = amc13EvtLength + 4; // 2 header and 2 trailer - amc13Event->setCDFTrailer(EvtLength); - amc13Events.emplace_back(std::move(amc13Event)); + + amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data } // end of FED loop diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index 4aea0fc923bb9..82ba47fe9148f 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -111,7 +111,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve auto gemROMap = runCache(iEvent.getRun().index()); - for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { + for (int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { const FEDRawData& fedData = fed_buffers->FEDData(fedId); int nWords = fedData.size() / sizeof(uint64_t); @@ -122,7 +122,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // trailer checks FEDTrailer trailer(fedData.data() + fedData.size() - FEDTrailer::length); - + bool failTrailerCheck = false, failTrailerMatch = false; if (!trailer.check() || (trailer.fragmentLength() * sizeof(uint64_t) != fedData.size())) { failTrailerCheck = true; diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index c906553669b57..7690fc41d7a0a 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -3,7 +3,8 @@ */ #include "EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - +// temp +#include using namespace gem; std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t* word) { From 7433f4cbeac77d60188758fca5f1d8fa3d2a2973 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Thu, 22 Oct 2020 22:17:08 +0900 Subject: [PATCH 09/10] code-checks --- CondFormats/GEMObjects/interface/GEMeMap.h | 2 +- EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc | 8 ++++---- EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CondFormats/GEMObjects/interface/GEMeMap.h b/CondFormats/GEMObjects/interface/GEMeMap.h index 00f9ec7af5a36..cc5e5834dbce2 100644 --- a/CondFormats/GEMObjects/interface/GEMeMap.h +++ b/CondFormats/GEMObjects/interface/GEMeMap.h @@ -63,7 +63,7 @@ class GEMeMap { static const int maxGEBs_ = 32; // 5 bits for GEB id static const int maxGEB0_ = 30; // Not known yet for ME0 static const int maxGEB1_ = 12; // 12 for GE11 - static const int maxVFatGE0_ = 3; // vFat per eta partition, not known yet for ME0 + static const int maxVFatGE0_ = 3; // vFat per eta partition, not known yet for ME0 static const int maxVFatGE11_ = 3; // vFat per eta partition in GE11 static const int maxVFatGE21_ = 6; // vFat per eta partition in GE21 static const int maxChan_ = 128; // channels per vFat diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index e24a0c7dc0bad..5f0b3256ccec5 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -188,12 +188,12 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } // end of vfats in GEB - if (!gebData->vFATs()->empty()) { + if (!gebData->vFATs()->empty()) { amcSize += 2; gebData->setChamberHeader(gebData->vFATs()->size() * 3, gebId); gebData->setChamberTrailer(LV1_id, BX_id, gebData->vFATs()->size() * 3); amcData->addGEB(*gebData); - } + } } // end of GEB loop amcSize += 5; @@ -217,8 +217,8 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve //CDF trailer uint32_t EvtLength = amc13EvtLength + 4; // 2 header and 2 trailer amc13Event->setCDFTrailer(EvtLength); - - amc13Events.emplace_back(std::move(amc13Event)); + + amc13Events.emplace_back(std::move(amc13Event)); } // finished making amc13Event data } // end of FED loop diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index 82ba47fe9148f..8e98b2baebe83 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -122,7 +122,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve // trailer checks FEDTrailer trailer(fedData.data() + fedData.size() - FEDTrailer::length); - + bool failTrailerCheck = false, failTrailerMatch = false; if (!trailer.check() || (trailer.fragmentLength() * sizeof(uint64_t) != fedData.size())) { failTrailerCheck = true; From 78a7536d48642cf02c37db8d6965c47d65d53d53 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Fri, 23 Oct 2020 01:54:27 +0900 Subject: [PATCH 10/10] code cleanup --- CondFormats/GEMObjects/interface/GEMROMapping.h | 2 +- CondFormats/GEMObjects/interface/GEMeMap.h | 8 +++----- DataFormats/GEMDigi/interface/AMCdata.h | 2 +- EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc | 2 +- EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc | 2 +- EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc | 2 -- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/CondFormats/GEMObjects/interface/GEMROMapping.h b/CondFormats/GEMObjects/interface/GEMROMapping.h index d904951513b88..dfd1b86ba0664 100644 --- a/CondFormats/GEMObjects/interface/GEMROMapping.h +++ b/CondFormats/GEMObjects/interface/GEMROMapping.h @@ -7,7 +7,7 @@ class GEMROMapping { public: struct chamEC { - int fedId; + unsigned int fedId; uint8_t amcNum; uint8_t gebId; bool operator<(const chamEC& r) const { diff --git a/CondFormats/GEMObjects/interface/GEMeMap.h b/CondFormats/GEMObjects/interface/GEMeMap.h index cc5e5834dbce2..7242430068a09 100644 --- a/CondFormats/GEMObjects/interface/GEMeMap.h +++ b/CondFormats/GEMObjects/interface/GEMeMap.h @@ -19,7 +19,7 @@ class GEMeMap { void convertDummy(GEMROMapping& romap); struct GEMChamberMap { - std::vector fedId; + std::vector fedId; std::vector amcNum; std::vector gebId; std::vector gemNum; @@ -59,11 +59,9 @@ class GEMeMap { static const int vfatVerV3_ = 3; // VFAT v3 static const int vfatTypeV3_ = 11; // VFAT v3 static const int chipIdMask_ = 0xfff; // chipId mask for 12 bits - static const int maxAMCs_ = 15; // 4 bits for AMC no. static const int maxGEBs_ = 32; // 5 bits for GEB id - static const int maxGEB0_ = 30; // Not known yet for ME0 - static const int maxGEB1_ = 12; // 12 for GE11 - static const int maxVFatGE0_ = 3; // vFat per eta partition, not known yet for ME0 + static const int maxAMCs_ = 15; // 4 bits for AMC no. + static const int maxVFatGE0_ = 12; // vFat per eta partition, not known yet for ME0 static const int maxVFatGE11_ = 3; // vFat per eta partition in GE11 static const int maxVFatGE21_ = 6; // vFat per eta partition in GE21 static const int maxChan_ = 128; // channels per vFat diff --git a/DataFormats/GEMDigi/interface/AMCdata.h b/DataFormats/GEMDigi/interface/AMCdata.h index 2835303916da7..016c0e077d859 100644 --- a/DataFormats/GEMDigi/interface/AMCdata.h +++ b/DataFormats/GEMDigi/interface/AMCdata.h @@ -92,7 +92,7 @@ namespace gem { uint8_t amcNum() const { return AMCheader1{amch1_}.AMCnum; } uint16_t boardId() const { return AMCheader2{amch2_}.boardID; } - int16_t orbitNum() const { return AMCheader2{amch2_}.orbitNum; } + uint16_t orbitNum() const { return AMCheader2{amch2_}.orbitNum; } uint8_t param3() const { return AMCheader2{amch2_}.param3; } uint8_t param2() const { return AMCheader2{amch2_}.param2; } uint8_t param1() const { return AMCheader2{amch2_}.param1; } diff --git a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc index 5f0b3256ccec5..81db0ec5e1b0e 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMDigiToRawModule.cc @@ -123,7 +123,7 @@ void GEMDigiToRawModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve } } - for (int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { + for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXME0FEDID; ++fedId) { uint32_t amc13EvtLength = 0; std::unique_ptr amc13Event = std::make_unique(); diff --git a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc index 8e98b2baebe83..4aea0fc923bb9 100644 --- a/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc +++ b/EventFilter/GEMRawToDigi/plugins/GEMRawToDigiModule.cc @@ -111,7 +111,7 @@ void GEMRawToDigiModule::produce(edm::StreamID iID, edm::Event& iEvent, edm::Eve auto gemROMap = runCache(iEvent.getRun().index()); - for (int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { + for (unsigned int fedId = FEDNumbering::MINGEMFEDID; fedId <= FEDNumbering::MAXGEMFEDID; ++fedId) { const FEDRawData& fedData = fed_buffers->FEDData(fedId); int nWords = fedData.size() / sizeof(uint64_t); diff --git a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc index 7690fc41d7a0a..51d0f84d070d3 100644 --- a/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc +++ b/EventFilter/GEMRawToDigi/src/GEMRawToDigi.cc @@ -3,8 +3,6 @@ */ #include "EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -// temp -#include using namespace gem; std::unique_ptr GEMRawToDigi::convertWordToAMC13Event(const uint64_t* word) {