59 geometry=None, autoconfigFromFlags=None, noSystematics=None,
60 onlyNominalOR=False, forceEGammaFullSimConfig=False,
61 returnConfigSeq=False,
66 if autoconfigFromFlags
is not None:
68 geometry = autoconfigFromFlags.GeoModel.Run
70 configSeq = ConfigSequence ()
72 outputContainers = {
'mu_' :
'OutMuons',
73 'el_' :
'OutElectrons',
79 outputContainersForMC = {
'truth_mu_' :
'OutTruthMuons',
80 'truth_el_' :
'OutTruthElectrons',
81 'truth_ph_' :
'OutTruthPhotons',
82 'truth_tau_':
'OutTruthTaus',
83 'truth_jet_':
'OutTruthJets',
84 'truth_met_':
'TruthMET'}
87 from AnalysisAlgorithmsConfig.ConfigFactory
import ConfigFactory
88 config = ConfigFactory()
90 configSeq += config.makeConfig(
'CommonServices')
91 configSeq.setOptionValue(
'.systematicsHistogram',
'systematicsList')
93 configSeq += config.makeConfig(
'PileupReweighting')
97 configSeq += config.makeConfig (
'EventCleaning')
98 configSeq.setOptionValue (
'.runEventCleaning',
True)
102 if geometry
is LHCPeriod.Run2:
104 configSeq += config.makeConfig(
'Trigger' )
105 configSeq.setOptionValue (
'.triggerChainsPerYear', triggerChainsPerYear )
106 configSeq.setOptionValue (
'.noFilter',
True )
107 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose' )
108 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight' )
109 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium' )
110 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight' )
111 configSeq.setOptionValue (
'.electronID',
'Tight' )
112 configSeq.setOptionValue (
'.electronIsol',
'Tight_VarRad')
113 configSeq.setOptionValue (
'.photonIsol',
'TightCaloOnly')
114 configSeq.setOptionValue (
'.muonID',
'Tight')
115 configSeq.setOptionValue (
'.triggerMatchingChainsPerYear', triggerMatchingChainsPerYear)
118 configSeq += config.makeConfig(
'Jets',
119 containerName=
'AnaJets',
120 jetCollection=
'AntiKt4EMPFlowJets')
121 configSeq.setOptionValue (
'.runJvtUpdate',
False )
122 configSeq.setOptionValue (
'.runNNJvtUpdate',
True )
123 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
125 configSeq += config.makeConfig(
'Jets.JVT',
126 containerName=
'AnaJets' )
130 if geometry
is not LHCPeriod.Run4:
133 btagWP =
"FixedCutBEff_65"
134 configSeq += config.makeConfig(
'Jets.FlavourTagging',
135 containerName=
'AnaJets',
136 selectionName=
'ftag' )
137 configSeq.setOptionValue (
'.btagger', btagger)
138 configSeq.setOptionValue (
'.btagWP', btagWP)
139 configSeq.setOptionValue (
'.saveScores',
'All')
141 configSeq += config.makeConfig(
'Jets.FlavourTaggingEventSF',
142 containerName=
'AnaJets.baselineJvt')
143 configSeq.setOptionValue (
'.btagger', btagger)
146 configSeq += config.makeConfig(
'Jets',
147 containerName=
'AnaLargeRJets',
148 jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
149 outputContainers[
'larger_jet_'] =
'OutLargeRJets'
150 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
155 configSeq += config.makeConfig (
'Electrons',
156 containerName=
'AnaElectrons' )
157 configSeq.setOptionValue (
'.decorateTruth',
True)
158 configSeq.setOptionValue (
'.decorateCaloClusterEta',
True)
159 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
160 configSeq.setOptionValue (
'.forceFullSimConfig', forceEGammaFullSimConfig)
161 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
162 configSeq += config.makeConfig (
'Electrons.WorkingPoint',
163 containerName=
'AnaElectrons',
164 selectionName=
'loose')
165 configSeq.setOptionValue (
'.forceFullSimConfig', forceEGammaFullSimConfig)
166 configSeq.setOptionValue (
'.noEffSF', geometry
is LHCPeriod.Run2)
168 configSeq.setOptionValue (
'.identificationWP',
'LooseBLayerLH')
170 configSeq.setOptionValue (
'.identificationWP',
'LooseDNN')
171 configSeq.setOptionValue (
'.isolationWP',
'Loose_VarRad')
173 configSeq += config.makeConfig (
'Electrons.IFFClassification',
174 containerName=
'AnaElectrons')
175 configSeq += config.makeConfig (
'Electrons.MCTCClassification',
176 containerName=
'AnaElectrons')
177 configSeq.setOptionValue (
'.prefix',
'truth_')
179 configSeq += config.makeConfig (
'Electrons.PtEtaSelection',
180 containerName=
'AnaElectrons')
181 configSeq.setOptionValue (
'.minPt', electronMinPt)
185 configSeq += config.makeConfig (
'Photons',
186 containerName=
'AnaPhotons' )
187 configSeq.setOptionValue (
'.decorateTruth',
True)
188 configSeq.setOptionValue (
'.forceFullSimConfigForP4', forceEGammaFullSimConfig)
189 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
190 configSeq.setOptionValue (
'.recomputeIsEM',
False)
191 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
192 configSeq += config.makeConfig (
'Photons.WorkingPoint',
193 containerName=
'AnaPhotons',
194 selectionName=
'tight')
195 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
196 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
197 configSeq.setOptionValue (
'.qualityWP',
'Tight')
198 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
199 configSeq.setOptionValue (
'.recomputeIsEM',
False)
201 configSeq += config.makeConfig (
'Photons.PtEtaSelection',
202 containerName=
'AnaPhotons')
203 configSeq.setOptionValue (
'.minPt', photonMinPt)
207 configSeq += config.makeConfig (
'Muons',
208 containerName=
'AnaMuons')
209 configSeq.setOptionValue (
'.decorateTruth',
True)
210 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
211 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
212 configSeq += config.makeConfig (
'Muons.WorkingPoint',
213 containerName=
'AnaMuons',
214 selectionName=
'medium')
215 configSeq.setOptionValue (
'.quality',
'Medium')
216 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
218 configSeq += config.makeConfig (
'Muons.IFFClassification',
219 containerName=
'AnaMuons')
220 configSeq += config.makeConfig (
'Muons.MCTCClassification',
221 containerName=
'AnaMuons')
222 configSeq.setOptionValue (
'.prefix',
'truth_')
231 configSeq += config.makeConfig (
'TauJets',
232 containerName=
'AnaTauJets')
233 configSeq.setOptionValue (
'.decorateTruth',
True)
234 configSeq += config.makeConfig (
'TauJets.WorkingPoint',
235 containerName=
'AnaTauJets',
236 selectionName=
'tight')
237 configSeq.setOptionValue (
'.quality',
'Tight')
239 configSeq += config.makeConfig(
'TauJets.TriggerSF')
240 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
241 configSeq.setOptionValue(
'.tauID',
'Tight')
242 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
244 configSeq += config.makeConfig (
'TauJets.MCTCClassification',
245 containerName=
'AnaTauJets')
246 configSeq.setOptionValue (
'.prefix',
'truth_')
250 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaJets')
252 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaLargeRJets')
253 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaElectrons')
254 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaPhotons')
255 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaMuons')
256 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaTauJets')
260 configSeq += config.makeConfig (
'PL_Electrons',
261 containerName=
'TruthElectrons')
262 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification',
263 containerName=
'TruthElectrons')
264 configSeq.setOptionValue (
'.prefix',
'')
265 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection',
266 containerName=
'TruthElectrons')
267 configSeq.setOptionValue (
'.skipOnData',
True)
268 configSeq.setOptionValue (
'.useDressedProperties',
True)
269 configSeq.setOptionValue (
'.minPt', 20e3)
271 configSeq += config.makeConfig (
'PL_Muons',
272 containerName=
'TruthMuons')
273 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification',
274 containerName=
'TruthMuons')
275 configSeq.setOptionValue (
'.prefix',
'')
276 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection',
277 containerName=
'TruthMuons')
278 configSeq.setOptionValue (
'.skipOnData',
True)
279 configSeq.setOptionValue (
'.useDressedProperties',
True)
280 configSeq.setOptionValue (
'.minPt', 20e3)
282 configSeq += config.makeConfig (
'PL_Neutrinos')
283 configSeq.setOptionValue (
'.skipOnData',
True)
285 configSeq += config.makeConfig (
'PL_Jets',
286 containerName=
'AntiKt4TruthDressedWZJets')
287 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection',
288 containerName=
'AntiKt4TruthDressedWZJets')
289 configSeq.setOptionValue (
'.skipOnData',
True)
290 configSeq.setOptionValue (
'.minPt', 20e3)
292 configSeq += config.makeConfig (
'PL_Taus',
293 containerName=
'TruthTaus')
294 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification',
295 containerName=
'TruthTaus')
296 configSeq.setOptionValue (
'.prefix',
'')
297 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection',
298 containerName=
'TruthTaus')
299 configSeq.setOptionValue (
'.skipOnData',
True)
300 configSeq.setOptionValue (
'.minPt', 20e3)
302 configSeq += config.makeConfig (
'PL_Photons',
303 containerName=
'TruthPhotons')
304 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection',
305 containerName=
'TruthPhotons')
306 configSeq.setOptionValue (
'.skipOnData',
True)
307 configSeq.setOptionValue (
'.minPt', 20e3)
309 configSeq += config.makeConfig (
'PL_MissingET')
310 configSeq.setOptionValue (
'.skipOnData',
True)
312 configSeq += config.makeConfig (
'PL_OverlapRemoval')
313 configSeq.setOptionValue (
'.skipOnData',
True)
314 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
315 configSeq.setOptionValue (
'.muons',
'TruthMuons')
316 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
317 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
318 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
321 if dataType
is not DataType.Data :
323 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
327 configSeq += config.makeConfig (
'MissingET',
328 containerName=
'AnaMET')
329 configSeq.setOptionValue (
'.jets',
'AnaJets')
330 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
331 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
332 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
341 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
345 configSeq += config.makeConfig(
'OverlapRemoval' )
346 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
347 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
350 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
351 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
352 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
353 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
354 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
355 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
359 configSeq += config.makeConfig (
'ObjectCutFlow',
360 containerName=
'AnaJets',
362 configSeq += config.makeConfig (
'ObjectCutFlow',
363 containerName=
'AnaElectrons',
364 selectionName=
'loose')
365 configSeq += config.makeConfig (
'ObjectCutFlow',
366 containerName=
'AnaPhotons',
367 selectionName=
'tight')
368 configSeq += config.makeConfig (
'ObjectCutFlow',
369 containerName=
'AnaMuons',
370 selectionName=
'medium')
371 configSeq += config.makeConfig (
'ObjectCutFlow',
372 containerName=
'AnaTauJets',
373 selectionName=
'tight')
377 if geometry
is not LHCPeriod.Run4:
384 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
386 met =
'AnaMET', btagDecoration =
'ftag_select_ftag',
387 selectionCutsDict = exampleSelectionCuts, noFilter =
True,
388 cutFlowHistograms =
True)
390 configSeq += config.makeConfig (
'Bootstraps')
391 configSeq.setOptionValue (
'.nReplicas', 2000 )
392 configSeq.setOptionValue (
'.skipOnMC',
False)
395 configSeq += config.makeConfig (
'LeptonSF')
396 if geometry
is not LHCPeriod.Run2:
397 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
398 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
399 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
400 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
403 configSeq += config.makeConfig (
'Thinning',
404 containerName=
'AnaElectrons')
405 configSeq.setOptionValue (
'.selectionName',
'loose')
406 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
407 configSeq += config.makeConfig (
'Thinning',
408 containerName=
'AnaPhotons')
409 configSeq.setOptionValue (
'.selectionName',
'tight')
410 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
411 configSeq += config.makeConfig (
'Thinning',
412 containerName=
'AnaMuons')
413 configSeq.setOptionValue (
'.selectionName',
'medium')
414 configSeq.setOptionValue (
'.outputName',
'OutMuons')
415 configSeq += config.makeConfig (
'Thinning',
416 containerName=
'AnaTauJets')
417 configSeq.setOptionValue (
'.selectionName',
'tight')
418 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
419 configSeq += config.makeConfig (
'Thinning',
420 containerName=
'AnaJets')
421 configSeq.setOptionValue (
'.outputName',
'OutJets')
423 configSeq += config.makeConfig (
'Thinning',
424 containerName=
'AnaLargeRJets')
425 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
426 configSeq += config.makeConfig (
'Thinning',
427 containerName=
'TruthElectrons')
428 configSeq.setOptionValue (
'.skipOnData',
True)
429 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
430 configSeq += config.makeConfig (
'Thinning',
431 containerName=
'TruthPhotons')
432 configSeq.setOptionValue (
'.skipOnData',
True)
433 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
434 configSeq += config.makeConfig (
'Thinning',
435 containerName=
'TruthMuons')
436 configSeq.setOptionValue (
'.skipOnData',
True)
437 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
438 configSeq += config.makeConfig (
'Thinning',
439 containerName=
'TruthTaus')
440 configSeq.setOptionValue (
'.skipOnData',
True)
441 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
442 configSeq += config.makeConfig (
'Thinning',
443 containerName=
'AntiKt4TruthDressedWZJets')
444 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
445 configSeq.setOptionValue (
'.skipOnData',
True)
447 configSeq += config.makeConfig (
'Output')
448 configSeq.setOptionValue (
'.treeName',
'analysis')
449 configSeq.setOptionValue (
'.vars', [
450 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
452 configSeq.setOptionValue (
'.metVars', [
453 'AnaMET_%SYS%.met -> met_%SYS%',
455 configSeq.setOptionValue (
'.truthMetVars', [
456 'TruthMET_NOSYS.met -> truth_met',
458 configSeq.setOptionValue (
'.containers', outputContainers)
459 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
460 configSeq.setOptionValue (
'.commands', [
461 'disable actualInteractionsPerCrossing',
465 configSeq += config.makeConfig (
'PrintConfiguration')
471 configAccumulator = ConfigAccumulator (algSeq, dataType, isPhyslite, geometry, autoconfigFromFlags=autoconfigFromFlags, noSystematics=noSystematics)
472 configSeq.fullConfigure (configAccumulator)
475 configSeq.printOptions()
477 from AnaAlgorithm.DualUseConfig
import isAthena, useComponentAccumulator
478 if isAthena
and useComponentAccumulator:
479 return configAccumulator.CA