File indexing completed on 2025-03-05 03:16:36
0001
0002
0003
0004
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);