75 for (
int j = 0; j < fXaxis.GetNbins(); ++j) {
78 double sig_low_o = (
max((
double) 0.0, (unweighted_content - 5 * sqrt(unweighted_content))));
79 double sig_high_o = (unweighted_content + 5 * sqrt(unweighted_content));
80 double step = (sig_high_o - sig_low_o) * 1e-3;
82 original_dists[j] =
new TH1D(
"",
"", 1000, sig_low_o, sig_high_o);
86 for (
double lambda = sig_low_o; lambda < sig_high_o; lambda += step) {
87 double value = exp(-lambda + unweighted_content * log(lambda) - curr_fact);
88 if (value != value) value = 0.;
89 (original_dists[j])->SetBinContent(bin_no, value);
92 (original_dists[j])->
Scale(1. / (original_dists[j])->GetSum());
93 const double old_mode = (original_dists[j])->GetBinCenter((original_dists[j])->GetMaximumBin());
94 const double inv_old_mode = 1. / old_mode;
98 double max_value = 1.e-100;
99 double min_value = 1.e100;
101 for (
vector<double>::iterator it_hist = bin_sumw.begin(), it_histE = bin_sumw.end(); it_hist != it_histE; ++it_hist) {
103 *it_hist += (*it_func)->GetRandom();
105 double cur_val = *it_hist;
106 if (cur_val < min_value) {
108 }
else if (cur_val > max_value) {
114 TH1D* scaled_hist_l = (TH1D*) (original_dists[j])->Clone(
"");
115 TH1D* scaled_hist_h = (TH1D*) (original_dists[j])->Clone(
"");
116 double scale = min_value * inv_old_mode;
117 scaled_hist_l->GetXaxis()->SetLimits(scale * sig_low_o, scale * sig_high_o);
118 scale = max_value * inv_old_mode;
119 scaled_hist_h->GetXaxis()->SetLimits(scale * sig_low_o, scale * sig_high_o);
122 double prob[1] = {0.001};
124 scaled_hist_l->GetQuantiles(1,
quant, prob);
125 double sig_low =
quant[0];
127 scaled_hist_h->GetQuantiles(1,
quant, prob);
128 double sig_high =
quant[0];
130 m_bin_dists[j] =
new TH1D(
"",
"", 1000, sig_low, sig_high);
133 if (unweighted_content > 0.) {
134 for (
int k = 0; k < prec; ++k) {
135 double new_val = bin_sumw[k];
136 TH1D* scaled_hist = (TH1D*) (original_dists[j])->Clone(
"");
137 double temp_scale = new_val * inv_old_mode;
138 scaled_hist->GetXaxis()->SetLimits(temp_scale * sig_low_o, temp_scale * sig_high_o);
139 for (
int l = 1; l < 1001; ++l) {
140 (
m_bin_dists[j])->AddBinContent(l, scaled_hist->GetBinContent(scaled_hist->FindBin((
m_bin_dists[j])->GetBinCenter(l))));
144 double local_value = sig_low + (
m_bin_dists[j])->GetMaximumBin() * ((sig_high - sig_low) * 1e-3);
145 m_graph_stat->SetPoint(point_count, (GetXaxis()->GetXmin() + j * GetBinWidth(j + 1) + GetBinWidth(j + 1) / 2), local_value);
146 m_graph_syst->SetPoint(point_count, (GetXaxis()->GetXmin() + j * GetBinWidth(j + 1) + GetBinWidth(j + 1) / 2), local_value);
147 double quantile[ 2 ];
148 double conf[ 2 ] = {0.1585, 0.8415};
150 m_graph_stat->SetPointError(point_count, GetBinWidth(j + 1) / 2, GetBinWidth(j + 1) / 2, local_value - quantile[0], quantile[1] - local_value);
151 m_graph_syst->SetPointError(point_count, GetBinWidth(j + 1) / 2, local_value * (sqrt(
m_SumSys2[j]) / GetBinContent(j + 1)));
Class to store a single weight entry (one bin).