5 #include "TGraphErrors.h" 24 void GetYield(
double& yield,
double& yield_err, TString baseline,TString external,TString mj_cut,TString mt_cut,
sfeats Sample,TString
luminosity);
25 void GetRatio(
double& ratio,
double& error,
double num,
double den,
double num_err,
double den_err,
double weight);
26 void GetKappa(
double&
kappa,
double& error,
double n1,
double n2,
double n3,
double n4,
double n1_err,
double n2_err,
double n3_err,
double n4_err,
double weight);
27 void MakeGraphs(
double rmj1[],
double rmj2[],
double rmj1_err[],
double rmj2_err[],
double rmt1[],
double rmt2[],
double rmt1_err[],
double rmt2_err[],
double kappa[],
double kappa_err[],
const vector<TString> binlabels,TString sampleName, TString baseline, TString mj_cut, TString mt_cut);
33 TString folder=
"/cms5r0/rohan/2015_05_25/skim_met100/";
35 vector<TString> s_t1t;
36 s_t1t.push_back(folder+
"*T1tttt*1500_*PU20*");
37 vector<TString> s_t1tc;
38 s_t1tc.push_back(folder+
"*T1tttt*1200_*PU20*");
40 s_tt.push_back(folder+
"*_TTJet*");
43 vector<TString> s_wjets;
44 s_wjets.push_back(folder+
"*WJetsToLNu_HT*");
45 vector<TString> s_singlet;
46 s_singlet.push_back(folder+
"*_T*channel*");
47 vector<TString> s_ttv;
48 s_ttv.push_back(folder+
"*TTW*");
49 s_ttv.push_back(folder+
"*TTZ*");
50 vector<TString> s_other;
51 s_other.push_back(folder+
"*QCD_HT*");
52 s_other.push_back(folder+
"*_ZJet*");
53 s_other.push_back(folder+
"*DY*");
54 s_other.push_back(folder+
"*WH_HToBB*");
59 TString baseline =
"ht>500&&met>100&&nbm>=2&&(nmus+nels)==1&&njets>=7";
66 vector<sfeats> samples_MJ;
69 samples_MJ.push_back(
sfeats(s_tt,
"1#it{l} t#bar{t}", 31,1,
"ntruleps<=1"));
72 TString mj_cut =
"mj>600";
73 TString mt_cut =
"mt>140";
78 vector<TString> external_meth1;
79 external_meth1.push_back(
"njets>=7&&njets<=8&&met>100&&met<=200");
80 external_meth1.push_back(
"njets>=7&&njets<=8&&met>200&&met<=400");
81 external_meth1.push_back(
"njets>=7&&njets<=8&&met>400");
82 external_meth1.push_back(
"njets>=9&&met>100&&met<=200");
83 external_meth1.push_back(
"njets>=9&&met>200&&met<=400");
84 external_meth1.push_back(
"njets>=9&&met>400");
88 double N1_meth1[nExt],N2_meth1[nExt],N3_meth1[nExt],N4_meth1[nExt];
89 double N1_meth1_err[nExt],N2_meth1_err[nExt],N3_meth1_err[nExt],N4_meth1_err[nExt];
90 for(
int iR=0; iR<nExt; iR++){
91 GetYield(N1_meth1[iR], N1_meth1_err[iR], baseline, external_meth1.at(iR), not_mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
92 GetYield(N2_meth1[iR], N2_meth1_err[iR], baseline, external_meth1.at(iR), mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
93 GetYield(N3_meth1[iR], N3_meth1_err[iR], baseline, external_meth1.at(iR), not_mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
94 GetYield(N4_meth1[iR], N4_meth1_err[iR], baseline, external_meth1.at(iR), mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
97 double rmj43[nExt], rmj21[nExt], rmj43_err[nExt], rmj21_err[nExt];
98 double rmt42[nExt], rmt31[nExt], rmt42_err[nExt], rmt31_err[nExt];
99 for(
int iR=0; iR<nExt; iR++){
100 GetRatio(rmj21[iR], rmj21_err[iR], N2_meth1[iR], N1_meth1[iR], N2_meth1_err[iR], N1_meth1_err[iR], weight);
101 GetRatio(rmj43[iR], rmj43_err[iR], N4_meth1[iR], N3_meth1[iR], N4_meth1_err[iR], N3_meth1_err[iR], weight);
102 GetRatio(rmt31[iR], rmt31_err[iR], N3_meth1[iR], N1_meth1[iR], N3_meth1_err[iR], N1_meth1_err[iR], weight);
103 GetRatio(rmt42[iR], rmt42_err[iR], N4_meth1[iR], N2_meth1[iR], N4_meth1_err[iR], N2_meth1_err[iR], weight);
106 double kappa[nExt], kappa_err[nExt];
107 for(
int iR=0; iR<nExt; iR++){
108 GetKappa(kappa[iR], kappa_err[iR], N1_meth1[iR], N2_meth1[iR], N3_meth1[iR], N4_meth1[iR], N1_meth1_err[iR], N2_meth1_err[iR], N3_meth1_err[iR], N4_meth1_err[iR], weight);
111 vector<TString> binlabels;
112 binlabels.push_back(
"low MET");binlabels.push_back(
"med MET");binlabels.push_back(
"high MET");
113 binlabels.push_back(
"low MET");binlabels.push_back(
"med MET");binlabels.push_back(
"high MET");
114 TString binName =
"method1";
115 if (baseline.Contains(
"met>100")) binName.Append(
"_met100");
116 if (baseline.Contains(
"nbm==1")) binName.Append(
"_nb1");
117 binlabels.push_back(binName);
119 MakeGraphs(rmj43, rmj21, rmj43_err, rmj21_err, rmt42, rmt31, rmt42_err, rmt31_err, kappa, kappa_err, binlabels, samples_MJ.at(0).label, baseline, mj_cut, mt_cut);
127 const int nExt_2 = 6;
128 vector<TString> externalA_meth2;
129 externalA_meth2.push_back(
"met>100&&met<=200");
130 externalA_meth2.push_back(
"met>200&&met<=400");
131 externalA_meth2.push_back(
"met>400");
132 externalA_meth2.push_back(
"met>100&&met<=200");
133 externalA_meth2.push_back(
"met>200&&met<=400");
134 externalA_meth2.push_back(
"met>400");
135 vector<TString> externalB_meth2;
136 externalB_meth2.push_back(
"njets>=7&&njets<=8&&met>100&&met<=200");
137 externalB_meth2.push_back(
"njets>=7&&njets<=8&&met>200&&met<=400");
138 externalB_meth2.push_back(
"njets>=7&&njets<=8&&met>400");
139 externalB_meth2.push_back(
"njets>=9&&met>100&&met<=200");
140 externalB_meth2.push_back(
"njets>=9&&met>200&&met<=400");
141 externalB_meth2.push_back(
"njets>=9&&met>400");
143 double N1_meth2[nExt_2],N2_meth2[nExt_2],N3_meth2[nExt_2],N4_meth2[nExt_2];
144 double N1_meth2_err[nExt_2],N2_meth2_err[nExt_2],N3_meth2_err[nExt_2],N4_meth2_err[nExt_2];
145 for(
int iR=0; iR<nExt_2; iR++){
146 GetYield(N1_meth2[iR], N1_meth2_err[iR], baseline, externalA_meth2.at(iR), not_mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
147 GetYield(N2_meth2[iR], N2_meth2_err[iR], baseline, externalB_meth2.at(iR), mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
148 GetYield(N3_meth2[iR], N3_meth2_err[iR], baseline, externalA_meth2.at(iR), not_mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
149 GetYield(N4_meth2[iR], N4_meth2_err[iR], baseline, externalB_meth2.at(iR), mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
152 double rmj43_2[nExt_2], rmj21_2[nExt_2], rmj43_err_2[nExt_2], rmj21_err_2[nExt_2];
153 double rmt42_2[nExt_2], rmt31_2[nExt_2], rmt42_err_2[nExt_2], rmt31_err_2[nExt_2];
154 for(
int iR=0; iR<nExt_2; iR++){
155 GetRatio(rmj21_2[iR], rmj21_err_2[iR], N2_meth2[iR], N1_meth2[iR], N2_meth2_err[iR], N1_meth2_err[iR], weight);
156 GetRatio(rmj43_2[iR], rmj43_err_2[iR], N4_meth2[iR], N3_meth2[iR], N4_meth2_err[iR], N3_meth2_err[iR], weight);
157 GetRatio(rmt31_2[iR], rmt31_err_2[iR], N3_meth2[iR], N1_meth2[iR], N3_meth2_err[iR], N1_meth2_err[iR], weight);
158 GetRatio(rmt42_2[iR], rmt42_err_2[iR], N4_meth2[iR], N2_meth2[iR], N4_meth2_err[iR], N2_meth2_err[iR], weight);
161 double kappa_2[nExt_2], kappa_err_2[nExt_2];
162 for(
int iR=0; iR<nExt_2; iR++){
163 GetKappa(kappa_2[iR], kappa_err_2[iR], N1_meth2[iR], N2_meth2[iR], N3_meth2[iR], N4_meth2[iR], N1_meth2_err[iR], N2_meth2_err[iR], N3_meth2_err[iR], N4_meth2_err[iR], weight);
166 vector<TString> binlabels_2;
167 binlabels_2.push_back(
"low MET");binlabels_2.push_back(
"med MET");binlabels_2.push_back(
"high MET");
168 binlabels_2.push_back(
"low MET");binlabels_2.push_back(
"med MET");binlabels_2.push_back(
"high MET");
170 TString binName_2 =
"method2";
171 if (baseline.Contains(
"met>100")) binName_2.Append(
"_met100");
172 if (baseline.Contains(
"nbm==1")) binName_2.Append(
"_nb1");
173 binlabels_2.push_back(binName_2);
175 MakeGraphs(rmj43_2, rmj21_2, rmj43_err_2, rmj21_err_2, rmt42_2, rmt31_2, rmt42_err_2, rmt31_err_2, kappa_2, kappa_err_2, binlabels_2, samples_MJ.at(0).label, baseline, mj_cut, mt_cut);
240 const int nExt_0 = 6;
241 vector<TString> externalA_meth0;
242 externalA_meth0.push_back(
"met>100");
243 externalA_meth0.push_back(
"met>100");
244 externalA_meth0.push_back(
"met>100");
245 externalA_meth0.push_back(
"met>100");
246 externalA_meth0.push_back(
"met>100");
247 externalA_meth0.push_back(
"met>100");
248 vector<TString> externalB_meth0;
249 externalB_meth0.push_back(
"njets>=7&&njets<=8&&met>100&&met<=200");
250 externalB_meth0.push_back(
"njets>=7&&njets<=8&&met>200&&met<=400");
251 externalB_meth0.push_back(
"njets>=7&&njets<=8&&met>400");
252 externalB_meth0.push_back(
"njets>=9&&met>100&&met<=200");
253 externalB_meth0.push_back(
"njets>=9&&met>200&&met<=400");
254 externalB_meth0.push_back(
"njets>=9&&met>400");
256 double N1_meth0[nExt_0],N2_meth0[nExt_0],N3_meth0[nExt_0],N4_meth0[nExt_0];
257 double N1_meth0_err[nExt_0],N2_meth0_err[nExt_0],N3_meth0_err[nExt_0],N4_meth0_err[nExt_0];
258 for(
int iR=0; iR<nExt_0; iR++){
259 GetYield(N1_meth0[iR], N1_meth0_err[iR], baseline, externalA_meth0.at(iR), not_mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
260 GetYield(N2_meth0[iR], N2_meth0_err[iR], baseline, externalB_meth0.at(iR), mj_cut, not_mt_cut, samples_MJ.at(0),
luminosity);
261 GetYield(N3_meth0[iR], N3_meth0_err[iR], baseline, externalA_meth0.at(iR), not_mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
262 GetYield(N4_meth0[iR], N4_meth0_err[iR], baseline, externalB_meth0.at(iR), mj_cut, mt_cut, samples_MJ.at(0),
luminosity);
265 double rmj43_0[nExt_0], rmj21_0[nExt_0], rmj43_err_0[nExt_0], rmj21_err_0[nExt_0];
266 double rmt42_0[nExt_0], rmt31_0[nExt_0], rmt42_err_0[nExt_0], rmt31_err_0[nExt_0];
267 for(
int iR=0; iR<nExt_0; iR++){
268 GetRatio(rmj21_0[iR], rmj21_err_0[iR], N2_meth0[iR], N1_meth0[iR], N2_meth0_err[iR], N1_meth0_err[iR], weight);
269 GetRatio(rmj43_0[iR], rmj43_err_0[iR], N4_meth0[iR], N3_meth0[iR], N4_meth0_err[iR], N3_meth0_err[iR], weight);
270 GetRatio(rmt31_0[iR], rmt31_err_0[iR], N3_meth0[iR], N1_meth0[iR], N3_meth0_err[iR], N1_meth0_err[iR], weight);
271 GetRatio(rmt42_0[iR], rmt42_err_0[iR], N4_meth0[iR], N2_meth0[iR], N4_meth0_err[iR], N2_meth0_err[iR], weight);
274 double kappa_0[nExt_0], kappa_err_0[nExt_0];
275 for(
int iR=0; iR<nExt_0; iR++){
276 GetKappa(kappa_0[iR], kappa_err_0[iR], N1_meth0[iR], N2_meth0[iR], N3_meth0[iR], N4_meth0[iR], N1_meth0_err[iR], N2_meth0_err[iR], N3_meth0_err[iR], N4_meth0_err[iR], weight);
279 vector<TString> binlabels_0;
280 binlabels_0.push_back(
"low MET");binlabels_0.push_back(
"med MET");binlabels_0.push_back(
"high MET");
281 binlabels_0.push_back(
"low MET");binlabels_0.push_back(
"med MET");binlabels_0.push_back(
"high MET");
283 TString binName_0 =
"method0";
284 if (baseline.Contains(
"met>100")) binName_0.Append(
"_met100");
285 if (baseline.Contains(
"nbm==1")) binName_0.Append(
"_nb1");
286 binlabels_0.push_back(binName_0);
288 MakeGraphs(rmj43_0, rmj21_0, rmj43_err_0, rmj21_err_0, rmt42_0, rmt31_0, rmt42_err_0, rmt31_err_0, kappa_0, kappa_err_0, binlabels_0, samples_MJ.at(0).label, baseline, mj_cut, mt_cut);
291 void MakeGraphs(
double rmj1[],
double rmj2[],
double rmj1_err[],
double rmj2_err[],
double rmt1[],
double rmt2[],
double rmt1_err[],
double rmt2_err[],
double kappa[],
double kappa_err[],
const vector<TString> binlabels,TString sampleName, TString baseline, TString mj_cut, TString mt_cut){
293 TString sampleNameText = sampleName;
294 if(sampleName.Contains(
"2#it{l} t#bar{t}")) { sampleNameText = sampleName; sampleNameText.ReplaceAll(
"2#it{l} t#bar{t}",
"ttbar_2l"); }
295 else if(sampleName.Contains(
"1#it{l} t#bar{t}")) { sampleNameText = sampleName; sampleNameText.ReplaceAll(
"1#it{l} t#bar{t}",
"ttbar_1l"); }
296 else if(sampleName.Contains(
"t#bar{t}")) { sampleNameText = sampleName; sampleNameText.ReplaceAll(
"t#bar{t}",
"ttbar"); }
299 vector<TGraphErrors*> graphsMJ;
300 vector<TGraphErrors*> graphsMT;
301 TGraphErrors* kappas;
302 const int nExt = binlabels.size()-1;
304 vector<double> x, x1, x2, x_err;
305 for(
int i=0; i<nExt; i++){
307 x1.push_back(i-0.075);
308 x2.push_back(i+0.075);
312 TGraphErrors *mj1 =
new TGraphErrors(nExt,&x1[0],rmj1,&x_err[0],rmj1_err);
313 graphsMJ.push_back(mj1);
315 TGraphErrors *mj2 =
new TGraphErrors(nExt,&x2[0],rmj2,&x_err[0],rmj2_err);
316 graphsMJ.push_back(mj2);
319 for(
int imax = 0;imax<nExt;imax++){
320 if(rmj1[imax]>maxMJ) maxMJ=rmj1[imax];
321 if(rmj2[imax]>maxMJ) maxMJ=rmj2[imax];
324 TGraphErrors *mt1 =
new TGraphErrors(nExt,&x1[0],rmt1,&x_err[0],rmt1_err);
325 graphsMT.push_back(mt1);
327 TGraphErrors *mt2 =
new TGraphErrors(nExt,&x2[0],rmt2,&x_err[0],rmt2_err);
328 graphsMT.push_back(mt2);
331 for(
int imax = 0;imax<nExt;imax++){
332 if(rmt1[imax]>maxMT) maxMT=rmt1[imax];
333 if(rmt2[imax]>maxMT) maxMT=rmt2[imax];
336 kappas =
new TGraphErrors(nExt,&x[0],kappa,&x_err[0],kappa_err);
342 TH1F *h =
new TH1F(
"for_axis_label",
cuts2title(baseline),nExt,-0.5,nExt-0.5);
343 for (
int ih=1;ih<=nExt;ih++){
344 h->GetXaxis()->SetBinLabel(ih,binlabels[ih-1]);
347 h->SetMaximum(1.5*maxMJ);
350 h->GetYaxis()->SetTitle(
"R_{MJ}");
351 h->GetXaxis()->SetLabelSize(0.045);
354 double legX = 0.65, legY = 0.89, legSingle = 0.14;
355 double legW = 0.22, legH = legSingle;
356 TLegend
leg(legX, legY-legH, legX+legW, legY);
357 leg.SetTextSize(0.057); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
358 leg.SetTextFont(132);
360 graphsMJ.at(0)->SetMarkerStyle(20);
361 graphsMJ.at(0)->SetMarkerSize(1.2);
362 graphsMJ.at(0)->SetMarkerColor(31);
363 graphsMJ.at(0)->SetLineColor(31);
364 graphsMJ.at(0)->Draw(
"P");
365 leg.AddEntry(graphsMJ.at(0), sampleName+
" "+
cuts2title(mt_cut),
"p");
367 graphsMJ.at(1)->SetMarkerStyle(22);
368 graphsMJ.at(1)->SetMarkerSize(1.2);
369 graphsMJ.at(1)->SetMarkerColor(46);
370 graphsMJ.at(1)->SetLineColor(46);
371 graphsMJ.at(1)->Draw(
"P");
376 TLine line; line.SetLineColor(28); line.SetLineWidth(4); line.SetLineStyle(2);
377 line.DrawLine((nExt-1)/2., 0, (nExt-1)/2., 1.5*maxMJ);
378 TLatex *text78 =
new TLatex(0.35,0.03,
"n_{jets}= 7-8");
380 text78->SetTextSize(0.04);
381 text78->SetLineWidth(2);
383 TLatex *text9 =
new TLatex(0.7,0.03,
"n_{jets}#geq 9");
385 text9->SetTextSize(0.04);
386 text9->SetLineWidth(2);
389 TString pname1 =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_rmj.pdf";
390 TString pname1root =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_rmj.root";
391 if(baseline.Contains(
"ntks_chg==0")) { pname1.ReplaceAll(
"_rmj",
"_rmj_ITV"); pname1root.ReplaceAll(
"_rmj",
"_rmj_ITV"); }
393 can.SaveAs(pname1root);
396 graphsMJ.at(0)->Delete();
397 graphsMJ.at(1)->Delete();
401 h->SetMaximum(1.5*maxMT);
404 h->GetYaxis()->SetTitle(
"R_{mT}");
405 h->GetXaxis()->SetLabelSize(0.045);
408 TLegend leg2(legX, legY-legH, legX+legW, legY);
409 leg2.SetTextSize(0.057); leg2.SetFillColor(0); leg2.SetFillStyle(0); leg2.SetBorderSize(0);
410 leg2.SetTextFont(132);
412 graphsMT.at(0)->SetMarkerStyle(20);
413 graphsMT.at(0)->SetMarkerSize(1.2);
414 graphsMT.at(0)->SetMarkerColor(31);
415 graphsMT.at(0)->SetLineColor(31);
416 graphsMT.at(0)->Draw(
"P");
417 leg2.AddEntry(graphsMT.at(0), sampleName+
" "+
cuts2title(mj_cut),
"p");
419 graphsMT.at(1)->SetMarkerStyle(22);
420 graphsMT.at(1)->SetMarkerSize(1.2);
421 graphsMT.at(1)->SetMarkerColor(46);
422 graphsMT.at(1)->SetLineColor(46);
423 graphsMT.at(1)->Draw(
"P");
430 line.DrawLine((nExt-1)/2., 0, (nExt-1)/2., 1.5*maxMT);
432 TString pname2 =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_rmt.pdf";
433 TString pname2root =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_rmt.root";
434 if(baseline.Contains(
"ntks_chg==0")) { pname2.ReplaceAll(
"_rmt",
"_rmt_ITV"); pname2root.ReplaceAll(
"_rmt",
"_rmt_ITV");}
436 can2.SaveAs(pname2root);
438 graphsMT.at(0)->Delete();
439 graphsMT.at(1)->Delete();
446 h->GetYaxis()->SetTitle(
"\\kappa");
449 kappas->SetMarkerStyle(20);
450 kappas->SetMarkerSize(1.2);
451 kappas->SetMarkerColor(kBlack);
452 kappas->SetLineColor(kBlack);
454 line.DrawLine(h->GetBinLowEdge(1), 1, h->GetBinLowEdge(h->GetNbinsX()+1), 1);
460 TString pname3 =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_kappa.pdf";
461 TString pname3root =
"plots/closure/"+binlabels.at(nExt)+
"_"+sampleNameText+
"_kappa.root";
462 if(baseline.Contains(
"ntks_chg==0")) { pname3.ReplaceAll(
"_kappa",
"_kappa_ITV"); pname3root.ReplaceAll(
"_kappa",
"_kappa_ITV");}
464 can3.SaveAs(pname3root);
472 TChain * chain =
new TChain(
"tree");
473 for(
unsigned insam(0); insam < Sample.
file.size(); insam++)
474 chain->Add(Sample.
file[insam]);
476 TH1D h_weight(
"weight",
"",2000, 0, 2);
479 chain->Project(
"weight",
"weight*"+luminosity);
481 double weight = h_weight.GetMean();
486 void GetYield(
double& yield,
double& yield_err, TString baseline,TString external,TString mj_cut,TString mt_cut,
sfeats Sample,TString
luminosity){
488 TChain * chain =
new TChain(
"tree");
489 for(
unsigned insam(0); insam < Sample.
file.size(); insam++)
490 chain->Add(Sample.
file[insam]);
492 TH1D h_yield(
"yields",
"",100, 0, 10000);
494 TH1D h_weight(
"weight",
"",2000, 0, 2);
497 TString yieldCut = luminosity+
"*weight*("+baseline+
"&&"+external+
"&&"+mj_cut+
"&&"+mt_cut+
"&&"+Sample.
cut+
")";
499 chain->Project(
"yields",
"met", yieldCut);
500 chain->Project(
"weight",
"weight*"+luminosity);
502 double weight = h_weight.GetMean();
504 yield = h_yield.IntegralAndError(0,101,yield_err);
506 if(yield==0) yield_err = weight;
509 void GetRatio(
double& ratio,
double& error,
double num,
double den,
double num_err,
double den_err,
double weight){
511 if(num==0 && den==0){
524 error = sqrt(pow(num_err/den,2)+pow(num/pow(den,2)*den_err,2));
527 void GetKappa(
double&
kappa,
double& error,
double n1,
double n2,
double n3,
double n4,
double n1_err,
double n2_err,
double n3_err,
double n4_err,
double weight){
555 kappa = (n4*n1)/(n3*n2);
556 error = sqrt(pow((n4/(n2*n3))*n1_err,2)+pow((n1/(n2*n3))*n4_err,2)+pow(((n1*n4)/(pow(n2,2)*n3))*n2_err,2)+pow(((n1*n4)/(n2*pow(n3,2)))*n3_err,2));
void GetKappa(double &kappa, double &error, double n1, double n2, double n3, double n4, double n1_err, double n2_err, double n3_err, double n4_err, double weight)
double GetWeight(sfeats Sample, TString luminosity)
TString cuts2title(TString title)
std::vector< TString > file
void MakeGraphs(double rmj1[], double rmj2[], double rmj1_err[], double rmj2_err[], double rmt1[], double rmt2[], double rmt1_err[], double rmt2_err[], double kappa[], double kappa_err[], const vector< TString > binlabels, TString sampleName, TString baseline, TString mj_cut, TString mt_cut)
void GetRatio(double &ratio, double &error, double num, double den, double num_err, double den_err, double weight)
void GetYield(double &yield, double &yield_err, TString baseline, TString external, TString mj_cut, TString mt_cut, sfeats Sample, TString luminosity)
TString invertcut(TString cut)