66 geometry=None, autoconfigFromFlags=None, noSystematics=None,
68 returnConfigSeq=False,
74 if autoconfigFromFlags
is not None:
76 geometry = autoconfigFromFlags.GeoModel.Run
78 configSeq = ConfigSequence ()
80 outputContainers = {
'mu_' :
'OutMuons',
81 'el_' :
'OutElectrons',
88 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
89 'truth_el_' :
'OutTruthElectrons',
90 'truth_ph_' :
'OutTruthPhotons',
91 'truth_tau_':
'OutTruthTaus',
92 'truth_jet_':
'OutTruthJets',
93 'truth_met_':
'TruthMET'}
96 from AnalysisAlgorithmsConfig.ConfigFactory
import ConfigFactory
97 config = ConfigFactory()
99 configSeq += config.makeConfig(
'CommonServices')
100 configSeq.setOptionValue(
'.systematicsHistogram',
'systematicsList')
101 configSeq.setOptionValue(
'.enableExpertMode',
True)
103 configSeq += config.makeConfig(
'PileupReweighting')
107 configSeq += config.makeConfig (
'EventCleaning')
108 configSeq.setOptionValue (
'.runEventCleaning',
True)
112 if geometry
is LHCPeriod.Run2:
114 configSeq += config.makeConfig(
'Trigger' )
115 configSeq.setOptionValue (
'.triggerChainsPerYear', triggerChainsPerYear )
116 configSeq.setOptionValue (
'.noFilter',
True )
117 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose' )
118 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight' )
119 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium' )
120 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight' )
121 configSeq.setOptionValue (
'.electronID',
'Tight' )
122 configSeq.setOptionValue (
'.electronIsol',
'Tight_VarRad')
123 configSeq.setOptionValue (
'.photonIsol',
'TightCaloOnly')
124 configSeq.setOptionValue (
'.muonID',
'Tight')
125 configSeq.setOptionValue (
'.triggerMatchingChainsPerYear', triggerMatchingChainsPerYear)
128 configSeq += config.makeConfig(
'Jets' )
129 configSeq.setOptionValue (
'.containerName',
'AnaJets')
130 configSeq.setOptionValue (
'.jetCollection',
'AntiKt4EMPFlowJets')
131 configSeq.setOptionValue (
'.runJvtUpdate',
False )
132 configSeq.setOptionValue (
'.runNNJvtUpdate',
True )
133 configSeq.setOptionValue (
'.runJvtSelection',
False )
134 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
136 configSeq += config.makeConfig(
'Jets.JVTWorkingPoint')
137 configSeq.setOptionValue (
'.containerName' ,
'AnaJets')
138 configSeq.setOptionValue (
'.selectionName',
'baselineJvt')
139 configSeq.setOptionValue (
'.jvtWP',
'FixedEffPt')
141 configSeq += config.makeConfig(
'Jets.FTagTriggerMatching' )
142 configSeq.setOptionValue(
'.containerName',
'AnaJets')
143 configSeq.setOptionValue(
'.triggerChainsPerYear', bjetTriggerChainsPerYear)
147 if geometry
is not LHCPeriod.Run4:
150 btagWP =
"FixedCutBEff_65"
151 configSeq += config.makeConfig(
'Jets.FlavourTagging' )
152 configSeq.setOptionValue (
'.containerName',
'AnaJets')
153 configSeq.setOptionValue (
'.selectionName',
'ftag')
154 configSeq.setOptionValue (
'.btagger', btagger)
155 configSeq.setOptionValue (
'.btagWP', btagWP)
156 configSeq.setOptionValue (
'.saveScores',
'All')
158 configSeq += config.makeConfig(
'Jets.FlavourTaggingEventSF' )
159 configSeq.setOptionValue (
'.containerName',
'AnaJets.baselineJvt')
160 configSeq.setOptionValue (
'.btagger', btagger)
161 configSeq.setOptionValue(
'.triggerChainsPerYear',
162 bjetTriggerChainsPerYear)
165 configSeq += config.makeConfig(
'Jets' )
166 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
167 configSeq.setOptionValue (
'.jetCollection',
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets')
168 outputContainers[
'larger_jet_'] =
'OutLargeRJets'
169 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
173 configSeq += config.makeConfig (
'Muons')
174 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
175 configSeq.setOptionValue (
'.decorateTruth',
True)
176 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
177 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
179 configSeq += config.makeConfig (
'Muons.WorkingPoint')
180 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
181 configSeq.setOptionValue (
'.selectionName',
'medium')
182 configSeq.setOptionValue (
'.quality',
'Medium')
183 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
185 configSeq += config.makeConfig (
'Muons.IFFClassification')
186 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
187 configSeq += config.makeConfig (
'Muons.MCTCClassification')
188 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
189 configSeq.setOptionValue (
'.prefix',
'truth_')
194 configSeq += config.makeConfig (
'Electrons')
195 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
196 configSeq.setOptionValue (
'.decorateTruth',
True)
197 configSeq.setOptionValue (
'.decorateCaloClusterEta',
True)
198 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
199 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
200 configSeq.setOptionValue (
'.minPt', electronMinPt)
201 configSeq += config.makeConfig (
'Electrons.WorkingPoint')
202 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
203 configSeq.setOptionValue (
'.selectionName',
'loose')
205 configSeq.setOptionValue (
'.identificationWP',
'LooseBLayerLH')
207 configSeq.setOptionValue (
'.identificationWP',
'LooseDNN')
208 configSeq.setOptionValue (
'.isolationWP',
'Tight_VarRad')
209 configSeq.setOptionValue (
'.chargeIDSelectionRun2',
True)
210 configSeq.setOptionValue (
'.addChargeMisIDSF', geometry
is LHCPeriod.Run2)
211 configSeq += config.makeConfig(
'Electrons.TriggerSF')
212 configSeq.setOptionValue(
'.containerName',
'AnaElectrons')
213 configSeq.setOptionValue(
'.electronID',
'LooseBLayerLH')
214 configSeq.setOptionValue(
'.electronIsol',
'Tight_VarRad')
215 configSeq.setOptionValue(
'.triggerChainsPerYear', triggerChainsPerYear)
217 configSeq += config.makeConfig (
'Electrons.IFFClassification')
218 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
219 configSeq += config.makeConfig (
'Electrons.MCTCClassification')
220 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
221 configSeq.setOptionValue (
'.prefix',
'truth_')
223 configSeq += config.makeConfig (
'Electrons.PtEtaSelection')
224 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
225 configSeq.setOptionValue (
'.minPt', electronMinPt)
229 configSeq += config.makeConfig (
'Photons')
230 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
231 configSeq.setOptionValue (
'.decorateTruth',
True)
232 configSeq.setOptionValue (
'.recomputeIsEM',
False)
233 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
234 configSeq += config.makeConfig (
'Photons.WorkingPoint')
235 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
236 configSeq.setOptionValue (
'.selectionName',
'tight')
237 configSeq.setOptionValue (
'.qualityWP',
'Tight')
238 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
239 configSeq.setOptionValue (
'.recomputeIsEM',
False)
241 configSeq += config.makeConfig (
'Photons.PtEtaSelection')
242 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
243 configSeq.setOptionValue (
'.minPt', photonMinPt)
252 configSeq += config.makeConfig (
'TauJets')
253 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
254 configSeq.setOptionValue (
'.decorateTruth',
True)
255 configSeq += config.makeConfig (
'TauJets.WorkingPoint')
256 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
257 configSeq.setOptionValue (
'.selectionName',
'tight')
258 configSeq.setOptionValue (
'.quality',
'Tight')
260 configSeq += config.makeConfig(
'TauJets.TriggerSF')
261 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
262 configSeq.setOptionValue(
'.tauID',
'Tight')
263 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
265 configSeq += config.makeConfig (
'TauJets.MCTCClassification')
266 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
267 configSeq.setOptionValue (
'.prefix',
'truth_')
271 configSeq += config.makeConfig (
'InDetTracks')
272 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
273 configSeq.setOptionValue (
'.minPt', 500)
274 configSeq.setOptionValue (
'.maxEta', 2.5)
275 configSeq.setOptionValue (
'.outputTrackSummaryInfo',
True)
277 configSeq += config.makeConfig (
'InDetTracks.WorkingPoint')
278 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
279 configSeq.setOptionValue (
'.selectionName',
'tight')
280 configSeq.setOptionValue (
'.cutLevel',
'TightPrimary')
284 configSeq += config.makeConfig(
'SystObjectLink')
285 configSeq.setOptionValue (
'.containerName',
'AnaJets')
287 configSeq += config.makeConfig(
'SystObjectLink')
288 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
289 configSeq += config.makeConfig(
'SystObjectLink')
290 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
291 configSeq += config.makeConfig(
'SystObjectLink')
292 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
293 configSeq += config.makeConfig(
'SystObjectLink')
294 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
295 configSeq += config.makeConfig(
'SystObjectLink')
296 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
300 configSeq += config.makeConfig (
'PL_Electrons')
301 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
302 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification')
303 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
304 configSeq.setOptionValue (
'.prefix',
'')
305 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection')
306 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
307 configSeq.setOptionValue (
'.skipOnData',
True)
308 configSeq.setOptionValue (
'.useDressedProperties',
True)
309 configSeq.setOptionValue (
'.minPt', 20e3)
311 configSeq += config.makeConfig (
'PL_Muons')
312 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
313 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification')
314 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
315 configSeq.setOptionValue (
'.prefix',
'')
316 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection')
317 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
318 configSeq.setOptionValue (
'.skipOnData',
True)
319 configSeq.setOptionValue (
'.useDressedProperties',
True)
320 configSeq.setOptionValue (
'.minPt', 20e3)
322 configSeq += config.makeConfig (
'PL_Neutrinos')
323 configSeq.setOptionValue (
'.skipOnData',
True)
325 configSeq += config.makeConfig (
'PL_Jets')
326 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
327 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection')
328 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
329 configSeq.setOptionValue (
'.skipOnData',
True)
330 configSeq.setOptionValue (
'.minPt', 20e3)
332 configSeq += config.makeConfig (
'PL_Taus')
333 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
334 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification')
335 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
336 configSeq.setOptionValue (
'.prefix',
'')
337 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection')
338 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
339 configSeq.setOptionValue (
'.skipOnData',
True)
340 configSeq.setOptionValue (
'.minPt', 20e3)
342 configSeq += config.makeConfig (
'PL_Photons')
343 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
344 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection')
345 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
346 configSeq.setOptionValue (
'.skipOnData',
True)
347 configSeq.setOptionValue (
'.minPt', 20e3)
349 configSeq += config.makeConfig (
'PL_MissingET')
350 configSeq.setOptionValue (
'.skipOnData',
True)
352 configSeq += config.makeConfig (
'PL_OverlapRemoval')
353 configSeq.setOptionValue (
'.skipOnData',
True)
354 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
355 configSeq.setOptionValue (
'.muons',
'TruthMuons')
356 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
357 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
358 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
361 configSeq += config.makeConfig (
'PartonHistory')
362 configSeq.setOptionValue (
'.history',
'Ttbar')
365 configSeq += config.makeConfig (
'MissingET')
366 configSeq.setOptionValue (
'.containerName',
'AnaMET')
367 configSeq.setOptionValue (
'.jets',
'AnaJets')
368 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
369 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
370 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
379 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
383 configSeq += config.makeConfig(
'OverlapRemoval' )
384 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
385 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
388 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
389 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
390 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
391 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
392 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
393 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
397 configSeq += config.makeConfig (
'ObjectCutFlow')
398 configSeq.setOptionValue (
'.containerName',
'AnaJets')
399 configSeq.setOptionValue (
'.selectionName',
'jvt')
400 configSeq += config.makeConfig (
'ObjectCutFlow')
401 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
402 configSeq.setOptionValue (
'.selectionName',
'loose')
403 configSeq += config.makeConfig (
'ObjectCutFlow')
404 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
405 configSeq.setOptionValue (
'.selectionName',
'tight')
406 configSeq += config.makeConfig (
'ObjectCutFlow')
407 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
408 configSeq.setOptionValue (
'.selectionName',
'medium')
409 configSeq += config.makeConfig (
'ObjectCutFlow')
410 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
411 configSeq.setOptionValue (
'.selectionName',
'tight')
412 configSeq += config.makeConfig (
'ObjectCutFlow')
413 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
414 configSeq.setOptionValue (
'.selectionName',
'tight')
417 if geometry
is not LHCPeriod.Run4:
418 for sel_name, sel_cuts
in exampleSelectionCuts.items():
419 configSeq += config.makeConfig(
'EventSelection' )
420 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
421 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
422 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
423 configSeq.setOptionValue (
'.met',
'AnaMET')
424 configSeq.setOptionValue (
'.btagDecoration',
'ftag_select_ftag')
425 configSeq.setOptionValue (
'.selectionName', sel_name)
426 configSeq.setOptionValue (
'.selectionCuts', sel_cuts)
427 configSeq.setOptionValue (
'.cutFlowHistograms',
True)
428 configSeq.setOptionValue (
'.noFilter',
True)
430 if dataType
is not DataType.Data :
432 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
434 configSeq += config.makeConfig (
'Bootstraps')
435 configSeq.setOptionValue (
'.nReplicas', 2000 )
436 configSeq.setOptionValue (
'.skipOnMC',
False)
439 configSeq += config.makeConfig (
'LeptonSF')
440 if geometry
is not LHCPeriod.Run2:
441 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
442 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
443 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
444 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
447 configSeq += config.makeConfig (
'Thinning')
448 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
449 configSeq.setOptionValue (
'.selectionName',
'loose')
450 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
451 configSeq += config.makeConfig (
'Thinning')
452 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
453 configSeq.setOptionValue (
'.selectionName',
'tight')
454 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
455 configSeq += config.makeConfig (
'Thinning')
456 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
457 configSeq.setOptionValue (
'.selectionName',
'medium')
458 configSeq.setOptionValue (
'.outputName',
'OutMuons')
459 configSeq += config.makeConfig (
'Thinning')
460 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
461 configSeq.setOptionValue (
'.selectionName',
'tight')
462 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
463 configSeq += config.makeConfig (
'Thinning')
464 configSeq.setOptionValue (
'.containerName',
'AnaJets')
465 configSeq.setOptionValue (
'.outputName',
'OutJets')
467 configSeq += config.makeConfig (
'Thinning')
468 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
469 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
470 configSeq += config.makeConfig (
'Thinning')
471 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
472 configSeq.setOptionValue (
'.selectionName',
'tight')
473 configSeq.setOptionValue (
'.outputName',
'OutTracks')
475 configSeq += config.makeConfig (
'Thinning')
476 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
477 configSeq.setOptionValue (
'.skipOnData',
True)
478 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
479 configSeq += config.makeConfig (
'Thinning')
480 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
481 configSeq.setOptionValue (
'.skipOnData',
True)
482 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
483 configSeq += config.makeConfig (
'Thinning')
484 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
485 configSeq.setOptionValue (
'.skipOnData',
True)
486 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
487 configSeq += config.makeConfig (
'Thinning')
488 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
489 configSeq.setOptionValue (
'.skipOnData',
True)
490 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
491 configSeq += config.makeConfig (
'Thinning')
492 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
493 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
494 configSeq.setOptionValue (
'.skipOnData',
True)
496 configSeq += config.makeConfig (
'Output')
497 configSeq.setOptionValue (
'.treeName',
'analysis')
498 configSeq.setOptionValue (
'.vars', [
499 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
500 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
502 configSeq.setOptionValue (
'.metVars', [
503 'AnaMET_%SYS%.met -> met_%SYS%',
505 configSeq.setOptionValue (
'.truthMetVars', [
506 'TruthMET_NOSYS.met -> truth_met',
508 configSeq.setOptionValue (
'.containers', outputContainers)
509 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
510 configSeq.setOptionValue (
'.commands', [
511 'disable actualInteractionsPerCrossing',
515 configSeq += config.makeConfig (
'PrintConfiguration')
521 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
522 configSeq.fullConfigure (configAccumulator)
525 configSeq.printOptions()
527 return configAccumulator.CA
if isAthena
else None