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',
87 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
88 'truth_el_' :
'OutTruthElectrons',
89 'truth_ph_' :
'OutTruthPhotons',
90 'truth_tau_':
'OutTruthTaus',
91 'truth_jet_':
'OutTruthJets',
92 'truth_met_':
'TruthMET'}
95 from AnalysisAlgorithmsConfig.ConfigFactory
import ConfigFactory
96 config = ConfigFactory()
98 configSeq += config.makeConfig(
'CommonServices')
99 configSeq.setOptionValue(
'.systematicsHistogram',
'systematicsList')
100 configSeq.setOptionValue(
'.enableExpertMode',
True)
102 configSeq += config.makeConfig(
'PileupReweighting')
106 configSeq += config.makeConfig (
'EventCleaning')
107 configSeq.setOptionValue (
'.runEventCleaning',
True)
111 if geometry
is LHCPeriod.Run2:
113 configSeq += config.makeConfig(
'Trigger' )
114 configSeq.setOptionValue (
'.triggerChainsPerYear', triggerChainsPerYear )
115 configSeq.setOptionValue (
'.noFilter',
True )
116 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose' )
117 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight' )
118 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium' )
119 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight' )
120 configSeq.setOptionValue (
'.electronID',
'Tight' )
121 configSeq.setOptionValue (
'.electronIsol',
'Tight_VarRad')
122 configSeq.setOptionValue (
'.photonIsol',
'TightCaloOnly')
123 configSeq.setOptionValue (
'.muonID',
'Tight')
124 configSeq.setOptionValue (
'.triggerMatchingChainsPerYear', triggerMatchingChainsPerYear)
127 configSeq += config.makeConfig(
'Jets',
128 containerName=
'AnaJets',
129 jetCollection=
'AntiKt4EMPFlowJets')
130 configSeq.setOptionValue (
'.runJvtUpdate',
False )
131 configSeq.setOptionValue (
'.runNNJvtUpdate',
True )
132 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
134 configSeq += config.makeConfig(
'Jets.JVT' )
135 configSeq.setOptionValue (
'.containerName',
'AnaJets')
137 configSeq += config.makeConfig(
'Jets.FTagTriggerMatching' )
138 configSeq.setOptionValue(
'.containerName',
'AnaJets')
139 configSeq.setOptionValue(
'.triggerChainsPerYear', bjetTriggerChainsPerYear)
143 if geometry
is not LHCPeriod.Run4:
146 btagWP =
"FixedCutBEff_65"
147 configSeq += config.makeConfig(
'Jets.FlavourTagging' )
148 configSeq.setOptionValue (
'.containerName',
'AnaJets')
149 configSeq.setOptionValue (
'.selectionName',
'ftag')
150 configSeq.setOptionValue (
'.btagger', btagger)
151 configSeq.setOptionValue (
'.btagWP', btagWP)
152 configSeq.setOptionValue (
'.saveScores',
'All')
154 configSeq += config.makeConfig(
'Jets.FlavourTaggingEventSF' )
155 configSeq.setOptionValue (
'.containerName',
'AnaJets.baselineJvt')
156 configSeq.setOptionValue (
'.btagger', btagger)
159 configSeq += config.makeConfig(
'Jets',
160 containerName=
'AnaLargeRJets',
161 jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
162 outputContainers[
'larger_jet_'] =
'OutLargeRJets'
163 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
168 configSeq += config.makeConfig (
'Electrons')
169 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
170 configSeq.setOptionValue (
'.decorateTruth',
True)
171 configSeq.setOptionValue (
'.decorateCaloClusterEta',
True)
172 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
173 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
174 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
175 configSeq.setOptionValue (
'.minPt', electronMinPt)
176 configSeq += config.makeConfig (
'Electrons.WorkingPoint')
177 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
178 configSeq.setOptionValue (
'.selectionName',
'loose')
179 configSeq.setOptionValue (
'.forceFullSimConfig', forceEGammaFullSimConfig)
181 configSeq.setOptionValue (
'.identificationWP',
'LooseBLayerLH')
183 configSeq.setOptionValue (
'.identificationWP',
'LooseDNN')
184 configSeq.setOptionValue (
'.isolationWP',
'Tight_VarRad')
185 configSeq.setOptionValue (
'.chargeIDSelectionRun2',
True)
186 configSeq.setOptionValue (
'.addChargeMisIDSF', geometry
is LHCPeriod.Run2)
187 configSeq += config.makeConfig(
'Electrons.TriggerSF')
188 configSeq.setOptionValue(
'.containerName',
'AnaElectrons')
189 configSeq.setOptionValue(
'.electronID',
'LooseBLayerLH')
190 configSeq.setOptionValue(
'.electronIsol',
'Tight_VarRad')
191 configSeq.setOptionValue(
'.triggerChainsPerYear', triggerChainsPerYear)
193 configSeq += config.makeConfig (
'Electrons.IFFClassification')
194 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
195 configSeq += config.makeConfig (
'Electrons.MCTCClassification')
196 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
197 configSeq.setOptionValue (
'.prefix',
'truth_')
199 configSeq += config.makeConfig (
'Electrons.PtEtaSelection')
200 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
201 configSeq.setOptionValue (
'.minPt', electronMinPt)
205 configSeq += config.makeConfig (
'Photons')
206 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
207 configSeq.setOptionValue (
'.decorateTruth',
True)
208 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
209 configSeq.setOptionValue (
'.recomputeIsEM',
False)
210 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
211 configSeq += config.makeConfig (
'Photons.WorkingPoint')
212 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
213 configSeq.setOptionValue (
'.selectionName',
'tight')
214 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
215 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
216 configSeq.setOptionValue (
'.qualityWP',
'Tight')
217 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
218 configSeq.setOptionValue (
'.recomputeIsEM',
False)
220 configSeq += config.makeConfig (
'Photons.PtEtaSelection')
221 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
222 configSeq.setOptionValue (
'.minPt', photonMinPt)
226 configSeq += config.makeConfig (
'Muons')
227 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
228 configSeq.setOptionValue (
'.decorateTruth',
True)
229 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
230 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
232 configSeq += config.makeConfig (
'Muons.WorkingPoint')
233 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
234 configSeq.setOptionValue (
'.selectionName',
'medium')
235 configSeq.setOptionValue (
'.quality',
'Medium')
236 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
238 configSeq += config.makeConfig (
'Muons.IFFClassification')
239 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
240 configSeq += config.makeConfig (
'Muons.MCTCClassification')
241 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
242 configSeq.setOptionValue (
'.prefix',
'truth_')
251 configSeq += config.makeConfig (
'TauJets')
252 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
253 configSeq.setOptionValue (
'.decorateTruth',
True)
254 configSeq += config.makeConfig (
'TauJets.WorkingPoint')
255 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
256 configSeq.setOptionValue (
'.selectionName',
'tight')
257 configSeq.setOptionValue (
'.quality',
'Tight')
259 configSeq += config.makeConfig(
'TauJets.TriggerSF')
260 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
261 configSeq.setOptionValue(
'.tauID',
'Tight')
262 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
264 configSeq += config.makeConfig (
'TauJets.MCTCClassification')
265 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
266 configSeq.setOptionValue (
'.prefix',
'truth_')
270 configSeq += config.makeConfig(
'SystObjectLink')
271 configSeq.setOptionValue (
'.containerName',
'AnaJets')
273 configSeq += config.makeConfig(
'SystObjectLink')
274 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
275 configSeq += config.makeConfig(
'SystObjectLink')
276 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
277 configSeq += config.makeConfig(
'SystObjectLink')
278 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
279 configSeq += config.makeConfig(
'SystObjectLink')
280 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
281 configSeq += config.makeConfig(
'SystObjectLink')
282 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
286 configSeq += config.makeConfig (
'PL_Electrons')
287 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
288 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification')
289 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
290 configSeq.setOptionValue (
'.prefix',
'')
291 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection')
292 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
293 configSeq.setOptionValue (
'.skipOnData',
True)
294 configSeq.setOptionValue (
'.useDressedProperties',
True)
295 configSeq.setOptionValue (
'.minPt', 20e3)
297 configSeq += config.makeConfig (
'PL_Muons')
298 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
299 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification')
300 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
301 configSeq.setOptionValue (
'.prefix',
'')
302 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection')
303 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
304 configSeq.setOptionValue (
'.skipOnData',
True)
305 configSeq.setOptionValue (
'.useDressedProperties',
True)
306 configSeq.setOptionValue (
'.minPt', 20e3)
308 configSeq += config.makeConfig (
'PL_Neutrinos')
309 configSeq.setOptionValue (
'.skipOnData',
True)
311 configSeq += config.makeConfig (
'PL_Jets')
312 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
313 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection')
314 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
315 configSeq.setOptionValue (
'.skipOnData',
True)
316 configSeq.setOptionValue (
'.minPt', 20e3)
318 configSeq += config.makeConfig (
'PL_Taus')
319 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
320 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification')
321 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
322 configSeq.setOptionValue (
'.prefix',
'')
323 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection')
324 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
325 configSeq.setOptionValue (
'.skipOnData',
True)
326 configSeq.setOptionValue (
'.minPt', 20e3)
328 configSeq += config.makeConfig (
'PL_Photons')
329 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
330 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection')
331 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
332 configSeq.setOptionValue (
'.skipOnData',
True)
333 configSeq.setOptionValue (
'.minPt', 20e3)
335 configSeq += config.makeConfig (
'PL_MissingET')
336 configSeq.setOptionValue (
'.skipOnData',
True)
338 configSeq += config.makeConfig (
'PL_OverlapRemoval')
339 configSeq.setOptionValue (
'.skipOnData',
True)
340 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
341 configSeq.setOptionValue (
'.muons',
'TruthMuons')
342 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
343 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
344 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
347 if dataType
is not DataType.Data :
349 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
353 configSeq += config.makeConfig (
'MissingET')
354 configSeq.setOptionValue (
'.containerName',
'AnaMET')
355 configSeq.setOptionValue (
'.jets',
'AnaJets')
356 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
357 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
358 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
367 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
371 configSeq += config.makeConfig(
'OverlapRemoval' )
372 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
373 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
376 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
377 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
378 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
379 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
380 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
381 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
385 configSeq += config.makeConfig (
'ObjectCutFlow')
386 configSeq.setOptionValue (
'.containerName',
'AnaJets')
387 configSeq.setOptionValue (
'.selectionName',
'jvt')
388 configSeq += config.makeConfig (
'ObjectCutFlow')
389 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
390 configSeq.setOptionValue (
'.selectionName',
'loose')
391 configSeq += config.makeConfig (
'ObjectCutFlow')
392 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
393 configSeq.setOptionValue (
'.selectionName',
'tight')
394 configSeq += config.makeConfig (
'ObjectCutFlow')
395 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
396 configSeq.setOptionValue (
'.selectionName',
'medium')
397 configSeq += config.makeConfig (
'ObjectCutFlow')
398 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
399 configSeq.setOptionValue (
'.selectionName',
'tight')
402 if geometry
is not LHCPeriod.Run4:
409 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
410 makeMultipleEventSelectionConfigs(configSeq, electrons =
'AnaElectrons.loose', muons =
'AnaMuons.medium', jets =
'AnaJets.baselineJvt',
411 met =
'AnaMET', btagDecoration =
'ftag_select_ftag',
412 selectionCutsDict = exampleSelectionCuts, noFilter =
True,
413 cutFlowHistograms =
True)
415 configSeq += config.makeConfig (
'Bootstraps')
416 configSeq.setOptionValue (
'.nReplicas', 2000 )
417 configSeq.setOptionValue (
'.skipOnMC',
False)
420 configSeq += config.makeConfig (
'LeptonSF')
421 if geometry
is not LHCPeriod.Run2:
422 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
423 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
424 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
425 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
428 configSeq += config.makeConfig (
'Thinning')
429 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
430 configSeq.setOptionValue (
'.selectionName',
'loose')
431 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
432 configSeq += config.makeConfig (
'Thinning')
433 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
434 configSeq.setOptionValue (
'.selectionName',
'tight')
435 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
436 configSeq += config.makeConfig (
'Thinning')
437 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
438 configSeq.setOptionValue (
'.selectionName',
'medium')
439 configSeq.setOptionValue (
'.outputName',
'OutMuons')
440 configSeq += config.makeConfig (
'Thinning')
441 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
442 configSeq.setOptionValue (
'.selectionName',
'tight')
443 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
444 configSeq += config.makeConfig (
'Thinning')
445 configSeq.setOptionValue (
'.containerName',
'AnaJets')
446 configSeq.setOptionValue (
'.outputName',
'OutJets')
448 configSeq += config.makeConfig (
'Thinning')
449 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
450 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
452 configSeq += config.makeConfig (
'Thinning')
453 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
454 configSeq.setOptionValue (
'.skipOnData',
True)
455 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
456 configSeq += config.makeConfig (
'Thinning')
457 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
458 configSeq.setOptionValue (
'.skipOnData',
True)
459 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
460 configSeq += config.makeConfig (
'Thinning')
461 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
462 configSeq.setOptionValue (
'.skipOnData',
True)
463 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
464 configSeq += config.makeConfig (
'Thinning')
465 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
466 configSeq.setOptionValue (
'.skipOnData',
True)
467 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
468 configSeq += config.makeConfig (
'Thinning')
469 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
470 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
471 configSeq.setOptionValue (
'.skipOnData',
True)
473 configSeq += config.makeConfig (
'Output')
474 configSeq.setOptionValue (
'.treeName',
'analysis')
475 configSeq.setOptionValue (
'.vars', [
476 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
478 configSeq.setOptionValue (
'.metVars', [
479 'AnaMET_%SYS%.met -> met_%SYS%',
481 configSeq.setOptionValue (
'.truthMetVars', [
482 'TruthMET_NOSYS.met -> truth_met',
484 configSeq.setOptionValue (
'.containers', outputContainers)
485 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
486 configSeq.setOptionValue (
'.commands', [
487 'disable actualInteractionsPerCrossing',
491 configSeq += config.makeConfig (
'PrintConfiguration')
497 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
498 configSeq.fullConfigure (configAccumulator)
501 configSeq.printOptions()
503 from AnaAlgorithm.DualUseConfig
import isAthena, useComponentAccumulator
504 if isAthena
and useComponentAccumulator:
505 return configAccumulator.CA