10 #include "TDirectory.h" 23 string hostname =
execute(
"echo $HOSTNAME");
25 bfolder =
"/net/cms2";
27 TString folder=bfolder+
"/cms2r0/babymaker/babies/2016_04_29/mc/merged_baseline/";
28 TString scan_folder=bfolder+
"/cms2r0/babymaker/babies/2016_04_29/mc/T1tttt/skim_baseline/";
31 vector<TString> v_t1t;
32 v_t1t.push_back(folder+
"*T1tttt*1500_*-100_*");
34 vector<TString> v_t1tc;
35 v_t1tc.push_back(folder+
"*T1tttt*1200_*-800_*");
37 vector<TString> v_t1t_1800_200;
38 v_t1t_1800_200.push_back(scan_folder+
"*T1tttt*1800_*-200_*");
40 vector<TString> v_t1t_1600_1000;
41 v_t1t_1600_1000.push_back(scan_folder+
"*T1tttt*1600_*-1000_*");
43 vector<TString> v_t1t_1400_1000;
44 v_t1t_1400_1000.push_back(scan_folder+
"*T1tttt*1400_*-1000_*");
47 v_tt.push_back(folder+
"*TTJets*HT*");
48 v_tt.push_back(folder+
"*TTJets*Lept*");
51 TString
lsp =
"{#lower[-0.1]{#tilde{#chi}}#lower[0.2]{#scale[0.85]{^{0}}}#kern[-1.3]{#scale[0.85]{_{1}}}}";
52 TString t1t_label =
"#tilde{g}#kern[0.2]{#tilde{g}}, #tilde{g}#rightarrowt#kern[0.18]{#bar{t}}#kern[0.18]"+
lsp;
53 vector<sample_class> tt_t1t;
54 tt_t1t.push_back(
sample_class(t1t_label+
" (1500,100)", v_t1t));
57 vector<sample_class> tt_t1tc;
58 tt_t1tc.push_back(
sample_class(t1t_label+
" (1200,800)", v_t1tc));
61 vector<sample_class> tt_t1t_1800_200;
62 tt_t1t_1800_200.push_back(
sample_class(t1t_label+
" (1800,200)", v_t1t_1800_200));
63 tt_t1t_1800_200.push_back(
sample_class(
"t#bar{t}", v_tt));
65 vector<sample_class> tt_t1t_1600_1000;
66 tt_t1t_1600_1000.push_back(
sample_class(t1t_label+
" (1600,1000)", v_t1t_1600_1000));
67 tt_t1t_1600_1000.push_back(
sample_class(
"t#bar{t}", v_tt));
69 vector<sample_class> tt_t1t_1400_1000;
70 tt_t1t_1400_1000.push_back(
sample_class(t1t_label+
" (1400,1000)", v_t1t_1400_1000));
71 tt_t1t_1400_1000.push_back(
sample_class(
"t#bar{t}", v_tt));
75 int ht_col(1), mj_col(kAzure+2), col2(kGreen+1), col3(kRed+1), col4(kOrange+7);
76 int mj_style(8);
float mj_size(2.);
77 vector<marker_class> mj_points, mj08_points, mj14_points, mj16_points, ht_points, met_points, nj_points;
86 ht_points.push_back(
marker_class(1500, mj_size, ht_col, mj_style));
91 met_points.push_back(
marker_class(600, mj_size, col2, mj_style));
94 nj_points.push_back(
marker_class(6, mj_size, col3, mj_style));
96 nj_points.push_back(
marker_class(11, mj_size, col3, mj_style));
98 vector<var_class> mj_general;
99 mj_general.push_back(
var_class(
"ht",4000,0,
"H_{T}",ht_col,2,ht_points));
100 mj_general.push_back(
var_class(
"met",1500,0,
"E_{T}^{miss}",col2,1,met_points));
101 mj_general.push_back(
var_class(
"njets30",15,0,
"N_{jets}",col3,1,nj_points));
102 mj_general.push_back(
var_class(
"mj_30",2000,0,
"M_{J}",mj_col,1,mj_points));
104 vector<var_class> mj_cands;
106 mj_cands.push_back(
var_class(
"mj_cands",2200,0,
"M_{J} PFcands",col2,1));
107 mj_cands.push_back(
var_class(
"mj_cands_trim",2200,0,
"M_{J} PFcands trimmed",col3,1));
108 mj_cands.push_back(
var_class(
"mj_10",2200,0,
"M_{J} 10 GeV jets",col4,1));
109 mj_cands.push_back(
var_class(
"mj_30", 2200,0,
"M_{J} 30 GeV jets",mj_col,1,mj_points));
111 vector<var_class> mj_sizes;
113 mj_sizes.push_back(
var_class(
"mj08",2200,0,
"M_{J} R=0.8",col2,1));
114 mj_sizes.push_back(
var_class(
"mj",2200,0,
"M_{J} R=1.2",mj_col,1,mj_points));
115 mj_sizes.push_back(
var_class(
"mj14", 2200,0,
"M_{J} R=1.4",col3,1,mj14_points));
116 mj_sizes.push_back(
var_class(
"mj16",2200,0,
"M_{J} R=1.6",col4,1,mj16_points));
119 vector<TString> vs_sam, vs_vars;
120 vector<vector<sample_class>*> v_sam;
121 v_sam.push_back(&tt_t1t); vs_sam.push_back(
"tt_t1t");
122 v_sam.push_back(&tt_t1tc); vs_sam.push_back(
"tt_t1tc");
123 v_sam.push_back(&tt_t1t_1800_200); vs_sam.push_back(
"tt_t1t_1800_200");
124 v_sam.push_back(&tt_t1t_1600_1000); vs_sam.push_back(
"tt_t1t_1600_1000");
125 v_sam.push_back(&tt_t1t_1400_1000); vs_sam.push_back(
"tt_t1t_1400_1000");
127 vector<vector<var_class>*> v_vars;
130 v_vars.push_back(&mj_sizes); vs_vars.push_back(
"size");
132 vector<TString> v_cuts;
133 v_cuts.push_back(
"ht>500&&met>200&&njets>=6&&nbm>=1&&nleps==1&&stitch");
135 for(
unsigned ivar(0); ivar<v_vars.size(); ivar++){
136 for(
unsigned icut(0); icut<v_cuts.size(); icut++){
137 for(
unsigned isam(0); isam<v_sam.size(); isam++){
138 DrawROC(*(v_sam[isam]), *(v_vars[ivar]), v_cuts[icut],
"mj_"+vs_sam[isam]+
"_"+vs_vars[ivar]);
147 void DrawROC(vector<sample_class> samples, vector<var_class> vars, TString cuts, TString
tag){
150 const int nbins(1000);
151 vector<vector<TH1D> > histos;
152 TString hname, totcut;
155 for(
unsigned sam(0); sam < samples.size(); sam++){
157 for(
unsigned isam(0); isam < samples[sam].files.size(); isam++){
158 chain[sam] =
new TChain(
"tree");
159 int nfiles = chain[sam]->Add(samples[sam].files[isam]);
160 if(nfiles==0) cout<<samples[sam].files[isam]<<
" not found"<<endl;
162 histos.push_back(vector<TH1D>());
165 for(
unsigned var(0); var<vars.size(); var++){
166 float minh(vars[var].minx), maxh(vars[var].maxx);
169 maxh = vars[var].minx;
171 hname =
"histo"; hname += sam; hname += var;
172 totcut =
"weight*("+cuts+
"&&"+samples[sam].cut+
")";
173 histos[sam].push_back(TH1D(hname,
"",nbins,minh,maxh));
174 chain[sam]->Project(hname, vars[var].varname, totcut);
178 TH1D base_histo(
"base",
"",1,0.03,1.0);
179 base_histo.SetMinimum(0.0);
180 base_histo.SetMaximum(1.0);
181 base_histo.SetDirectory(0);
183 style.
setTitles(&base_histo, samples[0].label+
" efficiency", samples[1].label+
" efficiency",
184 "#scale[0.8]{#font[62]{CMS}} #scale[0.6]{#font[52]{Supplementary (Simulation)}}",
"#scale[0.8]{13 TeV}");
188 double legW = 0.2, legH = legSingle*vars.size();
189 TLegend
leg(legX, legY-legH, legX+legW, legY);
190 leg.SetTextSize(0.057); leg.SetFillColor(0); leg.SetFillStyle(0); leg.SetBorderSize(0);
191 leg.SetTextFont(132);
195 for(
unsigned var(0); var<vars.size(); var++){
196 graphs[var] =
MakeROC(histos[0][var], histos[1][var], vars[var].minx < vars[var].maxx, vars[var].cuts);
197 graphs[var].SetLineColor(vars[var].color);
198 graphs[var].SetLineStyle(vars[var].style);
199 graphs[var].SetLineWidth(5);
200 leg.AddEntry(&(graphs[var]), vars[var].title,
"l");
201 graphs[var].Draw(
"lsame");
205 cuts.ReplaceAll(
".",
"");
206 cuts.ReplaceAll(
"(",
""); cuts.ReplaceAll(
"$",
""); cuts.ReplaceAll(
")",
"");
207 cuts.ReplaceAll(
"[",
""); cuts.ReplaceAll(
"]",
"");
208 cuts.ReplaceAll(
"/",
"_"); cuts.ReplaceAll(
"*",
""); cuts.ReplaceAll(
"&&",
"_");
209 cuts.ReplaceAll(
">=",
"ge"); cuts.ReplaceAll(
"<=",
"se");
210 cuts.ReplaceAll(
">",
"g"); cuts.ReplaceAll(
"<",
"s"); cuts.ReplaceAll(
"=",
"");
211 cuts.ReplaceAll(
"+",
"");
212 TString pname(
"plots/roc/roc_"+tag+
"_"+cuts+
".pdf");
216 pname.ReplaceAll(
"roc_",
"log_roc_");
217 base_histo.SetMinimum(3e-4);
220 for(
unsigned sam(0); sam < samples.size(); sam++)
221 chain[sam]->Delete();
224 TGraph
MakeROC(TH1D &good, TH1D &bad,
const bool less_is_better, vector<marker_class> cuts){
225 const int nbins = good.GetNbinsX();
226 if(bad.GetNbinsX() !=
nbins)
throw logic_error(
"Mismatched number of bins");
231 const double good_tot = good.Integral(0, nbins+1);
232 const double bad_tot = bad.Integral(0, nbins+1);
233 int inibin(0), endbin(nbins+1), dbin(1);
unsigned icut(0);
239 for(
int bin = inibin; bin*dbin<=endbin*dbin; bin+=dbin){
240 const double good_pass = good.Integral(min(endbin,bin), max(endbin,bin));
241 const double bad_pass = bad.Integral(min(endbin,bin), max(endbin,bin));
242 const double x = good_pass/good_tot;
243 const double y = bad_pass/bad_tot;
244 graph.SetPoint(graph.GetN(), x, y);
247 if(icut<cuts.size()){
248 float edge(good.GetXaxis()->GetBinUpEdge(bin));
249 if((edge>=cuts[icut].cut&&!less_is_better) || (edge<=cuts[icut].cut&&less_is_better)){
250 marker.SetMarkerStyle(cuts[icut].style);marker.SetMarkerColor(cuts[icut].color);
251 marker.SetMarkerSize(cuts[icut].size);
252 if(x>0.01 && y>0.0001) marker.DrawMarker(x,y);
257 TString name(good.GetName());
260 graph.SetTitle(name);
266 int istyle, vector<marker_class> icuts){
267 varname = ivarname; minx = iminx; maxx = imaxx; title = ititle;
269 color = icolor; style = istyle;
273 files = ifiles; label = ilabel; cut = icut;
277 cut=icut; size=isize; color=icolor; style=istyle;
bool Contains(const std::string &text, const std::string &pattern)
void DrawROC(vector< sample_class > samples, vector< var_class > vars, TString cuts, TString tag)
TGraph MakeROC(TH1D &good, TH1D &bad, const bool less_is_better, vector< marker_class > cuts)
std::string execute(const std::string &cmd)
void setTitles(TH1 *h, TString xTitle="", TString yTitle="", TString Left="", TString Right="")
marker_class(float icut, float isize, int icolor, int istyle)
var_class(std::vector< sample_class > samples, TString ivarname, float iminx, float imaxx, TString ititle, int icolor, int istyle=1, std::vector< marker_class > icuts=std::vector< marker_class >())
sample_class(TString ilabel, std::vector< TString > ifiles, TString icut="1")