File indexing completed on 2024-09-07 04:35:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021
0022
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
0069 if (recordName == "SiStripBaseDelayRcd") {
0070 tokens_.emplace_back(cc, recordName, label, pset.getParameter<int>("SumSign"));
0071 } else {
0072
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);