Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:44

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   /*! \class  trackerTFP::ProducerKF
0029    *  \brief  L1TrackTrigger Kamlan Filter emulator
0030    *  \author Thomas Schuh
0031    *  \date   2020, July
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     // ED input token of sf stubs and tracks
0047     EDGetTokenT<StreamsStub> edGetTokenStubs_;
0048     EDGetTokenT<StreamsTrack> edGetTokenTracks_;
0049     // ED output token for accepted stubs and tracks
0050     EDPutTokenT<StreamsStub> edPutTokenAcceptedStubs_;
0051     EDPutTokenT<StreamsTrack> edPutTokenAcceptedTracks_;
0052     // ED output token for lost stubs and tracks
0053     EDPutTokenT<StreamsStub> edPutTokenLostStubs_;
0054     EDPutTokenT<StreamsTrack> edPutTokenLostTracks_;
0055     // ED output token for number of accepted and lost States
0056     EDPutTokenT<int> edPutTokenNumAcceptedStates_;
0057     EDPutTokenT<int> edPutTokenNumLostStates_;
0058     // Setup token
0059     ESGetToken<Setup, SetupRcd> esGetTokenSetup_;
0060     // DataFormats token
0061     ESGetToken<DataFormats, DataFormatsRcd> esGetTokenDataFormats_;
0062     // KalmanFilterFormats token
0063     ESGetToken<KalmanFilterFormats, KalmanFilterFormatsRcd> esGetTokenKalmanFilterFormats_;
0064     // configuration
0065     ParameterSet iConfig_;
0066     // helper class to store configurations
0067     const Setup* setup_ = nullptr;
0068     // helper class to extract structured data from tt::Frames
0069     const DataFormats* dataFormats_ = nullptr;
0070     // helper class to
0071     KalmanFilterFormats* kalmanFilterFormats_ = nullptr;
0072     // print end job internal unused MSB
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     // book in- and output ED products
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     // book ES products
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     // helper class to store configurations
0100     setup_ = &iSetup.getData(esGetTokenSetup_);
0101     if (!setup_->configurationSupported())
0102       return;
0103     // check process history if desired
0104     if (iConfig_.getParameter<bool>("CheckHistory"))
0105       setup_->checkHistory(iRun.processHistory());
0106     // helper class to extract structured data from tt::Frames
0107     dataFormats_ = &iSetup.getData(esGetTokenDataFormats_);
0108     // helper class to
0109     kalmanFilterFormats_ = const_cast<KalmanFilterFormats*>(&iSetup.getData(esGetTokenKalmanFilterFormats_));
0110   }
0111 
0112   void ProducerKF::produce(Event& iEvent, const EventSetup& iSetup) {
0113     // empty KF products
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     // read in SF Product and produce KF product
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         // object to fit tracks in a processing region
0130         KalmanFilter kf(iConfig_, setup_, dataFormats_, kalmanFilterFormats_, region);
0131         // read in and organize input tracks and stubs
0132         kf.consume(tracks, stubs);
0133         // fill output products
0134         kf.produce(acceptedStubs, acceptedTracks, lostStubs, lostTracks, numAcceptedStates, numLostStates);
0135       }
0136     }
0137     // store products
0138     iEvent.emplace(edPutTokenAcceptedStubs_, std::move(acceptedStubs));
0139     iEvent.emplace(edPutTokenAcceptedTracks_, std::move(acceptedTracks));
0140     iEvent.emplace(edPutTokenLostStubs_, std::move(lostStubs));
0141     iEvent.emplace(edPutTokenLostTracks_, std::move(lostTracks));
0142     iEvent.emplace(edPutTokenNumAcceptedStates_, numAcceptedStates);
0143     iEvent.emplace(edPutTokenNumLostStates_, numLostStates);
0144   }
0145 
0146 }  // namespace trackerTFP
0147 
0148 DEFINE_FWK_MODULE(trackerTFP::ProducerKF);