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
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
0038 edm::EDGetTokenT<OrbitCollection<T>> tokenData_;
0039
0040
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
0054 orbitBuffer_ = std::vector<std::vector<T>>(NBX);
0055
0056
0057 produces<OrbitCollection<T>>(productLabel_).setBranchAlias(productLabel_ + "OrbitCollection");
0058 }
0059
0060
0061 template <typename T>
0062 void MaskOrbitBx<T>::produce(edm::Event& iEvent, const edm::EventSetup&) {
0063
0064 edm::Handle<std::vector<unsigned>> selBxs;
0065 iEvent.getByToken(tokenSelBxs_, selBxs);
0066
0067
0068 edm::Handle<OrbitCollection<T>> objCollection;
0069 iEvent.getByToken(tokenData_, objCollection);
0070
0071
0072 std::unique_ptr<OrbitCollection<T>> selectedObjs(new OrbitCollection<T>);
0073
0074 int nObjOrbit_ = 0;
0075
0076
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
0085 selectedObjs->fillAndClear(orbitBuffer_, nObjOrbit_);
0086
0087
0088 iEvent.put(std::move(selectedObjs), productLabel_);
0089
0090 }
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);