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 |
string centralupdownname(int num) {
|
24 |
if (num==0) return "central";
|
25 |
if (num==1) return "down";
|
26 |
if (num==2) return "up";
|
27 |
return "centralupdownnameERROR";
|
28 |
}
|
29 |
|
30 |
string dataormc(int isdata) {
|
31 |
if(isdata) return "Data";
|
32 |
else return "MC";
|
33 |
}
|
34 |
|
35 |
int histocounter=0;
|
36 |
string give_histo_number(string basename="", int isdata=-1, int centralcounter=-1) {
|
37 |
histocounter++;
|
38 |
stringstream histocounternum;
|
39 |
if(isdata==-1) {
|
40 |
if(basename=="") histocounternum << histocounter;
|
41 |
else histocounternum << basename << "_" << histocounter;
|
42 |
}
|
43 |
else {
|
44 |
histocounternum << basename << "_" << dataormc(isdata) << "_" << centralupdownname(centralcounter);
|
45 |
}
|
46 |
return histocounternum.str();
|
47 |
}
|
48 |
|
49 |
int central=0;
|
50 |
int down=1;
|
51 |
int up=2;
|
52 |
|
53 |
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]) {
|
54 |
// dout << "Crunching the numbers for is_data=" << isdata << endl;
|
55 |
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;}}}
|
56 |
for(int icut=0;icut<jzbcuts.size()-1;icut++) {//do calculation for each JZB cut
|
57 |
for(int ibin=1;ibin<jzbcuts.size();ibin++) {//and to do that, we need to consider each bin.
|
58 |
if(RcorrJZBeemmop[0][isdata]->GetBinLowEdge(ibin)<jzbcuts[icut]) continue;
|
59 |
// if(icut==0) dout << "Predicted+=" << LcorrJZBeemmop[central][isdata]->GetBinContent(ibin) << " eemm,L" << endl;
|
60 |
predicted[central][isdata][icut]+=LcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
61 |
predicted[up][isdata][icut]+=LcorrJZBeemmop[up][isdata]->GetBinContent(ibin);
|
62 |
predicted[down][isdata][icut]+=LcorrJZBeemmop[down][isdata]->GetBinContent(ibin);
|
63 |
|
64 |
// if(icut==0) dout << "Predicted+=" << RcorrJZBemop[central][isdata]->GetBinContent(ibin) << " em, R" << endl;
|
65 |
predicted[central][isdata][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
66 |
predicted[up][isdata][icut]+=RcorrJZBemop[up][isdata]->GetBinContent(ibin);
|
67 |
predicted[down][isdata][icut]+=RcorrJZBemop[down][isdata]->GetBinContent(ibin);
|
68 |
|
69 |
// if(icut==0) dout << "Predicted-=" << LcorrJZBemop[central][isdata]->GetBinContent(ibin) <<" em, L" << endl;
|
70 |
predicted[central][isdata][icut]-=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
71 |
predicted[up][isdata][icut]-=LcorrJZBemop[up][isdata]->GetBinContent(ibin);
|
72 |
predicted[down][isdata][icut]-=LcorrJZBemop[down][isdata]->GetBinContent(ibin);
|
73 |
|
74 |
// if(icut==0) dout << "Observed=" << RcorrJZBeemmop[central][isdata]->GetBinContent(ibin) << "eemm, R" << endl;
|
75 |
observed[central][isdata][icut]+=RcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
76 |
observed[up][isdata][icut]+=RcorrJZBeemmop[up][isdata]->GetBinContent(ibin);
|
77 |
observed[down][isdata][icut]+=RcorrJZBeemmop[down][isdata]->GetBinContent(ibin);
|
78 |
|
79 |
zjetsestimate[central][isdata][icut]+=LcorrJZBeemmop[central][isdata]->GetBinContent(ibin);
|
80 |
ttbarestimate[central][isdata][0][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
81 |
ttbarestimate[central][isdata][1][icut]+=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
82 |
|
83 |
eemmmumu[0][0][icut]+=LcorrJZBeeop[central][isdata]->GetBinContent(ibin);
|
84 |
eemmmumu[0][1][icut]+=LcorrJZBmmop[central][isdata]->GetBinContent(ibin);
|
85 |
eemmmumu[0][2][icut]+=LcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
86 |
|
87 |
eemmmumu[1][0][icut]+=RcorrJZBeeop[central][isdata]->GetBinContent(ibin);
|
88 |
eemmmumu[1][1][icut]+=RcorrJZBmmop[central][isdata]->GetBinContent(ibin);
|
89 |
eemmmumu[1][2][icut]+=RcorrJZBemop[central][isdata]->GetBinContent(ibin);
|
90 |
|
91 |
}//end of ibin loop
|
92 |
}//end of icut loop
|
93 |
}
|
94 |
|
95 |
void make_table(float eemmmumu[2][3][20],int icut,float JZBcut) {
|
96 |
vector< vector <string> > entries;
|
97 |
vector <string> line;
|
98 |
line.push_back("");
|
99 |
line.push_back("eemm (ee/mm)");
|
100 |
line.push_back("em");
|
101 |
entries.push_back(line);
|
102 |
line.clear();
|
103 |
line.push_back("JZB>"+any2string(JZBcut));
|
104 |
line.push_back(any2string(eemmmumu[1][0][icut]+eemmmumu[1][1][icut])+"("+any2string(eemmmumu[1][0][icut])+"/"+any2string(eemmmumu[1][1][icut])+")");
|
105 |
line.push_back(any2string(eemmmumu[1][2][icut]));
|
106 |
entries.push_back(line);
|
107 |
line.clear();
|
108 |
line.push_back("JZB<-"+any2string(JZBcut));
|
109 |
line.push_back(any2string(eemmmumu[0][0][icut]+eemmmumu[0][1][icut])+"("+any2string(eemmmumu[0][0][icut])+"/"+any2string(eemmmumu[0][1][icut])+")");
|
110 |
line.push_back(any2string(eemmmumu[0][2][icut]));
|
111 |
entries.push_back(line);
|
112 |
make_nice_jzb_table(entries);
|
113 |
/*
|
114 |
dout << " \t\t | \t eemm (ee/mm) \t | \t em" << endl;
|
115 |
dout << "JZB>peak\t | \t " << eemmmumu[1][0]+eemmmumu[1][1] << "(" << eemmmumu[1][0] << "/" << eemmmumu[1][1] << ")\t | \t" << eemmmumu[1][2] << endl;
|
116 |
dout << "JZB<peak\t | \t " << eemmmumu[0][0]+eemmmumu[0][1] << "(" << eemmmumu[0][0] << "/" << eemmmumu[0][1] << ")\t | \t" << eemmmumu[0][2] << endl;
|
117 |
dout << endl;
|
118 |
*/
|
119 |
}
|
120 |
|
121 |
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]) {
|
122 |
|
123 |
//blublu
|
124 |
dout << endl << endl;
|
125 |
dout << "--------------------------------------------------------------------------------------" << endl;
|
126 |
dout << "DATA: " << endl;
|
127 |
dout << " For JZB>" << jzbcuts[icut];
|
128 |
float max,downvar,upvar;
|
129 |
stringstream printtitle;
|
130 |
printtitle << "JZB>" << jzbcuts[icut] << " (data)";
|
131 |
ComputePoissonError(zjetsestimate[central][data][icut],ttbarestimate[central][data][0][icut],ttbarestimate[central][data][1][icut],max,downvar,upvar,printtitle.str());
|
132 |
//dout << " 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;
|
133 |
float pred=predicted[central][data][icut];
|
134 |
float sysP=abs(predicted[up][data][icut]-pred);
|
135 |
float sysN=abs(pred-predicted[down][data][icut]);
|
136 |
sysN = sysN + pred*(1-fitresultconstdata);//fitresultconst comes from the fit in the 0-30 GeV range!
|
137 |
dout << " Predicted: " << pred << "+" << statErrorP(pred) << "-" << statErrorN(pred) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
138 |
//0.2*zjetsestimate[central][data][icut] << "-" << 0.4*zjetsestimate[central][data][icut] << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
139 |
dout << " 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;
|
140 |
dout << " For JZB>" << jzbcuts[icut] << " Observed: " << observed[central][data][icut] << endl;
|
141 |
dout << "TABLE:" << endl;
|
142 |
make_table(eemmmumu,icut,jzbcuts[icut]);
|
143 |
dout << "MC: " << endl;
|
144 |
printtitle.str("");
|
145 |
printtitle<<"JZB>"<<jzbcuts[icut]<<" (MC)";
|
146 |
ComputePoissonError(zjetsestimate[central][mc][icut],ttbarestimate[central][mc][0][icut],ttbarestimate[central][mc][1][icut],max,downvar,upvar,printtitle.str());
|
147 |
pred=predicted[central][mc][icut];
|
148 |
sysP=abs(predicted[up][mc][icut]-pred);
|
149 |
sysN=abs(pred-predicted[down][mc][icut]);
|
150 |
sysN = sysN + pred*(1-fitresultconstmc);//fitresultconst comes from the fit in the 0-30 GeV range!
|
151 |
dout << " Predicted: " << pred << "+" << statErrorP(pred) << "-" << statErrorN(pred) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
152 |
// dout << " Predicted: " << print_range(pred,statErrorP(pred),statErrorN(pred)) << " (stat) +" << sysP << " - " << sysN << " (sys) " << " using Poisson: " << print_range(max,max+upvar,max-downvar) << ")" << endl;
|
153 |
//dout << " 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;
|
154 |
//print_range(predicted[central][mc][icut],predicted[central][mc][icut]+upvar,predicted[central][mc][icut]-downvar) << ")" << endl;
|
155 |
dout << " 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;
|
156 |
dout << " For JZB>" << jzbcuts[icut] << " Observed: " << observed[central][mc][icut] << endl;
|
157 |
dout << endl << endl;
|
158 |
}
|
159 |
|
160 |
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!
|
161 |
jzbcuts.push_back(14000);
|
162 |
|
163 |
/*
|
164 |
* 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.
|
165 |
* 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.
|
166 |
* 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?)
|
167 |
*/
|
168 |
|
169 |
string jzbpeak[3][2];
|
170 |
jzbpeak[central][data]=give_jzb_expression(DataPeak,data);
|
171 |
jzbpeak[up][data]=give_jzb_expression(DataPeak+DataPeakError,data);
|
172 |
jzbpeak[down][data]=give_jzb_expression(DataPeak-DataPeakError,data);
|
173 |
jzbpeak[central][mc]=give_jzb_expression(MCPeak,mc);
|
174 |
jzbpeak[up][mc]=give_jzb_expression(MCPeak+MCPeakError,mc);
|
175 |
jzbpeak[down][mc]=give_jzb_expression(MCPeak-MCPeakError,mc);
|
176 |
|
177 |
TH1F *RcorrJZBeemmop[3][2];
|
178 |
TH1F *LcorrJZBeemmop[3][2];
|
179 |
TH1F *RcorrJZBeeop[3][2];
|
180 |
TH1F *LcorrJZBeeop[3][2];
|
181 |
TH1F *RcorrJZBmmop[3][2];
|
182 |
TH1F *LcorrJZBmmop[3][2];
|
183 |
TH1F *RcorrJZBemop[3][2];
|
184 |
TH1F *LcorrJZBemop[3][2];
|
185 |
float zjetsestimate[3][2][20];
|
186 |
float predicted[3][2][20];
|
187 |
float observed[3][2][20];
|
188 |
float ttbarestimate[3][2][2][20];
|
189 |
float eemmmumu[2][3][20];
|
190 |
|
191 |
|
192 |
for(int isdata=0;isdata<=1;isdata++) {
|
193 |
for(int centraldownup=0;centraldownup<=2;centraldownup++) {
|
194 |
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);
|
195 |
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);
|
196 |
|
197 |
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);
|
198 |
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);
|
199 |
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));
|
200 |
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));
|
201 |
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));
|
202 |
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));
|
203 |
LcorrJZBemop[centraldownup][isdata]->Scale(1.0/3);
|
204 |
RcorrJZBemop[centraldownup][isdata]->Scale(1.0/3);
|
205 |
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);
|
206 |
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);
|
207 |
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);
|
208 |
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);
|
209 |
for(int icut=0;icut<=jzbcuts.size();icut++) {
|
210 |
zjetsestimate[centraldownup][isdata][icut]=0;
|
211 |
predicted[centraldownup][isdata][icut]=0;
|
212 |
observed[centraldownup][isdata][icut]=0;
|
213 |
ttbarestimate[centraldownup][isdata][0][icut]=0;
|
214 |
ttbarestimate[centraldownup][isdata][1][icut]=0;
|
215 |
}
|
216 |
}//end of for central,up,down loop
|
217 |
crunch_the_numbers(RcorrJZBeemmop,RcorrJZBeeop,RcorrJZBmmop,LcorrJZBeemmop,LcorrJZBeeop,LcorrJZBmmop,RcorrJZBemop,LcorrJZBemop,zjetsestimate,ttbarestimate,predicted,observed,isdata,jzbcuts,eemmmumu);
|
218 |
|
219 |
// 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]) {
|
220 |
|
221 |
}//end of is data loop
|
222 |
|
223 |
|
224 |
dout << "We obtain the following results: " << endl;
|
225 |
for(int icut=0;icut<jzbcuts.size()-1;icut++) {
|
226 |
present_result(jzbcuts,predicted,observed,zjetsestimate,ttbarestimate,icut,eemmmumu);
|
227 |
}
|
228 |
|
229 |
|
230 |
}
|
231 |
|
232 |
|
233 |
|
234 |
|
235 |
|
236 |
|
237 |
|
238 |
|
239 |
|
240 |
|
241 |
|
242 |
|
243 |
|
244 |
void alpha_scan_susy_space(string mcjzb, string datajzb) {
|
245 |
TCanvas *c3 = new TCanvas("c3","c3");
|
246 |
vector<float> binning;
|
247 |
binning=allsamples.get_optimal_binsize(mcjzb,cutmass&&cutOSSF&&cutnJets,20,50,800);
|
248 |
float arrbinning[binning.size()];
|
249 |
for(int i=0;i<binning.size();i++) arrbinning[i]=binning[i];
|
250 |
TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
|
251 |
puredata->SetMarkerSize(DataMarkerSize);
|
252 |
TH1F *allbgs = allsamples.Draw("allbgs", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
|
253 |
TH1F *allbgsb = allsamples.Draw("allbgsb", "-"+datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
|
254 |
TH1F *allbgsc = allsamples.Draw("allbgsc", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,data,luminosity);
|
255 |
allbgs->Add(allbgsb,-1);
|
256 |
allbgs->Add(allbgsc);
|
257 |
int ndata=puredata->Integral();
|
258 |
ofstream myfile;
|
259 |
myfile.open ("susyscan_log.txt");
|
260 |
TFile *susyscanfile = new TFile("/scratch/fronga/SMS/T5z_SqSqToQZQZ_38xFall10.root");
|
261 |
TTree *suevents = (TTree*)susyscanfile->Get("events");
|
262 |
TH2F *exclusionmap = new TH2F("exclusionmap","",20,0,500,20,0,1000);
|
263 |
TH2F *exclusionmap1s = new TH2F("exclusionmap1s","",20,0,500,20,0,1000);
|
264 |
TH2F *exclusionmap2s = new TH2F("exclusionmap2s","",20,0,500,20,0,1000);
|
265 |
TH2F *exclusionmap3s = new TH2F("exclusionmap3s","",20,0,500,20,0,1000);
|
266 |
|
267 |
susy_scan_axis_labeling(exclusionmap);
|
268 |
susy_scan_axis_labeling(exclusionmap1s);
|
269 |
susy_scan_axis_labeling(exclusionmap2s);
|
270 |
susy_scan_axis_labeling(exclusionmap3s);
|
271 |
|
272 |
Int_t MyPalette[100];
|
273 |
Double_t r[] = {0., 0.0, 1.0, 1.0, 1.0};
|
274 |
Double_t g[] = {0., 0.0, 0.0, 1.0, 1.0};
|
275 |
Double_t b[] = {0., 1.0, 0.0, 0.0, 1.0};
|
276 |
Double_t stop[] = {0., .25, .50, .75, 1.0};
|
277 |
Int_t FI = TColor::CreateGradientColorTable(5, stop, r, g, b, 100);
|
278 |
for (int i=0;i<100;i++) MyPalette[i] = FI+i;
|
279 |
|
280 |
gStyle->SetPalette(100, MyPalette);
|
281 |
|
282 |
for(int m23=50;m23<500;m23+=25) {
|
283 |
for (int m0=(2*(m23-50)+150);m0<=1000;m0+=50)
|
284 |
{
|
285 |
c3->cd();
|
286 |
stringstream drawcondition;
|
287 |
drawcondition << "pfJetGoodNum>=3&&(TMath::Abs(masses[0]-"<<m0<<")<10&&TMath::Abs(masses[2]-masses[3]-"<<m23<<")<10)&&mll>5&&id1==id2";
|
288 |
TH1F *puresignal = new TH1F("puresignal","puresignal",binning.size()-1,arrbinning);
|
289 |
TH1F *puresignall= new TH1F("puresignall","puresignal",binning.size()-1,arrbinning);
|
290 |
stringstream drawvar,drawvar2;
|
291 |
drawvar<<mcjzb<<">>puresignal";
|
292 |
drawvar2<<"-"<<mcjzb<<">>puresignall";
|
293 |
suevents->Draw(drawvar.str().c_str(),drawcondition.str().c_str());
|
294 |
suevents->Draw(drawvar2.str().c_str(),drawcondition.str().c_str());
|
295 |
if(puresignal->Integral()<60) {
|
296 |
delete puresignal;
|
297 |
continue;
|
298 |
}
|
299 |
puresignal->Add(puresignall,-1);//we need to correct for the signal contamination - we effectively only see (JZB>0)-(JZB<0) !!
|
300 |
puresignal->Scale(ndata/(20*puresignal->Integral()));//normalizing it to 5% of the data
|
301 |
stringstream saveas;
|
302 |
saveas<<"Model_Scan/m0_"<<m0<<"__m23_"<<m23;
|
303 |
dout << "PLEASE KEEP IN MIND THAT SIGNAL CONTAMINATION IS NOT REALLY TAKEN CARE OF YET DUE TO LOW STATISTICS! SHOULD BE SOMETHING LIKE THIS : "<< endl;
|
304 |
// TH1F *signalpredlo = allsamples.Draw("signalpredlo", "-"+mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
|
305 |
// TH1F *signalpredro = allsamples.Draw("signalpredro", mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSOF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
|
306 |
// TH1F *puredata = allsamples.Draw("puredata", datajzb,binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,data,luminosity);
|
307 |
// signalpred->Add(signalpredlo,-1);
|
308 |
// signalpred->Add(signalpredro);
|
309 |
// puresignal->Add(signalpred,-1);//subtracting signal contamination
|
310 |
//---------------------
|
311 |
// dout << "(m0,m23)=("<<m0<<","<<m23<<") contains " << puresignal->Integral() << endl;
|
312 |
// TH1F *puresignal = allsamples.Draw("puresignal",mcjzb, binning, "JZB [GeV]", "events", cutmass&&cutOSSF&&cutnJets,mc, luminosity,allsamples.FindSample("LM4"));
|
313 |
vector<float> results=establish_upper_limits(puredata,allbgs,puresignal,saveas.str(),myfile);
|
314 |
if(results.size()==0) {
|
315 |
delete puresignal;
|
316 |
continue;
|
317 |
}
|
318 |
exclusionmap->Fill(m23,m0,results[0]);
|
319 |
exclusionmap1s->Fill(m23,m0,results[1]);
|
320 |
exclusionmap2s->Fill(m23,m0,results[2]);
|
321 |
exclusionmap3s->Fill(m23,m0,results[3]);
|
322 |
delete puresignal;
|
323 |
dout << "(m0,m23)=("<<m0<<","<<m23<<") : 3 sigma at " << results[3] << endl;
|
324 |
}
|
325 |
}//end of model scan for loop
|
326 |
|
327 |
dout << "Exclusion Map contains" << exclusionmap->Integral() << " (integral) and entries: " << exclusionmap->GetEntries() << endl;
|
328 |
c3->cd();
|
329 |
exclusionmap->Draw("CONTZ");
|
330 |
CompleteSave(c3,"Model_Scan/CONT/Model_Scan_Mean_values");
|
331 |
exclusionmap->Draw("COLZ");
|
332 |
CompleteSave(c3,"Model_Scan/COL/Model_Scan_Mean_values");
|
333 |
|
334 |
exclusionmap1s->Draw("CONTZ");
|
335 |
CompleteSave(c3,"Model_Scan/CONT/Model_Scan_1sigma_values");
|
336 |
exclusionmap1s->Draw("COLZ");
|
337 |
CompleteSave(c3,"Model_Scan/COL/Model_Scan_1sigma_values");
|
338 |
|
339 |
exclusionmap2s->Draw("CONTZ");
|
340 |
CompleteSave(c3,"Model_Scan/CONT/Model_Scan_2sigma_values");
|
341 |
exclusionmap2s->Draw("COLZ");
|
342 |
CompleteSave(c3,"Model_Scan/COL/Model_Scan_2sigma_values");
|
343 |
|
344 |
exclusionmap3s->Draw("CONTZ");
|
345 |
CompleteSave(c3,"Model_Scan/CONT/Model_Scan_3sigma_values");
|
346 |
exclusionmap3s->Draw("COLZ");
|
347 |
CompleteSave(c3,"Model_Scan/COL/Model_Scan_3sigma_values");
|
348 |
|
349 |
TFile *exclusion_limits = new TFile("exclusion_limits.root","RECREATE");
|
350 |
exclusionmap->Write();
|
351 |
exclusionmap1s->Write();
|
352 |
exclusionmap2s->Write();
|
353 |
exclusionmap3s->Write();
|
354 |
exclusion_limits->Close();
|
355 |
susyscanfile->Close();
|
356 |
|
357 |
myfile.close();
|
358 |
}
|