CMS 3D CMS Logo

EcalDQMonitorTask.cc
Go to the documentation of this file.
2 
4 
7 
11 
16 
18 
21 
22 #include <iomanip>
23 #include <ctime>
24 #include <bitset>
25 #include <sstream>
26 
29  ecaldqm::EcalDQMonitor(_ps),
30  schedule_(),
31  allowMissingCollections_(_ps.getUntrackedParameter<bool>("allowMissingCollections")),
32  processedEvents_(0),
33  lastResetTime_(0),
34  resetInterval_(_ps.getUntrackedParameter<double>("resetInterval")) {
36  std::bitset<ecaldqm::nCollections> hasTaskToRun;
38 
40  [&dependencies, &hasTaskToRun, &collector](ecaldqm::DQWorker* worker) {
41  ecaldqm::DQWorkerTask* task(dynamic_cast<ecaldqm::DQWorkerTask*>(worker));
42  if (!task)
43  throw cms::Exception("InvalidConfiguration") << "Non-task DQWorker " << worker->getName() << " passed";
44 
45  task->addDependencies(dependencies);
46  for (unsigned iCol(0); iCol < ecaldqm::nCollections; ++iCol) {
47  if (task->analyze(nullptr, ecaldqm::Collections(iCol))) // "dry run" mode
48  hasTaskToRun.set(iCol);
49  }
50 
51  task->setTokens(collector);
52  },
53  "initialization");
54 
55  edm::ParameterSet const& collectionTags(_ps.getUntrackedParameterSet("collectionTags"));
56 
57  for (unsigned iCol(0); iCol < ecaldqm::nCollections; iCol++) {
58  if (hasTaskToRun[iCol])
60  }
61  if (collectionTags.existsAs<edm::InputTag>("EcalRawData", false))
63 
64  formSchedule(dependencies.formSequence(), collectionTags);
65 
66  if (verbosity_ > 0) {
67  std::stringstream ss;
68  ss << moduleName_ << ": Using collections" << std::endl;
69  for (unsigned iCol(0); iCol < schedule_.size(); iCol++)
70  ss << ecaldqm::collectionName[schedule_[iCol].second] << std::endl;
71  edm::LogInfo("EcalDQM") << ss.str();
72  }
73 
74  edm::ParameterSet const& commonParams(_ps.getUntrackedParameterSet("commonParameters"));
75  if (commonParams.getUntrackedParameter<bool>("onlineMode"))
76  lastResetTime_ = time(nullptr);
77 }
78 
79 /*static*/
83 
84  edm::ParameterSetDescription taskParameters;
87  allWorkers.addNode(
89  desc.addUntracked("workerParameters", allWorkers);
90 
92  collectionTags.addWildcardUntracked<edm::InputTag>("*");
93  desc.addUntracked("collectionTags", collectionTags);
94 
95  desc.addUntracked<bool>("allowMissingCollections", true);
96  desc.addUntracked<double>("resetInterval", 0.);
97 
98  _descs.addDefault(desc);
99 }
100 
103 
104  executeOnWorkers_([&_ibooker](ecaldqm::DQWorker* worker) { worker->bookMEs(_ibooker); }, "bookMEs", "Booking MEs");
105 }
106 
108  ecaldqmBeginRun(_run, _es);
109 
110  processedEvents_ = 0;
111 
112  if (lastResetTime_ != 0)
113  lastResetTime_ = time(nullptr);
114 }
115 
117  ecaldqmEndRun(_run, _es);
118 
119  executeOnWorkers_([](ecaldqm::DQWorker* worker) { worker->releaseMEs(); }, "releaseMEs", "releasing histograms");
120 }
121 
123  ecaldqmBeginLuminosityBlock(_lumi, _es);
124 }
125 
127  ecaldqmEndLuminosityBlock(_lumi, _es);
128 
129  if (lastResetTime_ != 0 && (time(nullptr) - lastResetTime_) / 3600. > resetInterval_) {
130  if (verbosity_ > 0)
131  edm::LogInfo("EcalDQM") << moduleName_ << ": Soft-resetting the histograms";
132  // TODO: soft-reset is no longer supported.
133  lastResetTime_ = time(nullptr);
134  }
135 }
136 
138  if (verbosity_ > 2)
139  edm::LogInfo("EcalDQM") << moduleName_ << "::analyze: Run " << _evt.id().run() << " Lumisection "
140  << _evt.id().luminosityBlock() << " Event " << _evt.id().event() << ": processed "
141  << processedEvents_;
142 
143  if (schedule_.empty())
144  return;
145 
146  std::set<ecaldqm::DQWorker*> enabledTasks;
147 
149  if (_evt.getByToken(collectionTokens_[ecaldqm::kEcalRawData], dcchsHndl)) {
150  // determine event type (called run type in DCCHeader for some reason) for each FED
151  std::stringstream ss;
152  if (verbosity_ > 2)
153  ss << moduleName_ << ": Event type ";
154 
155  short runType[ecaldqm::nDCC];
156  std::fill_n(runType, ecaldqm::nDCC, -1);
157  for (EcalRawDataCollection::const_iterator dcchItr = dcchsHndl->begin(); dcchItr != dcchsHndl->end(); ++dcchItr) {
158  if (verbosity_ > 2)
159  ss << dcchItr->getRunType() << " ";
160  runType[dcchItr->id() - 1] = dcchItr->getRunType();
161  }
162  if (verbosity_ > 2)
163  edm::LogInfo("EcalDQM") << ss.str();
164 
165  bool processEvent(false);
166 
168  [&enabledTasks, &runType, &processEvent, this](ecaldqm::DQWorker* worker) {
169  if (static_cast<ecaldqm::DQWorkerTask*>(worker)->filterRunType(runType)) {
170  if (this->verbosity_ > 2)
171  edm::LogInfo("EcalDQM") << worker->getName() << " will run on this event";
172  enabledTasks.insert(worker);
173  processEvent = true;
174  }
175  },
176  "filterRunType");
177 
178  if (!processEvent)
179  return;
180  } else {
181  edm::LogWarning("EcalDQM") << "EcalRawDataCollection does not exist. No event-type filtering will be applied";
182  executeOnWorkers_([&enabledTasks](ecaldqm::DQWorker* worker) { enabledTasks.insert(worker); }, "");
183  }
184 
186 
187  // start event processing
189  [&_evt, &_es, &enabledTasks](ecaldqm::DQWorker* worker) {
190  if (enabledTasks.find(worker) != enabledTasks.end()) {
191  if (worker->onlineMode())
192  worker->setTime(time(nullptr));
193  worker->setEventNumber(_evt.id().event());
194  static_cast<ecaldqm::DQWorkerTask*>(worker)->beginEvent(_evt, _es);
195  }
196  },
197  "beginEvent");
198 
199  // run on collections
200  for (unsigned iSch(0); iSch < schedule_.size(); iSch++) {
201  Processor processor(schedule_[iSch].first);
202  (this->*processor)(_evt, schedule_[iSch].second, enabledTasks);
203  }
204 
205  // close event processing
207  [&_evt, &_es, &enabledTasks](ecaldqm::DQWorker* worker) {
208  if (enabledTasks.find(worker) != enabledTasks.end())
209  static_cast<ecaldqm::DQWorkerTask*>(worker)->endEvent(_evt, _es);
210  },
211  "endEvent");
212 
213  if (verbosity_ > 2)
214  edm::LogInfo("EcalDQM") << moduleName_ << "::analyze: Closing Event " << _evt.id().event();
215 }
216 
RunNumber_t run() const
Definition: EventID.h:38
EventNumber_t event() const
Definition: EventID.h:40
void(EcalDQMonitorTask::* Processor)(edm::Event const &, ecaldqm::Collections, std::set< ecaldqm::DQWorker * > const &)
void dqmEndLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
static void fillDescriptions(edm::ParameterSetDescription &)
Definition: DQWorkerTask.cc:11
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void formSchedule(std::vector< ecaldqm::Collections > const &, edm::ParameterSet const &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
virtual bool analyze(void const *, Collections)
Definition: DQWorkerTask.h:92
dispatcher processEvent(e, inputTag, standby)
void ecaldqmEndRun(edm::Run const &, edm::EventSetup const &)
std::vector< T >::const_iterator const_iterator
edm::EDGetToken collectionTokens_[ecaldqm::nCollections]
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
virtual void releaseMEs()
Definition: DQWorker.cc:60
ParameterSet getUntrackedParameterSet(std::string const &name, ParameterSet const &defaultValue) const
void ecaldqmGetSetupObjects(edm::EventSetup const &)
static void fillDescriptions(edm::ParameterSetDescription &)
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:39
ParameterWildcardBase * addWildcardUntracked(U const &pattern)
U second(std::pair< T, U > const &p)
dependencies
Definition: symbols.py:20
void analyze(edm::Event const &, edm::EventSetup const &) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void setEventNumber(edm::EventNumber_t _e)
Definition: DQWorker.h:69
void addDefault(ParameterSetDescription const &psetDescription)
std::string const collectionName[nCollections]
Definition: Collections.h:47
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void ecaldqmBeginRun(edm::Run const &, edm::EventSetup const &)
virtual void addDependencies(DependencySet &)
Definition: DQWorkerTask.h:85
void dqmEndRun(edm::Run const &, edm::EventSetup const &) override
virtual void bookMEs(DQMStore::IBooker &)
Definition: DQWorker.cc:66
std::string const moduleName_
Definition: EcalDQMonitor.h:41
void executeOnWorkers_(FuncOnWorker, std::string const &, std::string const &="", int=1)
Definition: EcalDQMonitor.h:46
bool onlineMode() const
Definition: DQWorker.h:72
const_iterator end() const
std::vector< Collections > formSequence() const
Definition: DQWorkerTask.h:55
std::vector< std::pair< Processor, ecaldqm::Collections > > schedule_
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
void ecaldqmBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
std::string const & getName() const
Definition: DQWorker.h:71
edm::EventID id() const
Definition: EventBase.h:59
void dqmBeginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
void ecaldqmEndLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &)
EcalDQMonitorTask(edm::ParameterSet const &)
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
virtual void setTokens(edm::ConsumesCollector &)
Definition: DQWorkerTask.h:88
void setTime(time_t _t)
Definition: DQWorker.h:66
void push_back(Dependency const &_d)
Definition: DQWorkerTask.h:46
static void fillDescriptions(edm::ConfigurationDescriptions &)
const_iterator begin() const
Definition: Run.h:45