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
0026
0027
0028
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
0040 edm::EDGetTokenT<TTDTC> edGetTokenTTDTC_;
0041
0042 edm::EDPutTokenT<tt::StreamsStub> edPutTokenStubs_;
0043
0044 edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetTokenSetup_;
0045
0046 edm::ESGetToken<ChannelAssignment, ChannelAssignmentRcd> esGetTokenChannelAssignment_;
0047
0048 edm::ParameterSet iConfig_;
0049
0050 const tt::Setup* setup_;
0051
0052 const ChannelAssignment* channelAssignment_;
0053
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
0061 edGetTokenTTDTC_ = consumes<TTDTC>(inputTag);
0062 edPutTokenStubs_ = produces<tt::StreamsStub>(branchStubs);
0063
0064 esGetTokenSetup_ = esConsumes<tt::Setup, tt::SetupRcd, edm::Transition::BeginRun>();
0065 esGetTokenChannelAssignment_ = esConsumes<ChannelAssignment, ChannelAssignmentRcd, edm::Transition::BeginRun>();
0066
0067 setup_ = nullptr;
0068 }
0069
0070 void ProducerIRin::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup) {
0071
0072 setup_ = &iSetup.getData(esGetTokenSetup_);
0073 channelAssignment_ = const_cast<ChannelAssignment*>(&iSetup.getData(esGetTokenChannelAssignment_));
0074
0075 channelEncoding_ = channelAssignment_->channelEncoding();
0076 }
0077
0078 void ProducerIRin::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0079
0080 tt::StreamsStub streamStubs;
0081
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
0090 iEvent.emplace(edPutTokenStubs_, std::move(streamStubs));
0091 }
0092
0093 }
0094
0095 DEFINE_FWK_MODULE(trklet::ProducerIRin);