File indexing completed on 2024-04-06 12:07:12
0001 #include "DQM/EcalCommon/interface/DQWorker.h"
0002
0003 #include "DQM/EcalCommon/interface/MESetUtils.h"
0004
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0007 #include "FWCore/ServiceRegistry/interface/Service.h"
0008 #include "FWCore/Utilities/interface/Exception.h"
0009
0010 #include "DataFormats/Provenance/interface/EventID.h"
0011
0012 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0013 #include "Geometry/CaloTopology/interface/CaloTopology.h"
0014 #include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h"
0015 #include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h"
0016
0017 #include "Geometry/EcalMapping/interface/EcalMappingRcd.h"
0018 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0019 #include "Geometry/Records/interface/CaloTopologyRecord.h"
0020 #include "Geometry/Records/interface/IdealGeometryRecord.h"
0021 #include "FWCore/Framework/interface/ConsumesCollector.h"
0022
0023 namespace ecaldqm {
0024 DQWorker::DQWorker()
0025 : name_(""),
0026 MEs_(),
0027 booked_(false),
0028 timestamp_(),
0029 verbosity_(0),
0030 onlineMode_(false),
0031 willConvertToEDM_(true),
0032 edso_() {}
0033
0034 DQWorker::~DQWorker() noexcept(false) {}
0035
0036
0037 void DQWorker::fillDescriptions(edm::ParameterSetDescription &_desc) {
0038 _desc.addUntracked<bool>("onlineMode", false);
0039 _desc.addUntracked<bool>("willConvertToEDM", true);
0040
0041 edm::ParameterSetDescription meParameters;
0042 edm::ParameterSetDescription meNodeParameters;
0043 fillMESetDescriptions(meNodeParameters);
0044 meParameters.addNode(
0045 edm::ParameterWildcard<edm::ParameterSetDescription>("*", edm::RequireZeroOrMore, false, meNodeParameters));
0046 _desc.addUntracked("MEs", meParameters);
0047
0048 edm::ParameterSetDescription workerParameters;
0049 workerParameters.setUnknown();
0050 _desc.addUntracked("params", workerParameters);
0051 }
0052
0053 void DQWorker::setTokens(edm::ConsumesCollector &_collector) {
0054 elecMapHandle = _collector.esConsumes<edm::Transition::BeginRun>();
0055 ttMapHandle = _collector.esConsumes<edm::Transition::BeginRun>();
0056 geomHandle = _collector.esConsumes<edm::Transition::BeginRun>();
0057 topoHandle = _collector.esConsumes<edm::Transition::BeginRun>();
0058
0059 elecMapHandleEndLumi = _collector.esConsumes<edm::Transition::EndLuminosityBlock>();
0060 ttMapHandleEndLumi = _collector.esConsumes<edm::Transition::EndLuminosityBlock>();
0061 geomHandleEndLumi = _collector.esConsumes<edm::Transition::EndLuminosityBlock>();
0062 topoHandleEndLumi = _collector.esConsumes<edm::Transition::EndLuminosityBlock>();
0063 }
0064
0065 void DQWorker::initialize(std::string const &_name, edm::ParameterSet const &_commonParams) {
0066 name_ = _name;
0067 onlineMode_ = _commonParams.getUntrackedParameter<bool>("onlineMode");
0068 willConvertToEDM_ = _commonParams.getUntrackedParameter<bool>("willConvertToEDM");
0069 }
0070
0071 void DQWorker::setME(edm::ParameterSet const &_meParams) {
0072 std::vector<std::string> const &MENames(_meParams.getParameterNames());
0073
0074 for (unsigned iME(0); iME != MENames.size(); iME++) {
0075 std::string name(MENames[iME]);
0076 edm::ParameterSet const ¶ms(_meParams.getUntrackedParameterSet(name));
0077
0078 if (!onlineMode_ && params.getUntrackedParameter<bool>("online"))
0079 continue;
0080
0081 try {
0082 MEs_.insert(name, createMESet(params));
0083 } catch (std::exception &) {
0084 edm::LogError("EcalDQM") << "Exception caught while constructing MESet " << name;
0085 throw;
0086 }
0087 }
0088 }
0089
0090 void DQWorker::releaseMEs() {
0091 for (MESetCollection::iterator mItr(MEs_.begin()); mItr != MEs_.end(); ++mItr)
0092 mItr->second->clear();
0093 booked_ = false;
0094 }
0095
0096 void DQWorker::bookMEs(DQMStore::IBooker &_booker) {
0097 if (booked_)
0098 return;
0099 for (MESetCollection::iterator mItr(MEs_.begin()); mItr != MEs_.end(); ++mItr)
0100 mItr->second->book(_booker, GetElectronicsMap());
0101 booked_ = true;
0102 }
0103
0104 void DQWorker::setSetupObjects(edm::EventSetup const &_es) {
0105 edso_.electronicsMap = &_es.getData(elecMapHandle);
0106 edso_.trigtowerMap = &_es.getData(ttMapHandle);
0107 edso_.geometry = &_es.getData(geomHandle);
0108 edso_.topology = &_es.getData(topoHandle);
0109 }
0110
0111 void DQWorker::setSetupObjectsEndLumi(edm::EventSetup const &_es) {
0112 edso_.electronicsMap = &_es.getData(elecMapHandleEndLumi);
0113 edso_.trigtowerMap = &_es.getData(ttMapHandleEndLumi);
0114 edso_.geometry = &_es.getData(geomHandleEndLumi);
0115 edso_.topology = &_es.getData(topoHandleEndLumi);
0116 }
0117
0118 bool DQWorker::checkElectronicsMap(bool doThrow ) {
0119 if (edso_.electronicsMap)
0120 return true;
0121 if (doThrow)
0122 throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized";
0123 return false;
0124 }
0125
0126 bool DQWorker::checkTrigTowerMap(bool doThrow ) {
0127 if (edso_.trigtowerMap)
0128 return true;
0129 if (doThrow)
0130 throw cms::Exception("InvalidCall") << "TrigTowerConstituentsMap not initialized";
0131 return false;
0132 }
0133
0134 bool DQWorker::checkGeometry(bool doThrow ) {
0135 if (edso_.geometry)
0136 return true;
0137 if (doThrow)
0138 throw cms::Exception("InvalidCall") << "CaloGeometry not initialized";
0139 return false;
0140 }
0141
0142 bool DQWorker::checkTopology(bool doThrow ) {
0143 if (edso_.topology)
0144 return true;
0145 if (doThrow)
0146 throw cms::Exception("InvalidCall") << "CaloTopology not initialized";
0147 return false;
0148 }
0149
0150 EcalElectronicsMapping const *DQWorker::GetElectronicsMap() {
0151 checkElectronicsMap();
0152 return edso_.electronicsMap;
0153 }
0154
0155 EcalTrigTowerConstituentsMap const *DQWorker::GetTrigTowerMap() {
0156 checkTrigTowerMap();
0157 return edso_.trigtowerMap;
0158 }
0159
0160 CaloGeometry const *DQWorker::GetGeometry() {
0161 checkGeometry();
0162 return edso_.geometry;
0163 }
0164
0165 CaloTopology const *DQWorker::GetTopology() {
0166 checkTopology();
0167 return edso_.topology;
0168 }
0169
0170 EcalDQMSetupObjects const DQWorker::getEcalDQMSetupObjects() {
0171 checkElectronicsMap();
0172 checkTrigTowerMap();
0173 checkGeometry();
0174 checkTopology();
0175 return edso_;
0176 }
0177
0178 void DQWorker::print_(std::string const &_message, int _threshold ) const {
0179 if (verbosity_ > _threshold)
0180 edm::LogInfo("EcalDQM") << name_ << ": " << _message;
0181 }
0182
0183 DQWorker *WorkerFactoryStore::getWorker(std::string const &_name,
0184 int _verbosity,
0185 edm::ParameterSet const &_commonParams,
0186 edm::ParameterSet const &_workerParams) const {
0187 DQWorker *worker(workerFactories_.at(_name)());
0188 worker->setVerbosity(_verbosity);
0189 worker->initialize(_name, _commonParams);
0190 worker->setME(_workerParams.getUntrackedParameterSet("MEs"));
0191 if (_workerParams.existsAs<edm::ParameterSet>("sources", false))
0192 worker->setSource(_workerParams.getUntrackedParameterSet("sources"));
0193 if (_workerParams.existsAs<edm::ParameterSet>("params", false))
0194 worker->setParams(_workerParams.getUntrackedParameterSet("params"));
0195 return worker;
0196 }
0197
0198
0199 WorkerFactoryStore *WorkerFactoryStore::singleton() {
0200 static WorkerFactoryStore workerFactoryStore;
0201 return &workerFactoryStore;
0202 }
0203
0204 }