Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-13 02:58:23

0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "FWCore/Framework/interface/Frameworkfwd.h"
0003 #include "FWCore/Framework/interface/stream/EDProducer.h"
0004 #include "FWCore/Framework/interface/MakerMacros.h"
0005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 #include "FWCore/Utilities/interface/EDGetToken.h"
0009 #include "FWCore/Utilities/interface/EDPutToken.h"
0010 #include "FWCore/Utilities/interface/Exception.h"
0011 #include "FWCore/Utilities/interface/InputTag.h"
0012 #include "FWCore/Utilities/interface/StreamID.h"
0013 
0014 // L1 scouting
0015 #include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h"
0016 #include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h"
0017 #include "DataFormats/L1Scouting/interface/L1ScoutingBMTFStub.h"
0018 #include "DataFormats/L1Scouting/interface/OrbitCollection.h"
0019 
0020 #include <vector>
0021 #include <set>
0022 
0023 using namespace l1ScoutingRun3;
0024 
0025 template <typename T>
0026 class MaskOrbitBx : public edm::stream::EDProducer<> {
0027 public:
0028   explicit MaskOrbitBx(const edm::ParameterSet&);
0029   ~MaskOrbitBx() override {}
0030   static void fillDescriptions(edm::ConfigurationDescriptions&);
0031 
0032 private:
0033   void produce(edm::Event&, const edm::EventSetup&) override;
0034 
0035   std::vector<std::vector<T>> orbitBuffer_;
0036 
0037   // tokens for scouting data
0038   edm::EDGetTokenT<OrbitCollection<T>> tokenData_;
0039 
0040   // BX to be keep
0041   edm::EDGetTokenT<std::vector<unsigned>> tokenSelBxs_;
0042 
0043   std::string productLabel_;
0044 
0045   const int NBX = 3565;
0046 };
0047 
0048 template <typename T>
0049 MaskOrbitBx<T>::MaskOrbitBx(const edm::ParameterSet& iPSet)
0050     : tokenData_(consumes<OrbitCollection<T>>(iPSet.getParameter<edm::InputTag>("dataTag"))),
0051       tokenSelBxs_(consumes<std::vector<unsigned>>(iPSet.getParameter<edm::InputTag>("selectBxs"))),
0052       productLabel_(iPSet.getParameter<std::string>("productLabel")) {
0053   // prepare module buffer
0054   orbitBuffer_ = std::vector<std::vector<T>>(NBX);
0055 
0056   // products
0057   produces<OrbitCollection<T>>(productLabel_).setBranchAlias(productLabel_ + "OrbitCollection");
0058 }
0059 
0060 // ------------ method called for each ORBIT  ------------
0061 template <typename T>
0062 void MaskOrbitBx<T>::produce(edm::Event& iEvent, const edm::EventSetup&) {
0063   // get selected BXs
0064   edm::Handle<std::vector<unsigned>> selBxs;
0065   iEvent.getByToken(tokenSelBxs_, selBxs);
0066 
0067   // get the data
0068   edm::Handle<OrbitCollection<T>> objCollection;
0069   iEvent.getByToken(tokenData_, objCollection);
0070 
0071   // prepare new collections
0072   std::unique_ptr<OrbitCollection<T>> selectedObjs(new OrbitCollection<T>);
0073 
0074   int nObjOrbit_ = 0;
0075 
0076   // fill collections with objects
0077   for (const unsigned& bx : *selBxs) {
0078     for (const auto& obj : objCollection->bxIterator(bx)) {
0079       orbitBuffer_[bx].push_back(obj);
0080       nObjOrbit_++;
0081     }
0082   }
0083 
0084   // fill orbit collection and clear the Bx buffer vector
0085   selectedObjs->fillAndClear(orbitBuffer_, nObjOrbit_);
0086 
0087   // store collections in the event
0088   iEvent.put(std::move(selectedObjs), productLabel_);
0089 
0090 }  // end produce
0091 
0092 template <typename T>
0093 void MaskOrbitBx<T>::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0094   edm::ParameterSetDescription desc;
0095   desc.setUnknown();
0096   descriptions.addDefault(desc);
0097 }
0098 
0099 typedef MaskOrbitBx<l1ScoutingRun3::Muon> MaskOrbitBxScoutingMuon;
0100 typedef MaskOrbitBx<l1ScoutingRun3::Jet> MaskOrbitBxScoutingJet;
0101 typedef MaskOrbitBx<l1ScoutingRun3::EGamma> MaskOrbitBxScoutingEGamma;
0102 typedef MaskOrbitBx<l1ScoutingRun3::Tau> MaskOrbitBxScoutingTau;
0103 typedef MaskOrbitBx<l1ScoutingRun3::BxSums> MaskOrbitBxScoutingBxSums;
0104 typedef MaskOrbitBx<l1ScoutingRun3::BMTFStub> MaskOrbitBxScoutingBMTFStub;
0105 
0106 DEFINE_FWK_MODULE(MaskOrbitBxScoutingMuon);
0107 DEFINE_FWK_MODULE(MaskOrbitBxScoutingJet);
0108 DEFINE_FWK_MODULE(MaskOrbitBxScoutingEGamma);
0109 DEFINE_FWK_MODULE(MaskOrbitBxScoutingTau);
0110 DEFINE_FWK_MODULE(MaskOrbitBxScoutingBxSums);
0111 DEFINE_FWK_MODULE(MaskOrbitBxScoutingBMTFStub);