Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-03-05 03:16:36

0001 /** \class ME0StubProducer derived by CSCSegmentProducer 
0002  * Produces a collection of ME0Stub's in ME0. 
0003  *
0004  * \author Woohyeon Heo
0005  */
0006 
0007 #include "FWCore/Framework/interface/Frameworkfwd.h"
0008 #include "FWCore/Framework/interface/stream/EDProducer.h"
0009 #include "FWCore/Framework/interface/Event.h"
0010 #include "FWCore/Framework/interface/ESHandle.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "FWCore/Utilities/interface/InputTag.h"
0013 #include "FWCore/Utilities/interface/ESGetToken.h"
0014 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0015 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0016 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0017 
0018 #include "DataFormats/Common/interface/Handle.h"
0019 #include "DataFormats/GEMDigi/interface/GEMPadDigiCollection.h"
0020 #include "DataFormats/GEMDigi/interface/ME0StubCollection.h"
0021 #include "DataFormats/GEMDigi/interface/ME0Stub.h"
0022 
0023 #include "L1Trigger/L1TGEM/plugins/ME0StubBuilder.h"
0024 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0025 
0026 class ME0StubProducer : public edm::stream::EDProducer<> {
0027 public:
0028   explicit ME0StubProducer(const edm::ParameterSet&);
0029   ~ME0StubProducer() override {}
0030 
0031   void produce(edm::Event&, const edm::EventSetup&) override;
0032 
0033   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0034 
0035 private:
0036   int iev;
0037   edm::EDGetTokenT<GEMPadDigiCollection> theGEMPadDigiToken;
0038   std::unique_ptr<ME0StubBuilder> segmentBuilder_;
0039   edm::ESGetToken<GEMGeometry, MuonGeometryRecord> gemGeomToken_;
0040 };
0041 
0042 ME0StubProducer::ME0StubProducer(const edm::ParameterSet& ps) : iev(0) {
0043   theGEMPadDigiToken = consumes<GEMPadDigiCollection>(ps.getParameter<edm::InputTag>("InputCollection"));
0044   segmentBuilder_ = std::make_unique<ME0StubBuilder>(ps);
0045   gemGeomToken_ = esConsumes<GEMGeometry, MuonGeometryRecord>();
0046   produces<ME0StubCollection>();
0047 }
0048 
0049 void ME0StubProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0050   edm::ParameterSetDescription desc;
0051   desc.add<edm::InputTag>("InputCollection", edm::InputTag("gemPadDigis"));
0052   ME0StubBuilder::fillDescription(desc);
0053   descriptions.add("me0Stubs", desc);
0054 }
0055 
0056 void ME0StubProducer::produce(edm::Event& ev, const edm::EventSetup& setup) {
0057   LogDebug("ME0StubProducer") << "start producing segments for " << ++iev << "th event with GEM data";
0058 
0059   edm::Handle<GEMPadDigiCollection> gemPadDigis;
0060   ev.getByToken(theGEMPadDigiToken, gemPadDigis);
0061 
0062   auto oc = std::make_unique<ME0StubCollection>();
0063 
0064   segmentBuilder_->build(gemPadDigis.product(), *oc);
0065 
0066   ev.put(std::move(oc));
0067 }
0068 
0069 #include "FWCore/Framework/interface/MakerMacros.h"
0070 DEFINE_FWK_MODULE(ME0StubProducer);