Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:18

0001 // -*- C++ -*-
0002 //
0003 // Package:    DetectorDescription/MuonNumberingESProducer
0004 // Class:      MuonNumberingESProducer
0005 //
0006 /**\class MuonNumberingESProducer
0007 
0008  Description: Produce Muon numbering constants
0009 
0010  Implementation:
0011      The constants are defined in XML as SpecPars
0012 */
0013 //
0014 // Original Author:  Ianna Osborne
0015 //         Created:  Tue, 15 Jan 2019 09:10:32 GMT
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 //#define EDM_ML_DEBUG
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));  //values.emplace(k.first, static_cast<int>(ik));
0068           }
0069         }
0070       }
0071     }
0072   }
0073   return product;
0074 }
0075 
0076 DEFINE_FWK_EVENTSETUP_MODULE(MuonNumberingESProducer);