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
0013
0014
0015
0016
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 }
0063
0064 DEFINE_FWK_EVENTSETUP_MODULE(trklet::ProducerChannelAssignment);