13 #include "RooStats/NumberCountingUtils.h" 37 TString folder=
"/cms5r0/ald77/archive/"+
ntuple_date+
"/skim100/";
38 folder=
"/afs/cern.ch/user/m/manuelf/work/ucsb/2015_05_25/skim/";
40 s_tt.push_back(folder+
"*_TTJet*");
41 vector<TString> s_wjets;
42 s_wjets.push_back(folder+
"*WJetsToLNu_HT*");
43 vector<TString> s_single;
44 s_single.push_back(folder+
"*_T*channel*");
45 vector<TString> s_ttv;
46 s_ttv.push_back(folder+
"*TTW*");
47 s_ttv.push_back(folder+
"*TTZ*");
48 vector<TString> s_other;
49 s_other.push_back(folder+
"*QCD_HT*");
50 s_other.push_back(folder+
"*_ZJet*");
51 s_other.push_back(folder+
"*DY*");
52 s_other.push_back(folder+
"*WH_HToBB*");
53 vector<TString> s_t1t;
54 s_t1t.push_back(folder+
"*T1tttt*1500_*PU20*");
55 vector<TString> s_t1tc;
56 s_t1tc.push_back(folder+
"*T1tttt*1200_*PU20*");
59 vector<TChain *> chain;
60 vector<sfeats> Samples;
61 Samples.push_back(
sfeats(s_other,
"Other", 1001));
62 Samples.push_back(
sfeats(s_ttv,
"ttV", 1002));
63 Samples.push_back(
sfeats(s_single,
"Single top", 1005));
64 Samples.push_back(
sfeats(s_wjets,
"W + jets", 1004));
65 Samples.push_back(
sfeats(s_tt,
"t#bar{t}, 2 l", 1006,1,
"ntruleps>=2"));
66 Samples.push_back(
sfeats(s_tt,
"t#bar{t}, 1 l", 1000,1,
"ntruleps<=1"));
67 Samples.push_back(
sfeats(s_t1t,
"T1tttt(1500,100)", 2));
68 Samples.push_back(
sfeats(s_t1tc,
"T1tttt(1200,800)", 4));
70 for(
unsigned sam(0); sam < Samples.size(); sam++){
71 chain.push_back(
new TChain(
"tree"));
72 for(
unsigned insam(0); insam < Samples[sam].file.size(); insam++)
73 chain[sam]->Add(Samples[sam].
file[insam]);
86 const int scanbins(100);
101 vars.push_back(
hfeats(
"mj",scanbins,0,1600, ra4_sam,
"Cut on M_{J} (GeV)",
102 "ht>500&&met>200&&nbm>=2&&njets>=7&&mt>140&&(nmus+nels)==1"));
103 vars.push_back(
hfeats(
"ht",scanbins,500,3000, ra4_sam,
"Cut on H_{T} (GeV)",
104 "ht>500&&met>200&&nbm>=2&&njets>=7&&mt>140&&(nmus+nels)==1"));
108 double Syserr(pow(0.3,2));
109 double legX = 0.66, legY = 0.9, legSingle = 0.061;
110 double legW = 0.12, legH = legSingle*3;
111 TLegend
leg(legX, legY-legH, legX+legW, legY);
112 leg.SetTextSize(0.052); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
113 leg.SetTextFont(132);
115 TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
116 const unsigned Nhis(4);
117 vector< vector<TH1D*> > histo[Nhis];
118 vector<TH1D*> varhisto;
119 vector<float> nentries;
120 TString hname, pname, variable, leghisto, totCut, title;
121 for(
unsigned var(0); var<vars.size(); var++){
124 title = vars[var].cuts;
if(title==
"1") title =
"";
125 title.ReplaceAll(
"nvmus==1&&nmus==1&&nvels==0",
"1 #mu");
126 title.ReplaceAll(
"nvmus10==0&&nvels10==0",
"0 leptons");
127 title.ReplaceAll(
"(nmus+nels)",
"n_{lep}"); title.ReplaceAll(
"njets30",
"n_{jets}^{30}");
128 title.ReplaceAll(
"els_pt",
"p^{e}_{T}");title.ReplaceAll(
"mus_pt",
"p^{#mu}_{T}");
129 title.ReplaceAll(
"mus_reliso",
"RelIso"); title.ReplaceAll(
"els_reliso",
"RelIso");
130 title.ReplaceAll(
"mus_miniso_tr15",
"MiniIso"); title.ReplaceAll(
"els_miniso_tr15",
"MiniIso");
131 title.ReplaceAll(
"njets",
"n_{jets}");title.ReplaceAll(
"abs(lep_id)==13&&",
"");
132 title.ReplaceAll(
">=",
" #geq "); title.ReplaceAll(
">",
" > "); title.ReplaceAll(
"&&",
", ");
133 title.ReplaceAll(
"met",
"MET"); title.ReplaceAll(
"ht",
"H_{T}"); title.ReplaceAll(
"mt",
"m_{T}");
134 title.ReplaceAll(
"nleps==1",
"1 lepton"); title.ReplaceAll(
"nbm",
"n_{b}"); title.ReplaceAll(
"==",
" = ");
135 title.ReplaceAll(
"nbl[1]",
"n_{b,l}");
136 for(
unsigned his(0); his < Nhis; his++){
138 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
139 int isam = vars[var].samples[sam];
140 hname =
"histo"; hname += var; hname += his; hname += sam;
141 varhisto.push_back(
new TH1D(hname, title, vars[var].
nbins, vars[var].minx, vars[var].maxx));
142 varhisto[sam]->SetXTitle(vars[var].title);
143 varhisto[sam]->SetLineColor(Samples[isam].color);
144 varhisto[sam]->SetLineStyle(Samples[isam].style);
145 varhisto[sam]->SetLineWidth(3);
147 histo[his].push_back(varhisto);
153 variable = vars[var].varname;
155 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++){
156 int isam = vars[var].samples[sam];
157 bool isSig = Samples[isam].isSig;
158 totCut = Samples[isam].factor+
"*"+
luminosity+
"*weight*("+vars[var].cuts+
"&&"+Samples[isam].cut+
")";
160 histo[0][var][sam]->Sumw2();
161 chain[isam]->Project(histo[0][var][sam]->GetName(), variable, totCut);
162 histo[0][var][sam]->SetBinContent(vars[var].
nbins,
163 histo[0][var][sam]->GetBinContent(vars[var].nbins)+
164 histo[0][var][sam]->GetBinContent(vars[var].nbins+1));
165 histo[0][var][sam]->SetBinError(vars[var].nbins,
166 sqrt(pow(histo[0][var][sam]->GetBinError(vars[var].nbins),2)+
167 pow(histo[0][var][sam]->GetBinError(vars[var].nbins+1),2)));
168 nentries.push_back(histo[0][var][sam]->Integral(1,vars[var].nbins));
169 histo[0][var][sam]->SetYTitle(
"Z_{bi} (#sigma)");
170 histo[1][var][sam]->SetYTitle(
"S/#sqrt{B} (#sigma)");
171 histo[2][var][sam]->SetYTitle(
"Events");
172 histo[2][var][sam]->SetLineColor(1);
174 for(
int bsam(sam-1); bsam >= 0; bsam--){
175 histo[0][var][sam]->Add(histo[0][var][bsam]);
182 for(
int sam(vars[var].samples.size()-1); sam >= 0; sam--){
183 int isam = vars[var].samples[sam];
184 if(!(Samples[isam].isSig))
continue;
186 double maxhisto[Nhis];
187 for(
unsigned his(0); his<Nhis; his++) maxhisto[his] = -1;
188 for(
int bin(1); bin<=vars[var].nbins; bin++){
190 const double Nsig(histo[0][var][sam]->Integral(bin,vars[var].
nbins+1));
191 const double Nbkg(histo[0][var][bkgind]->IntegralAndError(bin,vars[var].
nbins+1,Nerr));
192 histo[2][var][sam]->SetBinContent(bin,Nbkg);
193 histo[3][var][sam]->SetBinContent(bin,Nsig);
195 histo[0][var][sam]->SetBinContent(bin,0);
196 histo[1][var][sam]->SetBinContent(bin,0);
198 const double Zbi(RooStats::NumberCountingUtils::BinomialExpZ(Nsig, Nbkg, sqrt(pow(Nerr/Nbkg,2)+Syserr)));
199 histo[0][var][sam]->SetBinContent(bin,Zbi>0?Zbi:0);
200 histo[1][var][sam]->SetBinContent(bin,Nsig/sqrt(Nbkg));
202 for(
unsigned his(0); his<Nhis; his++)
203 if(maxhisto[his] < histo[his][var][sam]->GetBinContent(bin))
204 maxhisto[his] = histo[his][var][sam]->GetBinContent(bin);
208 unsigned sam_nc(vars[var].samples.size()-2);
209 unsigned isam_nc = vars[var].samples[sam_nc];
210 unsigned sam_c(vars[var].samples.size()-1);
211 unsigned isam_c = vars[var].samples[sam_c];
216 leg.SetY1NDC(legY-legH);
217 leg.SetHeader(
"#font[22]{ L = "+
luminosity+
" fb^{-1}}");
218 leg.AddEntry(histo[0][var][sam_nc], Samples[isam_nc].label);
219 leg.AddEntry(histo[0][var][sam_c], Samples[isam_c].label);
220 float hismax = max(histo[0][var][sam_nc]->GetMaximum(), histo[0][var][sam_c]->GetMaximum())*maxleg;
221 histo[0][var][sam_nc]->SetMaximum(hismax);
222 histo[0][var][sam_nc]->SetMaximum(3.7);
223 histo[0][var][sam_nc]->SetMinimum(0);
224 histo[0][var][sam_nc]->Draw(
"l hist");
225 histo[0][var][sam_c]->Draw(
"l hist same");
227 if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, hismax);
229 pname =
"plots/zbi_"+vars[var].tag+plot_tag;
231 histo[1][var][sam_nc]->SetMaximum(max(histo[1][var][sam_nc]->GetMaximum(),
232 histo[1][var][sam_c]->GetMaximum())*maxleg);
233 histo[1][var][sam_nc]->SetMinimum(0);
234 histo[1][var][sam_nc]->Draw(
"l hist");
235 histo[1][var][sam_c]->Draw(
"l hist same");
236 if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, histo[1][var][sam_nc]->GetMaximum()*1.05);
237 pname =
"plots/s_sqrtb_"+vars[var].tag+plot_tag;
240 hismax = max(histo[3][var][sam_nc]->GetMaximum(), histo[3][var][sam_c]->GetMaximum())*maxleg;
241 histo[2][var][sam_nc]->SetMaximum(hismax);
242 histo[2][var][sam_nc]->Draw(
"l hist");
243 histo[3][var][sam_c]->Draw(
"l hist same");
244 histo[3][var][sam_nc]->Draw(
"l hist same");
245 if(vars[var].cut>0) line.DrawLine(vars[var].cut, 0, vars[var].cut, hismax);
247 leg.AddEntry(histo[2][var][sam_nc],
"Total bkg.");
249 leg.SetY1NDC(legY-legH);
251 pname =
"plots/sb_"+vars[var].tag+plot_tag;
256 for(
unsigned his(0); his < Nhis; his++){
257 for(
unsigned var(0); var<vars.size(); var++){
258 for(
unsigned sam(0); sam < vars[var].samples.size(); sam++)
259 if(histo[his][var][sam]) histo[his][var][sam]->Delete();
TString ntuple_date("2015_05_25")
void moveYAxisLabel(TH1 *h, float maxi, bool isLog=false)