ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
APWeightHist Class Reference

#include <APWeightHist.h>

Inheritance diagram for APWeightHist:
Collaboration diagram for APWeightHist:

Public Member Functions

 APWeightHist (const char *name, const char *title, const int n_bins, const float x_min, const float x_max)
 Constructor which takes histo title, amount of bins and the range and optionally the preicision to use for the calculation of the uncertainty. More...
 
 APWeightHist ()
 Default constructor. More...
 
 ~APWeightHist ()
 Default destructor. More...
 
int Fill (const double value, APWeightEntry *weight)
 < Overloads TH1D's Fill method. More...
 
TGraphAsymmErrors * GetGraphStatUncert (bool autocompute=true)
 Extracts the histogram with statistical uncertainties. More...
 
TGraphErrors * GetGraphSystUncert (bool simple=true, bool autocompute=true)
 Extracts the histogram with systematic uncertainties. More...
 
void ComputeGraph (const int prec=250)
 Computes the resulting graph from all added ntuples and calculates the uncertainties for all bins. More...
 
TH1DGetBinPDF (unsigned int bin, bool autocompute=true)
 
 ClassDef (APWeightHist, 1)
 ClassDef for ROOTCINT dictionary. More...
 
double GetBinContent (int) const
 
void SetBinContent (int, double)
 

Private Attributes

double m_computed_entries
 Flag to store information about the status of the computation. More...
 
std::vector< std::vector< APWeightEntry * > > m_binned_weights
 Holds all filled weights weights as pointers. More...
 
std::vector< TH1D * > m_bin_dists
 Holds the PDFs for the individual bins. More...
 
std::vector< double > m_SumSys2
 Holds the variances of systematic uncertainties for the individual bins. More...
 
TGraphAsymmErrors * m_graph_stat
 Holds the histogram with statistical uncertainties. More...
 
TGraphErrors * m_graph_syst
 Holds the histogram with systematic uncertainties. More...
 

Detailed Description

Extended histogramming class.

Extended histogramming class (inheriting from TH1D) which allows propagation of uncertainties on the actual weights used for filling.

Author
fabia.nosp@m.n.Ko.nosp@m.hn@ce.nosp@m.rn.c.nosp@m.h

Definition at line 26 of file APWeightHist.h.

Constructor & Destructor Documentation

◆ APWeightHist() [1/2]

APWeightHist::APWeightHist ( const char *  name,
const char *  title,
const int  n_bins,
const float  x_min,
const float  x_max 
)

Constructor which takes histo title, amount of bins and the range and optionally the preicision to use for the calculation of the uncertainty.

Definition at line 18 of file APWeightHist.cxx.

19  : TH1D(name, title, n_bins, x_min, x_max)
20  //m_prec(0)
21 {
22  m_graph_stat = new TGraphAsymmErrors();
23  m_graph_stat->GetXaxis()->SetTitle(GetXaxis()->GetTitle());
24  m_graph_stat->GetYaxis()->SetTitle(GetYaxis()->GetTitle());
25  m_graph_syst = new TGraphErrors();
26  m_graph_syst->GetXaxis()->SetTitle(GetXaxis()->GetTitle());
27  m_graph_syst->GetYaxis()->SetTitle(GetYaxis()->GetTitle());
28  m_binned_weights = vector< vector< APWeightEntry* > >(n_bins);
29  Sumw2();
30  m_SumSys2 = vector< double >(n_bins, 0.);
31  m_computed_entries = 0.;
32 }

◆ APWeightHist() [2/2]

APWeightHist::APWeightHist ( )

Default constructor.

Definition at line 34 of file APWeightHist.cxx.

35  : m_graph_stat(0),
36  m_graph_syst(0)
37  //m_prec(0)
38 {
39  m_computed_entries = 0.;
40 }

◆ ~APWeightHist()

APWeightHist::~APWeightHist ( )

Default destructor.

Definition at line 42 of file APWeightHist.cxx.

42  {
43 
44 }

Member Function Documentation

◆ ClassDef()

APWeightHist::ClassDef ( APWeightHist  ,
 
)

ClassDef for ROOTCINT dictionary.

◆ ComputeGraph()

void APWeightHist::ComputeGraph ( const int  prec = 250)

Computes the resulting graph from all added ntuples and calculates the uncertainties for all bins.

Definition at line 67 of file APWeightHist.cxx.

67  {
68  for (int i = 0, I = m_graph_stat->GetN(); i < I; ++i) m_graph_stat->RemovePoint(i);
69  for (int i = 0, I = m_graph_syst->GetN(); i < I; ++i) m_graph_syst->RemovePoint(i);
70  vector< TH1D* > original_dists = vector< TH1D* >(fXaxis.GetNbins());
71  m_bin_dists = vector< TH1D* >(fXaxis.GetNbins());
72  int point_count = 0;
73  for (int j = 0; j < fXaxis.GetNbins(); ++j) {
74  //Create Poisson distributions for original histogram.
75  double unweighted_content = (double) (m_binned_weights[j]).size();
76  double sig_low_o = (max((double) 0.0, (unweighted_content - 5 * sqrt(unweighted_content))));
77  double sig_high_o = (unweighted_content + 5 * sqrt(unweighted_content));
78  double step = (sig_high_o - sig_low_o) * 1e-3;
79 
80  original_dists[j] = new TH1D("", "", 1000, sig_low_o, sig_high_o);
81 
82  int bin_no = 1;
83  double curr_fact = ln_factorialApp((m_binned_weights[j]).size());
84  for (double lambda = sig_low_o; lambda < sig_high_o; lambda += step) {
85  double value = exp(-lambda + unweighted_content * log(lambda) - curr_fact);
86  if (value != value) value = 0.;
87  (original_dists[j])->SetBinContent(bin_no, value);
88  ++bin_no;
89  }
90  (original_dists[j])->Scale(1. / (original_dists[j])->GetSum());
91  const double old_mode = (original_dists[j])->GetBinCenter((original_dists[j])->GetMaximumBin());
92  const double inv_old_mode = 1. / old_mode;
93 
94  //Create different final sum of weights for this bin
95  vector< double > bin_sumw(prec, 0.);
96  double max_value = 1.e-100;
97  double min_value = 1.e100;
98 
99  for (vector<double>::iterator it_hist = bin_sumw.begin(), it_histE = bin_sumw.end(); it_hist != it_histE; ++it_hist) {
100  for (vector<APWeightEntry*>::iterator it_func = (m_binned_weights[j]).begin(), it_funcE = (m_binned_weights[j]).end(); it_func != it_funcE; ++it_func) {
101  *it_hist += (*it_func)->GetRandom();
102  }
103  double cur_val = *it_hist;
104  if (cur_val < min_value) {
105  min_value = cur_val;
106  } else if (cur_val > max_value) {
107  max_value = cur_val;
108  }
109  }
110 
111  //Create final distribution for this bin
112  TH1D* scaled_hist_l = (TH1D*) (original_dists[j])->Clone("");
113  TH1D* scaled_hist_h = (TH1D*) (original_dists[j])->Clone("");
114  double scale = min_value * inv_old_mode;
115  scaled_hist_l->GetXaxis()->SetLimits(scale * sig_low_o, scale * sig_high_o);
116  scale = max_value * inv_old_mode;
117  scaled_hist_h->GetXaxis()->SetLimits(scale * sig_low_o, scale * sig_high_o);
118 
119  double quant[1];
120  double prob[1] = {0.001};
121 
122  scaled_hist_l->GetQuantiles(1, quant, prob);
123  double sig_low = quant[0];
124  prob[0] = 0.999;
125  scaled_hist_h->GetQuantiles(1, quant, prob);
126  double sig_high = quant[0];
127 
128  m_bin_dists[j] = new TH1D("", "", 1000, sig_low, sig_high);
129 
130  //fill final distribution for this bin with scaled/weighted Poisson distributions
131  if (unweighted_content > 0.) {
132  for (int k = 0; k < prec; ++k) {
133  double new_val = bin_sumw[k];
134  TH1D* scaled_hist = (TH1D*) (original_dists[j])->Clone("");
135  double temp_scale = new_val * inv_old_mode;
136  scaled_hist->GetXaxis()->SetLimits(temp_scale * sig_low_o, temp_scale * sig_high_o);
137  for (int l = 1; l < 1001; ++l) {
138  (m_bin_dists[j])->AddBinContent(l, scaled_hist->GetBinContent(scaled_hist->FindBin((m_bin_dists[j])->GetBinCenter(l))));
139  }
140  delete scaled_hist;
141  }
142  double local_value = sig_low + (m_bin_dists[j])->GetMaximumBin() * ((sig_high - sig_low) * 1e-3);
143  m_graph_stat->SetPoint(point_count, (GetXaxis()->GetXmin() + j * GetBinWidth(j + 1) + GetBinWidth(j + 1) / 2), local_value);
144  m_graph_syst->SetPoint(point_count, (GetXaxis()->GetXmin() + j * GetBinWidth(j + 1) + GetBinWidth(j + 1) / 2), local_value);
145  double quantile[ 2 ];
146  double conf[ 2 ] = {0.1585, 0.8415};
147  (m_bin_dists[j])->GetQuantiles(2, quantile, conf);
148  m_graph_stat->SetPointError(point_count, GetBinWidth(j + 1) / 2, GetBinWidth(j + 1) / 2, local_value - quantile[0], quantile[1] - local_value);
149  m_graph_syst->SetPointError(point_count, GetBinWidth(j + 1) / 2, local_value * (sqrt(m_SumSys2[j]) / GetBinContent(j + 1)));
150  ++point_count;
151  }
152  }
153  m_computed_entries = fEntries;
154 }

◆ Fill()

int APWeightHist::Fill ( const double  value,
APWeightEntry weight 
)

< Overloads TH1D's Fill method.

Adds a weighted value to the calculation.

Definition at line 46 of file APWeightHist.cxx.

46  {
47  // if (fBuffer) return BufferFill(value,w);
48  double w = weight->GetExpectancy();
49  int bin = fXaxis.FindBin(value);
50  fEntries++;
51  AddBinContent(bin, w);
52  if (fSumw2.fN) fSumw2.fArray[bin] += w * w;
53  if (bin == 0 || bin > fXaxis.GetNbins()) {
54  if (!GetStatOverflowsBehaviour()) return -1;
55  }
56  Double_t z = (w > 0 ? w : -w);
57  fTsumw += z;
58  fTsumw2 += z*z;
59  fTsumwx += z*value;
60  fTsumwx2 += z * value*value;
61  (m_binned_weights[bin - 1]).push_back(weight);
62  fSumw2.fArray[bin] += weight->GetVariance() + z*z;
63  m_SumSys2[bin - 1] += weight->GetSysUncert2();
64  return bin;
65 }

◆ GetBinContent()

double TH1D::GetBinContent ( int  i) const
inherited

Definition at line 347 of file rootspy.cxx.

347 { LOGCALLC; return ret(((double(*)(const void*,int))realaddr)(this,i)); }

◆ GetBinPDF()

TH1D * APWeightHist::GetBinPDF ( unsigned int  bin,
bool  autocompute = true 
)

Definition at line 178 of file APWeightHist.cxx.

178  {
179  if (autocompute && fEntries > m_computed_entries) ComputeGraph();
180  return m_bin_dists[bin - 1];
181 }

◆ GetGraphStatUncert()

TGraphAsymmErrors * APWeightHist::GetGraphStatUncert ( bool  autocompute = true)

Extracts the histogram with statistical uncertainties.

Definition at line 156 of file APWeightHist.cxx.

156  {
157  if (autocompute && fEntries > m_computed_entries) ComputeGraph();
158  return m_graph_stat;
159 }

◆ GetGraphSystUncert()

TGraphErrors * APWeightHist::GetGraphSystUncert ( bool  simple = true,
bool  autocompute = true 
)

Extracts the histogram with systematic uncertainties.

Definition at line 161 of file APWeightHist.cxx.

161  {
162  if (simple) {
163  for (int i = 0, I = m_graph_syst->GetN(); i < I; ++i) m_graph_syst->RemovePoint(i);
164  int point_count = 0;
165  for (int j = 0; j < fXaxis.GetNbins(); ++j) {
166  if ((m_binned_weights[j]).size() > 0) {
167  m_graph_syst->SetPoint(point_count, (GetXaxis()->GetXmin() + j * GetBinWidth(j + 1) + GetBinWidth(j + 1) / 2), GetBinContent(j + 1));
168  m_graph_syst->SetPointError(point_count, GetBinWidth(j + 1) / 2, sqrt(m_SumSys2[j]));
169  ++point_count;
170  }
171  }
172  return m_graph_syst;
173  }
174  if (autocompute && fEntries > m_computed_entries) ComputeGraph();
175  return m_graph_syst;
176 }

◆ SetBinContent()

void TH1D::SetBinContent ( int  i,
double  d 
)
inherited

Definition at line 348 of file rootspy.cxx.

348 { LOGCALL; ((void(*)(void*,int,double))realaddr)(this,i,d);ret(); }

Member Data Documentation

◆ m_bin_dists

std::vector< TH1D* > APWeightHist::m_bin_dists
private

Holds the PDFs for the individual bins.

Definition at line 44 of file APWeightHist.h.

◆ m_binned_weights

std::vector< std::vector< APWeightEntry* > > APWeightHist::m_binned_weights
private

Holds all filled weights weights as pointers.

Definition at line 43 of file APWeightHist.h.

◆ m_computed_entries

double APWeightHist::m_computed_entries
private

Flag to store information about the status of the computation.

Definition at line 42 of file APWeightHist.h.

◆ m_graph_stat

TGraphAsymmErrors* APWeightHist::m_graph_stat
private

Holds the histogram with statistical uncertainties.

Definition at line 46 of file APWeightHist.h.

◆ m_graph_syst

TGraphErrors* APWeightHist::m_graph_syst
private

Holds the histogram with systematic uncertainties.

Definition at line 47 of file APWeightHist.h.

◆ m_SumSys2

std::vector< double > APWeightHist::m_SumSys2
private

Holds the variances of systematic uncertainties for the individual bins.

Definition at line 45 of file APWeightHist.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
APWeightHist::m_SumSys2
std::vector< double > m_SumSys2
Holds the variances of systematic uncertainties for the individual bins.
Definition: APWeightHist.h:45
max
#define max(a, b)
Definition: cfImp.cxx:41
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
hist_file_dump.d
d
Definition: hist_file_dump.py:137
APWeightHist::m_computed_entries
double m_computed_entries
Flag to store information about the status of the computation.
Definition: APWeightHist.h:42
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
bin
Definition: BinsDiffFromStripMedian.h:43
athena.value
value
Definition: athena.py:122
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
covarianceTool.prob
prob
Definition: covarianceTool.py:678
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
TH1D::GetBinContent
double GetBinContent(int) const
Definition: rootspy.cxx:347
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
python.ConfigurableDb.conf
def conf
Definition: ConfigurableDb.py:282
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
ret
T ret(T t)
Definition: rootspy.cxx:260
ln_factorialApp
double ln_factorialApp(unsigned int value)
Logarithmic factorial (approximative).
Definition: MathTools.cxx:18
LOGCALLC
#define LOGCALLC
Definition: rootspy.cxx:247
covarianceTool.title
title
Definition: covarianceTool.py:542
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
Scale
void Scale(TH1 *h, double d=1)
Definition: comparitor.cxx:76
LOGCALL
#define LOGCALL
Definition: rootspy.cxx:246
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:83
TH1D::SetBinContent
void SetBinContent(int, double)
Definition: rootspy.cxx:348
APWeightHist::m_binned_weights
std::vector< std::vector< APWeightEntry * > > m_binned_weights
Holds all filled weights weights as pointers.
Definition: APWeightHist.h:43
APWeightHist::m_graph_syst
TGraphErrors * m_graph_syst
Holds the histogram with systematic uncertainties.
Definition: APWeightHist.h:47
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
APWeightHist::m_graph_stat
TGraphAsymmErrors * m_graph_stat
Holds the histogram with statistical uncertainties.
Definition: APWeightHist.h:46
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
LArCellBinning.step
step
Definition: LArCellBinning.py:158
APWeightHist::m_bin_dists
std::vector< TH1D * > m_bin_dists
Holds the PDFs for the individual bins.
Definition: APWeightHist.h:44
jobOptions.prec
prec
Definition: jobOptions.Superchic_UPC_yyMuMu.py:20
I
#define I(x, y, z)
Definition: MD5.cxx:116
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
APWeightHist::ComputeGraph
void ComputeGraph(const int prec=250)
Computes the resulting graph from all added ntuples and calculates the uncertainties for all bins.
Definition: APWeightHist.cxx:67
fitman.k
k
Definition: fitman.py:528