Back to home page

Project CMSSW displayed by LXR

 
 

    


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

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/TTDTC.h"
0014 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0015 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0016 
0017 #include <string>
0018 
0019 namespace trackerTFP {
0020 
0021   /*! \class  trackerTFP::ProducerPP
0022    *  \brief  L1TrackTrigger PatchPanel between DTC and TFP emulator
0023    *  \author Thomas Schuh
0024    *  \date   2023, April
0025    */
0026   class ProducerPP : public edm::stream::EDProducer<> {
0027   public:
0028     explicit ProducerPP(const edm::ParameterSet&);
0029     ~ProducerPP() override = default;
0030 
0031   private:
0032     void produce(edm::Event&, const edm::EventSetup&) override;
0033     // ED input token of DTC stubs
0034     edm::EDGetTokenT<TTDTC> edGetToken_;
0035     // ED output token for accepted stubs
0036     edm::EDPutTokenT<tt::StreamsStub> edPutToken_;
0037     // Setup token
0038     edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetTokenSetup_;
0039   };
0040 
0041   ProducerPP::ProducerPP(const edm::ParameterSet& iConfig) {
0042     const std::string& label = iConfig.getParameter<std::string>("InputLabelPP");
0043     const std::string& branch = iConfig.getParameter<std::string>("BranchStubs");
0044     // book in- and output ED products
0045     edGetToken_ = consumes<TTDTC>(edm::InputTag(label, branch));
0046     edPutToken_ = produces<tt::StreamsStub>(branch);
0047     // book ES products
0048     esGetTokenSetup_ = esConsumes();
0049   }
0050 
0051   void ProducerPP::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0052     // helper classe to store configurations
0053     const tt::Setup* setup = &iSetup.getData(esGetTokenSetup_);
0054     // empty GP products
0055     tt::StreamsStub stubs(setup->numRegions() * setup->numDTCsPerTFP());
0056     // read in DTC Product and produce TFP product
0057     const TTDTC& ttDTC = iEvent.get(edGetToken_);
0058     for (int region = 0; region < setup->numRegions(); region++) {
0059       const int offset = region * setup->numDTCsPerTFP();
0060       for (int channel = 0; channel < setup->numDTCsPerTFP(); channel++)
0061         stubs[offset + channel] = ttDTC.stream(region, channel);
0062     }
0063     // store products
0064     iEvent.emplace(edPutToken_, std::move(stubs));
0065   }
0066 
0067 }  // namespace trackerTFP
0068 
0069 DEFINE_FWK_MODULE(trackerTFP::ProducerPP);