ra4_draw  4bd0201e3d922d42bd545d4b045ed44db33454a4
plot_mj_lep_nolep.cxx
Go to the documentation of this file.
1 #include <cmath>
2 
3 #include "TError.h"
4 #include "TVector2.h"
5 
6 #include "core/plot_maker.hpp"
7 #include "core/plot_opt.hpp"
8 #include "core/palette.hpp"
9 #include "core/hist1d.hpp"
10 #include "core/event_scan.hpp"
11 #include "core/utilities.hpp"
12 #include "core/functions.hpp"
13 
14 using namespace std;
15 using namespace PlotOptTypes;
16 
17 namespace{
18  NamedFunc isr_weight("isr_weight", [](const Baby &b) -> NamedFunc::ScalarType{
19  if(b.ntrupv()<0) return b.weight();
20  return b.SampleType() == 20
22  : b.weight()/(b.eff_trig()*b.w_toppt());
23  });
24 
25  NamedFunc full_weight("full_weight", [](const Baby &b) -> NamedFunc::ScalarType{
26  if(b.ntrupv()<0) return b.weight();
27  double orig = isr_weight.GetScalar(b);
28  double mj = b.mj14();
29  if(mj <= 300.) return orig * (1.3 - 0.4*mj/300.);
30  else return 0.9 * orig;
31  });
32 }
33 
34 int main(){
35  gErrorIgnoreLevel = 6000;
36 
37  double lumi = 2.6;
38 
39  Palette colors("txt/colors.txt", "default");
40 
41  string folder_mc = "/net/cms29/cms29r0/babymaker/babies/mismeasured_v2/2016_06_14/mc/unskimmed/";
42  set<string> file_names = {folder_mc+"*_TTJets*Lept*.root", folder_mc+"*_TTJets_HT*.root",
43  folder_mc+"*_WJetsToLNu*.root", folder_mc+"*_ST_*.root",
44  folder_mc+"*_TTWJets*.root", folder_mc+"*_TTZTo*.root",
45  folder_mc+"*DYJetsToLL*.root", folder_mc+"*_QCD_HT*.root",
46  folder_mc+"*ggZH_HToBB*.root", folder_mc+"*ttHJetTobb*.root",
47  folder_mc+"*_TTGJets*.root", folder_mc+"*_TTTT_*.root",
48  folder_mc+"*_WH_HToBB*.root", folder_mc+"*_WZTo*.root",
49  folder_mc+"*_ZH_HToBB*.root", folder_mc+"_ZZ_*.root"};
50  file_names = {folder_mc+"*_TTJets*Lept*.root", folder_mc+"*_TTJets_HT*.root"};
51 
52  vector<int> scenarios = {0,2,5};
53  PlotMaker pm;
54  vector<string> tags = {"lownj", "highnj", "allnj"};
55  vector<float> lownj = {5.5, 8.5, 5.5};
56  vector<float> highnj = {8.5, 9999., 9999.};
57  for(size_t i = 0; i < tags.size(); ++i){
58  for(const auto &scenario: scenarios){
59  string s = "["+to_string(scenario)+"]";
60  NamedFunc baseline("pass&&stitch&&mm_nleps"+s+">=1&&mm_met"+s+">200&&mm_ht"+s+">500");
61  NamedFunc lowmt_cut("mm_nleps"+s+"==1&&mm_mt"+s+"<=140&&mm_njets"+s+">="+to_string(lownj.at(i))+"&&mm_njets"+s+"<"+to_string(highnj.at(i))+"&&mm_nbm"+s+">=1");
62  NamedFunc highmt_cut("mm_nleps"+s+"==1&&mm_mt"+s+">140&&mm_njets"+s+">="+to_string(lownj.at(i))+"&&mm_njets"+s+"<"+to_string(highnj.at(i))+"&&mm_nbm"+s+">=1&&ntruleps==2");
63  NamedFunc dilep_cut_lep("mm_nleps"+s+"==2&&mm_njets"+s+">="+to_string(lownj.at(i)-1)+"&&mm_njets"+s+"<"+to_string(highnj.at(i)-1)+"&&mm_nbm"+s+">=0");
64  NamedFunc dilep_cut_nolep("mm_nleps"+s+"==2&&mm_njets"+s+">="+to_string(lownj.at(i))+"&&mm_njets"+s+"<"+to_string(highnj.at(i))+"&&mm_nbm"+s+">=0");
65 
66  auto lowmt = Process::MakeShared<Baby_full>("m_{T}<=140. GeV", Process::Type::background, colors.RGB(0, 255, 0),
67  file_names, baseline&&lowmt_cut);
68  auto highmt = Process::MakeShared<Baby_full>("m_{T}>140 GeV, 2 True Leps", Process::Type::background, colors.RGB(0, 0, 255),
69  file_names, baseline&&highmt_cut);
70  auto dilep_lep = Process::MakeShared<Baby_full>("Dilepton", Process::Type::background, colors.RGB(255, 0, 0),
71  file_names, baseline&&dilep_cut_lep);//njets5
72  auto dilep_nolep = Process::MakeShared<Baby_full>("Dilepton", Process::Type::background, colors.RGB(255, 0, 0),
73  file_names, baseline&&dilep_cut_nolep);//njets6
74 
75  vector<shared_ptr<Process> > procs_lep = {lowmt, highmt, dilep_lep};
76  vector<shared_ptr<Process> > procs_nolep = {lowmt, highmt, dilep_nolep};
77 
78  string tag = "rohanplot_"+tags.at(i);
79 
80  PlotOpt log_lumi("txt/plot_styles.txt", "CMSPaper");
81  log_lumi.Title(TitleType::info)
82  .Bottom(BottomType::ratio)
83  .YAxis(YAxisType::log)
84  .Stack(StackType::shapes);
85  PlotOpt noinfo = log_lumi().Title(TitleType::preliminary);
86  vector<PlotOpt> plot_types = {log_lumi, noinfo};
87 
88  NamedFunc mjlep("mm_mj14_lep"+s+">250.");
89  NamedFunc mjnolep("mm_mj14_nolep"+s+">250.");
90  NamedFunc low_met("mm_met"+s+"<=350");
91  NamedFunc med_met("mm_met"+s+">350&&mm_met"+s+"<=500");
92  NamedFunc high_met("mm_met"+s+">500");
93 
94  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
95  true, procs_lep, plot_types).Tag(tag);
96  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
97  true, procs_nolep, plot_types).Tag(tag);
98  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
99  low_met, procs_lep, plot_types).Tag(tag);
100  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
101  low_met, procs_nolep, plot_types).Tag(tag);
102  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
103  med_met, procs_lep, plot_types).Tag(tag);
104  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
105  med_met, procs_nolep, plot_types).Tag(tag);
106  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
107  high_met, procs_lep, plot_types).Tag(tag);
108  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
109  high_met, procs_nolep, plot_types).Tag(tag);
110 
111  NamedFunc w_no_toppt("weight/(eff_trig*w_toppt)");
112  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
113  true, procs_lep, plot_types).Tag(tag).Weight(w_no_toppt);
114  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
115  true, procs_nolep, plot_types).Tag(tag).Weight(w_no_toppt);
116  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
117  low_met, procs_lep, plot_types).Tag(tag).Weight(w_no_toppt);
118  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
119  low_met, procs_nolep, plot_types).Tag(tag).Weight(w_no_toppt);
120  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
121  med_met, procs_lep, plot_types).Tag(tag).Weight(w_no_toppt);
122  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
123  med_met, procs_nolep, plot_types).Tag(tag).Weight(w_no_toppt);
124  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
125  high_met, procs_lep, plot_types).Tag(tag).Weight(w_no_toppt);
126  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
127  high_met, procs_nolep, plot_types).Tag(tag).Weight(w_no_toppt);
128 
129  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
130  true, procs_lep, plot_types).Tag(tag).Weight(isr_weight);
131  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
132  true, procs_nolep, plot_types).Tag(tag).Weight(isr_weight);
133  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
134  low_met, procs_lep, plot_types).Tag(tag).Weight(isr_weight);
135  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
136  low_met, procs_nolep, plot_types).Tag(tag).Weight(isr_weight);
137  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
138  med_met, procs_lep, plot_types).Tag(tag).Weight(isr_weight);
139  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
140  med_met, procs_nolep, plot_types).Tag(tag).Weight(isr_weight);
141  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
142  high_met, procs_lep, plot_types).Tag(tag).Weight(isr_weight);
143  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
144  high_met, procs_nolep, plot_types).Tag(tag).Weight(isr_weight);
145 
146  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
147  true, procs_lep, plot_types).Tag(tag).Weight(full_weight);
148  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
149  true, procs_nolep, plot_types).Tag(tag).Weight(full_weight);
150  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
151  low_met, procs_lep, plot_types).Tag(tag).Weight(full_weight);
152  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
153  low_met, procs_nolep, plot_types).Tag(tag).Weight(full_weight);
154  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
155  med_met, procs_lep, plot_types).Tag(tag).Weight(full_weight);
156  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
157  med_met, procs_nolep, plot_types).Tag(tag).Weight(full_weight);
158  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_lep"+s, "M_{J} (with lep) [GeV]", {250., 400.}),
159  high_met, procs_lep, plot_types).Tag(tag).Weight(full_weight);
160  pm.Push<Hist1D>(Axis(30, 0., 1500., "mm_mj14_nolep"+s, "M_{J} (no lep) [GeV]", {250., 400.}),
161  high_met, procs_nolep, plot_types).Tag(tag).Weight(full_weight);
162 
163  NamedFunc mc_cut = "mm_mj14_nolep"+s+">250.&&mm_mj14_lep"+s+"<=400&&mm_met"+s+"<=500&&mm_nbm"+s+"<=2&&mm_nleps"+s+"==1&&mm_ht"+s+">500&&mm_met"+s+">200&&mm_njets"+s+">=6&&mm_nbm"+s+">=1";
164  auto tt1l = Process::MakeShared<Baby_full>("t#bar{t} (1l)", Process::Type::background, colors("tt_1l"),
165  {folder_mc+"*_TTJets*Lept*.root", folder_mc+"*_TTJets_HT*.root"}, mc_cut&&"ntruleps<=1&&stitch");
166  auto tt2l = Process::MakeShared<Baby_full>("t#bar{t} (2l)", Process::Type::background, colors("tt_2l"),
167  {folder_mc+"*_TTJets*Lept*.root", folder_mc+"*_TTJets_HT*.root"}, mc_cut&&"ntruleps>=2&&stitch");
168  auto wjets = Process::MakeShared<Baby_full>("W+jets", Process::Type::background, colors("wjets"),
169  {folder_mc+"*_WJetsToLNu*.root"}, mc_cut);
170  auto single_t = Process::MakeShared<Baby_full>("Single t", Process::Type::background, colors("single_t"),
171  {folder_mc+"*_ST_*.root"}, mc_cut);
172  auto ttv = Process::MakeShared<Baby_full>("t#bar{t}V", Process::Type::background, colors("ttv"),
173  {folder_mc+"*_TTWJets*.root", folder_mc+"*_TTZTo*.root"}, mc_cut);
174  auto other = Process::MakeShared<Baby_full>("Other", Process::Type::background, colors("other"),
175  {folder_mc+"*DYJetsToLL*.root", folder_mc+"*_QCD_HT*.root",
176  folder_mc+"*_ZJet*.root", folder_mc+"*_WWTo*.root",
177  folder_mc+"*ggZH_HToBB*.root", folder_mc+"*ttHJetTobb*.root",
178  folder_mc+"*_TTGJets*.root", folder_mc+"*_TTTT_*.root",
179  folder_mc+"*_WH_HToBB*.root", folder_mc+"*_WZTo*.root",
180  folder_mc+"*_ZH_HToBB*.root", folder_mc+"_ZZ_*.root"}, mc_cut);
181  auto data_2016 = Process::MakeShared<Baby_full>("2016 Data", Process::Type::data, kBlack,
182  {"/net/cms2/cms2r0/babymaker/babies/2016_06_26/data/merged_standard/*.root"},
183  "json2p6&&pass&&(trig[4]||trig[8]||trig[13]||trig[33])&&mj14>250.&&mj14<=400&&met<=500&&nbm<=2&&nleps==1&&ht>500&&met>200&&njets>=6&&nbm>=1");
184  vector<shared_ptr<Process> > procs = {tt1l, tt2l, wjets, single_t, ttv, other, data_2016};
185  NamedFunc mt("mt",[scenario](const Baby &b){
186  bool is_data = false;
187  for(const auto &name: b.FileNames()){
188  if(Contains(name, "data")){
189  is_data = true;
190  break;
191  }
192  }
193  if(is_data) return b.mt();
194  else return b.mm_mt()->at(scenario);
195  });
196  pm.Push<Hist1D>(Axis(30, 0., 1500., mt, "m_{T} [GeV]", {140.}), true, procs,
197  vector<PlotOpt>{log_lumi().Stack(StackType::data_norm),
198  noinfo().Stack(StackType::data_norm)}).Tag("mm"+to_string(scenario));
199  }
200  }
201  pm.multithreaded_ = false;
202  pm.MakePlots(lumi);
203 }
PlotOpt & Stack(PlotOptTypes::StackType stack_type)
Definition: plot_opt.cpp:120
PlotOpt & YAxis(PlotOptTypes::YAxisType y_axis_type)
Definition: plot_opt.cpp:102
const NamedFunc njets_weights_ttisr
float const & eff_trig() const
Get eff_trig for current event and cache it.
Definition: baby.cpp:2981
const std::set< std::string > & FileNames() const
Definition: baby.cpp:1676
std::vector< float > *const & mm_mt() const
Get mm_mt for current event and cache it.
Definition: baby.cpp:5129
Abstract base class for access to ntuple variables.
Definition: baby.hpp:16
Hist1D & Weight(const NamedFunc &weight)
Definition: hist1d.cpp:507
ScalarType GetScalar(const Baby &b) const
Evaluate scalar function with b as argument.
Definition: named_func.cpp:460
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
NamedFunc full_weight("full_weight", [](const Baby &b) -> NamedFunc::ScalarType{if(b.ntrupv()< 0) return b.weight();double orig=isr_weight.GetScalar(b);double mj=b.mj14();if(mj<=300.) return orig *(1.3-0.4 *mj/300.);else return 0.9 *orig;})
float const & w_toppt() const
Get w_toppt for current event and cache it.
Definition: baby.cpp:7505
bool multithreaded_
Definition: plot_maker.hpp:43
float const & mj14() const
Get mj14 for current event and cache it.
Definition: baby.cpp:4913
float const & mt() const
Get mt for current event and cache it.
Definition: baby.cpp:5225
double ScalarType
Definition: named_func.hpp:15
FigureType & Push(Args &&...args)
Definition: plot_maker.hpp:24
Definition: axis.hpp:12
int main()
static Int_t RGB(Int_t r, Int_t g, Int_t b)
Gets the ROOT color number corresponding to a given RGB color.
Definition: palette.cpp:149
Organizes efficient production of plots with single loop over each process.
Definition: plot_maker.hpp:14
PlotOpt & Bottom(PlotOptTypes::BottomType bottom_type)
Definition: plot_opt.cpp:93
float const & weight() const
Get weight for current event and cache it.
Definition: baby.cpp:7517
A full 1D plot with stacked/overlayed histograms.
Definition: hist1d.hpp:23
NamedFunc isr_weight("isr_weight", [](const Baby &b) -> NamedFunc::ScalarType{if(b.ntrupv()< 0) return b.weight();return b.SampleType()==20?Functions::njets_weights_ttisr.GetScalar(b):b.weight()/(b.eff_trig()*b.w_toppt());})
int const & ntrupv() const
Get ntrupv for current event and cache it.
Definition: baby.cpp:6197
void MakePlots(double luminosity, const std::string &subdir="")
Prints all added plots with given luminosity.
Definition: plot_maker.cpp:54
Hist1D & Tag(const std::string &tag)
Definition: hist1d.cpp:512
PlotOpt & Title(PlotOptTypes::TitleType title_type)
Definition: plot_opt.cpp:111
int SampleType() const
Definition: baby.cpp:1681
Loads colors from a text configuration file.
Definition: palette.hpp:8