ATLAS Offline Software
Loading...
Searching...
No Matches
CumulativeHistogramFiller1D.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef AthenaMonitoringKernel_HistogramFiller_CumulativeHistogramFiller1D_h
6#define AthenaMonitoringKernel_HistogramFiller_CumulativeHistogramFiller1D_h
7
8#include "HistogramFiller1D.h"
9
10namespace Monitored {
15 public:
16 CumulativeHistogramFiller1D(const HistogramDef& definition, std::shared_ptr<IHistogramProvider> provider)
17 : HistogramFiller1D(definition, std::move(provider)) {}
18
19
20
21 virtual unsigned fill( const HistogramFiller::VariablesPack& vars ) const override {
22 if ( vars.size() != 1) {
23 return 0;
24 }
25
26 const size_t varVecSize = vars[0]->size();
27
28 if (vars.cut) {
29 const size_t maskSize = vars.cut->size();
30 // Abort if no cut entries or first (and only) entry is false
31 if (maskSize == 0 || (maskSize == 1 && !vars.cut->get(0))) { return 0; }
32 if (ATH_UNLIKELY(maskSize > 1 && maskSize != varVecSize)) {
33 MsgStream log(Athena::getMessageSvc(), "CumulativeHistogramFiller1D");
34 log << MSG::ERROR << "CutMask does not match the size of plotted variable: "
35 << maskSize << " " << varVecSize << endmsg;
36 }
37 }
38
39 unsigned i{0};
40 auto histogram = this->histogram<TH1>();
41 for (; i < varVecSize; i++) {
42 if (vars.cut && !vars.cut->get(i)) { continue; }
43 const unsigned bin = histogram->FindBin(vars[0]->get(i));
44
45 for (unsigned j = bin; j > 0; --j) {
46 histogram->AddBinContent(j);
47 }
48 }
49
50 return i;
51 }
52 };
53}
54
55#endif /* AthenaMonitoringKernel_HistogramFiller_CumulativeHistogramFiller1D_h */
#define endmsg
#define ATH_UNLIKELY(x)
CumulativeHistogramFiller1D(const HistogramDef &definition, std::shared_ptr< IHistogramProvider > provider)
virtual unsigned fill(const HistogramFiller::VariablesPack &vars) const override
Method that actually fills the ROOT object.
HistogramFiller1D(const HistogramDef &definition, std::shared_ptr< IHistogramProvider > provider)
virtual double get(size_t) const =0
virtual size_t size() const =0
gives size of vector representation
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130
IMessageSvc * getMessageSvc(bool quiet=false)
Generic monitoring tool for athena components.
STL namespace.
the internal class used to keep parsed Filler properties
helper class to pass variables to fillers
const Monitored::IMonitoredVariable * cut
pointer to cut mask variable, typically absent
size_t size() const
number of variables in the pack ( not counting the weight and mask )