From 5d8ba263a224b51b51152eeb4d43aac8a5c7ff3d Mon Sep 17 00:00:00 2001 From: Matteo Migliorini Date: Wed, 13 Mar 2024 11:27:28 +0100 Subject: [PATCH 1/4] Updated CALO unpacker to receive vcu TCP streams --- .../L1ScoutingRawToDigi/interface/blocks.h | 24 +- .../plugins/ScCALORawToDigi.cc | 205 ++++++++++++++---- .../plugins/ScCALORawToDigi.h | 28 ++- .../plugins/ScGMTRawToDigi.cc | 9 +- .../plugins/ScGMTRawToDigi.h | 1 + .../python/ScCaloRawToDigi_cfi.py | 21 +- .../python/ScGMTRawToDigi_cfi.py | 2 + 7 files changed, 235 insertions(+), 55 deletions(-) diff --git a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h index bb614e82e875a..bc450bbb4b461 100644 --- a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h +++ b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h @@ -22,8 +22,8 @@ namespace l1ScoutingRun3 { namespace demux { - // unrolled frame block - struct block { + // unrolled DMA block + struct dmaBlock { uint32_t header; uint32_t bx; uint32_t orbit; @@ -44,7 +44,27 @@ namespace l1ScoutingRun3 { uint32_t link7; uint32_t tau1[6]; }; + + struct caloObjTcpBlock { + uint32_t header; + uint32_t bx; + uint32_t orbit; + uint32_t obj[12]; + }; + + struct caloSumTcpBlock { + uint32_t bx; + uint32_t orbit; + uint32_t sum[6]; + }; + } // namespace demux + namespace bmtf { + struct block { + uint64_t stub[8]; + }; + } // namespace bmtf + } // namespace l1ScoutingRun3 #endif // L1ScoutingRawToDigi_blocks_h diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc index b635d82c66375..ddd678f9c14bc 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc @@ -3,9 +3,11 @@ ScCaloRawToDigi::ScCaloRawToDigi(const edm::ParameterSet& iConfig) { using namespace edm; using namespace l1ScoutingRun3; - srcInputTag = iConfig.getParameter("srcInputTag"); - enableAllSums_ = iConfig.getUntrackedParameter("enableAllSums", false); + srcInputTag_ = iConfig.getParameter("srcInputTag"); + enableAllSums_ = iConfig.getParameter("enableAllSums"); debug_ = iConfig.getUntrackedParameter("debug", false); + dataSourceConfig_ = iConfig.getParameter("dataSource"); + rawToken_ = consumes(srcInputTag_); orbitBufferJets_ = std::vector>(3565); orbitBufferEGammas_ = std::vector>(3565); @@ -21,8 +23,6 @@ ScCaloRawToDigi::ScCaloRawToDigi(const edm::ParameterSet& iConfig) { produces().setBranchAlias("TauOrbitCollection"); produces().setBranchAlias("EGammaOrbitCollection"); produces().setBranchAlias("BxSumsOrbitCollection"); - - rawToken = consumes(srcInputTag); } ScCaloRawToDigi::~ScCaloRawToDigi(){}; @@ -32,22 +32,53 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) using namespace l1ScoutingRun3; Handle ScoutingRawDataCollection; - iEvent.getByToken(rawToken, ScoutingRawDataCollection); - - const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(SDSNumbering::CaloSDSID); - size_t orbitSize = sourceRawData.size(); + iEvent.getByToken(rawToken_, ScoutingRawDataCollection); std::unique_ptr unpackedJets(new JetOrbitCollection); std::unique_ptr unpackedTaus(new TauOrbitCollection); std::unique_ptr unpackedEGammas(new EGammaOrbitCollection); std::unique_ptr unpackedEtSums(new BxSumsOrbitCollection); - if ((sourceRawData.size() == 0) && debug_) { - std::cout << "No raw data for CALO source\n"; + // reset counters + nJetsOrbit_ = 0; + nEGammasOrbit_ = 0; + nTausOrbit_ = 0; + nEtSumsOrbit_ = 0; + + std::string dataSourceMode = dataSourceConfig_.getParameter("dataSourceMode"); + if (dataSourceMode == "DMA") { + // Packet from DMA contains all the objects + int sourceId = dataSourceConfig_.getParameter("sourceId"); + if (sourceId!=SDSNumbering::CaloSDSID) edm::LogWarning("ScCaloRawToDIgi::produce") + << "Provided an unexpected source ID: " + << sourceId << "/" << SDSNumbering::CaloSDSID + << " [provided/expected]"; + unpackOrbitFromDMA(ScoutingRawDataCollection, sourceId); } + else if (dataSourceMode == "TCP") { + // unpack jets + jetSourceIdList_ = dataSourceConfig_.getParameter>("jetSourceIdList"); + unpackTcpData(ScoutingRawDataCollection, + jetSourceIdList_, CaloObjectType::Jet); + + // unpack e/gamma + eGammaSourceIdList_ = dataSourceConfig_.getParameter>("eGammaSourceIdList"); + unpackTcpData(ScoutingRawDataCollection, + eGammaSourceIdList_, CaloObjectType::EGamma); + + // unpack taus + tauSourceIdList_ = dataSourceConfig_.getParameter>("tauSourceIdList"); + unpackTcpData(ScoutingRawDataCollection, + tauSourceIdList_, CaloObjectType::Tau); - // unpack current orbit and store data into the orbitBufferr - unpackOrbit(sourceRawData.data(), orbitSize); + // unpack et sums + etSumSourceIdList_ = dataSourceConfig_.getParameter>("etSumSourceIdList"); + unpackTcpData(ScoutingRawDataCollection, + etSumSourceIdList_, CaloObjectType::EtSum); + } else { + throw cms::Exception("ScCaloRawToDIgi::produce") + << "Unknown data source mode. Use DMA or TCP(default)."; + } // fill orbit collection and clear the Bx buffer vector unpackedJets->fillAndClear(orbitBufferJets_, nJetsOrbit_); @@ -62,22 +93,26 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) iEvent.put(std::move(unpackedEtSums)); } -void ScCaloRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { +void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle &ScoutingRawDataCollection, + int sourceId) { using namespace l1ScoutingRun3; - // reset counters - nJetsOrbit_ = 0; - nEGammasOrbit_ = 0; - nTausOrbit_ = 0; - nEtSumsOrbit_ = 0; + const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sourceId); + if ((sourceRawData.size() == 0) && debug_) { + std::cout << "No raw data for CALO DMA source ID=" << sourceId << std::endl; + } + + // get orbit size and raw data + size_t len = sourceRawData.size(); + const unsigned char* buf = sourceRawData.data(); size_t pos = 0; while (pos < len) { - assert(pos + sizeof(demux::block) <= len); + assert(pos + sizeof(demux::dmaBlock) <= len); - demux::block* bl = (demux::block*)(buf + pos); - pos += sizeof(demux::block); + demux::dmaBlock* bl = (demux::dmaBlock*)(buf + pos); + pos += sizeof(demux::dmaBlock); assert(pos <= len); uint32_t orbit = bl->orbit & 0x7FFFFFFF; @@ -90,32 +125,32 @@ void ScCaloRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { // unpack jets from first link if (debug_) std::cout << "--- Jets link 1 ---\n"; - unpackLinkJets(bl->jet1, bx); + unpackJets(bl->jet1, bx, 6); // unpack jets from second link if (debug_) std::cout << "--- Jets link 2 ---\n"; - unpackLinkJets(bl->jet2, bx); + unpackJets(bl->jet2, bx, 6); // unpack eg from first link if (debug_) std::cout << "--- E/g link 1 ---\n"; - unpackLinkEGammas(bl->egamma1, bx); + unpackEGammas(bl->egamma1, bx, 6); // unpack eg from second link link if (debug_) std::cout << "--- E/g link 2 ---\n"; - unpackLinkEGammas(bl->egamma2, bx); + unpackEGammas(bl->egamma2, bx, 6); // unpack taus from first link if (debug_) std::cout << "--- Taus link 1 ---\n"; - unpackLinkTaus(bl->tau1, bx); + unpackTaus(bl->tau1, bx, 6); // unpack taus from second link if (debug_) std::cout << "--- Taus link 2 ---\n"; - unpackLinkTaus(bl->tau2, bx); + unpackTaus(bl->tau2, bx, 6); // unpack et sums if (debug_) @@ -125,11 +160,86 @@ void ScCaloRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { } // end of bx objects } -void ScCaloRawToDigi::unpackLinkJets(uint32_t* dataBlock, int bx) { +void ScCaloRawToDigi::unpackTcpData(edm::Handle &ScoutingRawDataCollection, + std::vector sourceList, + CaloObjectType dataType){ + using namespace l1ScoutingRun3; + for (const int &sourceId: sourceList){ + if ((sourceIdSDSNumbering::CaloTCPMaxSDSID)) { + edm::LogWarning("ScCaloRawToDIgi::unpackTCPData") + << "Source ID outside the expected range " << sourceId + << "/[" << SDSNumbering::CaloTCPMinSDSID << "-" << SDSNumbering::CaloTCPMaxSDSID << "]" + << " [provided/expected range]"; + } + const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sourceId); + size_t orbitSize = sourceRawData.size(); + + if ((sourceRawData.size() == 0) && debug_) { + //std::cout << "No raw data for calo " << CaloObjTypeTxt[dataType] << ", TCP source ID=" << sourceId << std::endl; + std::cout << "No raw data for calo TCP source ID=" << sourceId << std::endl; + } + + unpackOrbitFromTCP(sourceRawData.data(), orbitSize, dataType); + } +} + +void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, CaloObjectType dataType) { + using namespace l1ScoutingRun3; + size_t pos = 0; + + while (pos < len) { + // frame header is present + assert(pos + 4 <= len); + + // unpack calo sums block + if (dataType==CaloObjectType::EtSum){ + demux::caloSumTcpBlock* bl = (demux::caloSumTcpBlock*)(buf + pos); + pos += sizeof(demux::caloSumTcpBlock); + assert(pos <= len); + if (debug_) + std::cout << "Sums BX -> " << bl->bx << std::endl; + unpackEtSums(bl->sum, bl->bx); + } else { + // unpack jet/eg/tau + demux::caloObjTcpBlock* bl = (demux::caloObjTcpBlock*)(buf + pos); + int nObj = (bl->header) & 0xff; + pos += 12 + nObj*4; + + switch (dataType) { + case CaloObjectType::Jet: + if (debug_) + std::cout << "Jets BX -> " << bl->bx << std::endl; + unpackJets(bl->obj, bl->bx, nObj); + break; + + case CaloObjectType::EGamma: + if (debug_) + std::cout << "E/Gammas BX -> " << bl->bx << std::endl; + unpackEGammas(bl->obj, bl->bx, nObj); + break; + + case CaloObjectType::Tau: + if (debug_) + std::cout << "Taus BX -> " << bl->bx << std::endl; + unpackTaus(bl->obj, bl->bx, nObj); + break; + + default: + throw cms::Exception("ScCaloRawToDigi::unpackOrbitFromTCP") + << "Unknown data type."; + break; + } + + } // unpack sums and calo objects + + } // end of bx objects +} + +void ScCaloRawToDigi::unpackJets(uint32_t* dataBlock, int bx, int nObjets) { using namespace l1ScoutingRun3; int32_t ET(0), Eta(0), Phi(0), Qual(0); - for (uint32_t i = 0; i < 6; i++) { + for (int i = 0; i < nObjets; i++) { ET = ((dataBlock[i] >> demux::shiftsJet::ET) & demux::masksJet::ET); if (ET != 0) { @@ -153,11 +263,11 @@ void ScCaloRawToDigi::unpackLinkJets(uint32_t* dataBlock, int bx) { } // end link jets unpacking loop } -void ScCaloRawToDigi::unpackLinkEGammas(uint32_t* dataBlock, int bx) { +void ScCaloRawToDigi::unpackEGammas(uint32_t* dataBlock, int bx, int nObjets) { using namespace l1ScoutingRun3; int32_t ET(0), Eta(0), Phi(0), Iso(0); - for (uint32_t i = 0; i < 6; i++) { + for (int i = 0; i < nObjets; i++) { ET = ((dataBlock[i] >> demux::shiftsEGamma::ET) & demux::masksEGamma::ET); if (ET != 0) { Eta = ((dataBlock[i] >> demux::shiftsEGamma::eta) & demux::masksEGamma::eta); @@ -180,11 +290,11 @@ void ScCaloRawToDigi::unpackLinkEGammas(uint32_t* dataBlock, int bx) { } // end link e/gammas unpacking loop } -void ScCaloRawToDigi::unpackLinkTaus(uint32_t* dataBlock, int bx) { +void ScCaloRawToDigi::unpackTaus(uint32_t* dataBlock, int bx, int nObjets) { using namespace l1ScoutingRun3; int32_t ET(0), Eta(0), Phi(0), Iso(0); - for (uint32_t i = 0; i < 6; i++) { + for (int i = 0; i < nObjets; i++) { ET = ((dataBlock[i] >> demux::shiftsTau::ET) & demux::masksTau::ET); if (ET != 0) { Eta = ((dataBlock[i] >> demux::shiftsTau::eta) & demux::masksTau::eta); @@ -212,12 +322,12 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { BxSums bxSums; - int32_t ETEt(0), ETEttem(0), ETMinBiasHFP0(0); // ET - int32_t HTEt(0), HTtowerCount(0), HTMinBiasHFM0(0); // HT - int32_t ETmissEt(0), ETmissPhi(0), ETmissASYMET(0), ETmissMinBiasHFP1(0); //ETMiss - int32_t HTmissEt(0), HTmissPhi(0), HTmissASYMHT(0), HTmissMinBiasHFM1(0); // HTMiss - int32_t ETHFmissEt(0), ETHFmissPhi(0), ETHFmissASYMETHF(0), ETHFmissCENT(0); // ETHFMiss - int32_t HTHFmissEt(0), HTHFmissPhi(0), HTHFmissASYMHTHF(0), HTHFmissCENT(0); // HTHFMiss + int32_t ETEt(0), ETEttem(0), ETMinBiasHFP0(0); // ET block + int32_t HTEt(0), HTtowerCount(0), HTMinBiasHFM0(0); // HT block + int32_t ETmissEt(0), ETmissPhi(0), ETmissASYMET(0), ETmissMinBiasHFP1(0); // ETMiss block + int32_t HTmissEt(0), HTmissPhi(0), HTmissASYMHT(0), HTmissMinBiasHFM1(0); // HTMiss block + int32_t ETHFmissEt(0), ETHFmissPhi(0), ETHFmissASYMETHF(0), ETHFmissCENT(0); // ETHFMiss block + int32_t HTHFmissEt(0), HTHFmissPhi(0), HTHFmissASYMHTHF(0), HTHFmissCENT(0); // HTHFMiss block // ET block ETEt = ((dataBlock[0] >> demux::shiftsESums::ETEt) & demux::masksESums::ETEt); @@ -312,7 +422,7 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { if (debug_) { std::cout << "Raw frames:\n"; - for (int frame = 0; frame < 6; frame++) { + for (int frame = 0; frame < 6; frame++) { std::cout << " frame " << frame << ": 0x" << std::hex << dataBlock[frame] << std::dec << std::endl; } printBxSums(bxSums); @@ -321,8 +431,19 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { void ScCaloRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); + desc.add("srcInputTag", edm::InputTag("rawDataCollector")); + { + edm::ParameterSetDescription dataSource; + dataSource.add("dataSourceMode", std::string("TCP")); + dataSource.add>("jetSourceIdList", std::vector({22})); + dataSource.add>("eGammaSourceIdList", std::vector({23})); + dataSource.add>("tauSourceIdList", std::vector({25})); + dataSource.add>("etSumSourceIdList", std::vector({24})); + desc.add("dataSource", dataSource); + } + desc.add("enableAllSums", true); + desc.addUntracked("debug", false); + descriptions.add("ScCaloRawToDigi", desc); } DEFINE_FWK_MODULE(ScCaloRawToDigi); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h index ca1bcd34e1ea3..e989d0185be16 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -20,6 +20,7 @@ #include #include +#include class ScCaloRawToDigi : public edm::stream::EDProducer<> { public: @@ -31,11 +32,18 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { private: void produce(edm::Event&, const edm::EventSetup&) override; - void unpackOrbit(const unsigned char* buf, size_t len); + enum class CaloObjectType {Jet, EGamma, Tau, EtSum}; - void unpackLinkJets(uint32_t* dataBlock, int bx); - void unpackLinkEGammas(uint32_t* dataBlock, int bx); - void unpackLinkTaus(uint32_t* dataBlock, int bx); + void unpackOrbitFromDMA(edm::Handle &ScoutingRawDataCollection, + int sourceId); + void unpackTcpData(edm::Handle &ScoutingRawDataCollection, + std::vector sourceList, + CaloObjectType dataType); + void unpackOrbitFromTCP(const unsigned char* buf, size_t len, CaloObjectType dataType); + + void unpackJets(uint32_t* dataBlock, int bx, int nObjets); + void unpackEGammas(uint32_t* dataBlock, int bx, int nObjets); + void unpackTaus(uint32_t* dataBlock, int bx, int nObjets); void unpackEtSums(uint32_t* dataBlock, int bx); int nJetsOrbit_, nEGammasOrbit_, nTausOrbit_, nEtSumsOrbit_; @@ -47,7 +55,13 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { std::vector> orbitBufferEtSums_; bool debug_ = false; - bool enableAllSums_ = false; - edm::InputTag srcInputTag; - edm::EDGetToken rawToken; + bool enableAllSums_ = false; // write the full sert of ET sums + edm::InputTag srcInputTag_; + edm::EDGetToken rawToken_; + std::string dataSourceMode_; // data from TCP / DMA + edm::ParameterSet dataSourceConfig_; + std::vector jetSourceIdList_; + std::vector eGammaSourceIdList_; + std::vector tauSourceIdList_; + std::vector etSumSourceIdList_; }; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc index 444dd27730856..95fb70b68102f 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc @@ -3,6 +3,7 @@ ScGMTRawToDigi::ScGMTRawToDigi(const edm::ParameterSet& iConfig) { using namespace edm; srcInputTag = iConfig.getParameter("srcInputTag"); + skipInterm_ = iConfig.getParameter("skipInterm"); debug_ = iConfig.getUntrackedParameter("debug", false); // initialize orbit buffer for BX 1->3564; @@ -78,7 +79,7 @@ void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { for (unsigned int i = 0; i < mAcount + mBcount; i++) { uint32_t interm = (bl->mu[i].extra >> ugmt::shiftsMuon::interm) & ugmt::masksMuon::interm; - if (interm == 1) { + if ((interm == 1) && (skipInterm_)) { if (debug_) { std::cout << " -> Excluding intermediate muon\n"; } @@ -157,8 +158,10 @@ void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { void ScGMTRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); + desc.add("srcInputTag", edm::InputTag("rawDataCollector")); + desc.add("skipInterm", true); + desc.addUntracked("debug", false); + descriptions.add("ScGMTRawToDigi", desc); } DEFINE_FWK_MODULE(ScGMTRawToDigi); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h index 8b1622d327304..fd273b28c8e89 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h @@ -39,6 +39,7 @@ class ScGMTRawToDigi : public edm::stream::EDProducer<> { int nMuonsOrbit_; bool debug_ = false; + bool skipInterm_ = true; edm::InputTag srcInputTag; edm::EDGetToken rawToken; }; diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py index 466354aaf14ce..1d5c12106c9b8 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py @@ -1,7 +1,26 @@ import FWCore.ParameterSet.Config as cms +# default parameters for the DMA input source +dmaDataModeParameters = cms.PSet( + dataSourceMode=cms.string("DMA"), + sourceId=cms.int32(2) +) + +# default parameters for the TCP source +tcpDataModeParameters = cms.PSet( + dataSourceMode=cms.string("TCP"), + jetSourceIdList = cms.vint32(22), + eGammaSourceIdList = cms.vint32(23), + tauSourceIdList = cms.vint32(25), + etSumSourceIdList = cms.vint32(24), +) + ScCaloUnpacker = cms.EDProducer("ScCaloRawToDigi", srcInputTag = cms.InputTag("rawDataCollector"), + # DMA / TCP mode configs + dataSource = tcpDataModeParameters, + # unpack the full set of energy sums + enableAllSums = cms.bool(True), # print all objects debug = cms.untracked.bool(False) -) +) \ No newline at end of file diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py index 88fac9189785b..38923822ea3b0 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py @@ -2,6 +2,8 @@ ScGmtUnpacker = cms.EDProducer('ScGMTRawToDigi', srcInputTag = cms.InputTag('rawDataCollector'), + # skip intermediate muons + skipInterm = cms.bool(True), # print all objects debug = cms.untracked.bool(False) ) From b50bc908e14fcf68d6fdd7095984edd4d1b7f0fc Mon Sep 17 00:00:00 2001 From: Matteo Migliorini Date: Wed, 13 Mar 2024 12:25:35 +0100 Subject: [PATCH 2/4] Added product name and applied code checks --- .../L1ScoutingRawToDigi/interface/blocks.h | 4 +- .../plugins/ScCALORawToDigi.cc | 75 ++++++++----------- .../plugins/ScCALORawToDigi.h | 13 ++-- .../plugins/ScGMTRawToDigi.cc | 4 +- 4 files changed, 43 insertions(+), 53 deletions(-) diff --git a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h index bc450bbb4b461..940131fc8f942 100644 --- a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h +++ b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h @@ -62,9 +62,9 @@ namespace l1ScoutingRun3 { namespace bmtf { struct block { - uint64_t stub[8]; + uint64_t stub[8]; }; - } // namespace bmtf + } // namespace bmtf } // namespace l1ScoutingRun3 #endif // L1ScoutingRawToDigi_blocks_h diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc index ddd678f9c14bc..4891bb383daed 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc @@ -19,10 +19,10 @@ ScCaloRawToDigi::ScCaloRawToDigi(const edm::ParameterSet& iConfig) { nTausOrbit_ = 0; nEtSumsOrbit_ = 0; - produces().setBranchAlias("JetOrbitCollection"); - produces().setBranchAlias("TauOrbitCollection"); - produces().setBranchAlias("EGammaOrbitCollection"); - produces().setBranchAlias("BxSumsOrbitCollection"); + produces("Jet").setBranchAlias("JetOrbitCollection"); + produces("Tau").setBranchAlias("TauOrbitCollection"); + produces("EGamma").setBranchAlias("EGammaOrbitCollection"); + produces("EtSum").setBranchAlias("BxSumsOrbitCollection"); } ScCaloRawToDigi::~ScCaloRawToDigi(){}; @@ -48,36 +48,29 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) std::string dataSourceMode = dataSourceConfig_.getParameter("dataSourceMode"); if (dataSourceMode == "DMA") { // Packet from DMA contains all the objects - int sourceId = dataSourceConfig_.getParameter("sourceId"); - if (sourceId!=SDSNumbering::CaloSDSID) edm::LogWarning("ScCaloRawToDIgi::produce") - << "Provided an unexpected source ID: " - << sourceId << "/" << SDSNumbering::CaloSDSID - << " [provided/expected]"; + int sourceId = dataSourceConfig_.getParameter("sourceId"); + if (sourceId != SDSNumbering::CaloSDSID) + edm::LogWarning("ScCaloRawToDIgi::produce") << "Provided an unexpected source ID: " << sourceId << "/" + << SDSNumbering::CaloSDSID << " [provided/expected]"; unpackOrbitFromDMA(ScoutingRawDataCollection, sourceId); - } - else if (dataSourceMode == "TCP") { + } else if (dataSourceMode == "TCP") { // unpack jets jetSourceIdList_ = dataSourceConfig_.getParameter>("jetSourceIdList"); - unpackTcpData(ScoutingRawDataCollection, - jetSourceIdList_, CaloObjectType::Jet); + unpackTcpData(ScoutingRawDataCollection, jetSourceIdList_, CaloObjectType::Jet); // unpack e/gamma eGammaSourceIdList_ = dataSourceConfig_.getParameter>("eGammaSourceIdList"); - unpackTcpData(ScoutingRawDataCollection, - eGammaSourceIdList_, CaloObjectType::EGamma); + unpackTcpData(ScoutingRawDataCollection, eGammaSourceIdList_, CaloObjectType::EGamma); // unpack taus tauSourceIdList_ = dataSourceConfig_.getParameter>("tauSourceIdList"); - unpackTcpData(ScoutingRawDataCollection, - tauSourceIdList_, CaloObjectType::Tau); + unpackTcpData(ScoutingRawDataCollection, tauSourceIdList_, CaloObjectType::Tau); // unpack et sums etSumSourceIdList_ = dataSourceConfig_.getParameter>("etSumSourceIdList"); - unpackTcpData(ScoutingRawDataCollection, - etSumSourceIdList_, CaloObjectType::EtSum); + unpackTcpData(ScoutingRawDataCollection, etSumSourceIdList_, CaloObjectType::EtSum); } else { - throw cms::Exception("ScCaloRawToDIgi::produce") - << "Unknown data source mode. Use DMA or TCP(default)."; + throw cms::Exception("ScCaloRawToDIgi::produce") << "Unknown data source mode. Use DMA or TCP(default)."; } // fill orbit collection and clear the Bx buffer vector @@ -87,14 +80,13 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) unpackedEtSums->fillAndClear(orbitBufferEtSums_, nEtSumsOrbit_); // store collections in the event - iEvent.put(std::move(unpackedJets)); - iEvent.put(std::move(unpackedTaus)); - iEvent.put(std::move(unpackedEGammas)); - iEvent.put(std::move(unpackedEtSums)); + iEvent.put(std::move(unpackedJets), "Jet"); + iEvent.put(std::move(unpackedTaus), "Tau"); + iEvent.put(std::move(unpackedEGammas), "EGamma"); + iEvent.put(std::move(unpackedEtSums), "EtSum"); } -void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle &ScoutingRawDataCollection, - int sourceId) { +void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle& ScoutingRawDataCollection, int sourceId) { using namespace l1ScoutingRun3; const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sourceId); @@ -160,16 +152,16 @@ void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle &Scou } // end of bx objects } -void ScCaloRawToDigi::unpackTcpData(edm::Handle &ScoutingRawDataCollection, +void ScCaloRawToDigi::unpackTcpData(edm::Handle& ScoutingRawDataCollection, std::vector sourceList, - CaloObjectType dataType){ + CaloObjectType dataType) { using namespace l1ScoutingRun3; - for (const int &sourceId: sourceList){ - if ((sourceIdSDSNumbering::CaloTCPMaxSDSID)) { + for (const int& sourceId : sourceList) { + if ((sourceId < SDSNumbering::CaloTCPMinSDSID) || (sourceId > SDSNumbering::CaloTCPMaxSDSID)) { edm::LogWarning("ScCaloRawToDIgi::unpackTCPData") - << "Source ID outside the expected range " << sourceId - << "/[" << SDSNumbering::CaloTCPMinSDSID << "-" << SDSNumbering::CaloTCPMaxSDSID << "]" - << " [provided/expected range]"; + << "Source ID outside the expected range " << sourceId << "/[" << SDSNumbering::CaloTCPMinSDSID << "-" + << SDSNumbering::CaloTCPMaxSDSID << "]" + << " [provided/expected range]"; } const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sourceId); size_t orbitSize = sourceRawData.size(); @@ -190,9 +182,9 @@ void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, C while (pos < len) { // frame header is present assert(pos + 4 <= len); - + // unpack calo sums block - if (dataType==CaloObjectType::EtSum){ + if (dataType == CaloObjectType::EtSum) { demux::caloSumTcpBlock* bl = (demux::caloSumTcpBlock*)(buf + pos); pos += sizeof(demux::caloSumTcpBlock); assert(pos <= len); @@ -203,7 +195,7 @@ void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, C // unpack jet/eg/tau demux::caloObjTcpBlock* bl = (demux::caloObjTcpBlock*)(buf + pos); int nObj = (bl->header) & 0xff; - pos += 12 + nObj*4; + pos += 12 + nObj * 4; switch (dataType) { case CaloObjectType::Jet: @@ -225,13 +217,12 @@ void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, C break; default: - throw cms::Exception("ScCaloRawToDigi::unpackOrbitFromTCP") - << "Unknown data type."; + throw cms::Exception("ScCaloRawToDigi::unpackOrbitFromTCP") << "Unknown data type."; break; } - } // unpack sums and calo objects - + } // unpack sums and calo objects + } // end of bx objects } @@ -422,7 +413,7 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { if (debug_) { std::cout << "Raw frames:\n"; - for (int frame = 0; frame < 6; frame++) { + for (int frame = 0; frame < 6; frame++) { std::cout << " frame " << frame << ": 0x" << std::hex << dataBlock[frame] << std::dec << std::endl; } printBxSums(bxSums); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h index e989d0185be16..0c5e457c8cdaa 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -32,11 +32,10 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { private: void produce(edm::Event&, const edm::EventSetup&) override; - enum class CaloObjectType {Jet, EGamma, Tau, EtSum}; + enum class CaloObjectType { Jet, EGamma, Tau, EtSum }; - void unpackOrbitFromDMA(edm::Handle &ScoutingRawDataCollection, - int sourceId); - void unpackTcpData(edm::Handle &ScoutingRawDataCollection, + void unpackOrbitFromDMA(edm::Handle& ScoutingRawDataCollection, int sourceId); + void unpackTcpData(edm::Handle& ScoutingRawDataCollection, std::vector sourceList, CaloObjectType dataType); void unpackOrbitFromTCP(const unsigned char* buf, size_t len, CaloObjectType dataType); @@ -55,13 +54,13 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { std::vector> orbitBufferEtSums_; bool debug_ = false; - bool enableAllSums_ = false; // write the full sert of ET sums + bool enableAllSums_ = false; // write the full sert of ET sums edm::InputTag srcInputTag_; edm::EDGetToken rawToken_; - std::string dataSourceMode_; // data from TCP / DMA + std::string dataSourceMode_; // data from TCP / DMA edm::ParameterSet dataSourceConfig_; std::vector jetSourceIdList_; std::vector eGammaSourceIdList_; std::vector tauSourceIdList_; - std::vector etSumSourceIdList_; + std::vector etSumSourceIdList_; }; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc index 95fb70b68102f..f7e48fa9aac1e 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc @@ -13,7 +13,7 @@ ScGMTRawToDigi::ScGMTRawToDigi(const edm::ParameterSet& iConfig) { } nMuonsOrbit_ = 0; - produces().setBranchAlias("MuonOrbitCollection"); + produces("Muon").setBranchAlias("MuonOrbitCollection"); rawToken = consumes(srcInputTag); } @@ -41,7 +41,7 @@ void ScGMTRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) unpackedMuons->fillAndClear(orbitBuffer_, nMuonsOrbit_); // store collection in the event - iEvent.put(std::move(unpackedMuons)); + iEvent.put(std::move(unpackedMuons), "Muon"); } void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { From 3581011e06e94c5ee38f085ea54e32e8a954503b Mon Sep 17 00:00:00 2001 From: Matteo Migliorini Date: Wed, 13 Mar 2024 18:37:46 +0100 Subject: [PATCH 3/4] Add missing newline at the end of file --- EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc | 3 ++- EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h | 1 + .../L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py | 5 +++-- EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py | 1 + 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc index 4891bb383daed..61a6d26e26466 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc @@ -48,7 +48,7 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) std::string dataSourceMode = dataSourceConfig_.getParameter("dataSourceMode"); if (dataSourceMode == "DMA") { // Packet from DMA contains all the objects - int sourceId = dataSourceConfig_.getParameter("sourceId"); + int sourceId = dataSourceConfig_.getParameter("dmaSourceId"); if (sourceId != SDSNumbering::CaloSDSID) edm::LogWarning("ScCaloRawToDIgi::produce") << "Provided an unexpected source ID: " << sourceId << "/" << SDSNumbering::CaloSDSID << " [provided/expected]"; @@ -430,6 +430,7 @@ void ScCaloRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descripti dataSource.add>("eGammaSourceIdList", std::vector({23})); dataSource.add>("tauSourceIdList", std::vector({25})); dataSource.add>("etSumSourceIdList", std::vector({24})); + dataSource.add("dmaSourceId", 2); desc.add("dataSource", dataSource); } desc.add("enableAllSums", true); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h index 0c5e457c8cdaa..85b3bdb318926 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -64,3 +64,4 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { std::vector tauSourceIdList_; std::vector etSumSourceIdList_; }; + diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py index 1d5c12106c9b8..26bcf2294adca 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py @@ -3,7 +3,7 @@ # default parameters for the DMA input source dmaDataModeParameters = cms.PSet( dataSourceMode=cms.string("DMA"), - sourceId=cms.int32(2) + dmaSourceId=cms.int32(2) ) # default parameters for the TCP source @@ -23,4 +23,5 @@ enableAllSums = cms.bool(True), # print all objects debug = cms.untracked.bool(False) -) \ No newline at end of file +) + diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py index 38923822ea3b0..c184c7887127a 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py @@ -7,3 +7,4 @@ # print all objects debug = cms.untracked.bool(False) ) + From ca4caec060f59f6506724b2742f3fd8278c89fc7 Mon Sep 17 00:00:00 2001 From: Matteo Migliorini Date: Wed, 13 Mar 2024 18:50:32 +0100 Subject: [PATCH 4/4] Remove some newline at the end of file --- EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h | 1 - 1 file changed, 1 deletion(-) diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h index 85b3bdb318926..0c5e457c8cdaa 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -64,4 +64,3 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { std::vector tauSourceIdList_; std::vector etSumSourceIdList_; }; -