ra4_draw  4bd0201e3d922d42bd545d4b045ed44db33454a4
plot_datamc_dilep.cxx
Go to the documentation of this file.
1 #include <iostream>
2 #include <string>
3 #include <vector>
4 #include <memory>
5 
6 #include "TError.h"
7 #include "TColor.h"
8 
9 #include "core/baby.hpp"
10 #include "core/process.hpp"
11 #include "core/named_func.hpp"
12 #include "core/plot_maker.hpp"
13 #include "core/plot_opt.hpp"
14 #include "core/palette.hpp"
15 #include "core/utilities.hpp"
16 #include "core/hist1d.hpp"
17 
18 using namespace std;
19 using namespace PlotOptTypes;
20 
21 template<typename T>
22 shared_ptr<Process> Proc(const string process_name, Process::Type type,
23  int color, const set<string> &files, const string &cut = "1"){
24  return make_shared<Process>(process_name, type, color,
25  unique_ptr<Baby>(new T(files)),
26  cut);
27 }
28 
29 int main(){
30  gErrorIgnoreLevel = 6000;
31 
32  vector<double> lumi = {2.3, 2.6}; // 2015 and 2016 luminosity
33 
34  // 80X (ttbar, qcd, dy[ht=100-600], wjets) + 74X (rest)
35 
36  string mc_2015 = "/net/cms2/cms2r0/babymaker/babies/2016_04_29/mc/merged_1lht500met200/";
37  string data_2015 = "/net/cms2/cms2r0/babymaker/babies/2016_04_29/data/merged_1lht500met200/";
38  string mc_2016 = "/net/cms2/cms2r0/babymaker/babies/2016_06_14/mc/merged_standard/";
39  string data_2016 = "/net/cms2/cms2r0/babymaker/babies/2016_06_26/data/merged_standard/";
40 
41  Palette colors("txt/colors.txt", "default");
42 
43  //2015 Samples
44  auto tt1l_2015 = Process::MakeShared<Baby_full>("t#bar{t} (1l)", Process::Type::background, colors("tt_1l"),
45  {mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root"}, "ntruleps<=1&&stitch");
46  auto tt2l_2015 = Process::MakeShared<Baby_full>("t#bar{t} (2l)", Process::Type::background, colors("tt_2l"),
47  {mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root"}, "ntruleps>=2&&stitch");
48  auto wjets_2015 = Process::MakeShared<Baby_full>("W+jets", Process::Type::background, colors("wjets"),
49  {mc_2015+"*_WJetsToLNu*.root"});
50  auto single_t_2015 = Process::MakeShared<Baby_full>("Single t", Process::Type::background, colors("single_t"),
51  {mc_2015+"*_ST_*.root"});
52  auto ttv_2015 = Process::MakeShared<Baby_full>("t#bar{t}V", Process::Type::background, colors("ttv"),
53  {mc_2015+"*_TTWJets*.root", mc_2015+"*_TTZTo*.root"});
54  auto other_2015 = Process::MakeShared<Baby_full>("Other", Process::Type::background, colors("other"),
55  {mc_2015+"*DYJetsToLL*.root", mc_2015+"*_QCD_HT*.root",
56  mc_2015+"*_ZJet*.root", mc_2015+"*_WWTo*.root",
57  mc_2015+"*ggZH_HToBB*.root", mc_2015+"*ttHJetTobb*.root",
58  mc_2015+"*_TTGJets*.root", mc_2015+"*_TTTT_*.root",
59  mc_2015+"*_WH_HToBB*.root", mc_2015+"*_WZTo*.root",
60  mc_2015+"*_ZH_HToBB*.root", mc_2015+"_ZZ_*.root"});
61 
62  auto data2015 = Process::MakeShared<Baby_full>("Data", Process::Type::data, kBlack,
63  {data_2015+"*.root"},"pass&&(trig[4]||trig[8])");
64 
65  //2016 Samples
66  auto tt1l_2016 = Process::MakeShared<Baby_full>("t#bar{t} (1l)", Process::Type::background, colors("tt_1l"),
67  {mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root"}, "ntruleps<=1&&stitch");
68  auto tt2l_2016 = Process::MakeShared<Baby_full>("t#bar{t} (2l)", Process::Type::background, colors("tt_2l"),
69  {mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root"}, "ntruleps>=2&&stitch");
70  auto wjets_2016 = Process::MakeShared<Baby_full>("W+jets", Process::Type::background, colors("wjets"),
71  {mc_2016+"*_WJetsToLNu*.root"});
72  auto single_t_2016 = Process::MakeShared<Baby_full>("Single t", Process::Type::background, colors("single_t"),
73  {mc_2016+"*_ST_*.root"});
74  auto ttv_2016 = Process::MakeShared<Baby_full>("t#bar{t}V", Process::Type::background, colors("ttv"),
75  {mc_2016+"*_TTWJets*.root", mc_2016+"*_TTZTo*.root"});
76  auto other_2016 = Process::MakeShared<Baby_full>("Other", Process::Type::background, colors("other"),
77  {mc_2016+"*DYJetsToLL*.root", mc_2016+"*_QCD_HT*.root",
78  mc_2016+"*_ZJet*.root", mc_2016+"*_WWTo*.root",
79  mc_2016+"*ggZH_HToBB*.root", mc_2016+"*ttHJetTobb*.root",
80  mc_2016+"*_TTGJets*.root", mc_2016+"*_TTTT_*.root",
81  mc_2016+"*_WH_HToBB*.root", mc_2016+"*_WZTo*.root",
82  mc_2016+"*_ZH_HToBB*.root", mc_2016+"_ZZ_*.root"});
83 
84  auto data2016 = Process::MakeShared<Baby_full>("Data", Process::Type::data, kBlack,
85  {data_2016+"*.root"},"pass&&(trig[4]||trig[8]||trig[13]||trig[33])&&json2p6");
86 
87  vector<shared_ptr<Process> > sam2015 = {data2015, tt1l_2015, tt2l_2015, wjets_2015, single_t_2015, ttv_2015, other_2015};
88  vector<shared_ptr<Process> > sam2016 = {data2016, tt1l_2016, tt2l_2016, wjets_2016, single_t_2016, ttv_2016, other_2016};
89 
90  //
91  PlotOpt log_lumi("txt/plot_styles.txt", "CMSPaper");
92  log_lumi.Title(TitleType::preliminary)
93  .Bottom(BottomType::ratio)
94  .YAxis(YAxisType::log)
95  .Stack(StackType::data_norm)
96  .FileExtensions({"pdf"});
97 
98  PlotOpt lin_lumi = log_lumi().YAxis(YAxisType::linear);
99  PlotOpt log_shapes = log_lumi().Stack(StackType::shapes)
100  .Bottom(BottomType::off)
101  .ShowBackgroundError(false);
102  PlotOpt lin_shapes = log_shapes().YAxis(YAxisType::linear);
103  PlotOpt log_lumi_info = log_lumi().Title(TitleType::info);
104  PlotOpt lin_lumi_info = lin_lumi().Title(TitleType::info);
105  PlotOpt log_shapes_info = log_shapes().Title(TitleType::info);
106  PlotOpt lin_shapes_info = lin_shapes().Title(TitleType::info);
107  // vector<PlotOpt> all_plot_types = {log_lumi_info, lin_lumi_info};
108  vector<PlotOpt> all_plot_types = {log_lumi_info};
109  vector<PlotOpt> mc_plot_types = {log_shapes_info, lin_shapes_info};
110 
111  vector<PlotMaker> pm(2);
112  vector<vector<shared_ptr<Process> > > sams = {sam2015, sam2016}; vector<string> sam_tag = {"sam2015","sam2016"};
113  vector<string> leps = {"nleps==2","nels==2&&nmus==0","nels==0&&nmus==2","nels==1&&nmus==1","nleps==1","nels==1&&nmus==0","nels==0&&nmus==1"};
114  vector<string> lep_tag = {"2leps","2els","2mus","1el1mu","1lep","1el","1mu"};
115 
116  // Loop over 2015 and 2016 samples
117  for(unsigned int iyr=0; iyr<2; iyr++){
118  // Loop over lepton flavors
119  for(unsigned int ilep=0; ilep<leps.size(); ilep++){
120 
121  string cut2l_base = "ht>500&&met>200&&"+leps[ilep]+"&&njets>=5&&nbm<=2";
122  if(ilep>3) cut2l_base = "ht>500&&met>200&&"+leps[ilep]+"&&njets>=6&&nbm>=1&&mt<=140";
123 
124  string tag = sam_tag[iyr]+"_"+lep_tag[ilep];
125 
126  //MJ
127  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
128  cut2l_base+"&&met<=350", sams[iyr], all_plot_types).Tag(tag);
129  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
130  cut2l_base+"&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
131 
132  //MJ low mt di-lepton
133  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
134  cut2l_base+"&&met<=350&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
135  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
136  cut2l_base+"&&met>350&&met<=500&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
137 
138  //MJ low mt di-lepton
139  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
140  cut2l_base+"&&met<=350&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
141  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
142  cut2l_base+"&&met>350&&met<=500&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
143 
144  //MJ high mt di-lepton
145  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
146  cut2l_base+"&&met<=350&&mt>140", sams[iyr], all_plot_types).Tag(tag);
147  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
148  cut2l_base+"&&met>350&&met<=500&&mt>140", sams[iyr], all_plot_types).Tag(tag);
149 
150  //D3 and D4
151  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
152  "mj14>250&&"+cut2l_base+"&&met<=350", sams[iyr], all_plot_types).Tag(tag);
153  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
154  "mj14>250&&"+cut2l_base+"&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
155  //D3
156  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
157  "mj14>250&&"+cut2l_base+"&&mj14<=400&&met<=350", sams[iyr], all_plot_types).Tag(tag);
158  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
159  "mj14>250&&"+cut2l_base+"&&mj14<=400&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
160  //D4
161  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
162  "mj14>250&&"+cut2l_base+"&&mj14>400&&met<=350", sams[iyr], all_plot_types).Tag(tag);
163  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
164  "mj14>250&&"+cut2l_base+"&&mj14>400&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
165 
166  pm[iyr].Push<Hist1D>(Axis(12, 200., 500., "met", "MET [GeV]", {200.}),
167  "mj14>250&&"+cut2l_base+"&&met<=500", sams[iyr], all_plot_types).Tag(tag);
168 
169  //MJ12 Plots
170  ReplaceAll(cut2l_base,"mj14","mj");
171 
172  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
173  cut2l_base+"&&met<=350", sams[iyr], all_plot_types).Tag(tag);
174  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
175  cut2l_base+"&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
176  //MJ low mt di-lepton
177  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
178  cut2l_base+"&&met<=350&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
179  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
180  cut2l_base+"&&met>350&&met<=500&&mt<=140", sams[iyr], all_plot_types).Tag(tag);
181  //MJ high mt di-lepton
182  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
183  cut2l_base+"&&met<=350&&mt>140", sams[iyr], all_plot_types).Tag(tag);
184  pm[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
185  cut2l_base+"&&met>350&&met<=500&&mt>140", sams[iyr], all_plot_types).Tag(tag);
186 
187  //D3 and D4
188  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
189  "mj>250&&"+cut2l_base+"&&met<=350", sams[iyr], all_plot_types).Tag(tag);
190  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
191  "mj>250&&"+cut2l_base+"&&met>350&&met<=500",sams[iyr], all_plot_types).Tag(tag);
192  //D3
193  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
194  "mj>250&&"+cut2l_base+"&&mj<=400&&met<=350", sams[iyr], all_plot_types).Tag(tag);
195  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
196  "mj>250&&"+cut2l_base+"&&mj<=400&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
197  //D4
198  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
199  "mj>250&&"+cut2l_base+"&&mj>400&&met<=350", sams[iyr], all_plot_types).Tag(tag);
200  pm[iyr].Push<Hist1D>(Axis(20, 0., 700., "mt", "m_{T} [GeV]", {140.}),
201  "mj>250&&"+cut2l_base+"&&mj>400&&met>350&&met<=500", sams[iyr], all_plot_types).Tag(tag);
202 
203  pm[iyr].Push<Hist1D>(Axis(12, 200., 500., "met", "MET [GeV]", {200.}),
204  "mj>250&&"+cut2l_base+"&&met<=500", sams[iyr], all_plot_types).Tag(tag);
205  }
206  // pm[iyr].MakePlots(lumi[iyr]);
207  }
208 
209  //MJ MC Comparison
210  //2015 Samples
211  auto allmc_lowmt_2015 = Process::MakeShared<Baby_full>("2015, low m_{T}", Process::Type::background, colors("tt_2l"),
212  {mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root",
213  mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root",
214  mc_2015+"*_WJetsToLNu*.root",
215  mc_2015+"*_ST_*.root",
216  mc_2015+"*_TTWJets*.root", mc_2015+"*_TTZTo*.root",
217  mc_2015+"*DYJetsToLL*.root", mc_2015+"*_QCD_HT*.root",
218  mc_2015+"*_ZJet*.root", mc_2015+"*_WWTo*.root",
219  mc_2015+"*ggZH_HToBB*.root", mc_2015+"*ttHJetTobb*.root",
220  mc_2015+"*_TTGJets*.root", mc_2015+"*_TTTT_*.root",
221  mc_2015+"*_WH_HToBB*.root", mc_2015+"*_WZTo*.root",
222  mc_2015+"*_ZH_HToBB*.root", mc_2015+"_ZZ_*.root"},
223  "stitch&&mt<=140");
224 
225  auto allmc_highmt_2015 = Process::MakeShared<Baby_full>("2015, low m_{T}", Process::Type::data, kBlack,
226  {mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root",
227  mc_2015+"*_TTJets*Lept*.root", mc_2015+"*_TTJets_HT*.root",
228  mc_2015+"*_WJetsToLNu*.root",
229  mc_2015+"*_ST_*.root",
230  mc_2015+"*_TTWJets*.root", mc_2015+"*_TTZTo*.root",
231  mc_2015+"*DYJetsToLL*.root", mc_2015+"*_QCD_HT*.root",
232  mc_2015+"*_ZJet*.root", mc_2015+"*_WWTo*.root",
233  mc_2015+"*ggZH_HToBB*.root", mc_2015+"*ttHJetTobb*.root",
234  mc_2015+"*_TTGJets*.root", mc_2015+"*_TTTT_*.root",
235  mc_2015+"*_WH_HToBB*.root", mc_2015+"*_WZTo*.root",
236  mc_2015+"*_ZH_HToBB*.root", mc_2015+"_ZZ_*.root"},
237  "stitch&&mt>=140");
238 
239  //2016 Samples
240  auto allmc_lowmt_2016 = Process::MakeShared<Baby_full>("2016, low m_{T}", Process::Type::background, colors("tt_2l"),
241  {mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root",
242  mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root",
243  mc_2016+"*_WJetsToLNu*.root",
244  mc_2016+"*_ST_*.root",
245  mc_2016+"*_TTWJets*.root", mc_2016+"*_TTZTo*.root",
246  mc_2016+"*DYJetsToLL*.root", mc_2016+"*_QCD_HT*.root",
247  mc_2016+"*_ZJet*.root", mc_2016+"*_WWTo*.root",
248  mc_2016+"*ggZH_HToBB*.root", mc_2016+"*ttHJetTobb*.root",
249  mc_2016+"*_TTGJets*.root", mc_2016+"*_TTTT_*.root",
250  mc_2016+"*_WH_HToBB*.root", mc_2016+"*_WZTo*.root",
251  mc_2016+"*_ZH_HToBB*.root", mc_2016+"_ZZ_*.root"},
252  "stitch&&mt<=140");
253 
254  auto allmc_highmt_2016 = Process::MakeShared<Baby_full>("2016, high m_{T}", Process::Type::data, kBlack,
255  {mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root",
256  mc_2016+"*_TTJets*Lept*.root", mc_2016+"*_TTJets_HT*.root",
257  mc_2016+"*_WJetsToLNu*.root",
258  mc_2016+"*_ST_*.root",
259  mc_2016+"*_TTWJets*.root", mc_2016+"*_TTZTo*.root",
260  mc_2016+"*DYJetsToLL*.root", mc_2016+"*_QCD_HT*.root",
261  mc_2016+"*_ZJet*.root", mc_2016+"*_WWTo*.root",
262  mc_2016+"*ggZH_HToBB*.root", mc_2016+"*ttHJetTobb*.root",
263  mc_2016+"*_TTGJets*.root", mc_2016+"*_TTTT_*.root",
264  mc_2016+"*_WH_HToBB*.root", mc_2016+"*_WZTo*.root",
265  mc_2016+"*_ZH_HToBB*.root", mc_2016+"_ZZ_*.root"},
266  "stitch&&mt>=140");
267 
268  vector<shared_ptr<Process> > mc2015 = {allmc_lowmt_2015, allmc_highmt_2015};
269  vector<shared_ptr<Process> > mc2016 = {allmc_lowmt_2016, allmc_highmt_2016};
270 
271  vector<PlotMaker> pm_mc(2);
272  vector<vector<shared_ptr<Process> > > sams_mc = {mc2015, mc2016}; vector<string> sam_mc_tag = {"mc2015","mc2016"};
273  vector<string> leps_mc = {"nleps==2","nels==2&&nmus==0","nels==0&&nmus==2","nels==1&&nmus==1"};
274  vector<string> lep_mc_tag = {"2leps","2els","2mus","1el1mu"};
275 
276  // Loop over 2015 and 2016 samples
277  for(unsigned int iyr=0; iyr<2; iyr++){
278  // Loop over lepton flavors
279  for(unsigned int ilep=0; ilep<leps_mc.size(); ilep++){
280 
281  string cut2l_base = "ht>500&&met>200&&"+leps_mc[ilep]+"&&njets>=5&&nbm<=2";
282  string tag = sam_mc_tag[iyr]+"_"+lep_mc_tag[ilep];
283  //MJ
284  pm_mc[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
285  cut2l_base+"&&met<=350", sams_mc[iyr], mc_plot_types).Tag(tag);
286  pm_mc[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj14", "M_{J}^{1.4} [GeV]", {250., 400.}),
287  cut2l_base+"&&met>350&&met<=500", sams_mc[iyr], mc_plot_types).Tag(tag);
288 
289  ReplaceAll(cut2l_base,"mj14","mj");
290 
291  pm_mc[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
292  cut2l_base+"&&met<=350", sams_mc[iyr], mc_plot_types).Tag(tag);
293  pm_mc[iyr].Push<Hist1D>(Axis(20, 0., 1000., "mj", "M_{J}^{1.2} [GeV]", {250., 400.}),
294  cut2l_base+"&&met>350&&met<=500", sams_mc[iyr], mc_plot_types).Tag(tag);
295  }
296  pm_mc[iyr].MakePlots(lumi[iyr]);
297  }
298 }
PlotOpt & Stack(PlotOptTypes::StackType stack_type)
Definition: plot_opt.cpp:120
PlotOpt & FileExtensions(const std::set< std::string > &file_extensions)
Definition: plot_opt.cpp:138
PlotOpt & YAxis(PlotOptTypes::YAxisType y_axis_type)
Definition: plot_opt.cpp:102
int main()
void ReplaceAll(std::string &str, const std::string &orig, const std::string &rep)
Definition: utilities.cpp:52
STL namespace.
Definition: axis.hpp:12
PlotOpt & Bottom(PlotOptTypes::BottomType bottom_type)
Definition: plot_opt.cpp:93
shared_ptr< Process > Proc(const string process_name, Process::Type type, int color, const set< string > &files, const string &cut="1")
PlotOpt & ShowBackgroundError(bool show_background_error)
Definition: plot_opt.cpp:386
A full 1D plot with stacked/overlayed histograms.
Definition: hist1d.hpp:23
Hist1D & Tag(const std::string &tag)
Definition: hist1d.cpp:512
PlotOpt & Title(PlotOptTypes::TitleType title_type)
Definition: plot_opt.cpp:111
Loads colors from a text configuration file.
Definition: palette.hpp:8