File indexing completed on 2023-03-17 11:13:33
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 "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0014 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0015 #include "L1Trigger/TrackerTFP/interface/DataFormats.h"
0016 #include "L1Trigger/TrackerTFP/interface/KalmanFilterFormats.h"
0017 #include "L1Trigger/TrackerTFP/interface/LayerEncoding.h"
0018 #include "L1Trigger/TrackerTFP/interface/KalmanFilter.h"
0019
0020 #include <string>
0021
0022 using namespace std;
0023 using namespace edm;
0024 using namespace tt;
0025
0026 namespace trackerTFP {
0027
0028
0029
0030
0031
0032
0033 class ProducerKF : public stream::EDProducer<> {
0034 public:
0035 explicit ProducerKF(const ParameterSet&);
0036 ~ProducerKF() override {}
0037
0038 private:
0039 void beginRun(const Run&, const EventSetup&) override;
0040 void produce(Event&, const EventSetup&) override;
0041 void endStream() override {
0042 if (printDebug_)
0043 kalmanFilterFormats_->endJob();
0044 }
0045
0046
0047 EDGetTokenT<StreamsStub> edGetTokenStubs_;
0048 EDGetTokenT<StreamsTrack> edGetTokenTracks_;
0049
0050 EDPutTokenT<StreamsStub> edPutTokenAcceptedStubs_;
0051 EDPutTokenT<StreamsTrack> edPutTokenAcceptedTracks_;
0052
0053 EDPutTokenT<StreamsStub> edPutTokenLostStubs_;
0054 EDPutTokenT<StreamsTrack> edPutTokenLostTracks_;
0055
0056 EDPutTokenT<int> edPutTokenNumAcceptedStates_;
0057 EDPutTokenT<int> edPutTokenNumLostStates_;
0058
0059 ESGetToken<Setup, SetupRcd> esGetTokenSetup_;
0060
0061 ESGetToken<DataFormats, DataFormatsRcd> esGetTokenDataFormats_;
0062
0063 ESGetToken<KalmanFilterFormats, KalmanFilterFormatsRcd> esGetTokenKalmanFilterFormats_;
0064
0065 ParameterSet iConfig_;
0066
0067 const Setup* setup_ = nullptr;
0068
0069 const DataFormats* dataFormats_ = nullptr;
0070
0071 KalmanFilterFormats* kalmanFilterFormats_ = nullptr;
0072
0073 bool printDebug_;
0074 };
0075
0076 ProducerKF::ProducerKF(const ParameterSet& iConfig) : iConfig_(iConfig) {
0077 printDebug_ = iConfig.getParameter<bool>("PrintKFDebug");
0078 const string& label = iConfig.getParameter<string>("LabelKFin");
0079 const string& branchAcceptedStubs = iConfig.getParameter<string>("BranchAcceptedStubs");
0080 const string& branchAcceptedTracks = iConfig.getParameter<string>("BranchAcceptedTracks");
0081 const string& branchLostStubs = iConfig.getParameter<string>("BranchLostStubs");
0082 const string& branchLostTracks = iConfig.getParameter<string>("BranchLostTracks");
0083
0084 edGetTokenStubs_ = consumes<StreamsStub>(InputTag(label, branchAcceptedStubs));
0085 edGetTokenTracks_ = consumes<StreamsTrack>(InputTag(label, branchAcceptedTracks));
0086 edPutTokenAcceptedStubs_ = produces<StreamsStub>(branchAcceptedStubs);
0087 edPutTokenAcceptedTracks_ = produces<StreamsTrack>(branchAcceptedTracks);
0088 edPutTokenLostStubs_ = produces<StreamsStub>(branchLostStubs);
0089 edPutTokenLostTracks_ = produces<StreamsTrack>(branchLostTracks);
0090 edPutTokenNumAcceptedStates_ = produces<int>(branchAcceptedTracks);
0091 edPutTokenNumLostStates_ = produces<int>(branchLostTracks);
0092
0093 esGetTokenSetup_ = esConsumes<Setup, SetupRcd, Transition::BeginRun>();
0094 esGetTokenDataFormats_ = esConsumes<DataFormats, DataFormatsRcd, Transition::BeginRun>();
0095 esGetTokenKalmanFilterFormats_ = esConsumes<KalmanFilterFormats, KalmanFilterFormatsRcd, Transition::BeginRun>();
0096 }
0097
0098 void ProducerKF::beginRun(const Run& iRun, const EventSetup& iSetup) {
0099
0100 setup_ = &iSetup.getData(esGetTokenSetup_);
0101 if (!setup_->configurationSupported())
0102 return;
0103
0104 if (iConfig_.getParameter<bool>("CheckHistory"))
0105 setup_->checkHistory(iRun.processHistory());
0106
0107 dataFormats_ = &iSetup.getData(esGetTokenDataFormats_);
0108
0109 kalmanFilterFormats_ = const_cast<KalmanFilterFormats*>(&iSetup.getData(esGetTokenKalmanFilterFormats_));
0110 }
0111
0112 void ProducerKF::produce(Event& iEvent, const EventSetup& iSetup) {
0113
0114 StreamsStub acceptedStubs(dataFormats_->numStreamsStubs(Process::kf));
0115 StreamsTrack acceptedTracks(dataFormats_->numStreamsTracks(Process::kf));
0116 StreamsStub lostStubs(dataFormats_->numStreamsStubs(Process::kf));
0117 StreamsTrack lostTracks(dataFormats_->numStreamsTracks(Process::kf));
0118 int numAcceptedStates(0);
0119 int numLostStates(0);
0120
0121 if (setup_->configurationSupported()) {
0122 Handle<StreamsStub> handleStubs;
0123 iEvent.getByToken<StreamsStub>(edGetTokenStubs_, handleStubs);
0124 const StreamsStub& stubs = *handleStubs;
0125 Handle<StreamsTrack> handleTracks;
0126 iEvent.getByToken<StreamsTrack>(edGetTokenTracks_, handleTracks);
0127 const StreamsTrack& tracks = *handleTracks;
0128 for (int region = 0; region < setup_->numRegions(); region++) {
0129
0130 KalmanFilter kf(iConfig_, setup_, dataFormats_, kalmanFilterFormats_, region);
0131
0132 kf.consume(tracks, stubs);
0133
0134 kf.produce(acceptedStubs, acceptedTracks, lostStubs, lostTracks, numAcceptedStates, numLostStates);
0135 }
0136 }
0137
0138 iEvent.emplace(edPutTokenAcceptedStubs_, move(acceptedStubs));
0139 iEvent.emplace(edPutTokenAcceptedTracks_, move(acceptedTracks));
0140 iEvent.emplace(edPutTokenLostStubs_, move(lostStubs));
0141 iEvent.emplace(edPutTokenLostTracks_, move(lostTracks));
0142 iEvent.emplace(edPutTokenNumAcceptedStates_, numAcceptedStates);
0143 iEvent.emplace(edPutTokenNumLostStates_, numLostStates);
0144 }
0145
0146 }
0147
0148 DEFINE_FWK_MODULE(trackerTFP::ProducerKF);