ATLAS Offline Software
VecHistogramFiller1D.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef AthenaMonitoringKernel_HistogramFiller_VecHistogramFiller1D_h
6 #define AthenaMonitoringKernel_HistogramFiller_VecHistogramFiller1D_h
7 
8 #include "HistogramFiller1D.h"
9 
10 namespace Monitored {
12  public:
13  VecHistogramFiller1D(const HistogramDef& definition, std::shared_ptr<IHistogramProvider> provider)
14  : HistogramFiller1D(definition, provider) {}
15 
16 
17  virtual unsigned fill(const HistogramFiller::VariablesPack& vars) const override {
18  if ( ATH_UNLIKELY(vars.size() == 0 or vars.var[0] == nullptr) ) { return 0; }
19 
20  std::function<bool(size_t)> cutMaskAccessor;
21  if (vars.cut) {
22  // handling of the cutmask
23  auto cutMaskValuePair = getCutMaskFunc(vars.cut);
24  if (cutMaskValuePair.first == 0) { return 0; }
25  if (ATH_UNLIKELY(cutMaskValuePair.first > 1 && cutMaskValuePair.first != vars.var[0]->size())) {
26  MsgStream log(Athena::getMessageSvc(), "VecHistogramFiller1D");
27  log << MSG::ERROR << "CutMask does not match the size of plotted variable: "
28  << cutMaskValuePair.first << " " << vars.var[0]->size() << endmsg;
29  }
30  cutMaskAccessor = cutMaskValuePair.second;
31  }
32  auto histogram = this->histogram<TH1>();
33 
34  if ( ATH_UNLIKELY( static_cast<size_t>(histogram->GetNbinsX()) + (m_histDef->kVecUO ? 2 : 0) != vars.var[0]->size() ) ) {
35  MsgStream log(Athena::getMessageSvc(), "VecHistogramFiller1D");
36  log << MSG::WARNING << "Histogram " << histogram->GetName()
37  << " filled with kVec(UO) option with variable " << vars.var[0]->name()
38  << " have incompatible sizes (histogram) " << histogram->GetNbinsX()
39  << " (variable) " << vars.var[0]->size()
40  << " They ought to match exactly for kVec option or n. hist. bins +2 == var. size fro kVecOU" << endmsg;
41  return 0;
42  }
43 
44  const unsigned offset = m_histDef->kVecUO ? 0 : 1;
45  for (unsigned i = 0; i < vars.var[0]->size(); ++i) {
46  if (cutMaskAccessor == nullptr or cutMaskAccessor(i)) {
47  const double value = vars.var[0]->get(i);
48  histogram->AddBinContent(i+offset, value);
49  histogram->SetEntries(histogram->GetEntries() + value);
50  }
51  }
52 
53  return vars.var[0]->size();
54  }
55  };
56 }
57 
58 #endif /* AthenaMonitoringKernel_HistogramFiller_VecHistogramFiller1D_h */
Monitored::HistogramFiller::histogram
H * histogram() const
Definition: HistogramFiller.h:150
Monitored::HistogramFiller::m_histDef
std::shared_ptr< HistogramDef > m_histDef
Definition: HistogramFiller.h:196
Monitored::VecHistogramFiller1D
Definition: VecHistogramFiller1D.h:11
Monitored::HistogramFiller1D
Filler for plain 1D histograms.
Definition: HistogramFiller1D.h:21
Monitored::HistogramFiller::VariablesPack::cut
const Monitored::IMonitoredVariable * cut
pointer to cut mask variable, typically absent
Definition: HistogramFiller.h:115
Monitored::VecHistogramFiller1D::fill
virtual unsigned fill(const HistogramFiller::VariablesPack &vars) const override
Method that actually fills the ROOT object.
Definition: VecHistogramFiller1D.h:17
athena.value
value
Definition: athena.py:122
ATH_UNLIKELY
#define ATH_UNLIKELY(x)
Definition: AthUnlikelyMacros.h:17
Monitored::HistogramDef
the internal class used to keep parsed Filler properties
Definition: HistogramDef.h:15
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
Monitored::HistogramFiller::VariablesPack
helper class to pass variables to fillers
Definition: HistogramFiller.h:71
lumiFormat.i
int i
Definition: lumiFormat.py:92
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
Monitored::HistogramFiller::VariablesPack::size
size_t size() const
number of variables in the pack ( not counting the weight and mask )
Definition: HistogramFiller.h:79
HistogramFiller1D.h
Monitored::HistogramFiller::VariablesPack::var
std::vector< const Monitored::IMonitoredVariable * > var
storage for variables, default size of 4, serves all histograming uses
Definition: HistogramFiller.h:113
Monitored::VecHistogramFiller1D::VecHistogramFiller1D
VecHistogramFiller1D(const HistogramDef &definition, std::shared_ptr< IHistogramProvider > provider)
Definition: VecHistogramFiller1D.h:13
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
Monitored::HistogramFiller::getCutMaskFunc
std::pair< size_t, std::function< bool(size_t)> > getCutMaskFunc(const Monitored::IMonitoredVariable *mask) const
Definition: HistogramFiller.h:155
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60