DESY Hbb Analysis Framework
Config.cc
Go to the documentation of this file.
1 // system include files
2 #include "boost/program_options.hpp"
3 #include "boost/algorithm/string.hpp"
4 #include <string>
5 #include <iostream>
6 #include <fstream>
7 #include <vector>
8 //
9 // user include files
10 #include "TString.h"
12 
13 //
14 // class declaration
15 //
16 
17 using namespace analysis;
18 using namespace analysis::tools;
19 
20 //
21 // constructors and destructor
23 {
24 }
25 
26 // Main constructor
27 Config::Config(int argc, char ** argv) : opt_cmd_("Options"), opt_cfg_("Configuration")
28 {
29  std::string toolspath = Form("%s/src/Analysis/Tools",getenv("CMSSW_BASE"));
30  std::string datapath = Form("%s/src/Analysis/Tools/data",getenv("CMSSW_BASE"));
31  std::string calibpath = datapath+"/calibrations";
32  std::string ntuplepath = datapath+"/ntuples";
33  argc_ = argc;
34  argv_ = argv;
35  // read configuration options
36  try
37  {
38  namespace po = boost::program_options;
39  opt_cmd_.add_options()
40  ("help,h","Show help messages")
41  ("config,c",po::value<std::string>(&cfg_),"Configuration file name");
42 
43  // analysis info
44  opt_cfg_.add_options()
45  ("Info.ntuplesList" , po::value <std::string> (&inputlist_) -> default_value("rootFileList.txt") ,"File with list of ntuples")
46  ("Info.process" , po::value <std::string> (&process_) -> default_value("MssmHbb") ,"Process of ntuples")
47  ("Info.events" , po::value <std::string> (&eventsdir_) -> default_value("Events") ,"Name of the events directory")
48  ("Info.eventInfo" , po::value <std::string> (&eventinfo_) -> default_value("EventInfo") ,"EventInfo directory in the tree")
49  ("Info.json" , po::value <std::string> (&json_) -> default_value("no_json.txt") ,"JSON file for data")
50  ("Info.output" , po::value <std::string> (&outputRoot_) -> default_value("histograms.root") ,"Output root file")
51  ("Info.seedFile" , po::value <std::string> (&seedfile_) -> default_value("no_seed.txt") ,"File with seed value for random numbers")
52  ("Info.blindAnalysis" , po::value <bool> (&blind_) -> default_value(false) ,"Flag for blind analysis")
53  ("Info.nloMC" , po::value <bool> (&nlo_) -> default_value(false) ,"Flag for NLO MC samples")
54  ("Info.isMC" , po::value <bool> (&isMC_) -> default_value(true) ,"Flag for MC dataset")
55  ("Info.fullGenWeight" , po::value <bool> (&fullgenweight_) -> default_value(false) ,"Flag for full gen weight of MC samples, otherwise only sign")
56  ("Info.signalRegion" , po::value <bool> (&signalregion_) -> default_value(true) ,"Flag for signal region")
57  ("Info.eventsMax" , po::value <int> (&nevtmax_) -> default_value(-1) , "Maximum number of events")
58  ("Info.seed" , po::value <int> (&seed_) -> default_value(-1) , "Seed value for random numbers");
59 
60  // Corrections
61  opt_cfg_.add_options()
62  ("Corrections.Pileup.reweight" , po::value <std::string> (&puweight_) -> default_value("") , "Root file containing pileup weights")
63  ("Corrections.Jets.jerPtRes" , po::value <std::string> (&jerptres_) -> default_value("") , "JER pT resolution file")
64  ("Corrections.Jets.jerSF" , po::value <std::string> (&jersf_) -> default_value("") , "JER SF file")
65  ("Corrections.BTag.SF" , po::value <std::string> (&btagsf_) -> default_value("") , "b-tagging scale factor in CSV format")
66  ("Corrections.BTag.Efficiencies", po::value <std::string> (&btageff_) -> default_value("") , "b-tagging efficiencies in root file")
67  ("Corrections.Jets.bRegression" , po::value <bool> (&bregression_) -> default_value(false) , "Apply b jet energy regression")
68  ("Corrections.force" , po::value <bool> (&apply_correct_) -> default_value(false) , "Apply corrections internally when above are defined");
69 
70  // jets
71  opt_cfg_.add_options()
72  ("Jets.ptMin" , po::value <std::vector<float> > (&jetsptmin_) -> multitoken() , "Mimium pt of the jets")
73  ("Jets.ptMax" , po::value <std::vector<float> > (&jetsptmax_) -> multitoken() , "Maximum pt of the jets")
74  ("Jets.etaMax" , po::value <std::vector<float> > (&jetsetamax_) -> multitoken() , "Maximum |eta| of the jets")
75  ("Jets.jets" , po::value <std::string> (&jetsCol_) -> default_value("") , "Name of the jets collection")
76  ("Jets.id" , po::value <std::string> (&jetsid_) -> default_value("tight") , "Jets id criteria for all jets")
77  ("Jets.puId" , po::value <std::string> (&jetspuid_) -> default_value("loose") , "Jets pileup id criteria for all jets")
78  ("Jets.extendedFlavour" , po::value <bool> (&usejetsextflv_) -> default_value(false) , "For splitting results accoding to jet extended flavour")
79  ("Jets.n" , po::value <int> (&njets_) -> default_value(-1) , "Minimum number of jets")
80  ("Jets.nMin" , po::value <int> (&njetsmin_) -> default_value(0) , "Minimum number of jets")
81  ("Jets.nMax" , po::value <int> (&njetsmax_) -> default_value(-1) , "Maximum number of jets")
82  ("Jets.dRMin" , po::value <float> (&jetsdrmin_) -> default_value(-1.) , "Minimum delta R between jets")
83  ("Jets.dRMax" , po::value <float> (&jetsdrmax_) -> default_value(-1.) , "Maximum delta R between jets")
84  ("Jets.dEtaMax" , po::value <float> (&jetsdetamax_) -> default_value(-1.) , "Maximum delta eta between jets")
85  ("Jets.dEtaMin" , po::value <float> (&jetsdetamin_) -> default_value(-1.) , "Minimum delta eta between jets")
86  ("Jets.dPhiMin" , po::value <float> (&jetsdphimin_) -> default_value(-1.) , "Minimum delta phi between jets")
87  ("Jets.dPhiMax" , po::value <float> (&jetsdphimax_) -> default_value(-1.) , "Maximum delta phi between jets");
88 
89  // histograms
90  opt_cfg_.add_options()
91  ("Histograms.Jets.splitRegions" , po::value <bool> (&histjets_rsplit_) -> default_value(false) , "Split jets histograms into barrel, barrel-endcap overlap, endcap")
92  ("Histograms.Jets.flavour" , po::value <bool> (&histjets_flavour_)-> default_value(false) , "Split jets histograms per flavour");
93 
94 
95  // dijets
96  opt_cfg_.add_options()
97  ("Dijets.dijets" , po::value <bool> (&dodijet_ ) -> default_value(false) , "Combine all jets in dijet objects")
98  ("Dijets.ranks" , po::value<std::vector<int> > (&dijet_ranks_) -> multitoken() , "Ranks of the jets to construct and select the diject");
99 
100  // btagging
101  opt_cfg_.add_options()
102  ("BTag.wp" , po::value <std::vector<std::string> > (&jetsbtagwp_) -> multitoken() ,"Jets btag minimum (with '-' means maximum)")
103  ("BTag.algorithm" , po::value <std::string> (&btagalgo_) -> default_value("csvivf") ,"BTag algorithm")
104  ("BTag.loose" , po::value <float> (&btagwploose_) -> default_value(-10000) ,"BTag working point LOOSE")
105  ("BTag.medium" , po::value <float> (&btagwpmedium_) -> default_value(-10000) ,"BTag working point MEDIUM")
106  ("BTag.tight" , po::value <float> (&btagwptight_) -> default_value(-10000) ,"BTag working point TIGHT")
107  ("BTag.user" , po::value <float> (&btagwpxxx_) -> default_value(-10000) ,"BTag working point USER-defined")
108  ("BTag.nMin" , po::value <int> (&nbjetsmin_) -> default_value(-1) ,"Minimum number of btgaged jets")
109  ("BTag.revWP" , po::value <std::string> (&revbtagwp_) -> default_value("") ,"non-Btag working point")
110  ("BTag.revBJet" , po::value <int> (&revbtagjet_) -> default_value(-1) ,"non-Btag Jet");
111 
112  // muons
113  opt_cfg_.add_options()
114  ("Muons.ptMin" , po::value<std::vector<float> > (&muonsptmin_) -> multitoken() , "Mimium pt of the muons")
115  ("Muons.ptMax" , po::value<std::vector<float> > (&muonsptmax_) -> multitoken() , "Maximum pt of the muons")
116  ("Muons.etaMax" , po::value<std::vector<float> > (&muonsetamax_) -> multitoken() , "Maximum |eta| of the muons")
117  ("Muons.muons" , po::value <std::string> (&muonsCol_) -> default_value("") , "Name of the muons collection")
118  ("Muons.id" , po::value <std::string> (&muonsid_) -> default_value("LOOSE") , "muons id criteria for all muons")
119  ("Muons.nMin" , po::value <int> (&nmuonsmin_) -> default_value(0) , "Minimum number of muons")
120  ("Muons.nMax" , po::value <int> (&nmuonsmax_) -> default_value(-1) , "Maximum number of muons")
121  ("Muons.dRMin" , po::value <float> (&muonsdrmin_) -> default_value(-1.) , "Minimum delta R between muons")
122  ("Muons.dRMax" , po::value <float> (&muonsdrmax_) -> default_value(-1.) , "Maximum delta R between muons");
123 
124  // trigger
125  opt_cfg_.add_options()
126  ("Trigger.hltPath" , po::value <std::string> (&hltPath_) -> default_value("") , "HLT path name")
127  ("Trigger.l1Seed" , po::value <std::string> (&l1Seed_) -> default_value("") , "L1 seed name")
128  ("Trigger.results" , po::value <std::string> (&triggerCol_) -> default_value("TriggerResults") , "Name of the trigger results collection");
129 
130  // L1 muontrigger emulation
131  opt_cfg_.add_options()
132  ("Trigger.Emulate.Muons.L1.seed" , po::value <std::string> (&l1muonemul_) -> default_value("") , "Name of emulated L1 muon trigger")
133  ("Trigger.Emulate.Muons.L1.nMin" , po::value <int> (&l1muonemulnmin_) -> default_value(-1) , "Minimum number of emulated L1 muon trigger objects")
134  ("Trigger.Emulate.Muons.L1.ptMin" , po::value <float> (&l1muonemulptmin_) -> default_value(0) , "Minimum pt of emulated L1 muon trigger objects")
135  ("Trigger.Emulate.Muons.L1.etaMax" , po::value <float> (&l1muonemuletamax_) -> default_value(10) , "Maximum |eta|s of emulated L1 muon trigger objects");
136 
137  // L3 muontrigger emulation
138  opt_cfg_.add_options()
139  ("Trigger.Emulate.Muons.L3.path" , po::value <std::string> (&l3muonemul_) -> default_value("") , "Name of emulated L3 muon trigger")
140  ("Trigger.Emulate.Muons.L3.nMin" , po::value <int> (&l3muonemulnmin_) -> default_value(-1) , "Minimum number of emulated L3 muon trigger objects")
141  ("Trigger.Emulate.Muons.L3.ptMin" , po::value <float> (&l3muonemulptmin_) -> default_value(0) , "Minimum pt of emulated L3 muon trigger objects")
142  ("Trigger.Emulate.Muons.L3.etaMax" , po::value <float> (&l3muonemuletamax_) -> default_value(10) , "Maximum |eta|s of emulated L3 muon trigger objects");
143 
144  // L1 jettrigger emulation
145  opt_cfg_.add_options()
146  ("Trigger.Emulate.Jets.L1.seed" , po::value <std::string> (&l1jetemul_) -> default_value("") , "Name of emulated L1 Jet trigger")
147  ("Trigger.Emulate.Jets.L1.nMin" , po::value <int> (&l1jetemulnmin_) -> default_value(-1) , "Minimum number of emulated L1 Jet trigger objects")
148  ("Trigger.Emulate.Jets.L1.ptMin" , po::value <float> (&l1jetemulptmin_) -> default_value(0) , "Minimum pt of emulated L1 Jet trigger objects")
149  ("Trigger.Emulate.Jets.L1.etaMax" , po::value <float> (&l1jetemuletamax_) -> default_value(10) , "Maximum |eta|s of emulated L1 Jet trigger objects");
150 
151  // Calo jettrigger emulation
152  opt_cfg_.add_options()
153  ("Trigger.Emulate.Jets.Calo.path" , po::value <std::string> (&calojetemul_) -> default_value("") , "Name of emulated Calo Jet trigger")
154  ("Trigger.Emulate.Jets.Calo.nMin" , po::value <int> (&calojetemulnmin_) -> default_value(-1) , "Minimum number of emulated Calo Jet trigger objects")
155  ("Trigger.Emulate.Jets.Calo.ptMin" , po::value <float> (&calojetemulptmin_) -> default_value(0) , "Minimum pt of emulated Calo Jet trigger objects")
156  ("Trigger.Emulate.Jets.Calo.etaMax" , po::value <float> (&calojetemuletamax_) -> default_value(10) , "Maximum |eta|s of emulated Calo Jet trigger objects");
157 
158  // PF jettrigger emulation
159  opt_cfg_.add_options()
160  ("Trigger.Emulate.Jets.PF.path" , po::value <std::string> (&pfjetemul_) -> default_value("") , "Name of emulated PF Jet trigger")
161  ("Trigger.Emulate.Jets.PF.nMin" , po::value <int> (&pfjetemulnmin_) -> default_value(-1) , "Minimum number of emulated PF Jet trigger objects")
162  ("Trigger.Emulate.Jets.PF.ptMin" , po::value <float> (&pfjetemulptmin_) -> default_value(0) , "Minimum pt of emulated PF Jet trigger objects")
163  ("Trigger.Emulate.Jets.PF.etaMax" , po::value <float> (&pfjetemuletamax_) -> default_value(10) , "Maximum |eta|s of emulated PF Jet trigger objects");
164 
165  // trigger objects
166  opt_cfg_.add_options()
167  ("Trigger.Objects.directory" , po::value<std::string> (&triggerObjDir_) -> default_value("slimmedPatTrigger"), "Name of the trigger objects directory")
168  ("Trigger.Objects.BTag.Calo" , po::value<std::string> (&trgObjsBJets_) -> default_value("") , "Trigger objects for btag jets")
169  ("Trigger.Objects.Jets.L1" , po::value<std::string> (&trgObjsL1Jets_) -> default_value("") , "Trigger objects for L1 jets")
170  ("Trigger.Objects.Jets.Calo" , po::value<std::string> (&trgObjsCaloJets_) -> default_value("") , "Trigger objects for Calo jets")
171  ("Trigger.Objects.Jets.PF" , po::value<std::string> (&trgObjsPFJets_) -> default_value("") , "Trigger objects for PF jets")
172  ("Trigger.Objects.Muons.L1" , po::value<std::string> (&trgObjsL1Muons_) -> default_value("") , "Trigger objects for L1 muons")
173  ("Trigger.Objects.Muons.L3" , po::value<std::string> (&trgObjsL3Muons_) -> default_value("") , "Trigger objects for L3 muons")
174  ("Trigger.Objects.BTag.Calo.MatchDeltaR" , po::value<float> (&matchTrgCaloBJetsDrMax_) -> default_value(0.3) , "Max deltaR for btag jets")
175  ("Trigger.Objects.Jets.L1.MatchDeltaR" , po::value<float> (&matchTrgL1JetsDrMax_) -> default_value(0.3) , "Max deltaR for L1 jets")
176  ("Trigger.Objects.Jets.Calo.MatchDeltaR" , po::value<float> (&matchTrgCaloJetsDrMax_) -> default_value(0.3) , "Max deltaR for Calo jets")
177  ("Trigger.Objects.Jets.PF.MatchDeltaR" , po::value<float> (&matchTrgPFJetsDrMax_) -> default_value(0.3) , "Max deltaR for PF jets")
178  ("Trigger.Objects.Muons.L1.MatchDeltaR" , po::value<float> (&matchTrgL1MuonsDrMax_) -> default_value(0.3) , "Max deltaR for L1 muons match")
179  ("Trigger.Objects.Muons.L3.MatchDeltaR" , po::value<float> (&matchTrgL3MuonsDrMax_) -> default_value(0.3) , "Max deltaR for L3 muons match");
180 
181  // L1 trigger
182  opt_cfg_.add_options()
183  ("Trigger.L1T.Jets" , po::value <std::string> (&l1tjetsCol_) -> default_value("") , "Name of the L1T jets collection")
184  ("Trigger.L1T.Muons" , po::value <std::string> (&l1tmuonsCol_) -> default_value("") , "Name of the L1T muons collection");
185 
186  // generator level
187  opt_cfg_.add_options()
188  ("Generator.genParticles" , po::value <std::string> (&genpartsCol_) -> default_value("") , "Name of the gen particle collection")
189  ("Generator.genJets" , po::value <std::string> (&genjetsCol_) -> default_value("") , "Name of the gen jets collection");
190 
191 
192  // general
193  opt_cfg_.add_options()
194  ("User.doTree" , po::value <bool> (&do_tree_) -> default_value(false) , "Flag for output")
195  ("User.override" , po::value <bool> (&override_) -> default_value(false) , "Flag to be used to override procedure, e.g. a selection")
196  ("User.dRMin" , po::value <float> (&drmin_) -> default_value(-1.) , "Minimum delta R between candidates")
197  ("User.dRMax" , po::value <float> (&drmax_) -> default_value(-1.) , "Maximum delta R between candidates")
198  ("User.dEtaMax" , po::value <float> (&detamax_) -> default_value(-1.) , "Maximum delta eta between candidates")
199  ("User.dEtaMin" , po::value <float> (&detamin_) -> default_value(-1.) , "Minimum delta eta between candidates")
200  ("User.dPhiMin" , po::value <float> (&dphimin_) -> default_value(-1.) , "Minimum delta phi between candidates")
201  ("User.dPhiMax" , po::value <float> (&dphimax_) -> default_value(-1.) , "Maximum delta phi between candidates")
202  ("User.massMin" , po::value <float> (&massmin_) -> default_value(-1.) , "Cut on a mass, min value")
203  ("User.massMax" , po::value <float> (&massmax_) -> default_value(-1.) , "Cut on a mass, max value")
204  ("User.min" , po::value <float> (&min_) -> default_value(-1.) , "some minimum value")
205  ("User.max" , po::value <float> (&max_) -> default_value(-1.) , "some maximum value")
206  ("User.scale" , po::value <float> (&scale_) -> default_value(-1.) , "Overall scale for histograms")
207  ("User.workflow" , po::value <int> (&workflow_) -> default_value(1) , "Workflow index defined by user")
208  ("User.prescale" , po::value <int> (&prescale_) -> default_value(1) , "Prescale factor")
209  ("User.n" , po::value <int> (&n_) -> default_value(-1) , "Some integer")
210  ("User.index" , po::value <int> (&index_) -> default_value(-1) , "Some User index for user");
211 
212  // others
213  opt_cfg_.add_options()
214  ("nMin",po::value <int> (&nmin_)->default_value(0),"Minimum number objects")
215  ("nMax",po::value <int> (&nmax_)->default_value(0),"Maximum number objects")
216  ("ptMin", po::value<std::vector<float> >(&ptmin_)->multitoken(),"Mimium pt of an object")
217  ("ptMax", po::value<std::vector<float> >(&ptmax_)->multitoken(),"Maximum pt of an object")
218  ("etaMax", po::value<std::vector<float> >(&etamax_)->multitoken(),"Maximum |eta| of an object")
219  ("ptImbalanceMin",po::value <float> (&jetsptimbalmin_)->default_value(-1),"Minimum relative imbalance between two candidates")
220  ("ptImbalanceMax",po::value <float> (&jetsptimbalmax_)->default_value(-1),"Maximum relative imbalance between two candidates");
221 
222 
223  opt_cfg_.add_options()
224  ("qgMin", po::value<std::vector<float> >(&qgmin_)->multitoken(),"Minimum value for q-g likelihood")
225  ("qgMax", po::value<std::vector<float> >(&qgmax_)->multitoken(),"Maximum value for q-g likelihood")
226  ("jetsBtagMin", po::value<std::vector<float> >(&jetsbtagmin_)->multitoken(),"Minimum btag of the jets; if < 0 -> reverse btag")
227  ("jetsBtagProbB", po::value<std::vector<float> >(&jetsbtagprobb_)->multitoken(),"Maximum (minimum) btag prob b of the jets if >0 (<0)")
228  ("jetsBtagProbBB", po::value<std::vector<float> >(&jetsbtagprobbb_)->multitoken(),"Maximum (minimum) btag prob bb of the jets if >0 (<0)")
229  ("jetsBtagProbLepB", po::value<std::vector<float> >(&jetsbtagproblepb_)->multitoken(),"Maximum (minimum) btag prob lepb of the jets if >0 (<0)")
230  ("jetsBtagProbC", po::value<std::vector<float> >(&jetsbtagprobc_)->multitoken(),"Maximum (minimum) btag prob c of the jets if >0 (<0)")
231  ("jetsBtagProbG", po::value<std::vector<float> >(&jetsbtagprobg_)->multitoken(),"Maximum (minimum) btag prob g of the jets if >0 (<0)")
232  ("jetsBtagProbLight", po::value<std::vector<float> >(&jetsbtagproblight_)->multitoken(),"Maximum (minimum) btag prob light of the jets if >0 (<0)");
233 
234  opt_cfg_.add_options()
235  ("triggerMatchDeltaRMax",po::value <float> (&trgmatchdrmax_)->default_value(0.3),"DeltaR max for matching online-offline");
236 
237  // AI
238  opt_cfg_.add_options()
239  ("variablesFloatAI", po::value<std::vector<std::string> >(&varsf_ai_)->multitoken(),"Float variables names for AI(TMVA)")
240  ("variablesIntAI", po::value<std::vector<std::string> >(&varsi_ai_)->multitoken(),"Integer variables names for AI(TMVA)")
241  ("directoryAI",po::value <std::string> (&dir_ai_)->default_value(""),"Directory with weights for AI(TMVA)")
242  ("methodAI",po::value <std::string> (&method_ai_)->default_value(""),"Method AI(TMVA)")
243  ("efficiencyMinAI",po::value <float> (&eff_min_ai_)->default_value(-1.),"Min value for AI Cuts efficiency")
244  ("discriminatorMaxAI",po::value <float> (&disc_max_ai_)->default_value(-1001.),"Max value for AI discriminator")
245  ("discriminatorMinAI",po::value <float> (&disc_min_ai_)->default_value(-1001.),"Min value for AI discriminator");
246 
247  opt_cfg_.add_options()
248  ("crossSectionTree",po::value <std::string> (&xsectiontree_)->default_value(""),"Tree containing cross sections")
249  ("crossSectionType",po::value <std::string> (&xsectiontype_)->default_value("crossSection"),"Type of cross section")
250  ("crossSection",po::value <float> (&xsection_)->default_value(-1.), "Cross section")
251  ("luminosity",po::value <float> (&lumi_)->default_value(-1.), "Luminosity in pb-1 to scale histograms")
252  ("nLumiSections",po::value <int> (&nlumis_)->default_value(-1), "Number of lumi sections processed")
253  ("runMin",po::value <int> (&runmin_)->default_value(-1), "Minimum run number")
254  ("runMax",po::value <int> (&runmax_)->default_value(-1), "Maximum run number")
255  ("pythia8",po::value <bool> (&pythia8_)->default_value(true),"Flag for Pythia8 or other recent generators MC")
256  ("erasLumi", po::value<std::vector<float> >(&eraslumi_)->multitoken(),"Lumi of an era")
257  ("eras", po::value<std::vector<std::string> >(&eras_)->multitoken(),"Era of data taking");
258 
259 
260 
261  po::variables_map vm;
262  try
263  {
264  po::store(po::parse_command_line(argc, argv, opt_cmd_), vm); // can throw
265  // --help option
266 
267  if ( vm.count("help") )
268  {
269  std::cout << "SimpleBjetsAnalysis macro" << std::endl
270  << opt_cmd_ << std::endl
271  << opt_cfg_ << std::endl;
272  }
273  po::notify(vm);
274 
275  std::ifstream cfg_s(cfg_.c_str());
276  po::store(po::parse_config_file(cfg_s, opt_cfg_), vm); // can throw
277  if ( vm.count("config") )
278  {
279 
280  }
281  po::notify(vm);
282  boost::algorithm::to_lower(jetsid_);
283  std::transform(btagalgo_.begin(), btagalgo_.end(), btagalgo_.begin(), ::tolower);
284 
285 // inputlist_ = Form("%s/test/%s", toolspath.c_str(), inputlist_.c_str());
286  if ( inputlist_.rfind("tools:",0) == 0 )
287  {
288  inputlist_.replace(0,6,ntuplepath+"/");
289  }
290  if ( json_ != "no_json.txt" && json_.rfind("tools:",0) == 0 ) json_.replace(0,6,calibpath+"/");
291  if ( jerptres_ != "" && jerptres_.rfind("tools:",0) == 0 ) jerptres_.replace(0,6,calibpath+"/");
292  if ( jersf_ != "" && jersf_.rfind("tools:",0) == 0 ) jersf_.replace(0,6,calibpath+"/");
293  if ( btagsf_ != "" && btagsf_.rfind("tools:",0) == 0 ) btagsf_.replace(0,6,calibpath+"/");
294  if ( btageff_ != "" && btageff_.rfind("tools:",0) == 0 ) btageff_.replace(0,6,calibpath+"/");
295  if ( puweight_ != "" && puweight_.rfind("tools:",0) == 0 ) puweight_.replace(0,6,calibpath+"/");
296 
297  eventinfo_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , eventinfo_.c_str() );
298  triggerCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , triggerCol_.c_str() );
299  triggerObjDir_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , triggerObjDir_.c_str() );
300  if ( jetsCol_ != "" )
301  jetsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , jetsCol_.c_str() );
302  if ( muonsCol_ != "" )
303  muonsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , muonsCol_.c_str() );
304  if ( genpartsCol_ != "" )
305  genpartsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , genpartsCol_.c_str() );
306  if ( genjetsCol_ != "" )
307  genjetsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , genjetsCol_.c_str() );
308  if ( l1tjetsCol_ != "")
309  l1tjetsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , l1tjetsCol_.c_str() );
310  if ( l1tmuonsCol_ != "")
311  l1tmuonsCol_ = Form("%s/%s/%s" , process_.c_str(), eventsdir_.c_str() , l1tmuonsCol_.c_str() );
312 
313  if ( njetsmax_ < njetsmin_ ) njetsmax_ = -1;
314  if ( njetsmin_ < 0 && njetsmax_ > 0 ) njetsmin_ = 0;
315 
316  if ( njets_ >= 0 )
317  {
318  njetsmin_ = njets_;
319  njetsmax_ = njets_;
320  }
321  }
322  catch(po::error& e)
323  {
324  std::cerr << "ERROR: " << e.what() << std::endl << std::endl;
325  std::cerr << opt_cmd_ << std::endl;
326  throw std::exception();
327  }
328 
329  }
330  catch(std::exception& e)
331  {
332  std::cerr << "ERROR: " << e.what() << std::endl << std::endl;
333  throw std::exception();
334  }
335 
336 }
337 
339 {
340  // do anything here that needs to be done at desctruction time
341  // (e.g. close files, deallocate resources etc.)
342 }
343 
344 
345 //
346 // member functions
347 //
348 // ------------ method called for each event ------------
349 
350 po::options_description & Config::optionsCMD()
351 {
352  return opt_cmd_;
353 }
354 
355 po::options_description & Config::optionsCFG()
356 {
357  return opt_cfg_;
358 }
359 
360 
362 {
363  po::variables_map vm;
364  po::store(po::parse_command_line(argc_, argv_, opt_cmd_), vm);
365  po::notify(vm);
366  std::ifstream cfg_s(cfg_.c_str());
367  po::store(po::parse_config_file(cfg_s, opt_cfg_), vm); // can throw
368  po::notify(vm);
369 
370 
371 }
372 
373 //
374 std::string Config::configFile() const { return cfg_; }
375 
376 // analysis info
377 std::string Config::ntuplesList() const { return inputlist_; }
378 std::string Config::eventInfo() const { return eventinfo_; }
379 std::string Config::crossSectionTree() const { return xsectiontree_; }
380 std::string Config::crossSectionType() const { return xsectiontype_; }
381 float Config::crossSection() const { return xsection_; }
382 float Config::luminosity() const { return lumi_; }
383 int Config::nEventsMax() const { return nevtmax_; }
384 bool Config::isMC() const { return isMC_; }
385 bool Config::signalRegion() const { return signalregion_; }
386 bool Config::blind() const { return blind_; }
387 bool Config::nlo() const { return nlo_; }
388 bool Config::fullGenWeight() const { return fullgenweight_; }
389 int Config::workflow() const { return workflow_; }
390 int Config::index() const { return index_; }
391 float Config::scale() const { return scale_; }
392 std::vector<float> Config::erasLumi() const { return eraslumi_; }
393 std::vector<std::string> Config::eras() const { return eras_; }
394 std::string Config::pileupWeights() const { return puweight_; }
395 
396 std::string Config::process() const { return process_; }
397 std::string Config::eventsDir() const { return eventsdir_; }
398 
399 // analysis control
400 bool Config::override() const { return override_; }
401 
402 // jets
403 std::string Config::jetsCollection() const { return jetsCol_; }
404 int Config::nJetsMin() const { return njetsmin_; }
405 int Config::nJetsMax() const { return njetsmax_; }
406 int Config::nJets() const { return njets_; }
407 std::vector<float> Config::jetsPtMin() const { return jetsptmin_; }
408 std::vector<float> Config::jetsPtMax() const { return jetsptmax_; }
409 std::vector<float> Config::jetsEtaMax() const { return jetsetamax_; }
410 std::string Config::jetsId() const { return jetsid_; }
411 std::string Config::jetsPuId() const { return jetspuid_; }
412 std::string Config::jerPtRes() const { return jerptres_; }
413 std::string Config::jerSF() const { return jersf_; }
414 std::string Config::l1tJetsCollection() const { return l1tjetsCol_; }
415 std::string Config::btagAlgorithm() const { return btagalgo_; }
416 std::string Config::btagScaleFactors() const { return btagsf_; }
417 std::vector<std::string> Config::jetsBtagWP() const { return jetsbtagwp_; }
418 std::vector<float> Config::jetsBtagProbB() const { return jetsbtagprobb_; }
419 std::vector<float> Config::jetsBtagProbBB() const { return jetsbtagprobbb_; }
420 std::vector<float> Config::jetsBtagProbLepB() const { return jetsbtagproblepb_; }
421 std::vector<float> Config::jetsBtagProbC() const { return jetsbtagprobc_; }
422 std::vector<float> Config::jetsBtagProbG() const { return jetsbtagprobg_; }
423 std::vector<float> Config::jetsBtagProbLight() const { return jetsbtagproblight_; }
424 bool Config::bRegression() const { return bregression_; }
425 std::string Config::revBtagWP() const { return revbtagwp_; }
426 int Config::revBtagJet() const { return revbtagjet_; }
428 bool Config::doDijet() const { return dodijet_ ; }
429 int Config::nBJetsMin() const { return nbjetsmin_; }
430 
431 std::vector<float> Config::jetsQGmin() const { return qgmin_; }
432 std::vector<float> Config::jetsQGmax() const { return qgmax_; }
433 
434 // jet-jet
435 float Config::jetsDetaMax() const { return jetsdetamax_; }
436 float Config::jetsDetaMin() const { return jetsdetamin_; }
437 float Config::jetsDphiMax() const { return jetsdphimax_; }
438 float Config::jetsDphiMin() const { return jetsdphimin_; }
439 float Config::jetsDrMax() const { return jetsdrmax_; }
440 float Config::jetsDrMin() const { return jetsdrmin_; }
443 
444 // muons
445 std::string Config::muonsCollection() const { return muonsCol_; }
446 int Config::nMuonsMin() const { return nmuonsmin_; }
447 int Config::nMuonsMax() const { return nmuonsmax_; }
448 std::vector<float> Config::muonsPtMin() const { return muonsptmin_; }
449 std::vector<float> Config::muonsPtMax() const { return muonsptmax_; }
450 std::vector<float> Config::muonsEtaMax() const { return muonsetamax_; }
451 std::string Config::muonsId() const { return muonsid_; }
452 std::string Config::l1tMuonsCollection() const { return l1tmuonsCol_; }
453 
454 // muon-muon
455 float Config::muonsDrMax() const { return muonsdrmax_; }
456 float Config::muonsDrMin() const { return muonsdrmin_; }
457 
458 // trigger
459 std::string Config::triggerResults() const { return triggerCol_; }
460 std::string Config::triggerObjectsDir() const { return triggerObjDir_; }
461 std::string Config::triggerObjectsL1Muons() const { return trgObjsL1Muons_; }
462 std::string Config::triggerObjectsL3Muons() const { return trgObjsL3Muons_; }
463 std::string Config::triggerObjectsBJets() const { return trgObjsBJets_; }
464 std::string Config::triggerObjectsL1Jets() const { return trgObjsL1Jets_; }
465 std::string Config::triggerObjectsCaloJets() const { return trgObjsCaloJets_; }
466 std::string Config::triggerObjectsPFJets() const { return trgObjsPFJets_; }
467 
474 
475 
476 
477 // generator level
478 std::string Config::genJetsCollection() const { return genjetsCol_; }
479 std::string Config::genParticlesCollection() const { return genpartsCol_; }
480 
481 // seed
482 std::string Config::seedFile() const { return seedfile_; }
483 int Config::seed() const { return seed_; }
484 
485 bool Config::pythia8() const { return pythia8_; }
486 
487 // btag
488 std::string Config::btagEfficiencies() const { return btageff_; }
489 float Config::btagWP(const std::string & wp) const
490 {
491  if ( wp == "loose" ) return btagwploose_ ;
492  if ( wp == "medium" ) return btagwpmedium_;
493  if ( wp == "tight" ) return btagwptight_ ;
494  if ( wp == "xxx" ) return btagwpxxx_;
495 
496  return -100.;
497 }
498 
499 // User stuff
500 float Config::massMin() const { return massmin_; }
501 float Config::massMax() const { return massmax_; }
502 
503 
504 // AI
505 std::vector<std::string> Config::variablesAI(const std::string & t) const
506 {
507  if ( t == "I" ) return varsi_ai_;
508  return varsf_ai_;
509 }
510 std::string Config::directoryAI() const { return dir_ai_ ; }
511 std::string Config::methodAI() const { return method_ai_ ; }
512 float Config::discriminatorMaxAI() const { return disc_max_ai_; }
513 float Config::discriminatorMinAI() const { return disc_min_ai_; }
514 float Config::efficiencyMinAI() const { return eff_min_ai_ ; }
515 
516 // output tree
517 bool Config::doTree() const { return do_tree_; }
518 
519 // User options
520 int Config::prescale() const { return prescale_; }
521 int Config::n() const { return n_; }
522 float Config::min() const { return min_; }
523 float Config::max() const { return max_; }
524 
525 // Histograms
528 
529 
530 std::string Config::outputRoot() const { return outputRoot_ ; }
531 std::string Config::json() const { return json_ ; }
532 
533 
534 // L1 muon trigger emulation
535 std::string Config::triggerEmulateL1Muons() const { return l1muonemul_ ; }
539 
540 // L3 muon trigger emulation
541 std::string Config::triggerEmulateL3Muons() const { return l3muonemul_ ; }
545 
546 
547 
548 // L1 jet trigger emulation
549 std::string Config::triggerEmulateL1Jets() const { return l1jetemul_ ; }
553 
554 
555 // Calo jet trigger emulation
556 std::string Config::triggerEmulateCaloJets() const { return calojetemul_ ; }
560 
561 // PF jet trigger emulation
562 std::string Config::triggerEmulatePFJets() const { return pfjetemul_ ; }
566 
567 
568 
569 
570 
float jetsDrMax() const
Definition: Config.cc:439
std::string crossSectionType() const
Definition: Config.cc:380
std::vector< float > jetsBtagProbLepB() const
Definition: Config.cc:420
float triggerEmulateL3MuonsPtMin() const
Definition: Config.cc:543
std::string eventsdir_
Definition: Config.h:300
std::string btageff_
Definition: Config.h:464
std::string muonsId() const
Definition: Config.cc:451
std::string genParticlesCollection() const
Definition: Config.cc:479
std::string inputlist_
Definition: Config.h:297
std::string eventsDir() const
Definition: Config.cc:397
bool nlo() const
Definition: Config.cc:387
std::string eventinfo_
Definition: Config.h:298
std::vector< float > jetsbtagprobg_
Definition: Config.h:382
std::vector< float > jetsptmax_
Definition: Config.h:342
std::string jetsId() const
Definition: Config.cc:410
std::string triggerObjDir_
Definition: Config.h:406
std::string dir_ai_
Definition: Config.h:474
float discriminatorMinAI() const
Definition: Config.cc:513
bool fullGenWeight() const
Definition: Config.cc:388
std::vector< float > jetsbtagproblepb_
Definition: Config.h:380
std::string triggerEmulateL1Muons() const
L1 muon trigger emulation.
Definition: Config.cc:535
std::string jerSF() const
Definition: Config.cc:413
int seed() const
Definition: Config.cc:483
po::options_description & optionsCMD()
Definition: Config.cc:350
int triggerEmulateL1JetsNMin() const
Definition: Config.cc:550
float triggerMatchCaloBJetsDrMax() const
Definition: Config.cc:473
std::string calojetemul_
Calo jet trigger emulation.
Definition: Config.h:433
bool doDijet() const
Definition: Config.cc:428
float matchTrgPFJetsDrMax_
Definition: Config.h:448
std::string muonsCollection() const
Definition: Config.cc:445
float triggerEmulateCaloJetsEtaMax() const
Definition: Config.cc:559
std::vector< float > jetsEtaMax() const
Definition: Config.cc:409
float discriminatorMaxAI() const
Definition: Config.cc:512
int nEventsMax() const
Definition: Config.cc:383
float jetsDrMin() const
Definition: Config.cc:440
std::vector< float > jetsBtagProbC() const
Definition: Config.cc:421
float matchTrgCaloJetsDrMax_
Definition: Config.h:447
std::string l3muonemul_
L3 muon trigger emulation.
Definition: Config.h:421
int nBJetsMin() const
Definition: Config.cc:429
std::vector< float > jetsPtMax() const
Definition: Config.cc:408
float matchTrgCaloBJetsDrMax_
Definition: Config.h:449
std::string triggerEmulateL1Jets() const
L1 jet trigger emulation.
Definition: Config.cc:549
float triggerMatchL3MuonsDrMax() const
Definition: Config.cc:469
std::string trgObjsL3Muons_
Definition: Config.h:408
std::vector< std::string > eras_
Definition: Config.h:324
float jetsPtImbalanceMax() const
Definition: Config.cc:441
std::string jetsCol_
Definition: Config.h:337
std::vector< float > jetsptmin_
Definition: Config.h:341
std::string trgObjsL1Muons_
Definition: Config.h:407
std::string outputRoot_
Definition: Config.h:488
std::vector< std::string > varsi_ai_
Definition: Config.h:473
std::string muonsid_
Definition: Config.h:401
float matchTrgL1JetsDrMax_
Definition: Config.h:446
std::string eventInfo() const
Definition: Config.cc:378
int nJets() const
Definition: Config.cc:406
int triggerEmulatePFJetsNMin() const
Definition: Config.cc:563
std::vector< float > muonsetamax_
Definition: Config.h:400
float jetsPtImbalanceMin() const
Definition: Config.cc:442
std::string crossSectionTree() const
Definition: Config.cc:379
std::string pileupWeights() const
Definition: Config.cc:394
std::string revBtagWP() const
Definition: Config.cc:425
float efficiencyMinAI() const
Definition: Config.cc:514
float matchTrgL3MuonsDrMax_
Definition: Config.h:445
std::string hltPath_
Definition: Config.h:282
float jetsDphiMax() const
Definition: Config.cc:437
std::string method_ai_
Definition: Config.h:475
std::vector< float > qgmax_
Definition: Config.h:348
std::string l1tJetsCollection() const
Definition: Config.cc:414
std::vector< int > dijet_ranks_
Definition: Config.h:389
int prescale() const
Definition: Config.cc:520
float triggerEmulateCaloJetsPtMin() const
Definition: Config.cc:558
std::string xsectiontree_
Definition: Config.h:301
po::options_description & optionsCFG()
Definition: Config.cc:355
std::vector< float > muonsPtMax() const
Definition: Config.cc:449
std::vector< float > jetsBtagProbG() const
Definition: Config.cc:422
std::vector< float > jetsbtagmin_
Definition: Config.h:264
std::vector< float > jetsBtagProbBB() const
Definition: Config.cc:419
std::string btagEfficiencies() const
Definition: Config.cc:488
float massMax() const
Definition: Config.cc:501
std::vector< float > muonsptmin_
Definition: Config.h:398
std::string triggerObjectsDir() const
Definition: Config.cc:460
float triggerMatchPFJetsDrMax() const
Definition: Config.cc:472
std::vector< std::string > jetsbtagwp_
Definition: Config.h:374
std::string l1tmuonsCol_
Definition: Config.h:402
std::string genjetsCol_
Definition: Config.h:452
std::string triggerObjectsCaloJets() const
Definition: Config.cc:465
float matchTrgL1MuonsDrMax_
Definition: Config.h:444
float massMin() const
Definition: Config.cc:500
std::string configFile() const
Definition: Config.cc:374
std::string jersf_
Definition: Config.h:365
int nMuonsMin() const
Definition: Config.cc:446
std::string jetspuid_
Definition: Config.h:345
Config()
constructors
Definition: Config.cc:22
float triggerEmulatePFJetsPtMin() const
Definition: Config.cc:564
std::string cfg_
Definition: Config.h:291
std::string triggerEmulateL3Muons() const
L3 muon trigger emulation.
Definition: Config.cc:541
int nJetsMin() const
Definition: Config.cc:404
std::vector< float > jetsBtagProbB() const
Definition: Config.cc:418
std::string triggerResults() const
Definition: Config.cc:459
float triggerEmulateL3MuonsEtaMax() const
Definition: Config.cc:544
std::string btagalgo_
Definition: Config.h:370
std::string triggerObjectsBJets() const
Definition: Config.cc:463
std::string json_
Definition: Config.h:489
std::string jetsPuId() const
Definition: Config.cc:411
po::options_description opt_cmd_
Definition: Config.h:293
std::vector< float > erasLumi() const
Definition: Config.cc:392
std::vector< float > jetsQGmax() const
Definition: Config.cc:432
std::vector< float > jetsbtagproblight_
Definition: Config.h:383
std::string trgObjsCaloJets_
Definition: Config.h:411
std::vector< float > eraslumi_
Definition: Config.h:325
std::string triggerObjectsL1Jets() const
Definition: Config.cc:464
std::string triggerCol_
Definition: Config.h:405
std::string triggerObjectsPFJets() const
Definition: Config.cc:466
int triggerEmulateL1MuonsNMin() const
Definition: Config.cc:536
float scale() const
Definition: Config.cc:391
std::string process() const
Definition: Config.cc:396
std::vector< std::string > jetsBtagWP() const
Definition: Config.cc:417
std::string l1Seed_
Definition: Config.h:283
float triggerMatchL1MuonsDrMax() const
Definition: Config.cc:468
std::string jerPtRes() const
Definition: Config.cc:412
int index() const
Definition: Config.cc:390
std::vector< float > jetsbtagprobc_
Definition: Config.h:381
std::string json() const
Definition: Config.cc:531
std::vector< float > muonsEtaMax() const
Definition: Config.cc:450
std::string ntuplesList() const
Definition: Config.cc:377
std::vector< float > jetsbtagprobb_
Definition: Config.h:378
float triggerEmulatePFJetsEtaMax() const
Definition: Config.cc:565
std::vector< std::string > variablesAI(const std::string &t="F") const
Definition: Config.cc:505
int triggerEmulateCaloJetsNMin() const
Definition: Config.cc:557
int n() const
Definition: Config.cc:521
std::vector< float > ptmin_
Definition: Config.h:269
std::vector< float > jetsQGmin() const
Definition: Config.cc:431
std::string puweight_
Definition: Config.h:327
std::string l1tjetsCol_
Definition: Config.h:367
std::vector< std::string > varsf_ai_
Definition: Config.h:472
bool bRegression() const
Definition: Config.cc:424
bool isMC() const
Definition: Config.cc:384
std::string btagsf_
Definition: Config.h:371
std::string triggerObjectsL1Muons() const
Definition: Config.cc:461
float muonsDrMax() const
Definition: Config.cc:455
std::string process_
Definition: Config.h:299
std::vector< float > muonsPtMin() const
Definition: Config.cc:448
bool override() const
Definition: Config.cc:400
bool doTree() const
Definition: Config.cc:517
std::string genJetsCollection() const
Definition: Config.cc:478
std::string trgObjsL1Jets_
Definition: Config.h:410
std::vector< float > muonsptmax_
Definition: Config.h:399
std::string jetsid_
Definition: Config.h:344
std::string triggerObjectsL3Muons() const
Definition: Config.cc:462
bool signalRegion() const
Definition: Config.cc:385
std::string revbtagwp_
Definition: Config.h:375
float jetsDetaMax() const
Definition: Config.cc:435
std::string l1jetemul_
L1 jet trigger emulation.
Definition: Config.h:427
float triggerEmulateL1MuonsPtMin() const
Definition: Config.cc:537
float triggerMatchCaloJetsDrMax() const
Definition: Config.cc:471
bool histogramJetsPerFlavour() const
Definition: Config.cc:527
float triggerMatchL1JetsDrMax() const
Definition: Config.cc:470
std::string jerptres_
Definition: Config.h:364
std::string pfjetemul_
PF jet trigger emulation.
Definition: Config.h:439
po::options_description opt_cfg_
Definition: Config.h:294
float min() const
Definition: Config.cc:522
float luminosity() const
Definition: Config.cc:382
std::string l1muonemul_
L1 muon trigger emulation.
Definition: Config.h:415
float btagWP(const std::string &) const
Definition: Config.cc:489
float crossSection() const
Definition: Config.cc:381
std::string l1tMuonsCollection() const
Definition: Config.cc:452
std::string seedfile_
Definition: Config.h:318
float triggerEmulateL1JetsEtaMax() const
Definition: Config.cc:552
float max() const
Definition: Config.cc:523
std::string trgObjsBJets_
Definition: Config.h:409
std::string jetsCollection() const
Definition: Config.cc:403
float jetsDetaMin() const
Definition: Config.cc:436
std::string xsectiontype_
Definition: Config.h:302
int nMuonsMax() const
Definition: Config.cc:447
std::vector< std::string > eras() const
Definition: Config.cc:393
std::string btagAlgorithm() const
Definition: Config.cc:415
std::vector< float > jetsBtagProbLight() const
Definition: Config.cc:423
std::vector< float > jetsetamax_
Definition: Config.h:343
std::vector< float > jetsPtMin() const
Definition: Config.cc:407
std::vector< float > qgmin_
Definition: Config.h:347
std::string triggerEmulateCaloJets() const
Calo jet trigger emulation.
Definition: Config.cc:556
bool useJetsExtendedFlavour() const
Definition: Config.cc:427
std::string trgObjsPFJets_
Definition: Config.h:412
std::string directoryAI() const
Definition: Config.cc:510
std::string muonsCol_
Definition: Config.h:395
std::vector< float > ptmax_
Definition: Config.h:270
std::string methodAI() const
Definition: Config.cc:511
std::vector< float > jetsbtagprobbb_
Definition: Config.h:379
int triggerEmulateL3MuonsNMin() const
Definition: Config.cc:542
std::string seedFile() const
Definition: Config.cc:482
float triggerEmulateL1JetsPtMin() const
Definition: Config.cc:551
std::string triggerEmulatePFJets() const
PF jet trigger emulation.
Definition: Config.cc:562
float jetsDphiMin() const
Definition: Config.cc:438
bool blind() const
Definition: Config.cc:386
std::string outputRoot() const
Definition: Config.cc:530
int workflow() const
Definition: Config.cc:389
float muonsDrMin() const
Definition: Config.cc:456
int revBtagJet() const
Definition: Config.cc:426
float triggerEmulateL1MuonsEtaMax() const
Definition: Config.cc:538
int nJetsMax() const
Definition: Config.cc:405
std::string btagScaleFactors() const
Definition: Config.cc:416
bool histogramJetsRegionSplit() const
Definition: Config.cc:526
std::vector< float > etamax_
Definition: Config.h:271
bool pythia8() const
Definition: Config.cc:485
std::string genpartsCol_
Definition: Config.h:453
~Config()
desctructor
Definition: Config.cc:338