diff --git a/DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h b/DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h new file mode 100644 index 0000000000000..6f9294d7846f5 --- /dev/null +++ b/DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h @@ -0,0 +1,39 @@ +#ifndef DataFormats_L1Scouting_L1ScoutingCaloTower_h +#define DataFormats_L1Scouting_L1ScoutingCaloTower_h + +#include +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +namespace l1ScoutingRun3 { + + class CaloTower { + public: + CaloTower() : hwEt_(0), erBits_(0), miscBits_(0), hwEta_(0), hwPhi_(0) {} + + CaloTower(int16_t hwEt, int16_t erBits, int16_t miscBits, int16_t hwEta, int16_t hwPhi) + : hwEt_(hwEt), erBits_(erBits), miscBits_(miscBits), hwEta_(hwEta), hwPhi_(hwPhi) {} + + void setHwEt(int16_t hwEt) { hwEt_ = hwEt; } + void setErBits(int16_t erBits) { erBits_ = erBits; } + void setMiscBits(int16_t miscBits) { miscBits_ = miscBits; } + void setHwEta(int16_t hwEta) { hwEta_ = hwEta; } + void setHwPhi(int16_t hwPhi) { hwPhi_ = hwPhi; } + + int16_t hwEt() const { return hwEt_; } + int16_t erBits() const { return erBits_; } + int16_t miscBits() const { return miscBits_; } + int16_t hwEta() const { return hwEta_; } + int16_t hwPhi() const { return hwPhi_; } + + private: + int16_t hwEt_; + int16_t erBits_; + int16_t miscBits_; + int16_t hwEta_; + int16_t hwPhi_; + }; + + typedef OrbitCollection CaloTowerOrbitCollection; + +} // namespace l1ScoutingRun3 +#endif // DataFormats_L1Scouting_L1ScoutingCaloTower_h diff --git a/DataFormats/L1Scouting/interface/L1ScoutingFastJet.h b/DataFormats/L1Scouting/interface/L1ScoutingFastJet.h new file mode 100644 index 0000000000000..586fe57cf0490 --- /dev/null +++ b/DataFormats/L1Scouting/interface/L1ScoutingFastJet.h @@ -0,0 +1,41 @@ +#ifndef DataFormats_L1Scouting_L1ScoutingFastJet_h +#define DataFormats_L1Scouting_L1ScoutingFastJet_h + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +namespace l1ScoutingRun3 { + + class FastJet { + public: + FastJet() : et_(0), eta_(0), phi_(0), mass_(0), nConst_(0), area_(0) {} + + FastJet(float et, float eta, float phi, float mass, int nConst, float area) + : et_(et), eta_(eta), phi_(phi), mass_(mass), nConst_(nConst), area_(area) {} + + void setEt(float et) { et_ = et; } + void setEta(float eta) { eta_ = eta; } + void setPhi(float phi) { phi_ = phi; } + void setMass(float mass) { mass_ = mass; } + void setNConst(int nConst) { nConst_ = nConst; } + void setArea(float area) { area_ = area; } + + float et() const { return et_; } + float eta() const { return eta_; } + float phi() const { return phi_; } + float mass() const { return mass_; } + int nConst() const { return nConst_; } + float area() const { return area_; } + + private: + float et_; + float eta_; + float phi_; + float mass_; + int nConst_; + float area_; + }; + + typedef OrbitCollection FastJetOrbitCollection; + +} // namespace l1ScoutingRun3 +#endif // DataFormats_L1Scouting_L1ScoutingFastJet_h diff --git a/DataFormats/L1Scouting/interface/OrbitCollection.h b/DataFormats/L1Scouting/interface/OrbitCollection.h index a0826a3c36619..40b118545aa43 100644 --- a/DataFormats/L1Scouting/interface/OrbitCollection.h +++ b/DataFormats/L1Scouting/interface/OrbitCollection.h @@ -23,7 +23,7 @@ class OrbitCollection { // The method fillAndClear will be used, meaning that, after copying the objects, // orbitBuffer's vectors will be cleared. OrbitCollection(std::vector>& orbitBuffer, unsigned nObjects = 0) - : bxOffsets_(orbitBufferSize_ + 1, 0), data_(nObjects) { + : bxOffsets_(orbitBufferSize_ + 1, 0), data_() { fillAndClear(orbitBuffer, nObjects); } diff --git a/DataFormats/L1Scouting/src/classes.h b/DataFormats/L1Scouting/src/classes.h index fcda6a1aafd66..ea4444d8bac3a 100644 --- a/DataFormats/L1Scouting/src/classes.h +++ b/DataFormats/L1Scouting/src/classes.h @@ -5,3 +5,5 @@ #include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" #include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" #include "DataFormats/L1Scouting/interface/L1ScoutingBMTFStub.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingFastJet.h" diff --git a/DataFormats/L1Scouting/src/classes_def.xml b/DataFormats/L1Scouting/src/classes_def.xml index 364be98166efe..d36d067fa652b 100644 --- a/DataFormats/L1Scouting/src/classes_def.xml +++ b/DataFormats/L1Scouting/src/classes_def.xml @@ -10,10 +10,18 @@ + + + + + + + + @@ -21,28 +29,34 @@ - + - + + + - + + + + + diff --git a/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh b/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh index 01ddbec3d6f8a..a23262afcfa47 100755 --- a/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh +++ b/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh @@ -33,14 +33,21 @@ cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$file" || die "Fail oldFiles="testL1Scouting_v3_v3_v3_v3_v3_14_0_0_split_99.root testL1Scouting_v3_v3_v3_v3_v3_14_0_0_split_0.root" for file in $oldFiles; do inputfile=$(edmFileInPath DataFormats/L1Scouting/data/$file) || die "Failure edmFileInPath DataFormats/L1Scouting/data/$file" $? - cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$inputfile" --bmtfStubVersion 0 || die "Failed to read old file $file" $? + cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$inputfile" --bmtfStubVersion 0 --caloTowerVersion 0 || die "Failed to read old file $file" $? done # added BMTF input stubs data format oldFiles="testL1Scouting_v3_v3_v3_v3_v3_v3_14_1_0_pre5_split_99.root testL1Scouting_v3_v3_v3_v3_v3_v3_14_1_0_pre5_split_0.root" for file in $oldFiles; do inputfile=$(edmFileInPath DataFormats/L1Scouting/data/$file) || die "Failure edmFileInPath DataFormats/L1Scouting/data/$file" $? - cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$inputfile" --bmtfStubVersion 3 || die "Failed to read old file $file" $? + cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$inputfile" --bmtfStubVersion 3 --caloTowerVersion 0 || die "Failed to read old file $file" $? +done + +# added Calo tower data format +oldFiles="testL1Scouting_v3_v3_v3_v3_v3_v3_v3_15_1_0_split_99.root testL1Scouting_v3_v3_v3_v3_v3_v3_v3_15_1_0_split_0.root" +for file in $oldFiles; do + inputfile=$(edmFileInPath DataFormats/L1Scouting/data/$file) || die "Failure edmFileInPath DataFormats/L1Scouting/data/$file" $? + cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py --inputFile "$inputfile" --bmtfStubVersion 3 --caloTowerVersion 3 || die "Failed to read old file $file" $? done exit 0 diff --git a/DataFormats/L1Scouting/test/TestReadL1Scouting.cc b/DataFormats/L1Scouting/test/TestReadL1Scouting.cc index b0354df200b16..591b5fd4a58a0 100644 --- a/DataFormats/L1Scouting/test/TestReadL1Scouting.cc +++ b/DataFormats/L1Scouting/test/TestReadL1Scouting.cc @@ -1,6 +1,7 @@ #include "DataFormats/L1Scouting/interface/L1ScoutingBMTFStub.h" #include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" #include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h" #include "DataFormats/L1Scouting/interface/OrbitCollection.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -19,7 +20,6 @@ #include namespace edmtest { - using namespace l1ScoutingRun3; class TestReadL1Scouting : public edm::global::EDAnalyzer<> { public: TestReadL1Scouting(edm::ParameterSet const&); @@ -33,6 +33,7 @@ namespace edmtest { void analyzeTaus(edm::Event const& iEvent) const; void analyzeBxSums(edm::Event const& iEvent) const; void analyzeBmtfStubs(edm::Event const& iEvent) const; + void analyzeCaloTowers(edm::Event const& iEvent) const; void throwWithMessageFromConstructor(const char*) const; void throwWithMessage(const char*) const; @@ -57,6 +58,10 @@ namespace edmtest { const int bmtfStubClassVersion_; const std::vector expectedBmtfStubValues_; const edm::EDGetTokenT> bmtfStubToken_; + + const int caloTowerClassVersion_; + const std::vector expectedCaloTowerValues_; + const edm::EDGetTokenT> caloTowerToken_; }; TestReadL1Scouting::TestReadL1Scouting(edm::ParameterSet const& iPSet) @@ -73,7 +78,10 @@ namespace edmtest { bxSumsToken_(consumes(iPSet.getParameter("bxSumsTag"))), bmtfStubClassVersion_(iPSet.getParameter("bmtfStubClassVersion")), expectedBmtfStubValues_(iPSet.getParameter>("expectedBmtfStubValues")), - bmtfStubToken_(consumes(iPSet.getParameter("bmtfStubTag"))) { + bmtfStubToken_(consumes(iPSet.getParameter("bmtfStubTag"))), + caloTowerClassVersion_(iPSet.getParameter("caloTowerClassVersion")), + expectedCaloTowerValues_(iPSet.getParameter>("expectedCaloTowerValues")), + caloTowerToken_(consumes(iPSet.getParameter("caloTowerTag"))) { if (bxValues_.size() != 2) { throwWithMessageFromConstructor("bxValues must have 2 elements and it does not"); } @@ -95,6 +103,9 @@ namespace edmtest { if (expectedBmtfStubValues_.size() != 2) { throwWithMessageFromConstructor("bmtfStubValues_ must have 2 elements and it does not"); } + if (expectedCaloTowerValues_.size() != 2) { + throwWithMessageFromConstructor("caloTowerValues_ must have 2 elements and it does not"); + } } void TestReadL1Scouting::analyze(edm::StreamID, edm::Event const& iEvent, edm::EventSetup const&) const { @@ -104,6 +115,7 @@ namespace edmtest { analyzeTaus(iEvent); analyzeBxSums(iEvent); analyzeBmtfStubs(iEvent); + analyzeCaloTowers(iEvent); } void TestReadL1Scouting::analyzeMuons(edm::Event const& iEvent) const { @@ -360,6 +372,37 @@ namespace edmtest { } } } + void TestReadL1Scouting::analyzeCaloTowers(edm::Event const& iEvent) const { + if (caloTowerClassVersion_ < 3) { + return; + } + auto const& caloTowersCollection = iEvent.get(caloTowerToken_); + for (const unsigned& bx : bxValues_) { + unsigned nCaloTowers = caloTowersCollection.getBxSize(bx); + if (nCaloTowers != expectedCaloTowerValues_.size()) { + throwWithMessage("analyzeCaloTower, caloTowers do not have the expected bx size"); + } + + const auto& caloTowers = caloTowersCollection.bxIterator(bx); + for (unsigned i = 0; i < nCaloTowers; i++) { + if (caloTowers[i].hwEt() != expectedCaloTowerValues_[i]) { + throwWithMessage("analyzeCaloTowers, hwEt does not match the expected value"); + } + if (caloTowers[i].erBits() != expectedCaloTowerValues_[i]) { + throwWithMessage("analyzeCaloTowers, erBits does not match the expected value"); + } + if (caloTowers[i].miscBits() != expectedCaloTowerValues_[i]) { + throwWithMessage("analyzeCaloTowers, miscBits does not match the expected value"); + } + if (caloTowers[i].hwEta() != expectedCaloTowerValues_[i]) { + throwWithMessage("analyzeCaloTowers, hwEta does not match the expected value"); + } + if (caloTowers[i].hwPhi() != expectedCaloTowerValues_[i]) { + throwWithMessage("analyzeCaloTowers, hwPhi does not match the expected value"); + } + } + } + } void TestReadL1Scouting::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -377,6 +420,9 @@ namespace edmtest { desc.add("bmtfStubClassVersion"); desc.add>("expectedBmtfStubValues"); desc.add("bmtfStubTag"); + desc.add("caloTowerClassVersion"); + desc.add>("expectedCaloTowerValues"); + desc.add("caloTowerTag"); descriptions.addDefault(desc); } diff --git a/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc b/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc index 160d4c7262c21..5ec03764d656b 100644 --- a/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc +++ b/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc @@ -1,6 +1,8 @@ #include "DataFormats/L1Scouting/interface/L1ScoutingBMTFStub.h" #include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" #include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingFastJet.h" #include "DataFormats/L1Scouting/interface/OrbitCollection.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -17,7 +19,6 @@ #include namespace edmtest { - using namespace l1ScoutingRun3; class TestWriteL1Scouting : public edm::global::EDProducer<> { public: TestWriteL1Scouting(edm::ParameterSet const&); @@ -31,6 +32,8 @@ namespace edmtest { void produceTaus(edm::Event& iEvent) const; void produceBxSums(edm::Event& iEvent) const; void produceBmtfStubs(edm::Event& iEvent) const; + void produceCaloTowers(edm::Event& iEvent) const; + void produceFastJets(edm::Event& iEvent) const; void throwWithMessage(const char*) const; @@ -53,6 +56,12 @@ namespace edmtest { const std::vector bmtfStubsValues_; const edm::EDPutTokenT> bmtfStubsPutToken_; + + const std::vector caloTowerValues_; + const edm::EDPutTokenT> caloTowersPutToken_; + + const std::vector fastJetValues_; + const edm::EDPutTokenT> fastJetsPutToken_; }; TestWriteL1Scouting::TestWriteL1Scouting(edm::ParameterSet const& iPSet) @@ -68,7 +77,11 @@ namespace edmtest { bxSumsValues_(iPSet.getParameter>("bxSumsValues")), bxSumsPutToken_(produces()), bmtfStubsValues_(iPSet.getParameter>("bmtfStubValues")), - bmtfStubsPutToken_(produces()) { + bmtfStubsPutToken_(produces()), + caloTowerValues_(iPSet.getParameter>("caloTowerValues")), + caloTowersPutToken_(produces()), + fastJetValues_(iPSet.getParameter>("fastJetValues")), + fastJetsPutToken_(produces()) { if (bxValues_.size() != 2) { throwWithMessage("bxValues must have 2 elements and it does not"); } @@ -90,6 +103,12 @@ namespace edmtest { if (bmtfStubsValues_.size() != 2) { throwWithMessage("bmtfStubsValues_ must have 2 elements and it does not"); } + if (caloTowerValues_.size() != 2) { + throwWithMessage("caloTowersValues_ must have 2 elements and it does not"); + } + if (fastJetValues_.size() != 2) { + throwWithMessage("fastJetValues_ must have 2 elements and it does not"); + } } void TestWriteL1Scouting::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const { @@ -99,6 +118,8 @@ namespace edmtest { produceTaus(iEvent); produceBxSums(iEvent); produceBmtfStubs(iEvent); + produceCaloTowers(iEvent); + produceFastJets(iEvent); } void TestWriteL1Scouting::produceMuons(edm::Event& iEvent) const { @@ -198,6 +219,38 @@ namespace edmtest { iEvent.put(bmtfStubsPutToken_, std::move(stubs)); } + void TestWriteL1Scouting::produceCaloTowers(edm::Event& iEvent) const { + std::unique_ptr caloTowers(new l1ScoutingRun3::CaloTowerOrbitCollection); + + std::vector> orbitBufferCaloTowers(3565); + int nCaloTowers = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : caloTowerValues_) { + orbitBufferCaloTowers[bx].emplace_back(val, val, val, val, val); + nCaloTowers++; + } + } + + caloTowers->fillAndClear(orbitBufferCaloTowers, nCaloTowers); + iEvent.put(caloTowersPutToken_, std::move(caloTowers)); + } + + void TestWriteL1Scouting::produceFastJets(edm::Event& iEvent) const { + std::unique_ptr fastJets(new l1ScoutingRun3::FastJetOrbitCollection); + + std::vector> orbitBufferFastJets(3565); + int nFastJets = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : fastJetValues_) { + orbitBufferFastJets[bx].emplace_back(val, val, val, val, val, val); + nFastJets++; + } + } + + fastJets->fillAndClear(orbitBufferFastJets, nFastJets); + iEvent.put(fastJetsPutToken_, std::move(fastJets)); + } + void TestWriteL1Scouting::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add>("bxValues"); @@ -207,6 +260,9 @@ namespace edmtest { desc.add>("tauValues"); desc.add>("bxSumsValues"); desc.add>("bmtfStubValues"); + desc.add>("caloTowerValues"); + desc.add>("fastJetValues"); + descriptions.addDefault(desc); } diff --git a/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py b/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py index 772bf3c798814..4154d6b567302 100644 --- a/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py +++ b/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py @@ -15,10 +15,14 @@ tauValues = cms.vint32(11, 12), bxSumsValues = cms.vint32(13), bmtfStubValues = cms.vint32(1, 2), + caloTowerValues = cms.vint32(14, 15), + fastJetValues = cms.vint32(16, 19) + ) process.out = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('testL1Scouting.root') + fileName = cms.untracked.string('testL1Scouting.root'), + splitLevel = cms.untracked.int32(99) ) process.path = cms.Path(process.l1ScoutingTestProducer) diff --git a/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py b/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py index f098c5a040372..6c7ba168c5704 100644 --- a/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py +++ b/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py @@ -6,6 +6,8 @@ parser.add_argument("--inputFile", type=str, help="Input file name (default: testL1Scouting.root)", default="testL1Scouting.root") parser.add_argument("--bmtfStubVersion", type=int, help="track data format version (default: 3)", default=3) +parser.add_argument("--caloTowerVersion", type=int, help="track data format version (default: 3)", default=3) + args = parser.parse_args() process = cms.Process("READ") @@ -29,7 +31,10 @@ expectedBxSumsValues = cms.vint32(13), bmtfStubClassVersion = cms.int32(args.bmtfStubVersion), bmtfStubTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), - expectedBmtfStubValues = cms.vint32(1, 2) + expectedBmtfStubValues = cms.vint32(1, 2), + caloTowerClassVersion = cms.int32(args.caloTowerVersion), + caloTowerTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedCaloTowerValues = cms.vint32(14, 15) ) process.out = cms.OutputModule("PoolOutputModule", diff --git a/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h b/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h index 5e023cb43f004..c36246901cec0 100644 --- a/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h +++ b/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h @@ -13,7 +13,7 @@ class SDSNumbering { static constexpr int lastSDSId() { return MAXSDSID; } static constexpr int NOT_A_SDSID = -1; - static constexpr int MAXSDSID = 32; + static constexpr int MAXSDSID = 64; static constexpr int GmtSDSID = 1; static constexpr int CaloSDSID = 2; static constexpr int GtSDSID = 4; @@ -21,6 +21,8 @@ class SDSNumbering { static constexpr int BmtfMaxSDSID = 21; static constexpr int CaloTCPMinSDSID = 22; static constexpr int CaloTCPMaxSDSID = 29; + static constexpr int CaloTowerMinSDSID = 32; + static constexpr int CaloTowerMaxSDSID = 49; }; #endif // L1ScoutingRawData_SDSNumbering_h diff --git a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h index a054969a206e2..038de8c3d542a 100644 --- a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h +++ b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h @@ -69,5 +69,14 @@ namespace l1ScoutingRun3 { }; } // namespace bmtf + namespace calol1 { + struct block { + uint32_t header; + uint32_t bx; + uint32_t orbit; + uint32_t tower[4096]; + }; + } // namespace calol1 + } // namespace l1ScoutingRun3 #endif // L1ScoutingRawToDigi_blocks_h diff --git a/EventFilter/L1ScoutingRawToDigi/interface/masks.h b/EventFilter/L1ScoutingRawToDigi/interface/masks.h index 53b9947abb794..ca9bceea90cdf 100644 --- a/EventFilter/L1ScoutingRawToDigi/interface/masks.h +++ b/EventFilter/L1ScoutingRawToDigi/interface/masks.h @@ -104,6 +104,20 @@ namespace l1ScoutingRun3 { }; } // namespace bmtf + namespace calol1 { + struct masksCaloTowers { + static constexpr uint32_t ET = 0x01ff; + static constexpr uint32_t erBits = 0x0007; + static constexpr uint32_t miscBits = 0x000f; + static constexpr uint32_t zeroFlag = 0x0001; + static constexpr uint32_t eohrFlag = 0x0001; + static constexpr uint32_t hcalFlag = 0x0001; + static constexpr uint32_t ecalFlag = 0x0001; + static constexpr uint32_t phi = 0x00ff; + static constexpr uint32_t eta = 0x00ff; + }; + } // namespace calol1 + struct header_masks { static constexpr uint32_t bxmatch = 0x00ff << header_shifts::bxmatch; static constexpr uint32_t mAcount = 0x000f << header_shifts::mAcount; diff --git a/EventFilter/L1ScoutingRawToDigi/interface/shifts.h b/EventFilter/L1ScoutingRawToDigi/interface/shifts.h index 3075216e9e5a8..c4d9fecdc2948 100644 --- a/EventFilter/L1ScoutingRawToDigi/interface/shifts.h +++ b/EventFilter/L1ScoutingRawToDigi/interface/shifts.h @@ -104,6 +104,20 @@ namespace l1ScoutingRun3 { }; } // namespace bmtf + namespace calol1 { + struct shiftsCaloTowers { + static constexpr uint32_t ET = 0; + static constexpr uint32_t erBits = 9; + static constexpr uint32_t miscBits = 12; + static constexpr uint32_t zeroFlag = 12; + static constexpr uint32_t eohrFlag = 13; + static constexpr uint32_t hcalFlag = 14; + static constexpr uint32_t ecalFlag = 15; + static constexpr uint32_t phi = 16; + static constexpr uint32_t eta = 24; + }; + } // namespace calol1 + struct header_shifts { static constexpr uint32_t bxmatch = 24; static constexpr uint32_t mAcount = 16; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.cc index 492b659a42383..359ca0e976255 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.cc @@ -1,10 +1,8 @@ #include "EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.h" ScBMTFRawToDigi::ScBMTFRawToDigi(const edm::ParameterSet& iConfig) { - using namespace edm; - srcInputTag_ = iConfig.getParameter("srcInputTag"); + srcInputTag_ = iConfig.getParameter("srcInputTag"); sourceIdList_ = iConfig.getParameter>("sourceIdList"); - debug_ = iConfig.getUntrackedParameter("debug", false); // initialize orbit buffer for BX 1->3564; orbitBuffer_ = std::vector>(3565); @@ -20,9 +18,7 @@ ScBMTFRawToDigi::ScBMTFRawToDigi(const edm::ParameterSet& iConfig) { ScBMTFRawToDigi::~ScBMTFRawToDigi() {} void ScBMTFRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - - Handle ScoutingRawDataCollection; + edm::Handle ScoutingRawDataCollection; iEvent.getByToken(rawToken_, ScoutingRawDataCollection); std::unique_ptr unpackedStubs(new l1ScoutingRun3::BMTFStubOrbitCollection); @@ -35,8 +31,8 @@ void ScBMTFRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sdsId); size_t orbitSize = sourceRawData.size(); - if ((sourceRawData.size() == 0) && debug_) { - std::cout << "No raw data for BMTF FED " << sdsId << std::endl; + if (sourceRawData.size() == 0) { + LogDebug("L1Scout") << "No raw data for BMTF FED " << sdsId << "\n"; } // unpack current orbit and store data into the orbitBufferr @@ -51,8 +47,6 @@ void ScBMTFRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) } void ScBMTFRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsId) { - using namespace l1ScoutingRun3; - // reset counters nStubsOrbit_ = 0; @@ -61,7 +55,7 @@ void ScBMTFRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsI while (pos < len) { assert(pos + 4 <= len); - bmtf::block* bl = (bmtf::block*)(buf + pos); + l1ScoutingRun3::bmtf::block* bl = (l1ScoutingRun3::bmtf::block*)(buf + pos); unsigned bx = bl->bx; unsigned orbit = (bl->orbit) & 0x7FFFFFFF; @@ -73,10 +67,8 @@ void ScBMTFRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsI pos += 12; // header - if (debug_) { - std::cout << " BMTF #" << sdsId << " Orbit " << orbit << ", BX -> " << bx << ", nStubs -> " << sCount - << std::endl; - } + LogDebug("L1Scout") << " BMTF #" << sdsId << " Orbit " << orbit << ", BX -> " << bx << ", nStubs -> " << sCount + << "\n"; // Unpack stubs for the current pair (BX, sector) int32_t phi, phiB, tag, qual, eta, qeta, station, wheel, sector; @@ -87,13 +79,14 @@ void ScBMTFRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsI uint64_t stub_raw = *(uint64_t*)(buf + pos); pos += 8; - phi = ((stub_raw >> bmtf::shiftsStubs::phi) & bmtf::masksStubs::phi); - phiB = ((stub_raw >> bmtf::shiftsStubs::phiB) & bmtf::masksStubs::phiB); - qual = ((stub_raw >> bmtf::shiftsStubs::qual) & bmtf::masksStubs::qual); - eta = ((stub_raw >> bmtf::shiftsStubs::eta) & bmtf::masksStubs::eta); - qeta = ((stub_raw >> bmtf::shiftsStubs::qeta) & bmtf::masksStubs::qeta); - station = ((stub_raw >> bmtf::shiftsStubs::station) & bmtf::masksStubs::station) + 1; - wheel = ((stub_raw >> bmtf::shiftsStubs::wheel) & bmtf::masksStubs::wheel); + phi = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::phi) & l1ScoutingRun3::bmtf::masksStubs::phi); + phiB = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::phiB) & l1ScoutingRun3::bmtf::masksStubs::phiB); + qual = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::qual) & l1ScoutingRun3::bmtf::masksStubs::qual); + eta = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::eta) & l1ScoutingRun3::bmtf::masksStubs::eta); + qeta = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::qeta) & l1ScoutingRun3::bmtf::masksStubs::qeta); + station = + ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::station) & l1ScoutingRun3::bmtf::masksStubs::station) + 1; + wheel = ((stub_raw >> l1ScoutingRun3::bmtf::shiftsStubs::wheel) & l1ScoutingRun3::bmtf::masksStubs::wheel); sector = sdsId - SDSNumbering::BmtfMinSDSID; if (stwh_matrix[station - 1][wheel + 2] == false) { @@ -107,24 +100,21 @@ void ScBMTFRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsI phiB = phiB >= 512 ? phiB - 1024 : phiB; wheel = wheel >= 4 ? wheel - 8 : wheel; - BMTFStub stub(phi, phiB, qual, eta, qeta, station, wheel, sector, tag); + l1ScoutingRun3::BMTFStub stub(phi, phiB, qual, eta, qeta, station, wheel, sector, tag); orbitBuffer_[bx].push_back(stub); nStubsOrbit_++; - if (debug_) { - std::cout << "Stub " << i << ", raw: 0x" << std::hex << stub_raw << std::dec << std::endl; - std::cout << "\tPhi: " << phi << std::endl; - std::cout << "\tPhiB: " << phiB << std::endl; - std::cout << "\tQuality: " << qual << std::endl; - std::cout << "\tEta: " << eta << std::endl; - std::cout << "\tQEta: " << qeta << std::endl; - std::cout << "\tStation: " << station << std::endl; - std::cout << "\tWheel: " << wheel << std::endl; - std::cout << "\tSector: " << sector << std::endl; - std::cout << "\tTag: " << tag << std::endl; - } + LogDebug("L1Scout") << "Stub " << i << ", raw: 0x" << std::hex << stub_raw << std::dec << "\n" + << "\tPhi: " << phi << "\n" + << "\tPhiB: " << phiB << "\n" + << "\tQuality: " << qual << "\n" + << "\tEta: " << eta << "\n" + << "\tQEta: " << qeta << "\n" + << "\tStation: " << station << "\n" + << "\tWheel: " << wheel << "\n" + << "\tSector: " << sector << "\n" + << "\tTag: " << tag << "\n"; } - } // end orbit while loop } diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.h index 556d38b527d40..2201f995807d8 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScBMTFRawToDigi.h @@ -38,7 +38,6 @@ class ScBMTFRawToDigi : public edm::stream::EDProducer<> { std::vector> orbitBuffer_; int nStubsOrbit_; - bool debug_ = false; std::vector sourceIdList_; edm::InputTag srcInputTag_; edm::EDGetToken rawToken_; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc index ccc999f4922b8..cf428f3136610 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc @@ -1,43 +1,37 @@ #include "EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h" ScCaloRawToDigi::ScCaloRawToDigi(const edm::ParameterSet& iConfig) { - using namespace edm; - using namespace l1ScoutingRun3; - srcInputTag_ = iConfig.getParameter("srcInputTag"); + 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); - orbitBufferTaus_ = std::vector>(3565); - orbitBufferEtSums_ = std::vector>(3565); + orbitBufferJets_ = std::vector>(3565); + orbitBufferEGammas_ = std::vector>(3565); + orbitBufferTaus_ = std::vector>(3565); + orbitBufferEtSums_ = std::vector>(3565); nJetsOrbit_ = 0; nEGammasOrbit_ = 0; nTausOrbit_ = 0; nEtSumsOrbit_ = 0; - produces("Jet").setBranchAlias("JetOrbitCollection"); - produces("Tau").setBranchAlias("TauOrbitCollection"); - produces("EGamma").setBranchAlias("EGammaOrbitCollection"); - produces("EtSum").setBranchAlias("BxSumsOrbitCollection"); + produces("Jet").setBranchAlias("JetOrbitCollection"); + produces("Tau").setBranchAlias("TauOrbitCollection"); + produces("EGamma").setBranchAlias("EGammaOrbitCollection"); + produces("EtSum").setBranchAlias("BxSumsOrbitCollection"); } ScCaloRawToDigi::~ScCaloRawToDigi() {} void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace l1ScoutingRun3; - - Handle ScoutingRawDataCollection; + edm::Handle ScoutingRawDataCollection; 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); + std::unique_ptr unpackedJets(new l1ScoutingRun3::JetOrbitCollection); + std::unique_ptr unpackedTaus(new l1ScoutingRun3::TauOrbitCollection); + std::unique_ptr unpackedEGammas(new l1ScoutingRun3::EGammaOrbitCollection); + std::unique_ptr unpackedEtSums(new l1ScoutingRun3::BxSumsOrbitCollection); // reset counters nJetsOrbit_ = 0; @@ -87,11 +81,9 @@ void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) } void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle& ScoutingRawDataCollection, int sourceId) { - using namespace l1ScoutingRun3; - const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sourceId); - if ((sourceRawData.size() == 0) && debug_) { - std::cout << "No raw data for CALO DMA source ID=" << sourceId << std::endl; + if (sourceRawData.size() == 0) { + LogDebug("L1Scout") << "No raw data for CALO DMA source ID=" << sourceId; } // get orbit size and raw data @@ -101,52 +93,43 @@ void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle& Scou size_t pos = 0; while (pos < len) { - assert(pos + sizeof(demux::dmaBlock) <= len); + assert(pos + sizeof(l1ScoutingRun3::demux::dmaBlock) <= len); - demux::dmaBlock* bl = (demux::dmaBlock*)(buf + pos); - pos += sizeof(demux::dmaBlock); + l1ScoutingRun3::demux::dmaBlock* bl = (l1ScoutingRun3::demux::dmaBlock*)(buf + pos); + pos += sizeof(l1ScoutingRun3::demux::dmaBlock); assert(pos <= len); uint32_t orbit = bl->orbit & 0x7FFFFFFF; uint32_t bx = bl->bx; - if (debug_) { - std::cout << "CALO Orbit " << orbit << ", BX -> " << bx << std::endl; - } + LogDebug("L1Scout") << "CALO Orbit " << orbit << ", BX -> " << bx; // unpack jets from first link - if (debug_) - std::cout << "--- Jets link 1 ---\n"; + LogDebug("L1Scout") << "--- Jets link 1 ---\n"; unpackJets(bl->jet1, bx, 6); // unpack jets from second link - if (debug_) - std::cout << "--- Jets link 2 ---\n"; + LogDebug("L1Scout") << "--- Jets link 2 ---\n"; unpackJets(bl->jet2, bx, 6); // unpack eg from first link - if (debug_) - std::cout << "--- E/g link 1 ---\n"; + LogDebug("L1Scout") << "--- E/g link 1 ---\n"; unpackEGammas(bl->egamma1, bx, 6); // unpack eg from second link link - if (debug_) - std::cout << "--- E/g link 2 ---\n"; + LogDebug("L1Scout") << "--- E/g link 2 ---\n"; unpackEGammas(bl->egamma2, bx, 6); // unpack taus from first link - if (debug_) - std::cout << "--- Taus link 1 ---\n"; + LogDebug("L1Scout") << "--- Taus link 1 ---\n"; unpackTaus(bl->tau1, bx, 6); // unpack taus from second link - if (debug_) - std::cout << "--- Taus link 2 ---\n"; + LogDebug("L1Scout") << "--- Taus link 2 ---\n"; unpackTaus(bl->tau2, bx, 6); // unpack et sums - if (debug_) - std::cout << "--- Sums ---\n"; + LogDebug("L1Scout") << "--- Sums ---\n"; unpackEtSums(bl->sum, bx); } // end of bx objects @@ -155,7 +138,6 @@ void ScCaloRawToDigi::unpackOrbitFromDMA(edm::Handle& Scou void ScCaloRawToDigi::unpackTcpData(edm::Handle& ScoutingRawDataCollection, std::vector sourceList, CaloObjectType dataType) { - using namespace l1ScoutingRun3; for (const int& sourceId : sourceList) { if ((sourceId < SDSNumbering::CaloTCPMinSDSID) || (sourceId > SDSNumbering::CaloTCPMaxSDSID)) { edm::LogWarning("ScCaloRawToDIgi::unpackTCPData") @@ -166,9 +148,8 @@ void ScCaloRawToDigi::unpackTcpData(edm::Handle& ScoutingR 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; + if (sourceRawData.size() == 0) { + LogDebug("L1Scout") << "No raw data for calo TCP source ID=" << sourceId << "\n"; } unpackOrbitFromTCP(sourceRawData.data(), orbitSize, dataType); @@ -176,7 +157,6 @@ void ScCaloRawToDigi::unpackTcpData(edm::Handle& ScoutingR } void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, CaloObjectType dataType) { - using namespace l1ScoutingRun3; size_t pos = 0; while (pos < len) { @@ -185,34 +165,30 @@ void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, C // unpack calo sums block if (dataType == CaloObjectType::EtSum) { - demux::caloSumTcpBlock* bl = (demux::caloSumTcpBlock*)(buf + pos); - pos += sizeof(demux::caloSumTcpBlock); + l1ScoutingRun3::demux::caloSumTcpBlock* bl = (l1ScoutingRun3::demux::caloSumTcpBlock*)(buf + pos); + pos += sizeof(l1ScoutingRun3::demux::caloSumTcpBlock); assert(pos <= len); - if (debug_) - std::cout << "Sums BX -> " << bl->bx << std::endl; + LogDebug("L1Scout") << "Sums BX -> " << bl->bx; unpackEtSums(bl->sum, bl->bx); } else { // unpack jet/eg/tau - demux::caloObjTcpBlock* bl = (demux::caloObjTcpBlock*)(buf + pos); + l1ScoutingRun3::demux::caloObjTcpBlock* bl = (l1ScoutingRun3::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; + LogDebug("L1Scout") << "Jets BX -> " << bl->bx; unpackJets(bl->obj, bl->bx, nObj); break; case CaloObjectType::EGamma: - if (debug_) - std::cout << "E/Gammas BX -> " << bl->bx << std::endl; + LogDebug("L1Scout") << "E/Gammas BX -> " << bl->bx; unpackEGammas(bl->obj, bl->bx, nObj); break; case CaloObjectType::Tau: - if (debug_) - std::cout << "Taus BX -> " << bl->bx << std::endl; + LogDebug("L1Scout") << "Taus BX -> " << bl->bx; unpackTaus(bl->obj, bl->bx, nObj); break; @@ -227,91 +203,88 @@ void ScCaloRawToDigi::unpackOrbitFromTCP(const unsigned char* buf, size_t len, C } void ScCaloRawToDigi::unpackJets(uint32_t* dataBlock, int bx, int nObjets) { - using namespace l1ScoutingRun3; - int32_t ET(0), Eta(0), Phi(0), Qual(0); for (int i = 0; i < nObjets; i++) { - ET = ((dataBlock[i] >> demux::shiftsJet::ET) & demux::masksJet::ET); + ET = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsJet::ET) & l1ScoutingRun3::demux::masksJet::ET); if (ET != 0) { - Eta = ((dataBlock[i] >> demux::shiftsJet::eta) & demux::masksJet::eta); - Phi = ((dataBlock[i] >> demux::shiftsJet::phi) & demux::masksJet::phi); - Qual = ((dataBlock[i] >> demux::shiftsJet::qual) & demux::masksJet::qual); + Eta = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsJet::eta) & l1ScoutingRun3::demux::masksJet::eta); + Phi = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsJet::phi) & l1ScoutingRun3::demux::masksJet::phi); + Qual = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsJet::qual) & l1ScoutingRun3::demux::masksJet::qual); if (Eta > 127) Eta = Eta - 256; - Jet jet(ET, Eta, Phi, Qual); + l1ScoutingRun3::Jet jet(ET, Eta, Phi, Qual); orbitBufferJets_[bx].push_back(jet); nJetsOrbit_++; - - if (debug_) { - std::cout << "Jet " << i << std::endl; - std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; - printJet(jet); + if (edm::MessageDrop::instance()->debugEnabled) { + std::ostringstream os; + os << "Jet " << i << "\n"; + os << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << "\n"; + l1ScoutingRun3::printJet(jet, os); + LogDebug("L1Scout") << os.str(); } } } // end link jets unpacking loop } void ScCaloRawToDigi::unpackEGammas(uint32_t* dataBlock, int bx, int nObjets) { - using namespace l1ScoutingRun3; - int32_t ET(0), Eta(0), Phi(0), Iso(0); for (int i = 0; i < nObjets; i++) { - ET = ((dataBlock[i] >> demux::shiftsEGamma::ET) & demux::masksEGamma::ET); + ET = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsEGamma::ET) & l1ScoutingRun3::demux::masksEGamma::ET); if (ET != 0) { - Eta = ((dataBlock[i] >> demux::shiftsEGamma::eta) & demux::masksEGamma::eta); - Phi = ((dataBlock[i] >> demux::shiftsEGamma::phi) & demux::masksEGamma::phi); - Iso = ((dataBlock[i] >> demux::shiftsEGamma::iso) & demux::masksEGamma::iso); + Eta = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsEGamma::eta) & l1ScoutingRun3::demux::masksEGamma::eta); + Phi = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsEGamma::phi) & l1ScoutingRun3::demux::masksEGamma::phi); + Iso = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsEGamma::iso) & l1ScoutingRun3::demux::masksEGamma::iso); if (Eta > 127) Eta = Eta - 256; - EGamma eGamma(ET, Eta, Phi, Iso); + l1ScoutingRun3::EGamma eGamma(ET, Eta, Phi, Iso); orbitBufferEGammas_[bx].push_back(eGamma); nEGammasOrbit_++; - if (debug_) { - std::cout << "E/g " << i << std::endl; - std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; - printEGamma(eGamma); + if (edm::MessageDrop::instance()->debugEnabled) { + std::ostringstream os; + os << "E/g " << i << "\n"; + os << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << "\n"; + l1ScoutingRun3::printEGamma(eGamma, os); + LogDebug("L1Scout") << os.str(); } } } // end link e/gammas unpacking loop } void ScCaloRawToDigi::unpackTaus(uint32_t* dataBlock, int bx, int nObjets) { - using namespace l1ScoutingRun3; - int32_t ET(0), Eta(0), Phi(0), Iso(0); for (int i = 0; i < nObjets; i++) { - ET = ((dataBlock[i] >> demux::shiftsTau::ET) & demux::masksTau::ET); + ET = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsTau::ET) & l1ScoutingRun3::demux::masksTau::ET); if (ET != 0) { - Eta = ((dataBlock[i] >> demux::shiftsTau::eta) & demux::masksTau::eta); - Phi = ((dataBlock[i] >> demux::shiftsTau::phi) & demux::masksTau::phi); - Iso = ((dataBlock[i] >> demux::shiftsTau::iso) & demux::masksTau::iso); + Eta = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsTau::eta) & l1ScoutingRun3::demux::masksTau::eta); + Phi = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsTau::phi) & l1ScoutingRun3::demux::masksTau::phi); + Iso = ((dataBlock[i] >> l1ScoutingRun3::demux::shiftsTau::iso) & l1ScoutingRun3::demux::masksTau::iso); if (Eta > 127) Eta = Eta - 256; - Tau tau(ET, Eta, Phi, Iso); + l1ScoutingRun3::Tau tau(ET, Eta, Phi, Iso); orbitBufferTaus_[bx].push_back(tau); nTausOrbit_++; - if (debug_) { - std::cout << "Tau " << i << std::endl; - std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; - printTau(tau); + if (edm::MessageDrop::instance()->debugEnabled) { + std::ostringstream os; + os << "Tau " << i << "\n"; + os << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << "\n"; + l1ScoutingRun3::printTau(tau, os); + LogDebug("L1Scout") << os.str(); } } } // end link taus unpacking loop } void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { - using namespace l1ScoutingRun3; - - BxSums bxSums; + l1ScoutingRun3::BxSums bxSums; int32_t ETEt(0), ETEttem(0), ETMinBiasHFP0(0); // ET block int32_t HTEt(0), HTtowerCount(0), HTMinBiasHFM0(0); // HT block @@ -321,20 +294,23 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { int32_t HTHFmissEt(0), HTHFmissPhi(0), HTHFmissASYMHTHF(0), HTHFmissCENT(0); // HTHFMiss block // ET block - ETEt = ((dataBlock[0] >> demux::shiftsESums::ETEt) & demux::masksESums::ETEt); - ETEttem = ((dataBlock[0] >> demux::shiftsESums::ETEttem) & demux::masksESums::ETEttem); + ETEt = ((dataBlock[0] >> l1ScoutingRun3::demux::shiftsESums::ETEt) & l1ScoutingRun3::demux::masksESums::ETEt); + ETEttem = + ((dataBlock[0] >> l1ScoutingRun3::demux::shiftsESums::ETEttem) & l1ScoutingRun3::demux::masksESums::ETEttem); bxSums.setHwTotalEt(ETEt); bxSums.setHwTotalEtEm(ETEttem); // HT block - HTEt = ((dataBlock[1] >> demux::shiftsESums::HTEt) & demux::masksESums::HTEt); + HTEt = ((dataBlock[1] >> l1ScoutingRun3::demux::shiftsESums::HTEt) & l1ScoutingRun3::demux::masksESums::HTEt); bxSums.setHwTotalHt(HTEt); // ETMiss block - ETmissEt = ((dataBlock[2] >> demux::shiftsESums::ETmissEt) & demux::masksESums::ETmissEt); - ETmissPhi = ((dataBlock[2] >> demux::shiftsESums::ETmissPhi) & demux::masksESums::ETmissPhi); + ETmissEt = + ((dataBlock[2] >> l1ScoutingRun3::demux::shiftsESums::ETmissEt) & l1ScoutingRun3::demux::masksESums::ETmissEt); + ETmissPhi = + ((dataBlock[2] >> l1ScoutingRun3::demux::shiftsESums::ETmissPhi) & l1ScoutingRun3::demux::masksESums::ETmissPhi); if (ETmissEt > 0) { bxSums.setHwMissEt(ETmissEt); @@ -342,8 +318,10 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { } // HTMiss block - HTmissEt = ((dataBlock[3] >> demux::shiftsESums::HTmissEt) & demux::masksESums::HTmissEt); - HTmissPhi = ((dataBlock[3] >> demux::shiftsESums::HTmissPhi) & demux::masksESums::HTmissPhi); + HTmissEt = + ((dataBlock[3] >> l1ScoutingRun3::demux::shiftsESums::HTmissEt) & l1ScoutingRun3::demux::masksESums::HTmissEt); + HTmissPhi = + ((dataBlock[3] >> l1ScoutingRun3::demux::shiftsESums::HTmissPhi) & l1ScoutingRun3::demux::masksESums::HTmissPhi); if (HTmissEt > 0) { bxSums.setHwMissHt(HTmissEt); @@ -351,8 +329,10 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { } // ETHFMiss block - ETHFmissEt = ((dataBlock[4] >> demux::shiftsESums::ETHFmissEt) & demux::masksESums::ETHFmissEt); - ETHFmissPhi = ((dataBlock[4] >> demux::shiftsESums::ETHFmissPhi) & demux::masksESums::ETHFmissPhi); + ETHFmissEt = ((dataBlock[4] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissEt) & + l1ScoutingRun3::demux::masksESums::ETHFmissEt); + ETHFmissPhi = ((dataBlock[4] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissPhi) & + l1ScoutingRun3::demux::masksESums::ETHFmissPhi); if (ETHFmissEt > 0) { bxSums.setHwMissEtHF(ETHFmissEt); @@ -360,8 +340,10 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { } // HTHFMiss block - HTHFmissEt = ((dataBlock[5] >> demux::shiftsESums::ETHFmissEt) & demux::masksESums::ETHFmissEt); - HTHFmissPhi = ((dataBlock[5] >> demux::shiftsESums::ETHFmissPhi) & demux::masksESums::ETHFmissPhi); + HTHFmissEt = ((dataBlock[5] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissEt) & + l1ScoutingRun3::demux::masksESums::ETHFmissEt); + HTHFmissPhi = ((dataBlock[5] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissPhi) & + l1ScoutingRun3::demux::masksESums::ETHFmissPhi); if (HTHFmissEt > 0) { bxSums.setHwMissHtHF(HTHFmissEt); @@ -371,38 +353,49 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { // Insert additional sums if (enableAllSums_) { // ET block - ETMinBiasHFP0 = ((dataBlock[0] >> demux::shiftsESums::ETMinBiasHF) & demux::masksESums::ETMinBiasHF); + ETMinBiasHFP0 = ((dataBlock[0] >> l1ScoutingRun3::demux::shiftsESums::ETMinBiasHF) & + l1ScoutingRun3::demux::masksESums::ETMinBiasHF); bxSums.setMinBiasHFP0(ETMinBiasHFP0); // HT block - HTtowerCount = ((dataBlock[1] >> demux::shiftsESums::HTtowerCount) & demux::masksESums::HTtowerCount); - HTMinBiasHFM0 = ((dataBlock[1] >> demux::shiftsESums::HTMinBiasHF) & demux::masksESums::HTMinBiasHF); + HTtowerCount = ((dataBlock[1] >> l1ScoutingRun3::demux::shiftsESums::HTtowerCount) & + l1ScoutingRun3::demux::masksESums::HTtowerCount); + HTMinBiasHFM0 = ((dataBlock[1] >> l1ScoutingRun3::demux::shiftsESums::HTMinBiasHF) & + l1ScoutingRun3::demux::masksESums::HTMinBiasHF); bxSums.setTowerCount(HTtowerCount); bxSums.setMinBiasHFM0(HTMinBiasHFM0); // ET Miss block - ETmissASYMET = ((dataBlock[2] >> demux::shiftsESums::ETmissASYMET) & demux::masksESums::ETmissASYMET); - ETmissMinBiasHFP1 = ((dataBlock[2] >> demux::shiftsESums::ETmissMinBiasHF) & demux::masksESums::ETmissMinBiasHF); + ETmissASYMET = ((dataBlock[2] >> l1ScoutingRun3::demux::shiftsESums::ETmissASYMET) & + l1ScoutingRun3::demux::masksESums::ETmissASYMET); + ETmissMinBiasHFP1 = ((dataBlock[2] >> l1ScoutingRun3::demux::shiftsESums::ETmissMinBiasHF) & + l1ScoutingRun3::demux::masksESums::ETmissMinBiasHF); bxSums.setHwAsymEt(ETmissASYMET); bxSums.setMinBiasHFP1(ETmissMinBiasHFP1); // HT Miss block - HTmissASYMHT = ((dataBlock[3] >> demux::shiftsESums::HTmissASYMHT) & demux::masksESums::HTmissASYMHT); - HTmissMinBiasHFM1 = ((dataBlock[3] >> demux::shiftsESums::HTmissMinBiasHF) & demux::masksESums::HTmissMinBiasHF); + HTmissASYMHT = ((dataBlock[3] >> l1ScoutingRun3::demux::shiftsESums::HTmissASYMHT) & + l1ScoutingRun3::demux::masksESums::HTmissASYMHT); + HTmissMinBiasHFM1 = ((dataBlock[3] >> l1ScoutingRun3::demux::shiftsESums::HTmissMinBiasHF) & + l1ScoutingRun3::demux::masksESums::HTmissMinBiasHF); bxSums.setHwAsymHt(HTmissASYMHT); bxSums.setMinBiasHFM1(HTmissMinBiasHFM1); // ETHFMiss - ETHFmissASYMETHF = ((dataBlock[4] >> demux::shiftsESums::ETHFmissASYMETHF) & demux::masksESums::ETHFmissASYMETHF); - ETHFmissCENT = ((dataBlock[4] >> demux::shiftsESums::ETHFmissCENT) & demux::masksESums::ETHFmissCENT); + ETHFmissASYMETHF = ((dataBlock[4] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissASYMETHF) & + l1ScoutingRun3::demux::masksESums::ETHFmissASYMETHF); + ETHFmissCENT = ((dataBlock[4] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissCENT) & + l1ScoutingRun3::demux::masksESums::ETHFmissCENT); bxSums.setHwAsymEtHF(ETHFmissASYMETHF); // HTHFMiss - HTHFmissASYMHTHF = ((dataBlock[5] >> demux::shiftsESums::ETHFmissASYMETHF) & demux::masksESums::ETHFmissASYMETHF); - HTHFmissCENT = ((dataBlock[5] >> demux::shiftsESums::ETHFmissCENT) & demux::masksESums::ETHFmissCENT); + HTHFmissASYMHTHF = ((dataBlock[5] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissASYMETHF) & + l1ScoutingRun3::demux::masksESums::ETHFmissASYMETHF); + HTHFmissCENT = ((dataBlock[5] >> l1ScoutingRun3::demux::shiftsESums::ETHFmissCENT) & + l1ScoutingRun3::demux::masksESums::ETHFmissCENT); bxSums.setHwAsymHtHF(HTHFmissASYMHTHF); bxSums.setCentrality((HTHFmissCENT << 4) + ETHFmissCENT); @@ -411,12 +404,14 @@ void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { orbitBufferEtSums_[bx].push_back(bxSums); nEtSumsOrbit_ += 1; - if (debug_) { - std::cout << "Raw frames:\n"; + if (edm::MessageDrop::instance()->debugEnabled) { + std::ostringstream os; + os << "Raw frames:\n"; for (int frame = 0; frame < 6; frame++) { - std::cout << " frame " << frame << ": 0x" << std::hex << dataBlock[frame] << std::dec << std::endl; + os << " frame " << frame << ": 0x" << std::hex << dataBlock[frame] << std::dec << "\n"; + l1ScoutingRun3::printBxSums(bxSums, os); } - printBxSums(bxSums); + LogDebug("L1Scout") << os.str(); } } diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h index 0c5e457c8cdaa..1430c5337a5ed 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -53,7 +53,6 @@ class ScCaloRawToDigi : public edm::stream::EDProducer<> { std::vector> orbitBufferTaus_; std::vector> orbitBufferEtSums_; - bool debug_ = false; bool enableAllSums_ = false; // write the full sert of ET sums edm::InputTag srcInputTag_; edm::EDGetToken rawToken_; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.cc new file mode 100644 index 0000000000000..cd53d76b55d8a --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.cc @@ -0,0 +1,109 @@ +#include "EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.h" + +ScCaloTowerRawToDigi::ScCaloTowerRawToDigi(const edm::ParameterSet& iConfig) { + srcInputTag_ = iConfig.getParameter("srcInputTag"); + sourceIdList_ = iConfig.getParameter>("sourceIdList"); + + // initialize orbit buffer for BX 1->3564; + orbitBuffer_ = std::vector>(3565); + for (auto& bxVec : orbitBuffer_) { + bxVec.reserve(4096); + } + nCaloTowersOrbit_ = 0; + + produces("CaloTower").setBranchAlias("CaloTowerOrbitCollection"); + rawToken_ = consumes(srcInputTag_); +} + +ScCaloTowerRawToDigi::~ScCaloTowerRawToDigi() {} + +void ScCaloTowerRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + edm::Handle ScoutingRawDataCollection; + iEvent.getByToken(rawToken_, ScoutingRawDataCollection); + + std::unique_ptr unpackedCaloTowers( + new l1ScoutingRun3::CaloTowerOrbitCollection); + + for (const auto& sdsId : sourceIdList_) { + if ((sdsId < SDSNumbering::CaloTowerMinSDSID) || (sdsId > SDSNumbering::CaloTowerMaxSDSID)) + edm::LogError("ScCaloTowerRawToDigi::produce") + << "Provided a source ID outside the expected range: " << sdsId << ", expected range [" + << SDSNumbering::CaloTowerMinSDSID << ", " << SDSNumbering::CaloTowerMaxSDSID; + const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(sdsId); + size_t orbitSize = sourceRawData.size(); + + if (sourceRawData.size() == 0) { + LogDebug("L1Scout") << "No raw data for CaloTower FED " << sdsId; + } + + // unpack current orbit and store data into the orbitBufferr + unpackOrbit(sourceRawData.data(), orbitSize, sdsId); + } + + // fill orbit collection and clear the Bx buffer vector + unpackedCaloTowers->fillAndClear(orbitBuffer_, nCaloTowersOrbit_); + + // store collection in the event + iEvent.put(std::move(unpackedCaloTowers), "CaloTower"); +} + +void ScCaloTowerRawToDigi::unpackOrbit(const unsigned char* buf, size_t len, int sdsId) { + // reset counters + nCaloTowersOrbit_ = 0; + + size_t pos = 0; + + while (pos < len) { + assert(pos + 4 <= len); + + l1ScoutingRun3::calol1::block* bl = (l1ScoutingRun3::calol1::block*)(buf + pos); + + unsigned bx = bl->bx; + unsigned orbit = (bl->orbit) & 0x7FFFFFFF; + unsigned ctCount = bl->header; + + size_t pos_increment = 12 + ctCount * 4; + + assert(pos_increment <= len); + + pos += 12; // header + + LogDebug("L1Scout") << " CaloTower #" << sdsId << " Orbit " << orbit << ", BX -> " << bx << ", nCaloTowers -> " + << ctCount; + + // Unpack calo towers + int16_t ET, erBits, miscBits, eta, phi; + + for (unsigned int i = 0; i < ctCount; i++) { + uint64_t ct_raw = *(uint32_t*)(buf + pos); + pos += 4; + + ET = ((ct_raw >> l1ScoutingRun3::calol1::shiftsCaloTowers::ET) & l1ScoutingRun3::calol1::masksCaloTowers::ET); + erBits = ((ct_raw >> l1ScoutingRun3::calol1::shiftsCaloTowers::erBits) & + l1ScoutingRun3::calol1::masksCaloTowers::erBits); + miscBits = ((ct_raw >> l1ScoutingRun3::calol1::shiftsCaloTowers::miscBits) & + l1ScoutingRun3::calol1::masksCaloTowers::miscBits); + phi = ((ct_raw >> l1ScoutingRun3::calol1::shiftsCaloTowers::phi) & l1ScoutingRun3::calol1::masksCaloTowers::phi); + + eta = ((ct_raw >> l1ScoutingRun3::calol1::shiftsCaloTowers::eta) & l1ScoutingRun3::calol1::masksCaloTowers::eta); + eta = eta >= 128 ? eta - 256 : eta; + + l1ScoutingRun3::CaloTower ct(ET, erBits, miscBits, eta, phi); + orbitBuffer_[bx].push_back(ct); + nCaloTowersOrbit_++; + + LogDebug("L1Scout") << "Calo Tower " << i << ", raw: 0x" << std::hex << ct_raw << std::dec << "\tET: " << ET + << "\tER bits: " << erBits << "\tMisc bits: " << miscBits << "\tEta: " << eta + << "\tPhi: " << phi; + } + + } // end orbit while loop +} + +void ScCaloTowerRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(ScCaloTowerRawToDigi); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.h new file mode 100644 index 0000000000000..5fd96982f3e1a --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCaloTowerRawToDigi.h @@ -0,0 +1,44 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSNumbering.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +#include "DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h" + +#include "EventFilter/L1ScoutingRawToDigi/interface/shifts.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/masks.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/blocks.h" +#include "L1TriggerScouting/Utilities/interface/printScObjects.h" + +#include +#include +#include + +class ScCaloTowerRawToDigi : public edm::stream::EDProducer<> { +public: + explicit ScCaloTowerRawToDigi(const edm::ParameterSet&); + ~ScCaloTowerRawToDigi() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::Event&, const edm::EventSetup&) override; + + void unpackOrbit(const unsigned char* buf, size_t len, int sdsId); + + // vector holding data for every bunch crossing + // before filling the orbit collection + std::vector> orbitBuffer_; + int nCaloTowersOrbit_; + + std::vector sourceIdList_; + edm::InputTag srcInputTag_; + edm::EDGetToken rawToken_; +}; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc index 296db5f3e3319..64a28f0ff044c 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc @@ -1,10 +1,8 @@ #include "EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h" ScGMTRawToDigi::ScGMTRawToDigi(const edm::ParameterSet& iConfig) { - using namespace edm; - srcInputTag = iConfig.getParameter("srcInputTag"); + srcInputTag = iConfig.getParameter("srcInputTag"); skipInterm_ = iConfig.getParameter("skipInterm"); - debug_ = iConfig.getUntrackedParameter("debug", false); // initialize orbit buffer for BX 1->3564; orbitBuffer_ = std::vector>(3565); @@ -20,9 +18,7 @@ ScGMTRawToDigi::ScGMTRawToDigi(const edm::ParameterSet& iConfig) { ScGMTRawToDigi::~ScGMTRawToDigi() {} void ScGMTRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - - Handle ScoutingRawDataCollection; + edm::Handle ScoutingRawDataCollection; iEvent.getByToken(rawToken, ScoutingRawDataCollection); const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(SDSNumbering::GmtSDSID); @@ -30,8 +26,8 @@ void ScGMTRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) std::unique_ptr unpackedMuons(new l1ScoutingRun3::MuonOrbitCollection); - if ((sourceRawData.size() == 0) && debug_) { - std::cout << "No raw data for GMT FED\n"; + if (sourceRawData.size() == 0) { + LogDebug("L1Scout") << "No raw data for GMT FED\n"; } // unpack current orbit and store data into the orbitBufferr @@ -45,8 +41,6 @@ void ScGMTRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) } void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { - using namespace l1ScoutingRun3; - // reset counters nMuonsOrbit_ = 0; @@ -59,66 +53,71 @@ void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { uint32_t header = *((uint32_t*)(buf + pos)); pos += 4; // count mA and mB - uint32_t mAcount = (header & header_masks::mAcount) >> header_shifts::mAcount; - uint32_t mBcount = (header & header_masks::mBcount) >> header_shifts::mBcount; + uint32_t mAcount = (header & l1ScoutingRun3::header_masks::mAcount) >> l1ScoutingRun3::header_shifts::mAcount; + uint32_t mBcount = (header & l1ScoutingRun3::header_masks::mBcount) >> l1ScoutingRun3::header_shifts::mBcount; // declare block to read - ugmt::block* bl = (ugmt::block*)(buf + pos); + l1ScoutingRun3::ugmt::block* bl = (l1ScoutingRun3::ugmt::block*)(buf + pos); pos += 4 + 4 + (mAcount + mBcount) * 12; assert(pos <= len); uint32_t orbit = bl->orbit & 0x7FFFFFFF; uint32_t bx = bl->bx; - if (debug_) { - std::cout << "GMT Orbit " << orbit << ", BX -> " << bx << ", nMuons -> " << mAcount + mBcount << std::endl; - } + LogDebug("L1Scout") << "GMT Orbit " << orbit << ", BX -> " << bx << ", nMuons -> " << mAcount + mBcount; // Unpack muons for this BX orbitBuffer_[bx].reserve(mAcount + mBcount); for (unsigned int i = 0; i < mAcount + mBcount; i++) { - uint32_t interm = (bl->mu[i].extra >> ugmt::shiftsMuon::interm) & ugmt::masksMuon::interm; + uint32_t interm = + (bl->mu[i].extra >> l1ScoutingRun3::ugmt::shiftsMuon::interm) & l1ScoutingRun3::ugmt::masksMuon::interm; if ((interm == 1) && (skipInterm_)) { - if (debug_) { - std::cout << " -> Excluding intermediate muon\n"; - } + LogDebug("L1Scout") << " -> Excluding intermediate muon\n"; continue; } - uint32_t index = (bl->mu[i].s >> ugmt::shiftsMuon::index) & ugmt::masksMuon::index; - uint32_t ietaextu = (bl->mu[i].f >> ugmt::shiftsMuon::etaext) & ugmt::masksMuon::etaextv; + uint32_t index = + (bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::index) & l1ScoutingRun3::ugmt::masksMuon::index; + uint32_t ietaextu = + (bl->mu[i].f >> l1ScoutingRun3::ugmt::shiftsMuon::etaext) & l1ScoutingRun3::ugmt::masksMuon::etaextv; int32_t ietaext; - if (((bl->mu[i].f >> ugmt::shiftsMuon::etaext) & ugmt::masksMuon::etaexts) != 0) { + if (((bl->mu[i].f >> l1ScoutingRun3::ugmt::shiftsMuon::etaext) & l1ScoutingRun3::ugmt::masksMuon::etaexts) != 0) { ietaext = ietaextu -= 256; } else { ietaext = ietaextu; } // extract pt and quality and apply cut if required - int32_t iptuncon = (bl->mu[i].s >> ugmt::shiftsMuon::ptuncon) & ugmt::masksMuon::ptuncon; - int32_t ipt = (bl->mu[i].f >> ugmt::shiftsMuon::pt) & ugmt::masksMuon::pt; + int32_t iptuncon = + (bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::ptuncon) & l1ScoutingRun3::ugmt::masksMuon::ptuncon; + int32_t ipt = (bl->mu[i].f >> l1ScoutingRun3::ugmt::shiftsMuon::pt) & l1ScoutingRun3::ugmt::masksMuon::pt; if ((ipt - 1) < 0) { continue; } - uint32_t qual = (bl->mu[i].f >> ugmt::shiftsMuon::qual) & ugmt::masksMuon::qual; + uint32_t qual = (bl->mu[i].f >> l1ScoutingRun3::ugmt::shiftsMuon::qual) & l1ScoutingRun3::ugmt::masksMuon::qual; // extract integer value for extrapolated phi - int32_t iphiext = ((bl->mu[i].f >> ugmt::shiftsMuon::phiext) & ugmt::masksMuon::phiext); + int32_t iphiext = + ((bl->mu[i].f >> l1ScoutingRun3::ugmt::shiftsMuon::phiext) & l1ScoutingRun3::ugmt::masksMuon::phiext); // extract integer value for extrapolated phi - int32_t idxy = ((bl->mu[i].s >> ugmt::shiftsMuon::dxy) & ugmt::masksMuon::dxy); + int32_t idxy = ((bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::dxy) & l1ScoutingRun3::ugmt::masksMuon::dxy); // extract iso bits and charge - uint32_t iso = (bl->mu[i].s >> ugmt::shiftsMuon::iso) & ugmt::masksMuon::iso; + uint32_t iso = (bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::iso) & l1ScoutingRun3::ugmt::masksMuon::iso; int32_t chrg = 0; - if (((bl->mu[i].s >> ugmt::shiftsMuon::chrgv) & ugmt::masksMuon::chrgv) == 1) - chrg = ((bl->mu[i].s >> ugmt::shiftsMuon::chrg) & ugmt::masksMuon::chrg) == 1 ? -1 : 1; + if (((bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::chrgv) & l1ScoutingRun3::ugmt::masksMuon::chrgv) == 1) + chrg = ((bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::chrg) & l1ScoutingRun3::ugmt::masksMuon::chrg) == 1 + ? -1 + : 1; // extract eta and phi at muon station - int32_t iphi = (bl->mu[i].s >> ugmt::shiftsMuon::phi) & ugmt::masksMuon::phi; - uint32_t ieta1 = (bl->mu[i].extra >> ugmt::shiftsMuon::eta1) & ugmt::masksMuon::eta; - uint32_t ieta2 = (bl->mu[i].extra >> ugmt::shiftsMuon::eta2) & ugmt::masksMuon::eta; + int32_t iphi = (bl->mu[i].s >> l1ScoutingRun3::ugmt::shiftsMuon::phi) & l1ScoutingRun3::ugmt::masksMuon::phi; + uint32_t ieta1 = + (bl->mu[i].extra >> l1ScoutingRun3::ugmt::shiftsMuon::eta1) & l1ScoutingRun3::ugmt::masksMuon::eta; + uint32_t ieta2 = + (bl->mu[i].extra >> l1ScoutingRun3::ugmt::shiftsMuon::eta2) & l1ScoutingRun3::ugmt::masksMuon::eta; uint32_t ieta_u; int32_t ieta; @@ -143,12 +142,14 @@ void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { orbitBuffer_[bx].push_back(muon); - if (debug_) { - std::cout << "--- Muon " << i << " ---\n"; - std::cout << " Raw f: 0x" << std::hex << bl->mu[i].f << std::dec << "\n"; - std::cout << " Raw s: 0x" << std::hex << bl->mu[i].s << std::dec << "\n"; - std::cout << " Raw extra: 0x" << std::hex << bl->mu[i].extra << std::dec << "\n"; - printMuon(muon); + if (edm::MessageDrop::instance()->debugEnabled) { + std::ostringstream os; + LogDebug("L1Scout") << "--- Muon " << i << " ---\n" + << " Raw f: 0x" << std::hex << bl->mu[i].f << std::dec << "\n" + << " Raw s: 0x" << std::hex << bl->mu[i].s << std::dec << "\n" + << " Raw extra: 0x" << std::hex << bl->mu[i].extra << std::dec << "\n"; + printMuon(muon, os); + LogDebug("L1Scout") << os.str(); } } // end of bx diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h index fd273b28c8e89..e9589f1ce7b6e 100644 --- a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h @@ -2,6 +2,7 @@ #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/StreamID.h" @@ -38,7 +39,6 @@ class ScGMTRawToDigi : public edm::stream::EDProducer<> { std::vector> orbitBuffer_; int nMuonsOrbit_; - bool debug_ = false; bool skipInterm_ = true; edm::InputTag srcInputTag; edm::EDGetToken rawToken; diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScBMTFRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScBMTFRawToDigi_cfi.py index 3ed829b0eadc3..fd4f817b56ef3 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScBMTFRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScBMTFRawToDigi_cfi.py @@ -2,8 +2,6 @@ ScBMTFUnpacker = cms.EDProducer('ScBMTFRawToDigi', srcInputTag = cms.InputTag('rawDataCollector'), - sourceIdList = cms.vint32(10,11,12,13,14,15,16,17,18,19,20,21), - # print all objects - debug = cms.untracked.bool(False) + sourceIdList = cms.vint32(10,11,12,13,14,15,16,17,18,19,20,21) ) diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py index 26bcf2294adca..cbbdf8ef368b5 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScCaloRawToDigi_cfi.py @@ -20,8 +20,6 @@ # 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) + enableAllSums = cms.bool(True) ) diff --git a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py index c184c7887127a..a0a3c16ddd504 100644 --- a/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py +++ b/EventFilter/L1ScoutingRawToDigi/python/ScGMTRawToDigi_cfi.py @@ -3,8 +3,6 @@ ScGmtUnpacker = cms.EDProducer('ScGMTRawToDigi', srcInputTag = cms.InputTag('rawDataCollector'), # skip intermediate muons - skipInterm = cms.bool(True), - # print all objects - debug = cms.untracked.bool(False) + skipInterm = cms.bool(True) ) diff --git a/L1TriggerScouting/OnlineProcessing/BuildFile.xml b/L1TriggerScouting/OnlineProcessing/BuildFile.xml index ed0c6b09e7d25..cbffbbc7e0631 100644 --- a/L1TriggerScouting/OnlineProcessing/BuildFile.xml +++ b/L1TriggerScouting/OnlineProcessing/BuildFile.xml @@ -5,6 +5,7 @@ + diff --git a/L1TriggerScouting/OnlineProcessing/plugins/BuildFile.xml b/L1TriggerScouting/OnlineProcessing/plugins/BuildFile.xml index 143cb4411558b..7e7754cd5a8f2 100644 --- a/L1TriggerScouting/OnlineProcessing/plugins/BuildFile.xml +++ b/L1TriggerScouting/OnlineProcessing/plugins/BuildFile.xml @@ -6,4 +6,5 @@ + diff --git a/L1TriggerScouting/OnlineProcessing/plugins/ScoutingJetProducer.cc b/L1TriggerScouting/OnlineProcessing/plugins/ScoutingJetProducer.cc new file mode 100644 index 0000000000000..9308cab2a3912 --- /dev/null +++ b/L1TriggerScouting/OnlineProcessing/plugins/ScoutingJetProducer.cc @@ -0,0 +1,114 @@ +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCaloTower.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingFastJet.h" + +#include "L1TriggerScouting/Utilities/interface/conversion.h" + +// root libraries +#include "TLorentzVector.h" +#include "Math/VectorUtil.h" + +// fastjet libraries +#include "fastjet/ClusterSequence.hh" + +#include +#include +#include + +using namespace l1ScoutingRun3; + +class ScoutingJetProducer : public edm::stream::EDProducer<> { +public: + explicit ScoutingJetProducer(const edm::ParameterSet&); + ~ScoutingJetProducer() override {} + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::Event&, const edm::EventSetup&) override; + + // tokens for scouting data + edm::EDGetTokenT> src_; + double akR_; + double ptMin_; + bool debug_; +}; + +ScoutingJetProducer::ScoutingJetProducer(const edm::ParameterSet& iPSet) + : src_(consumes(iPSet.getParameter("src"))), + akR_(iPSet.getParameter("akR")), + ptMin_(iPSet.getParameter("ptMin")), + debug_(iPSet.getParameter("debug")) { + produces>("FastJet").setBranchAlias("FastJetOrbitCollection"); +} + +// ------------ method called for each ORBIT ------------ +void ScoutingJetProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + edm::Handle> caloTowerCollection; + iEvent.getByToken(src_, caloTowerCollection); + + std::unique_ptr> fastJetCollection(new FastJetOrbitCollection); + std::vector> fastJetBuffer(3565); + unsigned nFastJet = 0; + + // define fastjet algorithm + fastjet::JetDefinition jetDef(fastjet::antikt_algorithm, akR_); + + // loop over valid bunch crossings + for (const unsigned& bx : caloTowerCollection->getFilledBxs()) { + const auto& cts = caloTowerCollection->bxIterator(bx); + + // create pseudojet vector to be filled + std::vector pjCTs; + pjCTs.reserve(cts.size()); + + // prepare pseudojets to give in input to fastjet + for (const auto& ct : cts) { + ROOT::Math::PtEtaPhiMVector ctLV(calol1::fEt(ct.hwEt()), calol1::fEta(ct.hwEta()), calol1::fPhi(ct.hwPhi()), 0); + pjCTs.push_back(fastjet::PseudoJet(ctLV.px(), ctLV.py(), ctLV.pz(), ctLV.E())); + } + + // run the jet clustering with the given jet definition + fastjet::ClusterSequence clustSeq(pjCTs, jetDef); + + // get the resulting jets ordered in pt + std::vector incJets = fastjet::sorted_by_pt(clustSeq.inclusive_jets(ptMin_)); + + // fill fast jet objects buffer + fastJetBuffer[bx].reserve(incJets.size()); + int nConst = 0; + double area = 0.; + for (const auto& incJet : incJets) { + nConst = incJet.has_constituents() ? incJet.constituents().size() : 0; + area = incJet.has_area() ? incJet.area() : -1.0; + FastJet fj = FastJet(incJet.Et(), incJet.eta(), incJet.phi(), incJet.m(), nConst, area); + fastJetBuffer[bx].push_back(fj); + nFastJet++; + } + } + + // fill orbit collection with reconstructed jets + fastJetCollection->fillAndClear(fastJetBuffer, nFastJet); + iEvent.put(std::move(fastJetCollection), "FastJet"); +} + +void ScoutingJetProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(ScoutingJetProducer); diff --git a/L1TriggerScouting/Utilities/BuildFile.xml b/L1TriggerScouting/Utilities/BuildFile.xml index 5ca8eba00db01..56ebb95a6c349 100644 --- a/L1TriggerScouting/Utilities/BuildFile.xml +++ b/L1TriggerScouting/Utilities/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/L1TriggerScouting/Utilities/interface/conversion.h b/L1TriggerScouting/Utilities/interface/conversion.h index 77bff966f6633..73464a7376dd1 100644 --- a/L1TriggerScouting/Utilities/interface/conversion.h +++ b/L1TriggerScouting/Utilities/interface/conversion.h @@ -32,6 +32,14 @@ namespace l1ScoutingRun3 { } // namespace demux + namespace calol1 { + + inline float fEt(int hwEt) { return scales::et_scale * hwEt; }; + inline float fEta(int hwEta) { return scales::eta_scale * hwEta; }; + inline float fPhi(int hwPhi) { return _setPhiRange(scales::phi_scale * hwPhi); }; + + } // namespace calol1 + } // namespace l1ScoutingRun3 #endif diff --git a/L1TriggerScouting/Utilities/interface/scales.h b/L1TriggerScouting/Utilities/interface/scales.h index f06ebc5546a5b..28e9d0fa48e78 100644 --- a/L1TriggerScouting/Utilities/interface/scales.h +++ b/L1TriggerScouting/Utilities/interface/scales.h @@ -26,5 +26,13 @@ namespace l1ScoutingRun3 { }; } // namespace demux + namespace calol1 { + struct scales { + static constexpr float phi_scale = 0.0870; + static constexpr float eta_scale = 0.0870; + static constexpr float et_scale = 0.5; + }; + } // namespace calol1 + } // namespace l1ScoutingRun3 #endif // L1TriggerScouting_Utilities_scales_h