13 #include "RooStats/NumberCountingUtils.h" 36 TString
YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples);
37 TString
GetRatio(TString baseline,TString region_cut,TString ratio_cut,
sfeats Sample);
38 void GetRatio(
double &ratio,
double &error, TString baseline,TString region_cut, TString ratio_cut,
sfeats Sample);
39 TString
GetKappa(TString baseline,TString region_cut1,TString region_cut2, TString ratio_cut,
sfeats Sample);
44 TString folder=
"/cms5r0/ald77/archive/2015_05_21/skim/";
46 s_tt.push_back(folder+
"*_TTJet*");
48 vector<TChain *> chain;
49 vector<sfeats> Samples;
50 Samples.push_back(
sfeats(s_tt,
"$t\\bar{t}$ (1$\\ell$)", 1000,1,
"ntruleps<=1"));
51 Samples.push_back(
sfeats(s_tt,
"$t\\bar{t}$ ($2\\ell$)", 1006,1,
"ntruleps>=2"));
53 for(
unsigned sam(0); sam < Samples.size(); sam++){
54 chain.push_back(
new TChain(
"tree"));
55 for(
unsigned insam(0); insam < Samples[sam].file.size(); insam++)
56 chain[sam]->Add(Samples[sam].
file[insam]);
60 if(
doRmj) name.ReplaceAll(
"Rfactors",
"Rfactors_Rmj");
61 if(
doRmt) name.ReplaceAll(
"Rfactors",
"Rfactors_Rmt");
64 TString cuts_1l(
"(nmus+nels)==1&&ht>500&&met>200&&nbm>=2&&njets>=6");
65 TString cuts_1l1b(
"(nmus+nels)==1&&ht>500&&met>200&&nbm==1&&njets>=6");
66 TString cuts_1l2b(
"(nmus+nels)==1&&ht>500&&met>200&&nbm==2&&njets>=6");
67 TString cuts_1l3b(
"(nmus+nels)==1&&ht>500&&met>200&&nbm>=3&&njets>=6");
69 TString cuts_2l(
"(nmus+nels)==2&&ht>500&&met>200&&nbm==1&&njets>=5");
70 TString cuts_2lbb(
"(nmus+nels)==2&&ht>500&&met>200&&nbm==2&&njets>=5");
72 TString cuts_1ltex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b\\geq 2, n_{\\rm lep}=1$");
73 TString cuts_1l1btex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b=1, n_{\\rm lep}=1$");
74 TString cuts_1l2btex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b=2, n_{\\rm lep}=1$");
75 TString cuts_1l3btex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 6, n_b\\geq 3, n_{\\rm lep}=1$");
77 TString cuts_2ltex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 5, n_b=1, n_{\\rm lep}=2$");
78 TString cuts_2lbbtex(
"$H_T>500, \\mathrm{MET}>200, n_{\\rm jets}\\geq 5, n_b=2, n_{\\rm lep}=2$");
80 TString cuts_R1(
"mj<="+
MJcut+
"&&mt<=140&&");
81 TString cuts_R2(
"mj>"+
MJcut+
"&&mt<=140&&");
82 TString cuts_R3(
"mj<="+
MJcut+
"&&mt>140&&");
83 TString cuts_R4(
"mj>"+
MJcut+
"&&mt>140&&");
84 TString cuts_highMJ(
"mj>"+
MJcut+
"&&");
85 TString cuts_lowMJ(
"mj<="+
MJcut+
"&&");
87 TString cuts_R1tex(
"R1: $m_T \\leq 140,M_J \\leq "+
MJcut+
"$");
88 TString cuts_R2tex(
"R2: $m_T \\leq 140,M_J > "+
MJcut+
"$");
89 TString cuts_R3tex(
"R3: $m_T > 140,M_J \\leq "+
MJcut+
"$");
90 TString cuts_R4tex(
"R4: $m_T > 140,M_J > "+
MJcut+
"$");
91 TString cuts_highMJtex(
"$M_J > "+
MJcut+
"$");
92 TString cuts_lowMJtex(
"$M_J \\leq "+
MJcut+
"$");
96 name.ReplaceAll(
"Rfactors",
"Rfactors_6j");
97 cuts_1l.ReplaceAll(
"njets>=6",
"njets>=6&&njets<=7");
98 cuts_1l1b.ReplaceAll(
"njets>=6",
"njets>=6&&njets<=7");
99 cuts_1l2b.ReplaceAll(
"njets>=6",
"njets>=6&&njets<=7");
100 cuts_1l3b.ReplaceAll(
"njets>=6",
"njets>=6&&njets<=7");
101 cuts_1ltex.ReplaceAll(
"n_{\\rm jets}\\geq 6,",
"6 \\leq n_{\\rm jets}\\leq 7 ,");
102 cuts_1l1btex.ReplaceAll(
"n_{\\rm jets}\\geq 6,",
"6 \\leq n_{\\rm jets}\\leq 7 ,");
103 cuts_1l2btex.ReplaceAll(
"n_{\\rm jets}\\geq 6,",
"6 \\leq n_{\\rm jets}\\leq 7 ,");
104 cuts_1l3btex.ReplaceAll(
"n_{\\rm jets}\\geq 6,",
"6 \\leq n_{\\rm jets}\\leq 7 ,");
107 name.ReplaceAll(
"Rfactors",
"Rfactors_8j");
108 cuts_1l.ReplaceAll(
">=6",
">=8");
109 cuts_1l1b.ReplaceAll(
">=6",
">=8");
110 cuts_1l2b.ReplaceAll(
">=6",
">=8");
111 cuts_1l3b.ReplaceAll(
">=6",
">=8");
112 cuts_1ltex.ReplaceAll(
"n_{\\rm jets}\\geq 6,",
"n_{\\rm jets}\\geq 8,");
115 name.ReplaceAll(
"Rfactors",
"Rfactors_2b");
116 cuts_1l.ReplaceAll(
"nbm>=2",
"nbm==2");
117 cuts_1ltex.ReplaceAll(
"n_b\\geq 2",
"n_b=2");
120 name.ReplaceAll(
"Rfactors",
"Rfactors_3b");
121 cuts_1l.ReplaceAll(
"nbm>=2",
"nbm>=3");
122 cuts_1ltex.ReplaceAll(
"n_b\\geq 2",
"n_b\\geq 3");
125 ifstream header(
"txt/header.tex");
126 ifstream footer(
"txt/footer.tex");
128 file<<header.rdbuf();
129 file<<
"\\vspace{80 mm}\n";
130 file <<
"\n\\begin{tabular}[!htb]{ l | ";
131 for(
unsigned sam(0); sam < Samples.size(); sam++)
133 file <<
"| r r | r r";
134 file<<
"}\\hline\\hline\n";
135 file <<
" \\multicolumn{1}{c|}{${\\cal L} = "<<luminosity<<
"$ fb$^{-1}$} ";
136 for(
unsigned sam(0); sam < Samples.size(); sam++)
137 file <<
" & "<<Samples[sam].label;
138 if(
doRmj) file <<
"& $R_{MJ}^{1\\ell}$ & $\\kappa_{MJ}^{1\\ell}$ & $R_{MJ}^{2\\ell}$ & $\\kappa_{MJ}^{2\\ell}$";
139 if(
doRmt) file <<
"& $R_{m_T}^{1\\ell}$ & $\\kappa_{m_T}^{1\\ell}$ & $R_{m_T}^{2\\ell}$ & $\\kappa_{m_T}^{2\\ell}$";
140 file <<
"\\\\ \\hline \n ";
143 file <<
" \\multicolumn{"<< Samples.size()+5<<
"}{c}{" << cuts_1ltex <<
"} \\\\ \\hline \\hline\n";
147 file <<
YieldsCut(cuts_R1tex, cuts_R1+cuts_1l, chain, Samples)+
"&&&&"+
" \\\\ \n";
148 file <<
YieldsCut(cuts_R2tex, cuts_R2+cuts_1l, chain, Samples)+
"& \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mt<=140",
"mj>"+
MJcut,Samples[0])+
"} && \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mt<=140",
"mj>"+
MJcut,Samples[1])+
"} &"+
" \\\\ \n";
149 file <<
YieldsCut(cuts_R3tex, cuts_R3+cuts_1l, chain, Samples)+
"&&&&"+
" \\\\ \n";
150 file <<
YieldsCut(cuts_R4tex, cuts_R4+cuts_1l, chain, Samples)+
" & \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mt>140",
"mj>"+
MJcut,Samples[0])+
"} & \\multirow{-4}{*}{"+
GetKappa(cuts_1l,
"mt<=140",
"mt>140",
"mj>"+
MJcut,Samples[0])+
"} & \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mt>140",
"mj>"+
MJcut,Samples[1])+
"} & \\multirow{-4}{*}{"+
GetKappa(cuts_1l,
"mt<=140",
"mt>140",
"mj>"+
MJcut,Samples[1])+
"}"+
" \\\\ \n";
155 file <<
YieldsCut(cuts_R1tex, cuts_R1+cuts_1l, chain, Samples)+
"&&&&"+
" \\\\ \n";
156 file <<
YieldsCut(cuts_R3tex, cuts_R3+cuts_1l, chain, Samples)+
"& \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mj<="+
MJcut,
"mt>140",Samples[0])+
"} && \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mj<="+
MJcut,
"mt>140",Samples[1])+
"} &"+
" \\\\ \n";
157 file <<
YieldsCut(cuts_R2tex, cuts_R2+cuts_1l, chain, Samples)+
"&&&&"+
" \\\\ \n";
158 file <<
YieldsCut(cuts_R4tex, cuts_R4+cuts_1l, chain, Samples)+
" & \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mj>"+
MJcut,
"mt>140",Samples[0])+
"} & \\multirow{-4}{*}{"+
GetKappa(cuts_1l,
"mj<="+
MJcut,
"mj>"+
MJcut,
"mt>140",Samples[0])+
"} & \\multirow{-2}{*}{"+
GetRatio(cuts_1l,
"mj>"+
MJcut,
"mt>140",Samples[1])+
"} & \\multirow{-4}{*}{"+
GetKappa(cuts_1l,
"mj<="+
MJcut,
"mj>"+
MJcut,
"mt>140",Samples[1])+
"}"+
" \\\\ \n";
161 file <<
"\\hline\\multicolumn{1}{c|}{} ";
162 for(
unsigned sam(0); sam < Samples.size(); sam++)
166 file<<
"\\hline\\hline\n\\end{tabular}"<<endl<<endl;
167 file<<footer.rdbuf();
169 cout<<
"Written "<<name<<endl;
172 TString
YieldsCut(TString title, TString cuts, vector<TChain*> chain, vector<sfeats> Samples){
173 TString totCut, Hname =
"histo", out;
174 vector<double> yield, error;
176 int nsam(chain.size());
177 TH1D histo(Hname,
"",100, 0, 10000);
179 for(
int sam(0); sam < nsam; sam++){
180 totCut =
luminosity+
"*weight*("+cuts+
"&&"+Samples[sam].cut+
")";
181 chain[sam]->Project(Hname,
"met", totCut);
182 yield.push_back(histo.IntegralAndError(0,101,err));
183 error.push_back(err);
188 for(
int sam(0); sam < nsam; sam++)
195 TString
GetRatio(TString baseline,TString region_cut,TString ratio_cut,
sfeats Sample){
197 TChain * chain =
new TChain(
"tree");
198 for(
unsigned insam(0); insam < Sample.
file.size(); insam++)
199 chain->Add(Sample.
file[insam]);
201 TH1D h_numerator(
"num",
"",100, 0, 10000);
203 TH1D h_denominator(
"den",
"",100, 0, 10000);
204 h_denominator.Sumw2();
206 TString numCut =
luminosity+
"*weight*("+baseline+
"&&"+region_cut+
"&&"+ratio_cut+
"&&"+Sample.
cut+
")";
207 TString denCut =
luminosity+
"*weight*("+baseline+
"&&"+region_cut+
"&&!("+ratio_cut+
")&&"+Sample.
cut+
")";
209 chain->Project(
"num",
"met", numCut);
210 chain->Project(
"den",
"met", denCut);
212 double numerator, denominator,numerator_err, denominator_err, ratio, error;
213 numerator = h_numerator.IntegralAndError(0,101,numerator_err);
214 denominator = h_denominator.IntegralAndError(0,101,denominator_err);
216 ratio = numerator/denominator;
217 error = ratio*sqrt(pow(numerator_err/numerator,2)+pow(denominator_err/denominator,2));
225 void GetRatio(
double &ratio,
double &error, TString baseline,TString region_cut, TString ratio_cut,
sfeats Sample){
227 TChain * chain =
new TChain(
"tree");
228 for(
unsigned insam(0); insam < Sample.
file.size(); insam++) chain->Add(Sample.
file[insam]);
230 TH1D h_numerator(
"num",
"",100, 0, 10000);
232 TH1D h_denominator(
"den",
"",100, 0, 10000);
233 h_denominator.Sumw2();
235 TString numCut =
luminosity+
"*weight*("+baseline+
"&&"+region_cut+
"&&"+ratio_cut+
"&&"+Sample.
cut+
")";
236 TString denCut =
luminosity+
"*weight*("+baseline+
"&&"+region_cut+
"&&!("+ratio_cut+
")&&"+Sample.
cut+
")";
238 chain->Project(
"num",
"met", numCut);
239 chain->Project(
"den",
"met", denCut);
241 double numerator, denominator,numerator_err, denominator_err;
242 numerator = h_numerator.IntegralAndError(0,101,numerator_err);
243 denominator = h_denominator.IntegralAndError(0,101,denominator_err);
245 ratio = numerator/denominator;
246 error = ratio*sqrt(pow(numerator_err/numerator,2)+pow(denominator_err/denominator,2));
249 TString
GetKappa(TString baseline,TString region_cut1,TString region_cut2, TString ratio_cut,
sfeats Sample){
251 double ratio1, ratio2, error1, error2,
kappa, kappaerr;
252 GetRatio(ratio1,error1,baseline,region_cut1,ratio_cut, Sample);
253 GetRatio(ratio2,error2,baseline,region_cut2,ratio_cut, Sample);
255 kappa = ratio2/ratio1;
256 kappaerr = kappa*sqrt(pow(error2/ratio2,2)+pow(error1/ratio1,2));
TString YieldsCut(TString title, TString cuts, vector< TChain * > chain, vector< sfeats > Samples)
TString GetRatio(TString baseline, TString region_cut, TString ratio_cut, sfeats Sample)
std::vector< TString > file
TString RoundNumber(double num, int decimals, double denom=1.)
TString GetKappa(TString baseline, TString region_cut1, TString region_cut2, TString ratio_cut, sfeats Sample)