WIP:StrippingReport histograms
This MR provides an update to StrippingReport
algorithm to provide histogram
monitors into the output root file.
Here are examples of histograms (rate/time/multiplicities). They are grouped by streams:
Technical details:
- Deprecate the stateful counting with
ReportStat
subclass and use the histogram/counter service instead. Going for stateless make it ready for future concurrency. - By using histo/counter services, the output (rate/multiplicity/timing) are available in the output root file, instead of relying on parsing the stdout.
- Being in .root file also provide immediate visualization of anomalous lines.
- Use
TProfile
as a base class of histogram. This is ideal for fraction-like counters where numerators and denominators are collected in parallel. - Consequently, the miscellaneous post-processing (latex style, hot lines) can be done offline instead using resultant root file. These methods are thus removed.
- Depreciate the redundant correlation logic (use
AlgorithmCorrelationsAlg
nowadays). - Depreciate the
IIncidentListener
logic to count global events. This is instead easily accessible throughIEventCounter
tool.
Other remarks:
- By having output as histograms in root files, the stripping can then be run
with multiple subjobs (e.g., in Ganga), then easily be
hadd
together. - It can be a base for
LHCbPR2
in the future (hopefully, for automated validation). - It still keeps the output
strippingreport.py
for backward-compatibility, so that it doesn't break the existing coordinator scripts. (I'd be happy to help you migrate though). - It also include the value of CPU speed ratio, so that the timing can be
correctly normalized across jobs. This is adjustable from the property
NormalizeTime
, default to False for backward-compat. - As a bonus, ~2x speed gain compared to previous implementation.
- Remove unused import.
The target branch is master
, it's not needed to be used for current campaigns, but some people may found this useful already :)
Edited by Federico Leo Redi