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";
38 namespace po = boost::program_options;
40 (
"help,h",
"Show help messages")
41 (
"config,c",po::value<std::string>(&
cfg_),
"Configuration file name");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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");
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)");
235 (
"triggerMatchDeltaRMax",po::value <float> (&
trgmatchdrmax_)->default_value(0.3),
"DeltaR max for matching online-offline");
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");
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");
261 po::variables_map vm;
264 po::store(po::parse_command_line(argc, argv,
opt_cmd_), vm);
267 if ( vm.count(
"help") )
269 std::cout <<
"SimpleBjetsAnalysis macro" << std::endl
275 std::ifstream cfg_s(
cfg_.c_str());
276 po::store(po::parse_config_file(cfg_s,
opt_cfg_), vm);
277 if ( vm.count(
"config") )
282 boost::algorithm::to_lower(
jetsid_);
290 if (
json_ !=
"no_json.txt" &&
json_.rfind(
"tools:",0) == 0 )
json_.replace(0,6,calibpath+
"/");
292 if (
jersf_ !=
"" &&
jersf_.rfind(
"tools:",0) == 0 )
jersf_.replace(0,6,calibpath+
"/");
314 if ( njetsmin_ < 0 && njetsmax_ > 0 )
njetsmin_ = 0;
324 std::cerr <<
"ERROR: " << e.what() << std::endl << std::endl;
326 throw std::exception();
330 catch(std::exception& e)
332 std::cerr <<
"ERROR: " << e.what() << std::endl << std::endl;
333 throw std::exception();