39 TH1D *ratio =
new TH1D(
"",
"", h1->GetNbinsX(), h1->GetXaxis()->GetXmin(), h1->GetXaxis()->GetXmax());
40 for (
int i = 0; i < h1->GetNbinsX(); ++i) {
41 double A = h1->GetBinContent(i);
42 double B = h2->GetBinContent(i);
48 delA = 2 * B / pow(A + B, 2);
49 delB = 2 * A / pow(A + B, 2);
50 ratio->SetBinContent(i, (A - B) / (A + B));
53 double sigma_A = h1->GetBinError(i);
54 double sigma_B = h2->GetBinError(i);
55 ratio->SetBinError(i, sqrt(pow(delA * sigma_A, 2) + pow(delB * sigma_B, 2)));
68 TH1D *hTotal1 = peak.
ApplyX(h1,
"hTotal1");
69 TH1D *hBackground1 = background.
ApplyX(h1,
"hBackground1");
70 TH1D *hTotal2 = peak.
ApplyX(h2,
"hTotal2");
71 TH1D *hBackground2 = background.
ApplyX(h2,
"hBackground2");
72 TH1D *hEnergy = h1->ProjectionX();
74 TH1D *hDifference = (TH1D*)hTotal1->Clone(
"difference");
75 TH1D *hSum = (TH1D*)hTotal1->Clone(
"sum");
76 hDifference->Add(hTotal2, -1.);
77 hSum->Add(hTotal2, 1.);
79 hSum->Add(hBackground1, -scale);
80 hSum->Add(hBackground2, -scale);
81 TH1D *hRatio = (TH1D*)hDifference->Clone(
"ratio_func");
84 int Nbins=hTotal1->GetNbinsX();
85 for (
int i=1; i <=Nbins; i=i+1 ) {
86 double sigT1 = hTotal1->GetBinError(i);
87 double sigT2 = hTotal2->GetBinError(i);
88 double sigB1 = hBackground1->GetBinError(i);
89 double sigB2 = hBackground2->GetBinError(i);
90 double T1 = hTotal1->GetBinContent(i);
91 double T2 = hTotal2->GetBinContent(i);
92 double B1 = hBackground1->GetBinContent(i);
93 double B2 = hBackground2->GetBinContent(i);
94 double denom = pow((T1+T2-scale*B1 - scale*B2), 2);
96 hRatio->SetBinError(i, 0);
99 double delT1 = ( 2*T2 - scale*B1 - scale*B2 )/denom;
100 double delT2 = ( 2*T1 - scale*B1 - scale*B2 )/denom;
101 double delB1 = ( scale*(T1-T2) )/denom;
102 double delB2 = ( scale*(T1-T2) )/denom;
103 hRatio->SetBinError(i, sqrt( pow(sigT1*delT1, 2) + pow(sigT2*delT2, 2) + pow(sigB1*delB1, 2) + pow(sigB2*delB2, 2) ) );
144 int k1 = h1->FindBin(start);
145 int k2 = h1->FindBin(stop);
147 TH1D *out =
new TH1D(
"",
"", k2 - k1 + 1, -h1->GetBinWidth(0)/2.0, h1->GetBinLowEdge(k2) + h1->GetBinWidth(k2) - h1->GetBinLowEdge(k1) - h1->GetBinWidth(0)/2.0);
151 for (
int k = k1; k <= k2; ++k) {
152 mean = mean + h1->GetBinContent(k);
154 mean = mean / (k2 - k1 + 1);
158 for (
int k = k1; k <= k2; ++k) {
159 B = B + (h1->GetBinContent(k) - mean) * (h1->GetBinContent(k) - mean) / (k2 - k1 + 1);
163 for (
int t = 0; t < k2 - k1; ++t) {
166 for (
int k = k1; k <= k2 - t; ++k) {
167 A = A + (h1->GetBinContent(k) - mean) * (h1->GetBinContent(k + t) - mean) / (k2 - k1 - t + 1);
175 out->SetBinContent(t + 1, X);
178 for (
int t = 0; t < k2 - k1; ++t) {
181 for (
int k = k1; k <= k2 - t; ++k) {
182 A = A + (h1->GetBinContent(k) - mean) * (h1->GetBinContent(k + t) - mean) / (k2 - k1 - t + 1);
184 double sigsquaredX = 0;
185 for (
int i = k1; i <= k2; ++i) {
189 if (k1 <= i + t && i + t <= k2 - t) {
190 xipt = h1->GetBinContent(i + t);
194 if (k1 <= i - t && i - t <= k2 - t) {
195 ximt = h1->GetBinContent(i - t);
200 double delA = (xipt + ximt) / (k2 - k1 - t + 1);
202 double delX = (delA * B - delB * A) / (B * B);
203 sigsquaredX = sigsquaredX + pow(delX * h1->GetBinError(i), 2);
205 out->SetBinError(t + 1, sqrt(sigsquaredX));