File indexing completed on 2025-06-03 00:12:21
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 #include "L1Trigger/TrackFindingTracklet/interface/DataFormats.h"
0016 #include "L1Trigger/TrackFindingTracklet/interface/Settings.h"
0017 #include "L1Trigger/TrackFindingTracklet/interface/TrackMultiplexer.h"
0018 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0019
0020 #include <string>
0021 #include <vector>
0022 #include <deque>
0023 #include <iterator>
0024 #include <cmath>
0025 #include <numeric>
0026
0027 namespace trklet {
0028
0029
0030
0031
0032
0033
0034
0035 class ProducerTM : public edm::stream::EDProducer<> {
0036 public:
0037 explicit ProducerTM(const edm::ParameterSet&);
0038 ~ProducerTM() override = default;
0039
0040 private:
0041 void produce(edm::Event&, const edm::EventSetup&) override;
0042
0043
0044 edm::EDGetTokenT<tt::StreamsTrack> edGetTokenTracks_;
0045
0046 edm::EDGetTokenT<tt::StreamsStub> edGetTokenStubs_;
0047
0048 edm::EDPutTokenT<tt::StreamsStub> edPutTokenStubs_;
0049
0050 edm::EDPutTokenT<tt::StreamsTrack> edPutTokenTracks_;
0051
0052 edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetTokenSetup_;
0053
0054 edm::ESGetToken<DataFormats, ChannelAssignmentRcd> esGetTokenDataFormats_;
0055
0056 edm::ESGetToken<ChannelAssignment, ChannelAssignmentRcd> esGetTokenChannelAssignment_;
0057
0058 trklet::Settings settings_;
0059 };
0060
0061 ProducerTM::ProducerTM(const edm::ParameterSet& iConfig) {
0062 const std::string& label = iConfig.getParameter<std::string>("InputLabelTM");
0063 const std::string& branchStubs = iConfig.getParameter<std::string>("BranchStubs");
0064 const std::string& branchTracks = iConfig.getParameter<std::string>("BranchTracks");
0065
0066 edGetTokenTracks_ = consumes<tt::StreamsTrack>(edm::InputTag(label, branchTracks));
0067 edGetTokenStubs_ = consumes<tt::StreamsStub>(edm::InputTag(label, branchStubs));
0068 edPutTokenStubs_ = produces<tt::StreamsStub>(branchStubs);
0069 edPutTokenTracks_ = produces<tt::StreamsTrack>(branchTracks);
0070
0071 esGetTokenSetup_ = esConsumes();
0072 esGetTokenDataFormats_ = esConsumes();
0073 esGetTokenChannelAssignment_ = esConsumes();
0074 }
0075
0076 void ProducerTM::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0077
0078 const tt::Setup* setup = &iSetup.getData(esGetTokenSetup_);
0079
0080 const DataFormats* dataFormats = &iSetup.getData(esGetTokenDataFormats_);
0081
0082 const ChannelAssignment* channelAssignment = &iSetup.getData(esGetTokenChannelAssignment_);
0083
0084 tt::StreamsStub streamsStub(setup->numRegions() * channelAssignment->tmNumLayers());
0085 tt::StreamsTrack streamsTrack(setup->numRegions());
0086
0087 const tt::StreamsStub& stubs = iEvent.get(edGetTokenStubs_);
0088 const tt::StreamsTrack& tracks = iEvent.get(edGetTokenTracks_);
0089 for (int region = 0; region < setup->numRegions(); region++) {
0090
0091 TrackMultiplexer tm(setup, dataFormats, channelAssignment, &settings_, region);
0092
0093 tm.consume(tracks, stubs);
0094
0095 tm.produce(streamsTrack, streamsStub);
0096 }
0097
0098 iEvent.emplace(edPutTokenTracks_, std::move(streamsTrack));
0099 iEvent.emplace(edPutTokenStubs_, std::move(streamsStub));
0100 }
0101
0102 }
0103
0104 DEFINE_FWK_MODULE(trklet::ProducerTM);