10 #define CLOCK_REALTIME 0
11 #define CLOCK_MONOTONIC 1
12 #define CLOCK_PROCESS_CPUTIME_ID 2
13 #define CLOCK_THREAD_CPUTIME_ID 3
23 #include <unordered_set>
24 #include <unordered_map>
27 #include <boost/format.hpp>
54 for (
unsigned int i = dups.size();
i <
size; ++
i)
62 m_is_cpu_bound(
false ),
63 m_enable_timing_paths( config.getUntrackedParameter<bool>(
"enableTimingPaths" ) ),
64 m_enable_timing_modules( config.getUntrackedParameter<bool>(
"enableTimingModules" ) ),
65 m_enable_timing_exclusive( config.getUntrackedParameter<bool>(
"enableTimingExclusive" ) ),
66 m_enable_timing_summary( config.getUntrackedParameter<bool>(
"enableTimingSummary" ) ),
67 m_skip_first_path( config.getUntrackedParameter<bool>(
"skipFirstPath" ) ),
69 m_enable_dqm( config.getUntrackedParameter<bool>(
"enableDQM" ) ),
70 m_enable_dqm_bypath_active( config.getUntrackedParameter<bool>(
"enableDQMbyPathActive" ) ),
71 m_enable_dqm_bypath_total( config.getUntrackedParameter<bool>(
"enableDQMbyPathTotal" ) ),
72 m_enable_dqm_bypath_overhead( config.getUntrackedParameter<bool>(
"enableDQMbyPathOverhead" ) ),
73 m_enable_dqm_bypath_details( config.getUntrackedParameter<bool>(
"enableDQMbyPathDetails" ) ),
74 m_enable_dqm_bypath_counters( config.getUntrackedParameter<bool>(
"enableDQMbyPathCounters" ) ),
75 m_enable_dqm_bypath_exclusive( config.getUntrackedParameter<bool>(
"enableDQMbyPathExclusive" ) ),
76 m_enable_dqm_bymodule( config.getUntrackedParameter<bool>(
"enableDQMbyModule" ) ),
77 m_enable_dqm_bymoduletype( config.getUntrackedParameter<bool>(
"enableDQMbyModuleType" ) ),
78 m_enable_dqm_summary( config.getUntrackedParameter<bool>(
"enableDQMSummary" ) ),
79 m_enable_dqm_byluminosity( config.getUntrackedParameter<bool>(
"enableDQMbyLuminosity" ) ),
80 m_enable_dqm_byls( config.existsAs<bool>(
"enableDQMbyLumiSection",
false) ?
81 config.getUntrackedParameter<bool>(
"enableDQMbyLumiSection") :
82 ( edm::LogWarning(
"Configuration") <<
"enableDQMbyLumi is deprecated, please use enableDQMbyLumiSection instead", config.getUntrackedParameter<bool>(
"enableDQMbyLumi") )
84 m_enable_dqm_bynproc( config.getUntrackedParameter<bool>(
"enableDQMbyProcesses" ) ),
85 m_nproc_enabled(
false ),
86 m_dqm_eventtime_range( config.getUntrackedParameter<double>(
"dqmTimeRange" ) ),
87 m_dqm_eventtime_resolution( config.getUntrackedParameter<double>(
"dqmTimeResolution" ) ),
88 m_dqm_pathtime_range( config.getUntrackedParameter<double>(
"dqmPathTimeRange" ) ),
89 m_dqm_pathtime_resolution( config.getUntrackedParameter<double>(
"dqmPathTimeResolution" ) ),
90 m_dqm_moduletime_range( config.getUntrackedParameter<double>(
"dqmModuleTimeRange" ) ),
91 m_dqm_moduletime_resolution( config.getUntrackedParameter<double>(
"dqmModuleTimeResolution" ) ),
92 m_dqm_luminosity_range( config.getUntrackedParameter<double>(
"dqmLuminosityRange" ) / 1.e30),
93 m_dqm_luminosity_resolution( config.getUntrackedParameter<double>(
"dqmLuminosityResolution" ) / 1.e30),
94 m_dqm_ls_range( config.getUntrackedParameter<uint32_t>(
"dqmLumiSectionsRange" ) ),
95 m_dqm_path( config.getUntrackedParameter<std::
string>(
"dqmPath" ) ),
96 m_luminosity_label( config.getUntrackedParameter<edm::InputTag>(
"luminosityProduct") ),
97 m_supported_processes( config.getUntrackedParameter<std::vector<unsigned int> >(
"supportedProcesses") ),
103 m_is_first_module(
false),
104 m_is_first_event(
true),
116 m_summary_presource(0.),
117 m_summary_source(0.),
118 m_summary_postsource(0.),
119 m_summary_all_paths(0.),
120 m_summary_all_endpaths(0.),
121 m_summary_interpaths(0.),
128 m_dqm_postsource (0),
130 m_dqm_all_endpaths(0),
133 m_dqm_nproc_event(0),
134 m_dqm_nproc_source(0),
135 m_dqm_nproc_all_paths(0),
136 m_dqm_nproc_all_endpaths(0),
137 m_dqm_nproc_interpaths(0),
139 m_dqm_paths_active_time(0),
140 m_dqm_paths_total_time(0),
141 m_dqm_paths_exclusive_time(0),
142 m_dqm_paths_interpaths(0),
145 m_dqm_byls_presource(0),
146 m_dqm_byls_source(0),
147 m_dqm_byls_postsource(0),
148 m_dqm_byls_all_paths(0),
149 m_dqm_byls_all_endpaths(0),
150 m_dqm_byls_interpaths(0),
152 m_dqm_nproc_byls_event(0),
153 m_dqm_nproc_byls_presource(0),
154 m_dqm_nproc_byls_source(0),
155 m_dqm_nproc_byls_postsource(0),
156 m_dqm_nproc_byls_all_paths(0),
157 m_dqm_nproc_byls_all_endpaths(0),
158 m_dqm_nproc_byls_interpaths(0),
160 m_dqm_byluminosity_event(0),
161 m_dqm_byluminosity_presource(0),
162 m_dqm_byluminosity_source(0),
163 m_dqm_byluminosity_postsource(0),
164 m_dqm_byluminosity_all_paths(0),
165 m_dqm_byluminosity_all_endpaths(0),
166 m_dqm_byluminosity_interpaths(0),
168 m_dqm_nproc_byluminosity_event(0),
169 m_dqm_nproc_byluminosity_presource(0),
170 m_dqm_nproc_byluminosity_source(0),
171 m_dqm_nproc_byluminosity_postsource(0),
172 m_dqm_nproc_byluminosity_all_paths(0),
173 m_dqm_nproc_byluminosity_all_endpaths(0),
174 m_dqm_nproc_byluminosity_interpaths(0),
221 #if defined(__APPLE__) || defined (__MACH__)
222 host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &m_clock_port);
223 #endif // defined(__APPLE__) || defined(__MACH__)
228 #if defined(__APPLE__) || defined (__MACH__)
229 mach_port_deallocate(mach_task_self(), m_clock_port);
230 #endif // defined(__APPLE__) || defined(__MACH__)
244 if (clock_getcpuclockid(0, & clock) == ENOENT)
246 edm::LogError(
"FastTimerService") <<
"this process is NOT bound to a single CPU, the results of the FastTimerService may be undefined";
253 uint32_t
size = size_p + size_e;
254 for (uint32_t
i = 0;
i < size_p; ++
i) {
258 for (uint32_t
i = 0;
i < size_e; ++
i) {
312 plot->StatOverflows(
true);
313 plot->SetXTitle(
"processing time [ms]");
315 plot->StatOverflows(
true);
316 plot->SetXTitle(
"processing time [ms]");
318 plot->StatOverflows(
true);
319 plot->SetXTitle(
"processing time [ms]");
321 plot->StatOverflows(
true);
322 plot->SetXTitle(
"processing time [ms]");
324 plot->StatOverflows(
true);
325 plot->SetXTitle(
"processing time [ms]");
327 plot->StatOverflows(
true);
328 plot->SetXTitle(
"processing time [ms]");
330 plot->StatOverflows(
true);
331 plot->SetXTitle(
"processing time [ms]");
350 for (uint32_t
i = 0;
i < size_p; ++
i) {
357 for (uint32_t
i = 0;
i < size_e; ++
i) {
404 plot->StatOverflows(
true);
405 plot->SetXTitle(
"lumisection");
406 plot->SetYTitle(
"processing time [ms]");
408 plot->StatOverflows(
true);
409 plot->SetXTitle(
"lumisection");
410 plot->SetYTitle(
"processing time [ms]");
412 plot->StatOverflows(
true);
413 plot->SetXTitle(
"lumisection");
414 plot->SetYTitle(
"processing time [ms]");
416 plot->StatOverflows(
true);
417 plot->SetXTitle(
"lumisection");
418 plot->SetYTitle(
"processing time [ms]");
420 plot->StatOverflows(
true);
421 plot->SetXTitle(
"lumisection");
422 plot->SetYTitle(
"processing time [ms]");
424 plot->StatOverflows(
true);
425 plot->SetXTitle(
"lumisection");
426 plot->SetYTitle(
"processing time [ms]");
428 plot->StatOverflows(
true);
429 plot->SetXTitle(
"lumisection");
430 plot->SetYTitle(
"processing time [ms]");
473 plot->StatOverflows(
true);
474 plot->SetYTitle(
"processing time [ms]");
475 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
477 plot->StatOverflows(
true);
478 plot->SetYTitle(
"processing time [ms]");
479 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
481 plot->StatOverflows(
true);
482 plot->SetYTitle(
"processing time [ms]");
483 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
485 plot->StatOverflows(
true);
486 plot->SetYTitle(
"processing time [ms]");
487 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
489 plot->StatOverflows(
true);
490 plot->SetYTitle(
"processing time [ms]");
491 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
493 plot->StatOverflows(
true);
494 plot->SetYTitle(
"processing time [ms]");
495 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
497 plot->StatOverflows(
true);
498 plot->SetYTitle(
"processing time [ms]");
499 plot->SetXTitle(
"instantaneous luminosity [10^{30} cm^{-2}s^{-1}]");
508 PathInfo & pathinfo = keyval.second;
513 pathinfo.
dqm_active ->SetXTitle(
"processing time [ms]");
518 pathinfo.
dqm_total ->StatOverflows(
true);
519 pathinfo.
dqm_total ->SetXTitle(
"processing time [ms]");
534 pathinfo.
dqm_overhead ->SetXTitle(
"processing time [ms]");
544 std::vector<std::string>();
546 static std::vector<std::string> dup;
547 if (modules.size() > dup.size())
550 std::vector<const char *>
labels(modules.size(),
nullptr);
551 for (uint32_t
i = 0;
i < modules.size(); ++
i)
555 if (m_enable_dqm_bypath_counters) {
558 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
569 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
593 module.
dqm_active->SetXTitle(
"processing time [ms]");
604 module.
dqm_active->SetXTitle(
"processing time [ms]");
683 std::ostringstream
out;
684 out << std::fixed << std::setprecision(6);
694 double modules_total = 0.;
696 modules_total += keyval.second.summary_active;
697 out <<
"FastReport " << std::right << std::setw(10) << modules_total / (double)
m_summary_events <<
" all Modules" <<
'\n';
701 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Path" <<
'\n';
707 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active EndPath" <<
'\n';
713 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Pre- Inter- Post-mods Overhead Total Path" <<
'\n';
725 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Pre- Inter- Post-mods Overhead Total EndPath" <<
'\n';
738 if (m_enable_timing_modules) {
739 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
745 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
747 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
753 out <<
"FastReport " << (m_timer_id ==
CLOCK_REALTIME ?
"(real time) " :
"(CPU time) ") <<
" Active Module" <<
'\n';
878 for (
auto & keyval :
m_paths) {
879 keyval.second.time_active = 0.;
880 keyval.second.time_premodules = 0.;
881 keyval.second.time_intermodules = 0.;
882 keyval.second.time_postmodules = 0.;
883 keyval.second.time_total = 0.;
886 keyval.second.time_active = 0.;
887 keyval.second.has_just_run =
false;
888 keyval.second.is_exclusive =
false;
891 keyval.second.time_active = 0.;
892 keyval.second.has_just_run =
false;
893 keyval.second.is_exclusive =
false;
906 PathInfo & pathinfo = keyval.second;
909 for (uint32_t
i = 0;
i <= pathinfo.
last_run; ++
i) {
971 unsigned int ls =
event.getLuminosityBlock().luminosityBlock();
992 float luminosity = 0.;
995 luminosity = h_luminosity->front().instantLumi();
1078 if (keyval !=
m_paths.end()) {
1090 edm::LogError(
"FastTimerService") <<
"FastTimerService::preProcessPath: unexpected path " <<
path;
1140 double overhead = 0.;
1142 double total = active;
1150 uint32_t last_run = status.
index();
1151 for (uint32_t
i = 0;
i <= last_run; ++
i) {
1198 inter = active - pre - current - post;
1228 pathinfo.
dqm_total ->Fill(total * 1000.);
1308 std::vector<ModuleInfo *> & pathmap =
m_paths[
name].modules;
1310 pathmap.reserve( modules.size() );
1311 std::unordered_set<ModuleInfo const *>
pool;
1312 for (
auto const &
module: modules) {
1316 auto const & it =
m_modules.find(label);
1319 pathmap.push_back( 0 );
1320 }
else if (pool.insert(& it->second).second) {
1322 pathmap.push_back(& it->second);
1325 pathmap.push_back( 0 );
1337 struct timespec now;
1344 struct timespec now;
1351 struct timespec now;
1360 return keyval->second->time_active;
1362 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module " << module.
moduleLabel();
1369 auto const & keyval =
m_modules.find(label);
1371 return keyval->second.time_active;
1374 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByLabel: unexpected module " <<
label;
1383 return keyval->second.time_active;
1386 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByType: unexpected module type " <<
type;
1394 if (keyval !=
m_paths.end()) {
1395 return keyval->second.time_active;
1397 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryPathActiveTime: unexpected path " <<
path;
1405 if (keyval !=
m_paths.end()) {
1406 return keyval->second.time_total;
1408 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryPathTotalTime: unexpected path " <<
path;
1439 desc.
addUntracked<
bool>(
"enableTimingExclusive",
false);
1440 desc.
addUntracked<
bool>(
"enableTimingSummary",
false);
1443 desc.
addUntracked<
bool>(
"enableDQMbyPathActive",
false);
1444 desc.
addUntracked<
bool>(
"enableDQMbyPathTotal",
true);
1445 desc.
addUntracked<
bool>(
"enableDQMbyPathOverhead",
false);
1446 desc.
addUntracked<
bool>(
"enableDQMbyPathDetails",
false);
1447 desc.
addUntracked<
bool>(
"enableDQMbyPathCounters",
true);
1448 desc.
addUntracked<
bool>(
"enableDQMbyPathExclusive",
false);
1450 desc.
addUntracked<
bool>(
"enableDQMbyModuleType",
false);
1452 desc.
addUntracked<
bool>(
"enableDQMbyLuminosity",
false);
1457 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1461 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1462 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1463 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1464 desc.
addUntracked<
double>(
"dqmLuminosityRange", 1.e34 );
1465 desc.
addUntracked<
double>(
"dqmLuminosityResolution", 1.e31 );
1466 desc.
addUntracked<uint32_t>(
"dqmLumiSectionsRange", 2500 );
1469 desc.
addUntracked<std::vector<unsigned int> >(
"supportedProcesses", { 8, 24, 32 });
1470 descriptions.
add(
"FastTimerService", desc);
void prePathBeginRun(std::string const &)
std::pair< struct timespec, struct timespec > m_timer_path
const double m_dqm_eventtime_resolution
Strings const & getTrigPathModules(std::string const &name) const
TProfile * m_dqm_byls_all_endpaths
std::string const & getTrigPath(size_type const i) const
const bool m_enable_dqm_byluminosity
const uint32_t m_dqm_ls_range
static void fill_dups(std::vector< std::string > &dups, unsigned int size)
double queryModuleTimeByType(const std::string &) const
ModuleMap< ModuleInfo * > m_fast_moduletypes
TProfile * m_dqm_byls_source
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool m_enable_timing_modules
TProfile * m_dqm_nproc_byls_all_paths
double queryEventTime() const
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
std::pair< struct timespec, struct timespec > m_timer_event
Strings const & getEndPaths() const
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
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
const clockid_t m_timer_id
TProfile * m_dqm_byls_presource
const double m_dqm_luminosity_resolution
double m_summary_postsource
TProfile * m_dqm_nproc_byls_presource
TH1F * m_dqm_nproc_presource
double queryModuleTimeByLabel(const std::string &) const
TH1F * m_dqm_nproc_interpaths
TProfile * m_dqm_byluminosity_interpaths
TProfile * m_dqm_nproc_byluminosity_source
void preProcessEvent(edm::EventID const &, edm::Timestamp const &)
double summary_postmodules
const bool m_enable_dqm_bypath_counters
void postProcessEvent(edm::Event const &, edm::EventSetup const &)
const bool m_skip_first_path
void watchPostModule(PostModule::slot_type const &iSlot)
double m_summary_presource
std::string const * m_last_path
TProfile * m_dqm_nproc_byls_interpaths
TProfile * m_dqm_nproc_byluminosity_postsource
void watchPreProcessEvent(PreProcessEvent::slot_type const &iSlot)
void postModule(edm::ModuleDescription const &)
const bool m_enable_dqm_bypath_exclusive
double queryPathTotalTime(const std::string &) const
std::unordered_map< std::string, ModuleInfo > m_moduletypes
const double m_dqm_pathtime_range
std::string const & moduleName() const
std::string const * m_first_endpath
ParameterDescriptionNode * addNode(ParameterDescriptionNode const &node)
const edm::InputTag m_luminosity_label
#define CLOCK_THREAD_CPUTIME_ID
PathInfo * m_current_path
TProfile * m_dqm_byluminosity_presource
TH1F * m_dqm_nproc_all_paths
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
void setNumberOfProcesses(unsigned int)
std::string const & moduleLabel() const
std::pair< struct timespec, struct timespec > m_timer_endpaths
void watchPreModule(PreModule::slot_type const &iSlot)
TProfile * m_dqm_nproc_byluminosity_presource
double queryEndPathsTime() const
TProfile * m_dqm_nproc_byluminosity_event
TProfile * m_dqm_nproc_byluminosity_all_paths
TProfile * m_dqm_byls_postsource
TProfile * m_dqm_byls_interpaths
void preModuleBeginJob(edm::ModuleDescription const &)
const bool m_enable_dqm_bynproc
double querySourceTime() const
Strings const & getEndPathModules(std::string const &name) const
bool m_enable_timing_paths
void watchPostProcessEvent(PostProcessEvent::slot_type const &iSlot)
size_type findTrigPath(std::string const &name) const
void stop(std::pair< struct timespec, struct timespec > ×) const
void watchPrePathBeginRun(PrePathBeginRun::slot_type const &iSlot)
std::pair< struct timespec, struct timespec > m_timer_paths
TProfile * m_dqm_byluminosity_postsource
const bool m_enable_dqm_byls
const double m_dqm_moduletime_resolution
TProfile * m_dqm_byluminosity_source
void preModule(edm::ModuleDescription const &)
TProfile * m_dqm_nproc_byluminosity_all_endpaths
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
std::string const * m_first_path
TProfile * m_dqm_nproc_byls_source
TProfile * m_dqm_nproc_byls_all_endpaths
std::string const * m_last_endpath
double queryPathActiveTime(const std::string &) const
void start(std::pair< struct timespec, struct timespec > ×) const
PathMap< PathInfo > m_paths
void watchPreSource(PreSource::slot_type const &iSlot)
struct timespec m_timer_first_module
const bool m_enable_dqm_bypath_details
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
double m_summary_all_endpaths
TH1F * m_dqm_nproc_source
const bool m_enable_dqm_bypath_overhead
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
size_type findEndPath(std::string const &name) const
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
TProfile * m_dqm_nproc_byls_event
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
const std::string m_dqm_path
TProfile * m_dqm_byluminosity_all_endpaths
std::unordered_map< std::string, ModuleInfo > m_modules
TProfile * m_dqm_nproc_byls_postsource
ModuleMap< ModuleInfo * > m_fast_modules
const bool m_enable_dqm_bymodule
TH1F * m_dqm_nproc_postsource
const double m_dqm_moduletime_range
TProfile * m_dqm_byluminosity_all_paths
bool m_enable_timing_exclusive
double queryModuleTime(const edm::ModuleDescription &) const
double m_summary_all_paths
TH1F * getTH1F(void) const
double m_summary_interpaths
TProfile * m_dqm_paths_exclusive_time
double currentModuleTime() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
TProfile * m_dqm_byls_all_paths
TH1F * m_dqm_all_endpaths
double queryPathsTime() const
const bool m_enable_timing_summary
bool accept() const
has this path accepted the event?
const bool m_enable_dqm_bymoduletype
std::pair< struct timespec, struct timespec > m_timer_module
const bool m_enable_dqm_summary
double summary_premodules
void watchPostSource(PostSource::slot_type const &iSlot)
TProfile * m_dqm_byls_event
void gettime(struct timespec &stamp) const
std::string const & getEndPath(size_type const i) const
const bool m_enable_dqm_bypath_total
Strings const & getTrigPaths() const
TProfile * getTProfile(void) const
void fillPathMap(std::string const &name, std::vector< std::string > const &modules)
const bool m_enable_dqm_bypath_active
unsigned int m_summary_events
void postProcessPath(std::string const &, edm::HLTPathStatus const &)
const std::vector< unsigned int > m_supported_processes
TProfile * m_dqm_byluminosity_event
std::vector< ModuleInfo * > modules
TProfile * m_dqm_paths_active_time
const double m_dqm_luminosity_range
TH1F * m_dqm_nproc_all_endpaths
double summary_intermodules
TProfile * m_dqm_paths_total_time
TH1F * dqm_module_counter
TProfile * m_dqm_nproc_byluminosity_interpaths
double currentEventTime() const
void watchPreProcessPath(PreProcessPath::slot_type const &iSlot)
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void preProcessPath(std::string const &)
std::pair< struct timespec, struct timespec > m_timer_source
tuple size
Write out results.
static double delta(const struct timespec &first, const struct timespec &second)
void setCurrentFolder(const std::string &fullpath)
TProfile * m_dqm_paths_interpaths
void preBeginRun(edm::RunID const &, edm::Timestamp const &)
void watchPostProcessPath(PostProcessPath::slot_type const &iSlot)
void watchPreBeginRun(PreBeginRun::slot_type const &iSlot)
const double m_dqm_eventtime_range
const double m_dqm_pathtime_resolution
double currentPathTime() const
unsigned int index() const
get index of module giving the status of this path