Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:20:28

0001 /** \class GE0TriggerPseudoProducer
0002  *
0003  * Takes offline GE0 segment as input
0004  * Produces GE0 trigger objects
0005  *
0006  * \author Original ME0 code by Tao Huang (TAMU). Converted and updated to GE0 by Ian J. Watson (USeoul)
0007  *
0008  */
0009 
0010 #include "FWCore/Framework/interface/MakerMacros.h"
0011 #include "FWCore/Framework/interface/ConsumesCollector.h"
0012 #include "FWCore/Framework/interface/Frameworkfwd.h"
0013 #include "FWCore/Framework/interface/global/EDProducer.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "FWCore/Utilities/interface/InputTag.h"
0017 #include "FWCore/Utilities/interface/ESGetToken.h"
0018 #include "FWCore/Framework/interface/ESHandle.h"
0019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0020 #include "L1Trigger/L1TGEM/interface/GE0TriggerPseudoBuilder.h"
0021 #include "DataFormats/Common/interface/Handle.h"
0022 #include "DataFormats/GEMDigi/interface/ME0TriggerDigiCollection.h"
0023 #include "DataFormats/GEMRecHit/interface/GEMSegmentCollection.h"
0024 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0025 #include "Geometry/GEMGeometry/interface/GEMGeometry.h"
0026 
0027 class GE0TriggerPseudoBuilder;
0028 
0029 class GE0TriggerPseudoProducer : public edm::global::EDProducer<> {
0030 public:
0031   explicit GE0TriggerPseudoProducer(const edm::ParameterSet&);
0032   ~GE0TriggerPseudoProducer() override = default;
0033 
0034   void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0035 
0036 private:
0037   edm::InputTag me0segmentProducer_;
0038   edm::EDGetTokenT<GEMSegmentCollection> me0segment_token_;
0039   edm::ESGetToken<GEMGeometry, MuonGeometryRecord> me0_geom_token_;
0040   edm::ParameterSet config_;
0041 };
0042 
0043 GE0TriggerPseudoProducer::GE0TriggerPseudoProducer(const edm::ParameterSet& conf)
0044     : me0segmentProducer_(conf.getParameter<edm::InputTag>("ME0SegmentProducer")),
0045       me0segment_token_(consumes<GEMSegmentCollection>(me0segmentProducer_)),
0046       me0_geom_token_(esConsumes<GEMGeometry, MuonGeometryRecord>()),
0047       config_(conf) {
0048   // register what this produces
0049   produces<GE0TriggerDigiCollection>();
0050 }
0051 
0052 void GE0TriggerPseudoProducer::produce(edm::StreamID, edm::Event& ev, const edm::EventSetup& setup) const {
0053   edm::ESHandle<GEMGeometry> h_me0 = setup.getHandle(me0_geom_token_);
0054 
0055   edm::Handle<GEMSegmentCollection> me0Segmentcoll;
0056   ev.getByToken(me0segment_token_, me0Segmentcoll);
0057   const GEMSegmentCollection* me0segments = me0Segmentcoll.product();
0058 
0059   // Create empty collection
0060   auto oc_trig = std::make_unique<GE0TriggerDigiCollection>();
0061 
0062   auto trigBuilder = std::make_unique<GE0TriggerPseudoBuilder>(config_);
0063   trigBuilder->setME0Geometry(&*h_me0);
0064 
0065   // Fill output collections if valid input collection is available.
0066   if (me0Segmentcoll.isValid()) {
0067     trigBuilder->build(*me0segments, *oc_trig);
0068   }
0069 
0070   // Put collections in event.
0071   ev.put(std::move(oc_trig));
0072 }
0073 
0074 DEFINE_FWK_MODULE(GE0TriggerPseudoProducer);