66 geometry=None, autoconfigFromFlags=None, noSystematics=None,
67 onlyNominalOR=False, forceEGammaFullSimConfig=False,
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 (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
200 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
201 configSeq.setOptionValue (
'.minPt', electronMinPt)
202 configSeq += config.makeConfig (
'Electrons.WorkingPoint')
203 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
204 configSeq.setOptionValue (
'.selectionName',
'loose')
205 configSeq.setOptionValue (
'.forceFullSimConfig', forceEGammaFullSimConfig)
207 configSeq.setOptionValue (
'.identificationWP',
'LooseBLayerLH')
209 configSeq.setOptionValue (
'.identificationWP',
'LooseDNN')
210 configSeq.setOptionValue (
'.isolationWP',
'Tight_VarRad')
211 configSeq.setOptionValue (
'.chargeIDSelectionRun2',
True)
212 configSeq.setOptionValue (
'.addChargeMisIDSF', geometry
is LHCPeriod.Run2)
213 configSeq += config.makeConfig(
'Electrons.TriggerSF')
214 configSeq.setOptionValue(
'.containerName',
'AnaElectrons')
215 configSeq.setOptionValue(
'.electronID',
'LooseBLayerLH')
216 configSeq.setOptionValue(
'.electronIsol',
'Tight_VarRad')
217 configSeq.setOptionValue(
'.triggerChainsPerYear', triggerChainsPerYear)
219 configSeq += config.makeConfig (
'Electrons.IFFClassification')
220 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
221 configSeq += config.makeConfig (
'Electrons.MCTCClassification')
222 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
223 configSeq.setOptionValue (
'.prefix',
'truth_')
225 configSeq += config.makeConfig (
'Electrons.PtEtaSelection')
226 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
227 configSeq.setOptionValue (
'.minPt', electronMinPt)
231 configSeq += config.makeConfig (
'Photons')
232 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
233 configSeq.setOptionValue (
'.decorateTruth',
True)
234 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
235 configSeq.setOptionValue (
'.recomputeIsEM',
False)
236 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
237 configSeq += config.makeConfig (
'Photons.WorkingPoint')
238 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
239 configSeq.setOptionValue (
'.selectionName',
'tight')
240 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
241 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
242 configSeq.setOptionValue (
'.qualityWP',
'Tight')
243 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
244 configSeq.setOptionValue (
'.recomputeIsEM',
False)
246 configSeq += config.makeConfig (
'Photons.PtEtaSelection')
247 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
248 configSeq.setOptionValue (
'.minPt', photonMinPt)
257 configSeq += config.makeConfig (
'TauJets')
258 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
259 configSeq.setOptionValue (
'.decorateTruth',
True)
260 configSeq += config.makeConfig (
'TauJets.WorkingPoint')
261 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
262 configSeq.setOptionValue (
'.selectionName',
'tight')
263 configSeq.setOptionValue (
'.quality',
'Tight')
265 configSeq += config.makeConfig(
'TauJets.TriggerSF')
266 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
267 configSeq.setOptionValue(
'.tauID',
'Tight')
268 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
270 configSeq += config.makeConfig (
'TauJets.MCTCClassification')
271 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
272 configSeq.setOptionValue (
'.prefix',
'truth_')
276 configSeq += config.makeConfig (
'InDetTracks')
277 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
278 configSeq.setOptionValue (
'.minPt', 500)
279 configSeq.setOptionValue (
'.maxEta', 2.5)
280 configSeq.setOptionValue (
'.outputTrackSummaryInfo',
True)
282 configSeq += config.makeConfig (
'InDetTracks.WorkingPoint')
283 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
284 configSeq.setOptionValue (
'.selectionName',
'tight')
285 configSeq.setOptionValue (
'.cutLevel',
'TightPrimary')
289 configSeq += config.makeConfig(
'SystObjectLink')
290 configSeq.setOptionValue (
'.containerName',
'AnaJets')
292 configSeq += config.makeConfig(
'SystObjectLink')
293 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
294 configSeq += config.makeConfig(
'SystObjectLink')
295 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
296 configSeq += config.makeConfig(
'SystObjectLink')
297 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
298 configSeq += config.makeConfig(
'SystObjectLink')
299 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
300 configSeq += config.makeConfig(
'SystObjectLink')
301 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
305 configSeq += config.makeConfig (
'PL_Electrons')
306 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
307 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification')
308 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
309 configSeq.setOptionValue (
'.prefix',
'')
310 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection')
311 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
312 configSeq.setOptionValue (
'.skipOnData',
True)
313 configSeq.setOptionValue (
'.useDressedProperties',
True)
314 configSeq.setOptionValue (
'.minPt', 20e3)
316 configSeq += config.makeConfig (
'PL_Muons')
317 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
318 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification')
319 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
320 configSeq.setOptionValue (
'.prefix',
'')
321 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection')
322 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
323 configSeq.setOptionValue (
'.skipOnData',
True)
324 configSeq.setOptionValue (
'.useDressedProperties',
True)
325 configSeq.setOptionValue (
'.minPt', 20e3)
327 configSeq += config.makeConfig (
'PL_Neutrinos')
328 configSeq.setOptionValue (
'.skipOnData',
True)
330 configSeq += config.makeConfig (
'PL_Jets')
331 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
332 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection')
333 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
334 configSeq.setOptionValue (
'.skipOnData',
True)
335 configSeq.setOptionValue (
'.minPt', 20e3)
337 configSeq += config.makeConfig (
'PL_Taus')
338 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
339 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification')
340 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
341 configSeq.setOptionValue (
'.prefix',
'')
342 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection')
343 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
344 configSeq.setOptionValue (
'.skipOnData',
True)
345 configSeq.setOptionValue (
'.minPt', 20e3)
347 configSeq += config.makeConfig (
'PL_Photons')
348 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
349 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection')
350 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
351 configSeq.setOptionValue (
'.skipOnData',
True)
352 configSeq.setOptionValue (
'.minPt', 20e3)
354 configSeq += config.makeConfig (
'PL_MissingET')
355 configSeq.setOptionValue (
'.skipOnData',
True)
357 configSeq += config.makeConfig (
'PL_OverlapRemoval')
358 configSeq.setOptionValue (
'.skipOnData',
True)
359 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
360 configSeq.setOptionValue (
'.muons',
'TruthMuons')
361 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
362 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
363 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
366 configSeq += config.makeConfig (
'PartonHistory')
367 configSeq.setOptionValue (
'.history',
'Ttbar')
370 configSeq += config.makeConfig (
'MissingET')
371 configSeq.setOptionValue (
'.containerName',
'AnaMET')
372 configSeq.setOptionValue (
'.jets',
'AnaJets')
373 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
374 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
375 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
384 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
388 configSeq += config.makeConfig(
'OverlapRemoval' )
389 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
390 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
393 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
394 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
395 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
396 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
397 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
398 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
402 configSeq += config.makeConfig (
'ObjectCutFlow')
403 configSeq.setOptionValue (
'.containerName',
'AnaJets')
404 configSeq.setOptionValue (
'.selectionName',
'jvt')
405 configSeq += config.makeConfig (
'ObjectCutFlow')
406 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
407 configSeq.setOptionValue (
'.selectionName',
'loose')
408 configSeq += config.makeConfig (
'ObjectCutFlow')
409 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
410 configSeq.setOptionValue (
'.selectionName',
'tight')
411 configSeq += config.makeConfig (
'ObjectCutFlow')
412 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
413 configSeq.setOptionValue (
'.selectionName',
'medium')
414 configSeq += config.makeConfig (
'ObjectCutFlow')
415 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
416 configSeq.setOptionValue (
'.selectionName',
'tight')
417 configSeq += config.makeConfig (
'ObjectCutFlow')
418 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
419 configSeq.setOptionValue (
'.selectionName',
'tight')
422 if geometry
is not LHCPeriod.Run4:
423 for sel_name, sel_cuts
in exampleSelectionCuts.items():
424 configSeq += config.makeConfig(
'EventSelection' )
425 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
426 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
427 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
428 configSeq.setOptionValue (
'.met',
'AnaMET')
429 configSeq.setOptionValue (
'.btagDecoration',
'ftag_select_ftag')
430 configSeq.setOptionValue (
'.selectionName', sel_name)
431 configSeq.setOptionValue (
'.selectionCuts', sel_cuts)
432 configSeq.setOptionValue (
'.cutFlowHistograms',
True)
433 configSeq.setOptionValue (
'.noFilter',
True)
435 if dataType
is not DataType.Data :
437 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
439 configSeq += config.makeConfig (
'Bootstraps')
440 configSeq.setOptionValue (
'.nReplicas', 2000 )
441 configSeq.setOptionValue (
'.skipOnMC',
False)
444 configSeq += config.makeConfig (
'LeptonSF')
445 if geometry
is not LHCPeriod.Run2:
446 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
447 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
448 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
449 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
452 configSeq += config.makeConfig (
'Thinning')
453 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
454 configSeq.setOptionValue (
'.selectionName',
'loose')
455 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
456 configSeq += config.makeConfig (
'Thinning')
457 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
458 configSeq.setOptionValue (
'.selectionName',
'tight')
459 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
460 configSeq += config.makeConfig (
'Thinning')
461 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
462 configSeq.setOptionValue (
'.selectionName',
'medium')
463 configSeq.setOptionValue (
'.outputName',
'OutMuons')
464 configSeq += config.makeConfig (
'Thinning')
465 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
466 configSeq.setOptionValue (
'.selectionName',
'tight')
467 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
468 configSeq += config.makeConfig (
'Thinning')
469 configSeq.setOptionValue (
'.containerName',
'AnaJets')
470 configSeq.setOptionValue (
'.outputName',
'OutJets')
472 configSeq += config.makeConfig (
'Thinning')
473 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
474 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
475 configSeq += config.makeConfig (
'Thinning')
476 configSeq.setOptionValue (
'.containerName',
'AnaTracks')
477 configSeq.setOptionValue (
'.selectionName',
'tight')
478 configSeq.setOptionValue (
'.outputName',
'OutTracks')
480 configSeq += config.makeConfig (
'Thinning')
481 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
482 configSeq.setOptionValue (
'.skipOnData',
True)
483 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
484 configSeq += config.makeConfig (
'Thinning')
485 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
486 configSeq.setOptionValue (
'.skipOnData',
True)
487 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
488 configSeq += config.makeConfig (
'Thinning')
489 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
490 configSeq.setOptionValue (
'.skipOnData',
True)
491 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
492 configSeq += config.makeConfig (
'Thinning')
493 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
494 configSeq.setOptionValue (
'.skipOnData',
True)
495 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
496 configSeq += config.makeConfig (
'Thinning')
497 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
498 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
499 configSeq.setOptionValue (
'.skipOnData',
True)
501 configSeq += config.makeConfig (
'Output')
502 configSeq.setOptionValue (
'.treeName',
'analysis')
503 configSeq.setOptionValue (
'.vars', [
504 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
505 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
507 configSeq.setOptionValue (
'.metVars', [
508 'AnaMET_%SYS%.met -> met_%SYS%',
510 configSeq.setOptionValue (
'.truthMetVars', [
511 'TruthMET_NOSYS.met -> truth_met',
513 configSeq.setOptionValue (
'.containers', outputContainers)
514 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
515 configSeq.setOptionValue (
'.commands', [
516 'disable actualInteractionsPerCrossing',
520 configSeq += config.makeConfig (
'PrintConfiguration')
526 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
527 configSeq.fullConfigure (configAccumulator)
530 configSeq.printOptions()
532 return configAccumulator.CA
if isAthena
else None