Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-03 00:12:28

0001 #include "FWCore/Framework/interface/stream/EDProducer.h"
0002 #include "FWCore/Framework/interface/Run.h"
0003 #include "FWCore/Framework/interface/EventSetup.h"
0004 #include "FWCore/Framework/interface/Event.h"
0005 #include "FWCore/Framework/interface/MakerMacros.h"
0006 #include "FWCore/Utilities/interface/EDGetToken.h"
0007 #include "FWCore/Utilities/interface/EDPutToken.h"
0008 #include "FWCore/Utilities/interface/ESGetToken.h"
0009 #include "FWCore/Utilities/interface/InputTag.h"
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "DataFormats/Common/interface/Handle.h"
0012 
0013 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0014 #include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"
0015 
0016 #include <string>
0017 #include <vector>
0018 #include <deque>
0019 #include <iterator>
0020 #include <cmath>
0021 #include <numeric>
0022 
0023 namespace trklet {
0024 
0025   /*! \class  trklet::ProducerIRin
0026    *  \brief  Transforms TTTDCinto f/w comparable format for summer chain configuratiotn
0027    *  \author Thomas Schuh
0028    *  \date   2021, Oct
0029    */
0030   class ProducerIRin : public edm::stream::EDProducer<> {
0031   public:
0032     explicit ProducerIRin(const edm::ParameterSet&);
0033     ~ProducerIRin() override {}
0034 
0035   private:
0036     void beginRun(const edm::Run&, const edm::EventSetup&) override;
0037     void produce(edm::Event&, const edm::EventSetup&) override;
0038     virtual void endJob() {}
0039     // ED input token of DTC Stubs
0040     edm::EDGetTokenT<TTDTC> edGetTokenTTDTC_;
0041     // ED output token for stubs
0042     edm::EDPutTokenT<tt::StreamsStub> edPutTokenStubs_;
0043     // Setup token
0044     edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetTokenSetup_;
0045     // ChannelAssignment token
0046     edm::ESGetToken<ChannelAssignment, ChannelAssignmentRcd> esGetTokenChannelAssignment_;
0047     // configuration
0048     edm::ParameterSet iConfig_;
0049     // helper class to store configurations
0050     const tt::Setup* setup_;
0051     // helper class to assign stubs to channel
0052     const ChannelAssignment* channelAssignment_;
0053     // map of used tfp channels
0054     std::vector<int> channelEncoding_;
0055   };
0056 
0057   ProducerIRin::ProducerIRin(const edm::ParameterSet& iConfig) : iConfig_(iConfig) {
0058     const edm::InputTag& inputTag = iConfig.getParameter<edm::InputTag>("InputTagDTC");
0059     const std::string& branchStubs = iConfig.getParameter<std::string>("BranchStubsAccepted");
0060     // book in- and output ED products
0061     edGetTokenTTDTC_ = consumes<TTDTC>(inputTag);
0062     edPutTokenStubs_ = produces<tt::StreamsStub>(branchStubs);
0063     // book ES products
0064     esGetTokenSetup_ = esConsumes<tt::Setup, tt::SetupRcd, edm::Transition::BeginRun>();
0065     esGetTokenChannelAssignment_ = esConsumes<ChannelAssignment, ChannelAssignmentRcd, edm::Transition::BeginRun>();
0066     // initial ES products
0067     setup_ = nullptr;
0068   }
0069 
0070   void ProducerIRin::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0071     // helper class to store configurations
0072     setup_ = &iSetup.getData(esGetTokenSetup_);
0073     channelAssignment_ = const_cast<ChannelAssignment*>(&iSetup.getData(esGetTokenChannelAssignment_));
0074     // map of used tfp channels
0075     channelEncoding_ = channelAssignment_->channelEncoding();
0076   }
0077 
0078   void ProducerIRin::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0079     // empty IRin product
0080     tt::StreamsStub streamStubs;
0081     // read in hybrid track finding product and produce KFin product
0082     edm::Handle<TTDTC> handleTTDTC;
0083     iEvent.getByToken<TTDTC>(edGetTokenTTDTC_, handleTTDTC);
0084     const int numChannel = channelEncoding_.size();
0085     streamStubs.reserve(numChannel);
0086     for (int tfpRegion : handleTTDTC->tfpRegions())
0087       for (int tfpChannel : channelEncoding_)
0088         streamStubs.emplace_back(handleTTDTC->stream(tfpRegion, tfpChannel));
0089     // store products
0090     iEvent.emplace(edPutTokenStubs_, std::move(streamStubs));
0091   }
0092 
0093 }  // namespace trklet
0094 
0095 DEFINE_FWK_MODULE(trklet::ProducerIRin);