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)
188 configSeq += config.makeConfig (
'Electrons.IFFClassification')
189 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
190 configSeq += config.makeConfig (
'Electrons.MCTCClassification')
191 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
192 configSeq.setOptionValue (
'.prefix',
'truth_')
194 configSeq += config.makeConfig (
'Electrons.PtEtaSelection')
195 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
196 configSeq.setOptionValue (
'.minPt', electronMinPt)
200 configSeq += config.makeConfig (
'Photons')
201 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
202 configSeq.setOptionValue (
'.decorateTruth',
True)
203 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
204 configSeq.setOptionValue (
'.recomputeIsEM',
False)
205 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
206 configSeq += config.makeConfig (
'Photons.WorkingPoint')
207 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
208 configSeq.setOptionValue (
'.selectionName',
'tight')
209 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
210 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
211 configSeq.setOptionValue (
'.qualityWP',
'Tight')
212 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
213 configSeq.setOptionValue (
'.recomputeIsEM',
False)
215 configSeq += config.makeConfig (
'Photons.PtEtaSelection')
216 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
217 configSeq.setOptionValue (
'.minPt', photonMinPt)
221 configSeq += config.makeConfig (
'Muons')
222 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
223 configSeq.setOptionValue (
'.decorateTruth',
True)
224 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
225 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
227 configSeq += config.makeConfig (
'Muons.WorkingPoint')
228 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
229 configSeq.setOptionValue (
'.selectionName',
'medium')
230 configSeq.setOptionValue (
'.quality',
'Medium')
231 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
233 configSeq += config.makeConfig (
'Muons.IFFClassification')
234 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
235 configSeq += config.makeConfig (
'Muons.MCTCClassification')
236 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
237 configSeq.setOptionValue (
'.prefix',
'truth_')
246 configSeq += config.makeConfig (
'TauJets')
247 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
248 configSeq.setOptionValue (
'.decorateTruth',
True)
249 configSeq += config.makeConfig (
'TauJets.WorkingPoint')
250 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
251 configSeq.setOptionValue (
'.selectionName',
'tight')
252 configSeq.setOptionValue (
'.quality',
'Tight')
254 configSeq += config.makeConfig(
'TauJets.TriggerSF')
255 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
256 configSeq.setOptionValue(
'.tauID',
'Tight')
257 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
259 configSeq += config.makeConfig (
'TauJets.MCTCClassification')
260 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
261 configSeq.setOptionValue (
'.prefix',
'truth_')
265 configSeq += config.makeConfig(
'SystObjectLink')
266 configSeq.setOptionValue (
'.containerName',
'AnaJets')
268 configSeq += config.makeConfig(
'SystObjectLink')
269 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
270 configSeq += config.makeConfig(
'SystObjectLink')
271 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
272 configSeq += config.makeConfig(
'SystObjectLink')
273 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
274 configSeq += config.makeConfig(
'SystObjectLink')
275 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
276 configSeq += config.makeConfig(
'SystObjectLink')
277 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
281 configSeq += config.makeConfig (
'PL_Electrons')
282 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
283 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification')
284 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
285 configSeq.setOptionValue (
'.prefix',
'')
286 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection')
287 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
288 configSeq.setOptionValue (
'.skipOnData',
True)
289 configSeq.setOptionValue (
'.useDressedProperties',
True)
290 configSeq.setOptionValue (
'.minPt', 20e3)
292 configSeq += config.makeConfig (
'PL_Muons')
293 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
294 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification')
295 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
296 configSeq.setOptionValue (
'.prefix',
'')
297 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection')
298 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
299 configSeq.setOptionValue (
'.skipOnData',
True)
300 configSeq.setOptionValue (
'.useDressedProperties',
True)
301 configSeq.setOptionValue (
'.minPt', 20e3)
303 configSeq += config.makeConfig (
'PL_Neutrinos')
304 configSeq.setOptionValue (
'.skipOnData',
True)
306 configSeq += config.makeConfig (
'PL_Jets')
307 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
308 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection')
309 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
310 configSeq.setOptionValue (
'.skipOnData',
True)
311 configSeq.setOptionValue (
'.minPt', 20e3)
313 configSeq += config.makeConfig (
'PL_Taus')
314 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
315 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification')
316 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
317 configSeq.setOptionValue (
'.prefix',
'')
318 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection')
319 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
320 configSeq.setOptionValue (
'.skipOnData',
True)
321 configSeq.setOptionValue (
'.minPt', 20e3)
323 configSeq += config.makeConfig (
'PL_Photons')
324 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
325 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection')
326 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
327 configSeq.setOptionValue (
'.skipOnData',
True)
328 configSeq.setOptionValue (
'.minPt', 20e3)
330 configSeq += config.makeConfig (
'PL_MissingET')
331 configSeq.setOptionValue (
'.skipOnData',
True)
333 configSeq += config.makeConfig (
'PL_OverlapRemoval')
334 configSeq.setOptionValue (
'.skipOnData',
True)
335 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
336 configSeq.setOptionValue (
'.muons',
'TruthMuons')
337 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
338 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
339 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
342 if dataType
is not DataType.Data :
344 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
348 configSeq += config.makeConfig (
'MissingET')
349 configSeq.setOptionValue (
'.containerName',
'AnaMET')
350 configSeq.setOptionValue (
'.jets',
'AnaJets')
351 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
352 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
353 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
362 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
366 configSeq += config.makeConfig(
'OverlapRemoval' )
367 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
368 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
371 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
372 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
373 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
374 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
375 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
376 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
380 configSeq += config.makeConfig (
'ObjectCutFlow')
381 configSeq.setOptionValue (
'.containerName',
'AnaJets')
382 configSeq.setOptionValue (
'.selectionName',
'jvt')
383 configSeq += config.makeConfig (
'ObjectCutFlow')
384 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
385 configSeq.setOptionValue (
'.selectionName',
'loose')
386 configSeq += config.makeConfig (
'ObjectCutFlow')
387 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
388 configSeq.setOptionValue (
'.selectionName',
'tight')
389 configSeq += config.makeConfig (
'ObjectCutFlow')
390 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
391 configSeq.setOptionValue (
'.selectionName',
'medium')
392 configSeq += config.makeConfig (
'ObjectCutFlow')
393 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
394 configSeq.setOptionValue (
'.selectionName',
'tight')
397 if geometry
is not LHCPeriod.Run4:
404 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
406 met =
'AnaMET', btagDecoration =
'ftag_select_ftag',
407 selectionCutsDict = exampleSelectionCuts, noFilter =
True,
408 cutFlowHistograms =
True)
410 configSeq += config.makeConfig (
'Bootstraps')
411 configSeq.setOptionValue (
'.nReplicas', 2000 )
412 configSeq.setOptionValue (
'.skipOnMC',
False)
415 configSeq += config.makeConfig (
'LeptonSF')
416 if geometry
is not LHCPeriod.Run2:
417 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
418 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
419 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
420 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
423 configSeq += config.makeConfig (
'Thinning')
424 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
425 configSeq.setOptionValue (
'.selectionName',
'loose')
426 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
427 configSeq += config.makeConfig (
'Thinning')
428 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
429 configSeq.setOptionValue (
'.selectionName',
'tight')
430 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
431 configSeq += config.makeConfig (
'Thinning')
432 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
433 configSeq.setOptionValue (
'.selectionName',
'medium')
434 configSeq.setOptionValue (
'.outputName',
'OutMuons')
435 configSeq += config.makeConfig (
'Thinning')
436 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
437 configSeq.setOptionValue (
'.selectionName',
'tight')
438 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
439 configSeq += config.makeConfig (
'Thinning')
440 configSeq.setOptionValue (
'.containerName',
'AnaJets')
441 configSeq.setOptionValue (
'.outputName',
'OutJets')
443 configSeq += config.makeConfig (
'Thinning')
444 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
445 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
447 configSeq += config.makeConfig (
'Thinning')
448 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
449 configSeq.setOptionValue (
'.skipOnData',
True)
450 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
451 configSeq += config.makeConfig (
'Thinning')
452 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
453 configSeq.setOptionValue (
'.skipOnData',
True)
454 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
455 configSeq += config.makeConfig (
'Thinning')
456 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
457 configSeq.setOptionValue (
'.skipOnData',
True)
458 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
459 configSeq += config.makeConfig (
'Thinning')
460 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
461 configSeq.setOptionValue (
'.skipOnData',
True)
462 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
463 configSeq += config.makeConfig (
'Thinning')
464 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
465 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
466 configSeq.setOptionValue (
'.skipOnData',
True)
468 configSeq += config.makeConfig (
'Output')
469 configSeq.setOptionValue (
'.treeName',
'analysis')
470 configSeq.setOptionValue (
'.vars', [
471 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
473 configSeq.setOptionValue (
'.metVars', [
474 'AnaMET_%SYS%.met -> met_%SYS%',
476 configSeq.setOptionValue (
'.truthMetVars', [
477 'TruthMET_NOSYS.met -> truth_met',
479 configSeq.setOptionValue (
'.containers', outputContainers)
480 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
481 configSeq.setOptionValue (
'.commands', [
482 'disable actualInteractionsPerCrossing',
486 configSeq += config.makeConfig (
'PrintConfiguration')
492 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
493 configSeq.fullConfigure (configAccumulator)
496 configSeq.printOptions()
498 from AnaAlgorithm.DualUseConfig
import isAthena, useComponentAccumulator
499 if isAthena
and useComponentAccumulator:
500 return configAccumulator.CA