ra4_draw  4bd0201e3d922d42bd545d4b045ed44db33454a4
plot_2016-10-05_pie.cxx
Go to the documentation of this file.
1 
3 #include <fstream>
4 #include <iostream>
5 #include <vector>
6 #include <ctime>
7 
8 #include "TError.h" // Controls error level reporting
9 
10 #include "core/utilities.hpp"
11 #include "core/baby.hpp"
12 #include "core/process.hpp"
13 #include "core/named_func.hpp"
14 #include "core/plot_maker.hpp"
15 #include "core/palette.hpp"
16 #include "core/table.hpp"
17 #include "core/plot_opt.hpp"
18 
19 namespace{
20  //bool do_met150 = true;
21 }
22 
23 using namespace std;
24 
25 NamedFunc offshellw("offshellw",[](const Baby &b) -> NamedFunc::ScalarType{
26  for (unsigned i(0); i<b.mc_pt()->size(); i++){
27  if (abs(b.mc_id()->at(i))!=24) continue;
28  if (b.mc_mass()->at(i) > 140.) {
29  return 99;
30  }
31  }
32  return -1;
33  });
34 
35 int main(){
36  gErrorIgnoreLevel=6000; // Turns off ROOT errors due to missing branches
37 
38  time_t begtime, endtime;
39  time(&begtime);
40 
43  string bfolder("");
44  string hostname = execute("echo $HOSTNAME");
45  if(Contains(hostname, "cms") || Contains(hostname, "compute-"))
46  bfolder = "/net/cms2"; // In laptops, you can't create a /net folder
47 
48  string foldermc(bfolder+"/cms2r0/babymaker/babies/2016_08_10/mc/merged_mcbase_stdnj5/");
49  //if(do_met150) foldermc = (bfolder+"/cms2r0/babymaker/babies/2016_06_14/mc/merged_met150/");
50  Palette colors("txt/colors.txt", "default");
51 
52  string ntupletag = "";
53  set<string> allfiles = {foldermc+"*_TTJets*Lept*"+ntupletag+"*.root", foldermc+"*_TTJets_HT*"+ntupletag+"*.root",
54  foldermc+"*_WJetsToLNu*"+ntupletag+"*.root",foldermc+"*_ST_*"+ntupletag+"*.root",
55  foldermc+"*_TTW*"+ntupletag+"*.root",foldermc+"*_TTZ*"+ntupletag+"*.root",
56  foldermc+"*_TTGJets*"+ntupletag+"*.root",foldermc+"*_TTTT*"+ntupletag+"*.root",
57  foldermc+"*QCD_HT*Inf_Tune*"+ntupletag+"*.root", foldermc+"*QCD_HT*0_Tune*"+ntupletag+"*.root",
58  foldermc+"*DYJetsToLL*"+ntupletag+"*.root",
59  foldermc+"*_ZJet*"+ntupletag+"*.root",foldermc+"*_ttHJetTobb*"+ntupletag+"*.root",
60  foldermc+"*_WH_HToBB*"+ntupletag+"*.root",foldermc+"*_ZH_HToBB*"+ntupletag+"*.root",
61  foldermc+"*_WWTo*"+ntupletag+"*.root",foldermc+"*_WZ*"+ntupletag+"*.root",foldermc+"*_ZZ_*"+ntupletag+"*.root"
62  };
63 
64  // Cuts in baseline speed up the yield finding
65  string baseline = "pass && stitch && mj14>250 && nleps>=1 && st>500 && met>100 && njets>=5 && weight<1"; // Excluding one QCD event
66 
67  map<string, vector<shared_ptr<Process> > > procs;
68  procs["procs"] = vector<shared_ptr<Process> >();
69  procs["procs"].push_back(Process::MakeShared<Baby_full>("t#bar{t} (l)", Process::Type::background, colors("tt_1l"),
70  {foldermc+"*_TTJets*SingleLept*.root", foldermc+"*_TTJets_HT*.root"},
71  baseline+" && ntruleps==1"));
72  procs["procs"].push_back(Process::MakeShared<Baby_full>("t#bar{t} (ll)", Process::Type::background, colors("tt_2l"),
73  {foldermc+"*_TTJets*DiLept*.root", foldermc+"*_TTJets_HT*.root"},
74  baseline+" && ntruleps==2 && ntrutaush==0"));
75  procs["procs"].push_back(Process::MakeShared<Baby_full>("t#bar{t} (#tau_{h}l)", Process::Type::background, colors("tt_ltau"),
76  {foldermc+"*_TTJets*DiLept*.root", foldermc+"*_TTJets_HT*.root"},
77  baseline+" && ntruleps==2 && ntrutaush>=1"));
78  procs["procs"].push_back(Process::MakeShared<Baby_full>("W+jets", Process::Type::background, colors("wjets"),
79  {foldermc+"*_WJetsToLNu*.root"}, baseline));
80  procs["procs"].push_back(Process::MakeShared<Baby_full>("Single t", Process::Type::background, colors("single_t"),
81  {foldermc+"*_ST_*.root"}, baseline));
82  procs["procs"].push_back(Process::MakeShared<Baby_full>("t#bar{t}Z", Process::Type::background, kOrange+7,
83  {foldermc+"*_TTZ*.root"}, baseline));
84  procs["procs"].push_back(Process::MakeShared<Baby_full>("t#bar{t}W", Process::Type::background, colors("ttv"),
85  {foldermc+"*_TTW*.root"}, baseline));
86  procs["procs"].push_back(Process::MakeShared<Baby_full>("QCD", Process::Type::background, colors("other"),
87  {foldermc+"*QCD_HT*0_Tune*.root",
88  foldermc+"*QCD_HT*Inf_Tune*.root"},
89  baseline));
90  procs["procs"].push_back(Process::MakeShared<Baby_full>("tt#gamma", Process::Type::background, kMagenta+3,
91  {foldermc+"*_TTGJets*.root"}, baseline));
92  procs["procs"].push_back(Process::MakeShared<Baby_full>("tttt", Process::Type::background, kBlue+2,
93  {foldermc+"*_TTTT*.root"}, baseline));
94  procs["procs"].push_back(Process::MakeShared<Baby_full>("Other", Process::Type::background, kPink-2,
95  {foldermc+"*DYJetsToLL*.root",
96  foldermc+"*_ZJet*.root",
97  foldermc+"*_ttHJetTobb*.root",
98  foldermc+"*_WH_HToBB*.root",
99  foldermc+"*_ZH_HToBB*.root",
100  foldermc+"*_WWTo*.root",
101  foldermc+"*_WZ*.root",
102  foldermc+"*_ZZ_*.root"},
103  baseline));
104 
105  procs["goodbad"] = vector<shared_ptr<Process> >();
106 
107  procs["goodbad"].push_back(Process::MakeShared<Baby_full>("2l", Process::Type::background, kCyan-3,
108  allfiles, baseline && "ntruleps>=2"));
109  procs["goodbad"].push_back(Process::MakeShared<Baby_full>("0-1l m_{T}^{tru}>140", Process::Type::background, kGreen-3,
110  allfiles, baseline && "ntruleps<=1 && mt_tru>140"));
111  procs["goodbad"].push_back(Process::MakeShared<Baby_full>("0-1l m_{T}^{tru}<=140", Process::Type::background, kRed,
112  allfiles, baseline && "ntruleps<=1 && mt_tru<=140"));
113 
114  procs["goodbad0l"] = vector<shared_ptr<Process> >();
115 
116  procs["goodbad0l"].push_back(Process::MakeShared<Baby_full>("2l", Process::Type::background, kCyan-3,
117  allfiles, baseline && "ntruleps>=2"));
118  procs["goodbad0l"].push_back(Process::MakeShared<Baby_full>("1l m_{T}^{tru}>140", Process::Type::background, kGreen-3,
119  allfiles, baseline && "ntruleps==1 && mt_tru>140"));
120  procs["goodbad0l"].push_back(Process::MakeShared<Baby_full>("1l m_{T}^{tru}<=140", Process::Type::background, kRed,
121  allfiles, baseline && "ntruleps==1 && mt_tru<=140"));
122  procs["goodbad0l"].push_back(Process::MakeShared<Baby_full>("0l", Process::Type::background, kOrange,
123  allfiles, baseline && "ntruleps==0"));
124 
125  // auto proc_2l = Process::MakeShared<Baby_full>("tru 2l", Process::Type::background, kCyan-3,
126  // allfiles, baseline && "ntruleps>=2");
127  // auto proc_1lgood = Process::MakeShared<Baby_full>("tru 1l mt_tru>140", Process::Type::background, kGreen-3,
128  // allfiles, baseline && "ntruleps==1 && mt_tru>140" && offshellw>0.);
129  // auto proc_1lnus = Process::MakeShared<Baby_full>("tru 1l mt_tru>140", Process::Type::background, kOrange-6,
130  // allfiles, baseline && "ntruleps==1 && mt_tru>140" && offshellw<0.);
131  // auto proc_1lbad = Process::MakeShared<Baby_full>("tru 1l mt_tru<=140", Process::Type::background, kRed,
132  // allfiles, baseline && "ntruleps==1 && mt_tru<=140");
133  // auto proc_0l = Process::MakeShared<Baby_full>("tru 0l", Process::Type::background, kOrange,
134  // allfiles, baseline && "ntruleps==0");
135  // auto proc_01l = Process::MakeShared<Baby_full>("tru 0-1l", Process::Type::background, kRed+1,
136  // allfiles, baseline && "ntruleps<=1");
137 
138  PlotMaker pm;
139 
140  vector<TString> metcuts({"met>100 && met<=150","met>150 && met<=200","met>200 && met<=350","met>350 && met<=500","met>500"});
141  vector<TString> nbcuts({"nbm==1", "nbm>=1","nbm>=2"});
142  vector<TString> njcuts({"njets==5", "njets>=6", "njets>=6 && njets<=8","njets>=9"});
143 
144  vector<TString> mtcuts({"mt<=140", "mt>140"});
145 
146  // Adding nleps==1 cuts
147  vector<TString> cuts;
148  vector<TableRow> table_cuts;
149 
150  for(auto &imet: metcuts) for(auto &inb: nbcuts) for(auto &inj: njcuts) for(auto &imt: mtcuts)
151  cuts.push_back("nleps==1 && nveto==0 && "+imet+"&&"+inb+"&&"+inj+"&&"+imt);
152  for(size_t icut=0; icut<cuts.size(); icut++)
153  table_cuts.push_back(TableRow("$"+CodeToLatex(cuts[icut].Data())+"$", cuts[icut].Data()));
154  for(auto &ipr: procs)
155  pm.Push<Table>("chart_"+ipr.first, table_cuts, ipr.second, true, true, true);
156 
157  cuts.clear();
158  table_cuts.clear();
159  for(auto &imet: metcuts) for(auto &inb: nbcuts) for(auto &inj: njcuts) for(auto &imt: mtcuts)
160  cuts.push_back("ntruleps<=1 && nleps==1 && nveto==0 && "+imet+"&&"+inb+"&&"+inj+"&&"+imt);
161  for(size_t icut=0; icut<cuts.size(); icut++)
162  table_cuts.push_back(TableRow("$"+CodeToLatex(cuts[icut].Data())+"$", cuts[icut].Data()));
163  pm.Push<Table>("chart_01l", table_cuts, procs["procs"], true, true, true);
164 
165  cuts.clear();
166  table_cuts.clear();
167  for(auto &imet: metcuts) for(auto &inb: nbcuts) for(auto &inj: njcuts) for(auto &imt: mtcuts)
168  cuts.push_back("ntruleps>=2 && nleps==1 && nveto==0 && "+imet+"&&"+inb+"&&"+inj+"&&"+imt);
169  for(size_t icut=0; icut<cuts.size(); icut++)
170  table_cuts.push_back(TableRow("$"+CodeToLatex(cuts[icut].Data())+"$", cuts[icut].Data()));
171  pm.Push<Table>("chart_2l", table_cuts, procs["procs"], true, true, true);
172 
173  pm.min_print_ = true;
174  pm.MakePlots(40.);
175 
176  time(&endtime);
177  cout<<endl<<"Making "<<table_cuts.size()<<" piecharts took "<<difftime(endtime, begtime)<<" seconds"<<endl<<endl;
178 }
Abstract base class for access to ntuple variables.
Definition: baby.hpp:16
int main()
STL namespace.
Combines a callable function taking a Baby and returning a scalar or vector with its string represent...
Definition: named_func.hpp:13
bool Contains(const std::string &str, const std::string &pat)
Definition: utilities.cpp:44
std::string execute(const std::string &cmd)
Definition: utilities.cpp:65
double ScalarType
Definition: named_func.hpp:15
std::vector< float > *const & mc_pt() const
Get mc_pt for current event and cache it.
Definition: baby.cpp:4613
FigureType & Push(Args &&...args)
Definition: plot_maker.hpp:24
std::string CodeToLatex(std::string code)
Definition: utilities.cpp:242
bool min_print_
Definition: plot_maker.hpp:44
NamedFunc offshellw("offshellw",[](const Baby &b) -> NamedFunc::ScalarType{for(unsigned i(0);i< b.mc_pt() ->size();i++){if(abs(b.mc_id() ->at(i))!=24) continue;if(b.mc_mass() ->at(i) > 140.){return 99;}}return-1;})
Organizes efficient production of plots with single loop over each process.
Definition: plot_maker.hpp:14
std::vector< int > *const & mc_id() const
Get mc_id for current event and cache it.
Definition: baby.cpp:4553
Definition: table.hpp:15
void MakePlots(double luminosity, const std::string &subdir="")
Prints all added plots with given luminosity.
Definition: plot_maker.cpp:54
std::vector< float > *const & mc_mass() const
Get mc_mass for current event and cache it.
Definition: baby.cpp:4565
Loads colors from a text configuration file.
Definition: palette.hpp:8