Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #include "FWCore/Framework/interface/ESProducer.h"
0002 #include "FWCore/Framework/interface/ModuleFactory.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/Utilities/interface/ESGetToken.h"
0005 #include "L1Trigger/TrackFindingTracklet/interface/ChannelAssignment.h"
0006 #include "L1Trigger/TrackTrigger/interface/Setup.h"
0007 
0008 #include <memory>
0009 
0010 namespace trklet {
0011 
0012   /*! \class  trklet::ProducerChannelAssignment
0013    *  \brief  Creates ChannelAssignment class that assigns tracklet tracks and stubs
0014    *          to output channel as well as DTC stubs to input channel
0015    *  \author Thomas Schuh
0016    *  \date   2020, Nov
0017    */
0018   class ProducerChannelAssignment : public edm::ESProducer {
0019   public:
0020     ProducerChannelAssignment(const edm::ParameterSet& iConfig);
0021     ~ProducerChannelAssignment() override = default;
0022     std::unique_ptr<ChannelAssignment> produce(const ChannelAssignmentRcd& rcd);
0023 
0024   private:
0025     ChannelAssignment::Config iConfig_;
0026     edm::ESGetToken<tt::Setup, tt::SetupRcd> esGetToken_;
0027   };
0028 
0029   ProducerChannelAssignment::ProducerChannelAssignment(const edm::ParameterSet& iConfig) {
0030     auto cc = setWhatProduced(this);
0031     esGetToken_ = cc.consumes();
0032     iConfig_.seedTypeNames_ = iConfig.getParameter<std::vector<std::string>>("SeedTypes");
0033     iConfig_.channelEncoding_ = iConfig.getParameter<std::vector<int>>("IRChannelsIn");
0034     const edm::ParameterSet& pSetTM = iConfig.getParameter<edm::ParameterSet>("TM");
0035     iConfig_.tmMuxOrder_ = pSetTM.getParameter<std::vector<std::string>>("MuxOrder");
0036     iConfig_.tmNumLayers_ = pSetTM.getParameter<int>("NumLayers");
0037     iConfig_.tmWidthStubId_ = pSetTM.getParameter<int>("WidthStubId");
0038     iConfig_.tmWidthCot_ = pSetTM.getParameter<int>("WidthCot");
0039     const edm::ParameterSet& pSetDR = iConfig.getParameter<edm::ParameterSet>("DR");
0040     iConfig_.numComparisonModules_ = pSetDR.getParameter<int>("NumComparisonModules");
0041     iConfig_.minIdenticalStubs_ = pSetDR.getParameter<int>("MinIdenticalStubs");
0042     iConfig_.tmMuxOrderInt_.reserve(iConfig_.tmMuxOrder_.size());
0043     for (const std::string& s : iConfig_.tmMuxOrder_)
0044       iConfig_.tmMuxOrderInt_.push_back(std::distance(
0045           iConfig_.tmMuxOrder_.begin(), find(iConfig_.tmMuxOrder_.begin(), iConfig_.tmMuxOrder_.end(), s)));
0046     const edm::ParameterSet& pSetSeedTypesSeedLayers = iConfig.getParameter<edm::ParameterSet>("SeedTypesSeedLayers");
0047     const edm::ParameterSet& pSetSeedTypesProjectionLayers =
0048         iConfig.getParameter<edm::ParameterSet>("SeedTypesProjectionLayers");
0049     iConfig_.seedTypesSeedLayers_.reserve(iConfig_.seedTypeNames_.size());
0050     iConfig_.seedTypesProjectionLayers_.reserve(iConfig_.seedTypeNames_.size());
0051     for (const std::string& s : iConfig_.seedTypeNames_) {
0052       iConfig_.seedTypesSeedLayers_.emplace_back(pSetSeedTypesSeedLayers.getParameter<std::vector<int>>(s));
0053       iConfig_.seedTypesProjectionLayers_.emplace_back(pSetSeedTypesProjectionLayers.getParameter<std::vector<int>>(s));
0054     }
0055   }
0056 
0057   std::unique_ptr<ChannelAssignment> ProducerChannelAssignment::produce(const ChannelAssignmentRcd& rcd) {
0058     const tt::Setup* setup = &rcd.get(esGetToken_);
0059     return std::make_unique<ChannelAssignment>(iConfig_, setup);
0060   }
0061 
0062 }  // namespace trklet
0063 
0064 DEFINE_FWK_EVENTSETUP_MODULE(trklet::ProducerChannelAssignment);