Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 11:59:52

0001 // -*- C++ -*-
0002 //
0003 // Package:    SiStripDelayESProducer
0004 // Class:      SiStripDelayESProducer
0005 //
0006 /**\class SiStripDelayESProducer SiStripDelayESProducer.h CalibTracker/SiStripESProducers/plugins/real/SiStripDelayESProducer.cc
0007 
0008  Description: <one line class summary>
0009 
0010  Implementation:
0011      <Notes on implementation>
0012 */
0013 //
0014 // Original Author:  M. De Mattia
0015 //         Created:  26/10/2010
0016 //
0017 //
0018 
0019 // system include files
0020 #include <memory>
0021 
0022 // user include files
0023 #include "FWCore/Framework/interface/ModuleFactory.h"
0024 #include "FWCore/Framework/interface/ESProducer.h"
0025 #include "FWCore/Framework/interface/ModuleFactory.h"
0026 
0027 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0028 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0029 
0030 #include "DataFormats/SiStripCommon/interface/SiStripConstants.h"
0031 #include "CalibFormats/SiStripObjects/interface/SiStripDelay.h"
0032 #include "CalibTracker/Records/interface/SiStripDependentRecords.h"
0033 
0034 class SiStripDelayESProducer : public edm::ESProducer {
0035 public:
0036   SiStripDelayESProducer(const edm::ParameterSet&);
0037   ~SiStripDelayESProducer() override{};
0038 
0039   std::unique_ptr<SiStripDelay> produce(const SiStripDelayRcd&);
0040 
0041 private:
0042   struct TokenSign {
0043     TokenSign(edm::ESConsumesCollector& cc, const std::string& recordName, const std::string& label, int sumSign)
0044         : token_{cc.consumesFrom<SiStripBaseDelay, SiStripBaseDelayRcd>(edm::ESInputTag{"", label})},
0045           recordName_{recordName},
0046           label_{label},
0047           sumSign_{sumSign} {}
0048     edm::ESGetToken<SiStripBaseDelay, SiStripBaseDelayRcd> token_;
0049     std::string recordName_;
0050     std::string label_;
0051     int sumSign_;
0052   };
0053   std::vector<TokenSign> tokens_;
0054 };
0055 
0056 SiStripDelayESProducer::SiStripDelayESProducer(const edm::ParameterSet& iConfig) {
0057   auto cc = setWhatProduced(this);
0058 
0059   edm::LogInfo("SiStripDelayESProducer") << "ctor" << std::endl;
0060 
0061   for (const auto& pset : iConfig.getParameter<std::vector<edm::ParameterSet>>("ListOfRecordToMerge")) {
0062     auto recordName = pset.getParameter<std::string>("Record");
0063     auto label = pset.getParameter<std::string>("Label");
0064 
0065     edm::LogInfo("SiStripDelayESProducer")
0066         << "[SiStripDelayESProducer::ctor] Going to get data from record " << recordName << " with label " << label;
0067 
0068     // Is the "recordName" parameter really useful?
0069     if (recordName == "SiStripBaseDelayRcd") {
0070       tokens_.emplace_back(cc, recordName, label, pset.getParameter<int>("SumSign"));
0071     } else {
0072       // Would an exception make sense?
0073       edm::LogError("SiStripDelayESProducer")
0074           << "[SiStripDelayESProducer::ctor] Skipping the requested data for unexisting record " << recordName
0075           << " with tag " << label << std::endl;
0076     }
0077   }
0078 }
0079 
0080 std::unique_ptr<SiStripDelay> SiStripDelayESProducer::produce(const SiStripDelayRcd& iRecord) {
0081   edm::LogInfo("SiStripDelayESProducer") << "produce called" << std::endl;
0082   auto delay = std::make_unique<SiStripDelay>();
0083 
0084   for (const auto& tokenSign : tokens_) {
0085     const auto& baseDelay = iRecord.get(tokenSign.token_);
0086     delay->fillNewDelay(baseDelay, tokenSign.sumSign_, std::make_pair(tokenSign.recordName_, tokenSign.label_));
0087   }
0088 
0089   delay->makeDelay();
0090 
0091   return delay;
0092 }
0093 
0094 DEFINE_FWK_EVENTSETUP_MODULE(SiStripDelayESProducer);