23 for (
int i = 1; i <= hist->GetNbinsX(); i++) {
24 if (hist->GetBinContent(i) > 0) {
31 log << MSG::WARNING <<
"estimate_background() - No hits in input histogram!" <<
endmsg;
35 double maxx = scale_min - 40;
36 int max = hist->FindBin(maxx);
45 log << MSG::WARNING <<
"estimate_background() - Rising edge is to close to lower histogram range!" <<
endmsg;
51 double back_squared = 0.0;
53 double referenceChi2 = 0.0;
54 for (
int i =
min; i <
max; i++) {
57 back_squared += hist->GetBinContent(i) * hist->GetBinContent(i);
58 if (n_bins ==
m_settings->MinBackgroundBins()) {
62 referenceChi2 = 2 * (back_squared / n_bins - bac * bac);
64 if (n_bins >
m_settings->MinBackgroundBins()) {
68 double chi2 = 2 * (back_squared / n_bins - bac * bac);
69 if (
chi2 > 5 * referenceChi2)
break;
75 log << MSG::WARNING <<
"n_bins is zero" <<
endmsg;
82 m_t0_est = 0.5 * (scale_min + hist->GetBinCenter(
max));
85 (
new TLine(hist->GetBinCenter(
min), 0, hist->GetBinCenter(
min), hist->GetMaximum()))->Write(
"t0_back_left");
86 (
new TLine(hist->GetBinCenter(
max), 0, hist->GetBinCenter(
max), hist->GetMaximum()))->Write(
"t0_back_right");
98 if (!
m_vbh.Smooth(hist->GetBinWidth(1))) {
102 if (!
m_vbh.Smooth(hist->GetBinWidth(1) / 2)) {
108 m_vbh.DenistyGraph()->Write(
"t0_density");
109 m_vbh.BinWidthGraph()->Write(
"t0_binwidth");
110 m_vbh.BinContentGraph()->Write(
"t0_bin_content");
111 m_vbh.DiffDensityGraph()->Write(
"t0_diff_density");
112 m_vbh.DiffDensityGraph()->Write(
"t0_diffbinwidth");
115 double lower =
m_vbh.GetSortedBin(0).Width();
116 double left(9e9), right(-9e9);
118 for (
unsigned int i = 0; i <
m_vbh.GetNumberOfBins(); i++) {
119 if (
m_vbh.GetSortedBin(i).Left() < left) left =
m_vbh.GetSortedBin(i).Left();
120 if (
m_vbh.GetSortedBin(i).Right() > right) right =
m_vbh.GetSortedBin(i).Right();
124 if ((
m_vbh.GetSortedBin(i).Width() - lower) > hist->GetBinWidth(1) / 100.0) {
126 if (right - left > 50 && i > 20)
break;
127 lower =
m_vbh.GetSortedBin(i).Width();
132 (
new TLine(left, 0, left, hist->GetMaximum()))->Write(
"t0_height_left");
133 (
new TLine(right, 0, right, hist->GetMaximum()))->Write(
"t0_height_right");
136 int bleft(hist->FindBin(left)), bright(hist->FindBin(right));
139 for (
int i = bleft; i <= bright; i++) {
145 log << MSG::WARNING <<
"estimate_height() - top region is too small! left=" << left <<
" right=" << right <<
endmsg;