File indexing completed on 2024-04-06 12:15:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <memory>
0020
0021 #include "FWCore/Framework/interface/ModuleFactory.h"
0022 #include "FWCore/Framework/interface/ESProducer.h"
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024 #include "Geometry/Records/interface/MuonNumberingRecord.h"
0025 #include "Geometry/MuonNumbering/interface/DD4hep_MuonNumbering.h"
0026 #include "Geometry/Records/interface/DDSpecParRegistryRcd.h"
0027 #include "DetectorDescription/DDCMS/interface/DDSpecParRegistry.h"
0028
0029
0030
0031 class MuonNumberingESProducer : public edm::ESProducer {
0032 public:
0033 MuonNumberingESProducer(const edm::ParameterSet&);
0034 ~MuonNumberingESProducer() override;
0035
0036 using ReturnType = std::unique_ptr<cms::MuonNumbering>;
0037
0038 ReturnType produce(const MuonNumberingRecord&);
0039
0040 private:
0041 const std::string m_label;
0042 const std::string m_key;
0043 const edm::ESGetToken<cms::DDSpecParRegistry, DDSpecParRegistryRcd> m_token;
0044 };
0045
0046 MuonNumberingESProducer::MuonNumberingESProducer(const edm::ParameterSet& iConfig)
0047 : m_label(iConfig.getParameter<std::string>("label")),
0048 m_key(iConfig.getParameter<std::string>("key")),
0049 m_token(setWhatProduced(this).consumesFrom<cms::DDSpecParRegistry, DDSpecParRegistryRcd>(
0050 edm::ESInputTag("", m_label))) {}
0051
0052 MuonNumberingESProducer::~MuonNumberingESProducer() {}
0053
0054 MuonNumberingESProducer::ReturnType MuonNumberingESProducer::produce(const MuonNumberingRecord& iRecord) {
0055 #ifdef EDM_ML_DEBUG
0056 edm::LogVerbatim("MuonGeom") << "MuonNumberingESProducer::produce from " << m_label << " with " << m_key;
0057 #endif
0058 auto product = std::make_unique<cms::MuonNumbering>();
0059
0060 cms::DDSpecParRegistry const& registry = iRecord.get(m_token);
0061 auto it = registry.specpars.find(m_key);
0062 if (it != end(registry.specpars)) {
0063 for (const auto& l : it->second.spars) {
0064 if (l.first == "OnlyForMuonNumbering") {
0065 for (const auto& k : it->second.numpars) {
0066 for (const auto& ik : k.second) {
0067 product->put(k.first, static_cast<int>(ik));
0068 }
0069 }
0070 }
0071 }
0072 }
0073 return product;
0074 }
0075
0076 DEFINE_FWK_EVENTSETUP_MODULE(MuonNumberingESProducer);