1 |
/*
|
2 |
|
3 |
Contains functions that were used in the past but are out now ...
|
4 |
|
5 |
*/
|
6 |
#include <iostream>
|
7 |
#include <vector>
|
8 |
#include <sys/stat.h>
|
9 |
|
10 |
#include <TCut.h>
|
11 |
#include <TROOT.h>
|
12 |
#include <TCanvas.h>
|
13 |
#include <TMath.h>
|
14 |
#include <TColor.h>
|
15 |
#include <TPaveText.h>
|
16 |
#include <TRandom.h>
|
17 |
#include <TH1.h>
|
18 |
#include <TH2.h>
|
19 |
#include <TF1.h>
|
20 |
#include <TSQLResult.h>
|
21 |
#include <TProfile.h>
|
22 |
|
23 |
void crunch_the_numbers(TH1F *RcorrJZBeemmop[3][2],TH1F *RcorrJZBeeop[3][2],TH1F *RcorrJZBmmop[3][2],TH1F *LcorrJZBeemmop[3][2],TH1F *LcorrJZBeeop[3][2],TH1F *LcorrJZBmmop[3][2],TH1F *RcorrJZBemop[3][2],TH1F *LcorrJZBemop[3][2],float zjetsestimate[3][2][20],float ttbarestimate[3][2][2][20],float predicted[3][2][20],float observed[3][2][20],int isdata,vector<float> jzbcuts,float eemmmumu[2][3][20]) {
|
24 |
// cout << "Crunching the numbers for is_data=" << isdata << endl;
|
25 |
for(int k=0;k<20;k++) {for(int i=0;i<2;i++){for(int j=0;j<3;j++) {eemmmumu[i][j][k]=0;}}}
|
26 |
for(int icut=0;icut<jzbcuts.size()-1;icut++) {//do calculation for each JZB cut
|
27 |
for(int ibin=1;ibin<jzbcuts.size();ibin++) {//and to do that, we need to consider each bin.
|
28 |
if(RcorrJZBeemmop[0][isdata]->GetBinLowEdge(ibin)<jzbcuts[icut]) continue;
|
29 |
// if(icut==0) cout << "Predicted+=" << LcorrJZBeemmop[central][isdata]->GetBinContent(ibin) << " eemm,L" << endl;
|
30 |
predicted[central][isdata][icut]+=LcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
31 |
predicted[up][isdata][icut]+=LcorrJZBeemmop[up][isdata]->GetBinContent(ibin);
|
32 |
predicted[down][isdata][icut]+=LcorrJZBeemmop[down][isdata]->GetBinContent(ibin);
|
33 |
|
34 |
// if(icut==0) cout << "Predicted+=" << RcorrJZBemop[central][isdata]->GetBinContent(ibin) << " em, R" << endl;
|
35 |
predicted[central][isdata][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
36 |
predicted[up][isdata][icut]+=RcorrJZBemop[up][isdata]->GetBinContent(ibin);
|
37 |
predicted[down][isdata][icut]+=RcorrJZBemop[down][isdata]->GetBinContent(ibin);
|
38 |
|
39 |
// if(icut==0) cout << "Predicted-=" << LcorrJZBemop[central][isdata]->GetBinContent(ibin) <<" em, L" << endl;
|
40 |
predicted[central][isdata][icut]-=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
41 |
predicted[up][isdata][icut]-=LcorrJZBemop[up][isdata]->GetBinContent(ibin);
|
42 |
predicted[down][isdata][icut]-=LcorrJZBemop[down][isdata]->GetBinContent(ibin);
|
43 |
|
44 |
// if(icut==0) cout << "Observed=" << RcorrJZBeemmop[central][isdata]->GetBinContent(ibin) << "eemm, R" << endl;
|
45 |
observed[central][isdata][icut]+=RcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
46 |
observed[up][isdata][icut]+=RcorrJZBeemmop[up][isdata]->GetBinContent(ibin);
|
47 |
observed[down][isdata][icut]+=RcorrJZBeemmop[down][isdata]->GetBinContent(ibin);
|
48 |
|
49 |
zjetsestimate[central][isdata][icut]+=LcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
50 |
ttbarestimate[central][isdata][0][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
51 |
ttbarestimate[central][isdata][1][icut]+=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
52 |
|
53 |
eemmmumu[0][0][icut]+=LcorrJZBeeop[central][isdata]->GetBinContent(ibin);
|
54 |
eemmmumu[0][1][icut]+=LcorrJZBmmop[central][isdata]->GetBinContent(ibin);
|
55 |
eemmmumu[0][2][icut]+=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
56 |
|
57 |
eemmmumu[1][0][icut]+=RcorrJZBeeop[central][isdata]->GetBinContent(ibin);
|
58 |
eemmmumu[1][1][icut]+=RcorrJZBmmop[central][isdata]->GetBinContent(ibin);
|
59 |
eemmmumu[1][2][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
60 |
|
61 |
}//end of ibin loop
|
62 |
}//end of icut loop
|
63 |
}
|
64 |
|
65 |
void make_table(float eemmmumu[2][3][20],int icut,float JZBcut) {
|
66 |
vector< vector <string> > entries;
|
67 |
vector <string> line;
|
68 |
line.push_back("");
|
69 |
line.push_back("eemm (ee/mm)");
|
70 |
line.push_back("em");
|
71 |
entries.push_back(line);
|
72 |
line.clear();
|
73 |
line.push_back("JZB>"+any2string(JZBcut));
|
74 |
line.push_back(any2string(eemmmumu[1][0][icut]+eemmmumu[1][1][icut])+"("+any2string(eemmmumu[1][0][icut])+"/"+any2string(eemmmumu[1][1][icut])+")");
|
75 |
line.push_back(any2string(eemmmumu[1][2][icut]));
|
76 |
entries.push_back(line);
|
77 |
line.clear();
|
78 |
line.push_back("JZB<-"+any2string(JZBcut));
|
79 |
line.push_back(any2string(eemmmumu[0][0][icut]+eemmmumu[0][1][icut])+"("+any2string(eemmmumu[0][0][icut])+"/"+any2string(eemmmumu[0][1][icut])+")");
|
80 |
line.push_back(any2string(eemmmumu[0][2][icut]));
|
81 |
entries.push_back(line);
|
82 |
make_nice_jzb_table(entries);
|
83 |
/*
|
84 |
cout << " \t\t | \t eemm (ee/mm) \t | \t em" << endl;
|
85 |
cout << "JZB>peak\t | \t " << eemmmumu[1][0]+eemmmumu[1][1] << "(" << eemmmumu[1][0] << "/" << eemmmumu[1][1] << ")\t | \t" << eemmmumu[1][2] << endl;
|
86 |
cout << "JZB<peak\t | \t " << eemmmumu[0][0]+eemmmumu[0][1] << "(" << eemmmumu[0][0] << "/" << eemmmumu[0][1] << ")\t | \t" << eemmmumu[0][2] << endl;
|
87 |
cout << endl;
|
88 |
*/
|
89 |
}
|
90 |
|
91 |
void present_result(vector<float> &jzbcuts,float predicted[3][2][20],float observed[3][2][20],float zjetsestimate[3][2][20],float ttbarestimate[3][2][2][20],int icut, float eemmmumu[2][3][20]) {
|
92 |
|
93 |
//blublu
|
94 |
cout << endl << endl;
|
95 |
cout << "--------------------------------------------------------------------------------------" << endl;
|
96 |
cout << "DATA: " << endl;
|
97 |
cout << " For JZB>" << jzbcuts[icut];
|
98 |
float max,downvar,upvar;
|
99 |
stringstream printtitle;
|
100 |
printtitle << "JZB>" << jzbcuts[icut] << " (data)";
|
101 |
ComputePoissonError(zjetsestimate[central][data][icut],ttbarestimate[central][data][0][icut],ttbarestimate[central][data][1][icut],max,downvar,upvar,printtitle.str());
|
102 |
//cout << " Predicted: " << print_range(predicted[central][data][icut],predicted[up][data][icut],predicted[down][data][icut]) << " (stat) +" << 0.2*zjetsestimate[central][data][icut] << "-" << 0.4*zjetsestimate[central][data][icut] << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
103 |
float pred=predicted[central][data][icut];
|
104 |
float sysP=abs(predicted[up][data][icut]-pred);
|
105 |
float sysN=abs(pred-predicted[down][data][icut]);
|
106 |
sysN = sysN + pred*(1-fitresultconstdata);//fitresultconst comes from the fit in the 0-30 GeV range!
|
107 |
cout << " Predicted: " << pred << "+" << statErrorP(pred) << "-" << statErrorN(pred) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
108 |
//0.2*zjetsestimate[central][data][icut] << "-" << 0.4*zjetsestimate[central][data][icut] << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
109 |
cout << " Details: ZJetsEstimate= " << zjetsestimate[central][data][icut] << ", TTbar estimate=" << ttbarestimate[central][data][0][icut]-ttbarestimate[central][data][1][icut] << " [" << ttbarestimate[central][data][0][icut] << " R -" << ttbarestimate[central][data][1][icut] << " L ]" << endl;
|
110 |
cout << " For JZB>" << jzbcuts[icut] << " Observed: " << observed[central][data][icut] << endl;
|
111 |
cout << "TABLE:" << endl;
|
112 |
make_table(eemmmumu,icut,jzbcuts[icut]);
|
113 |
cout << "MC: " << endl;
|
114 |
printtitle.str("");
|
115 |
printtitle<<"JZB>"<<jzbcuts[icut]<<" (MC)";
|
116 |
ComputePoissonError(zjetsestimate[central][mc][icut],ttbarestimate[central][mc][0][icut],ttbarestimate[central][mc][1][icut],max,downvar,upvar,printtitle.str());
|
117 |
pred=predicted[central][mc][icut];
|
118 |
sysP=abs(predicted[up][mc][icut]-pred);
|
119 |
sysN=abs(pred-predicted[down][mc][icut]);
|
120 |
sysN = sysN + pred*(1-fitresultconstmc);//fitresultconst comes from the fit in the 0-30 GeV range!
|
121 |
cout << " Predicted: " << pred << "+" << statErrorP(pred) << "-" << statErrorN(pred) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
122 |
// cout << " Predicted: " << print_range(pred,statErrorP(pred),statErrorN(pred)) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
123 |
//cout << " Predicted: " << print_range(predicted[central][mc][icut],predicted[down][mc][icut],predicted[up][mc][icut]) << " (stat) +" << 0.2*zjetsestimate[central][mc][icut] << "-" << 0.4*zjetsestimate[central][mc][icut] << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
124 |
//print_range(predicted[central][mc][icut],predicted[central][mc][icut]+upvar,predicted[central][mc][icut]-downvar) << ")" << endl;
|
125 |
cout << " Details: ZJetsEstimate= " << zjetsestimate[central][mc][icut] << ", TTbar estimate=" << ttbarestimate[central][mc][0][icut]-ttbarestimate[central][mc][1][icut] << " [" << ttbarestimate[central][mc][0][icut] << " R -" << ttbarestimate[central][mc][1][icut] << " L ] )" << endl;
|
126 |
cout << " For JZB>" << jzbcuts[icut] << " Observed: " << observed[central][mc][icut] << endl;
|
127 |
cout << endl << endl;
|
128 |
}
|
129 |
|
130 |
void calculate_predicted_and_observed_eemm(float MCPeak,float MCPeakError,float DataPeak,float DataPeakError,vector<float> jzbcuts) { // DO NOT CHANGE THIS TO ... &jzbcuts !!! we add one!
|
131 |
jzbcuts.push_back(14000);
|
132 |
|
133 |
/*
|
134 |
* We want the following numbers: For all JZB cuts, we want: ee,mm,em; observed, predicted. we want final results with errors from the peak and statistical error.
|
135 |
* How to accomplish this; we draw histos for MC&data, once with the peak (to extract obs/pred), once with peak+sigma, once with peak-sigma. this gives us the peak error.
|
136 |
* Statistical error: Comes from Poissonian errors ... for this we have a special little macro that will give us the value for three given parameters (cool, right?)
|
137 |
*/
|
138 |
|
139 |
string jzbpeak[3][2];
|
140 |
jzbpeak[central][data]=give_jzb_expression(DataPeak,data);
|
141 |
jzbpeak[up][data]=give_jzb_expression(DataPeak+DataPeakError,data);
|
142 |
jzbpeak[down][data]=give_jzb_expression(DataPeak-DataPeakError,data);
|
143 |
jzbpeak[central][mc]=give_jzb_expression(MCPeak,mc);
|
144 |
jzbpeak[up][mc]=give_jzb_expression(MCPeak+MCPeakError,mc);
|
145 |
jzbpeak[down][mc]=give_jzb_expression(MCPeak-MCPeakError,mc);
|
146 |
|
147 |
TH1F *RcorrJZBeemmop[3][2];
|
148 |
TH1F *LcorrJZBeemmop[3][2];
|
149 |
TH1F *RcorrJZBeeop[3][2];
|
150 |
TH1F *LcorrJZBeeop[3][2];
|
151 |
TH1F *RcorrJZBmmop[3][2];
|
152 |
TH1F *LcorrJZBmmop[3][2];
|
153 |
TH1F *RcorrJZBemop[3][2];
|
154 |
TH1F *LcorrJZBemop[3][2];
|
155 |
float zjetsestimate[3][2][20];
|
156 |
float predicted[3][2][20];
|
157 |
float observed[3][2][20];
|
158 |
float ttbarestimate[3][2][2][20];
|
159 |
float eemmmumu[2][3][20];
|
160 |
|
161 |
|
162 |
for(int isdata=0;isdata<=1;isdata++) {
|
163 |
for(int centraldownup=0;centraldownup<=2;centraldownup++) {
|
164 |
RcorrJZBeemmop[centraldownup][isdata] = allsamples.Draw(give_histo_number("RcorrJZBeemmop",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets,isdata, luminosity);
|
165 |
LcorrJZBeemmop[centraldownup][isdata] = allsamples.Draw(give_histo_number("LcorrJZBeemmop",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets,isdata, luminosity);
|
166 |
|
167 |
RcorrJZBemop[centraldownup][isdata] = allsamples.Draw(give_histo_number("RcorrJZBemop",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSOF&&cutnJets,isdata, luminosity);
|
168 |
LcorrJZBemop[centraldownup][isdata] = allsamples.Draw(give_histo_number("LcorrJZBemop",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSOF&&cutnJets,isdata,luminosity);
|
169 |
RcorrJZBemop[centraldownup][isdata]->Add(allsamples.Draw(give_histo_number("RcorrJZBemopSB",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", sidebandcut&&cutOSOF&&cutnJets,isdata, luminosity));
|
170 |
LcorrJZBemop[centraldownup][isdata]->Add(allsamples.Draw(give_histo_number("LcorrJZBemopSB",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", sidebandcut&&cutOSOF&&cutnJets,isdata,luminosity));
|
171 |
RcorrJZBemop[centraldownup][isdata]->Add(allsamples.Draw(give_histo_number("RcorrJZBeemmopSB",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", sidebandcut&&cutOSSF&&cutnJets,isdata, luminosity));
|
172 |
LcorrJZBemop[centraldownup][isdata]->Add(allsamples.Draw(give_histo_number("LcorrJZBeemmopSB",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", sidebandcut&&cutOSSF&&cutnJets,isdata,luminosity));
|
173 |
LcorrJZBemop[centraldownup][isdata]->Scale(1.0/3);
|
174 |
RcorrJZBemop[centraldownup][isdata]->Scale(1.0/3);
|
175 |
RcorrJZBeeop[centraldownup][isdata] = allsamples.Draw(give_histo_number("RcorrJZBeeop",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets&&"id1==0",isdata, luminosity);
|
176 |
LcorrJZBeeop[centraldownup][isdata] = allsamples.Draw(give_histo_number("LcorrJZBeeop",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets&&"id1==0",isdata, luminosity);
|
177 |
RcorrJZBmmop[centraldownup][isdata] = allsamples.Draw(give_histo_number("RcorrJZBmmop",isdata,centraldownup),jzbpeak[centraldownup][isdata].c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets&&"id1==1",isdata, luminosity);
|
178 |
LcorrJZBmmop[centraldownup][isdata] = allsamples.Draw(give_histo_number("LcorrJZBmmop",isdata,centraldownup),("-"+jzbpeak[centraldownup][isdata]).c_str(),jzbcuts, "JZB (GeV)", "events", cutmass&&cutOSSF&&cutnJets&&"id1==1",isdata, luminosity);
|
179 |
for(int icut=0;icut<=jzbcuts.size();icut++) {
|
180 |
zjetsestimate[centraldownup][isdata][icut]=0;
|
181 |
predicted[centraldownup][isdata][icut]=0;
|
182 |
observed[centraldownup][isdata][icut]=0;
|
183 |
ttbarestimate[centraldownup][isdata][0][icut]=0;
|
184 |
ttbarestimate[centraldownup][isdata][1][icut]=0;
|
185 |
}
|
186 |
}//end of for central,up,down loop
|
187 |
crunch_the_numbers(RcorrJZBeemmop,RcorrJZBeeop,RcorrJZBmmop,LcorrJZBeemmop,LcorrJZBeeop,LcorrJZBmmop,RcorrJZBemop,LcorrJZBemop,zjetsestimate,ttbarestimate,predicted,observed,isdata,jzbcuts,eemmmumu);
|
188 |
|
189 |
// void crunch_the_numbers(TH1F *RcorrJZBeemmop[3][2],TH1F *RcorrJZBeeop[3][2],TH1F *RcorrJZBmmop[3][2],TH1F *LcorrJZBeemmop[3][2],TH1F *LcorrJZBeeop[3][2],TH1F *LcorrJZBmmop[3][2],TH1F *RcorrJZBemop[3][2],TH1F *LcorrJZBemop[3][2],float zjetsestimate[3][2][20],float ttbarestimate[3][2][2][20],float predicted[3][2][20],float observed[3][2][20],int isdata,vector<float> jzbcuts,float eemmmumu[2][3]) {
|
190 |
|
191 |
}//end of is data loop
|
192 |
|
193 |
|
194 |
cout << "We obtain the following results: " << endl;
|
195 |
for(int icut=0;icut<jzbcuts.size()-1;icut++) {
|
196 |
present_result(jzbcuts,predicted,observed,zjetsestimate,ttbarestimate,icut,eemmmumu);
|
197 |
}
|
198 |
|
199 |
|
200 |
}
|
201 |
|