6 #include <boost/regex.hpp>
75 : m_dqm_path(config.getUntrackedParameter<std::
string>(
"dqmPath")),
76 doPlotsVsScalLumi_(config.getParameter<bool>(
"doPlotsVsScalLumi")),
77 doPlotsVsPixelLumi_(config.getParameter<bool>(
"doPlotsVsPixelLumi")),
78 doPlotsVsPU_(config.getParameter<bool>(
"doPlotsVsPU")),
79 scalLumiMEPSet_(doPlotsVsScalLumi_ ? getHistoPSet(config.getParameter<edm::
ParameterSet>(
"scalLumiME"))
103 static const boost::regex running_n_processes(
".*/Running .*");
106 std::vector<std::string> subdirs = getter.
getSubdirs();
107 for (
auto const& subdir : subdirs) {
109 if (boost::regex_match(subdir, running_n_processes)) {
111 if (getter.
get(subdir +
"/event time_real"))
114 std::vector<std::string> subsubdirs = getter.
getSubdirs();
115 for (
auto const& subsubdir : subsubdirs) {
116 if (getter.
get(subsubdir +
"/event time_real"))
144 static const boost::regex
process_name(
".*/process .*");
147 std::vector<std::string> subdirs = getter.
getSubdirs();
148 for (
auto const& subdir : subdirs) {
149 if (boost::regex_match(subdir, process_name)) {
152 std::vector<std::string> subsubdirs = getter.
getSubdirs();
153 for (
auto const& subsubdir : subsubdirs) {
154 if (getter.
get(subsubdir +
"/path time_real")) {
170 std::vector<std::string> subsubdirs = getter.
getSubdirs();
171 size_t npaths = subsubdirs.size();
174 booker.
book1D(
"paths_time_real",
"Total (real) time spent in each path", npaths, -0.5,
double(npaths) - 0.5);
176 booker.
book1D(
"paths_time_thread",
"Total (thread) time spent in each path", npaths, -0.5,
double(npaths) - 0.5);
178 booker.
book1D(
"paths_allocated",
"Total allocated memory in each path", npaths, -0.5,
double(npaths) - 0.5);
180 booker.
book1D(
"paths_deallocated",
"Total deallocated in each path", npaths, -0.5,
double(npaths) - 0.5);
187 for (
auto const& subsubdir : subsubdirs) {
189 if (subsubdir.find(test) == std::string::npos)
192 static const boost::regex
prefix(current_path +
"/path ");
200 if ((me = getter.
get(subsubdir +
"/path time_real"))) {
204 if ((me = getter.
get(subsubdir +
"/path time_thread"))) {
208 if ((me = getter.
get(subsubdir +
"/path allocated"))) {
213 if ((me = getter.
get(subsubdir +
"/path deallocated"))) {
221 for (
auto const& subsubdir : subsubdirs) {
228 std::vector<std::string> allmenames = getter.
getMEs();
229 if (allmenames.empty())
233 MonitorElement* me_real_total = getter.
get(subsubdir +
"/module_time_real_total");
234 MonitorElement* me_thread_total = getter.
get(subsubdir +
"/module_time_thread_total");
236 if (me_counter ==
nullptr or me_real_total ==
nullptr)
240 TH1D* real_total = me_real_total->
getTH1D();
241 TH1D* thread_total = me_thread_total->
getTH1D();
242 uint32_t bins = counter->GetXaxis()->GetNbins() - 1;
243 double min = counter->GetXaxis()->GetXmin();
244 double max = counter->GetXaxis()->GetXmax() - 1;
248 TH1F* thread_average;
249 TH1F* thread_running;
254 me = getter.
get(
"module_time_real_average");
259 real_average->Reset();
261 real_average = booker.
book1D(
"module_time_real_average",
"module real average timing", bins, min, max)->
getTH1F();
262 real_average->SetYTitle(
"average processing (real) time [ms]");
263 for (uint32_t
i = 1;
i <= bins; ++
i) {
264 const char*
module = counter->GetXaxis()->GetBinLabel(
i);
265 real_average->GetXaxis()->SetBinLabel(
i, module);
269 me = getter.
get(
"module_time_thread_average");
271 thread_average = me->
getTH1F();
274 thread_average->Reset();
277 booker.
book1D(
"module_time_thread_average",
"module thread average timing", bins, min, max)->
getTH1F();
278 thread_average->SetYTitle(
"average processing (thread) time [ms]");
279 for (uint32_t
i = 1;
i <= bins; ++
i) {
280 const char*
module = counter->GetXaxis()->GetBinLabel(
i);
281 thread_average->GetXaxis()->SetBinLabel(
i, module);
285 me = getter.
get(
"module_time_real_running");
290 real_running->Reset();
292 real_running = booker.
book1D(
"module_time_real_running",
"module real running timing", bins, min, max)->
getTH1F();
293 real_running->SetYTitle(
"running processing (real) time [ms]");
294 for (uint32_t
i = 1;
i <= bins; ++
i) {
295 const char*
module = counter->GetXaxis()->GetBinLabel(
i);
296 real_running->GetXaxis()->SetBinLabel(
i, module);
300 me = getter.
get(
"module_time_thread_running");
302 thread_running = me->
getTH1F();
305 thread_running->Reset();
308 booker.
book1D(
"module_time_thread_running",
"module thread running timing", bins, min, max)->
getTH1F();
309 thread_running->SetYTitle(
"running processing (thread) time [ms]");
310 for (uint32_t
i = 1;
i <= bins; ++
i) {
311 const char*
module = counter->GetXaxis()->GetBinLabel(
i);
312 thread_running->GetXaxis()->SetBinLabel(
i, module);
316 me = getter.
get(
"module_efficiency");
323 efficiency = booker.
book1D(
"module_efficiency",
"module efficiency", bins, min, max)->
getTH1F();
324 efficiency->SetYTitle(
"filter efficiency");
325 efficiency->SetMaximum(1.05);
326 for (uint32_t
i = 1;
i <= bins; ++
i) {
327 const char*
module = counter->GetXaxis()->GetBinLabel(
i);
328 efficiency->GetXaxis()->SetBinLabel(
i, module);
332 for (uint32_t
i = 1;
i <= bins; ++
i) {
333 double n = counter->GetBinContent(
i);
334 double p = counter->GetBinContent(
i + 1);
336 efficiency->SetBinContent(
i, p / n);
339 double t = real_total->GetBinContent(
i);
340 real_average->SetBinContent(
i, t / events);
342 real_running->SetBinContent(
i, t / n);
345 t = thread_total->GetBinContent(
i);
346 thread_average->SetBinContent(
i, t / events);
348 thread_running->SetBinContent(
i, t / n);
367 std::vector<std::string> menames;
369 static const boost::regex byls(
".*byls");
370 static const boost::regex
test(suffix);
373 std::vector<std::string> allmenames = getter.
getMEs();
374 for (
auto const&
m : allmenames) {
376 if (boost::regex_match(
m, byls))
377 menames.push_back(
m);
395 edm::LogWarning(
"FastTimerServiceClient") <<
"no " << name <<
" ME is available in " << folder << std::endl;
403 std::vector<double>
lumi;
405 for (
size_t ibin = 1; ibin <=
size; ++ibin) {
407 if (lumiVsLS->
getTProfile()->GetBinContent(ibin) == 0.)
410 lumi.push_back(lumiVsLS->
getTProfile()->GetBinContent(ibin));
411 LS.push_back(lumiVsLS->
getTProfile()->GetXaxis()->GetBinCenter(ibin));
416 for (
auto const&
m : menames) {
418 label.erase(label.find(
"_byls"));
425 MonitorElement* meVsLumi = getter.
get(current_path +
"/" + label +
"_" + suffix);
431 meVsLumi = booker.
bookProfile(label +
"_" + suffix, label +
"_" + suffix, nbins, xmin, xmax, ymin, ymax);
433 meVsLumi->
getTProfile()->GetXaxis()->SetTitle(xtitle.c_str());
434 meVsLumi->
getTProfile()->GetYaxis()->SetTitle(ytitle.c_str());
436 for (
size_t ils = 0; ils < LS.size(); ++ils) {
437 int ibin = me->
getTProfile()->GetXaxis()->FindBin(LS[ils]);
440 meVsLumi->
Fill(lumi[ils], y);
448 pset.
add<
int>(
"nbins", 440);
449 pset.
add<
double>(
"xmin", 0.);
450 pset.
add<
double>(
"xmax", 22000.);
456 pset.
add<
int>(
"nbins", 260);
457 pset.
add<
double>(
"xmin", 0.);
458 pset.
add<
double>(
"xmax", 130.);
476 desc.
add<
bool>(
"doPlotsVsScalLumi",
true);
477 desc.
add<
bool>(
"doPlotsVsPixelLumi",
false);
478 desc.
add<
bool>(
"doPlotsVsPU",
true);
492 descriptions.
add(
"fastTimerServiceClient", desc);
static void fillPUMePSetDescription(edm::ParameterSetDescription &pset)
void dqmEndLuminosityBlock(DQMStore::IBooker &booker, DQMStore::IGetter &getter, edm::LuminosityBlock const &, edm::EventSetup const &) override
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
virtual void setCurrentFolder(std::string const &fullpath)
virtual DQM_DEPRECATED std::vector< std::string > getSubdirs() const
void fillPlotsVsLumi(DQMStore::IBooker &booker, DQMStore::IGetter &getter, std::string const ¤t_path, std::string const &suffix, MEPSet pset)
#define DEFINE_FWK_MODULE(type)
virtual TH1F * getTH1F() const
void fillProcessSummaryPlots(DQMStore::IBooker &booker, DQMStore::IGetter &getter, std::string const &path)
~FastTimerServiceClient() override
virtual void Reset()
Remove all data from the ME, keept the empty histogram with all its settings.
void dqmEndJob(DQMStore::IBooker &booker, DQMStore::IGetter &getter) override
static MEPSet getHistoPSet(const edm::ParameterSet &pset)
void fillPathSummaryPlots(DQMStore::IBooker &booker, DQMStore::IGetter &getter, double events, std::string const &path)
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
virtual MonitorElement * get(std::string const &fullpath) const
static void fillLumiMePSetDescription(edm::ParameterSetDescription &pset)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
FastTimerServiceClient(edm::ParameterSet const &)
void fillSummaryPlots(DQMStore::IBooker &booker, DQMStore::IGetter &getter)
virtual double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
virtual TProfile * getTProfile() const
virtual TH1D * getTH1D() const
T getParameter(std::string const &) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
tuple config
parse the configuration file
virtual std::vector< std::string > getMEs() const
static std::atomic< unsigned int > counter
Log< level::Warning, false > LogWarning
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
tuple size
Write out results.