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 (
'.forceFullSimConfigForIso', 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 (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
189 configSeq.setOptionValue (
'.recomputeIsEM',
False)
190 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
191 configSeq += config.makeConfig (
'Photons.WorkingPoint',
192 containerName=
'AnaPhotons',
193 selectionName=
'tight')
194 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
195 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
196 configSeq.setOptionValue (
'.qualityWP',
'Tight')
197 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
198 configSeq.setOptionValue (
'.recomputeIsEM',
False)
200 configSeq += config.makeConfig (
'Photons.PtEtaSelection',
201 containerName=
'AnaPhotons')
202 configSeq.setOptionValue (
'.minPt', photonMinPt)
206 configSeq += config.makeConfig (
'Muons',
207 containerName=
'AnaMuons')
208 configSeq.setOptionValue (
'.decorateTruth',
True)
209 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
210 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
211 configSeq += config.makeConfig (
'Muons.WorkingPoint',
212 containerName=
'AnaMuons',
213 selectionName=
'medium')
214 configSeq.setOptionValue (
'.quality',
'Medium')
215 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
217 configSeq += config.makeConfig (
'Muons.IFFClassification',
218 containerName=
'AnaMuons')
219 configSeq += config.makeConfig (
'Muons.MCTCClassification',
220 containerName=
'AnaMuons')
221 configSeq.setOptionValue (
'.prefix',
'truth_')
230 configSeq += config.makeConfig (
'TauJets',
231 containerName=
'AnaTauJets')
232 configSeq.setOptionValue (
'.decorateTruth',
True)
233 configSeq += config.makeConfig (
'TauJets.WorkingPoint',
234 containerName=
'AnaTauJets',
235 selectionName=
'tight')
236 configSeq.setOptionValue (
'.quality',
'Tight')
238 configSeq += config.makeConfig(
'TauJets.TriggerSF')
239 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
240 configSeq.setOptionValue(
'.tauID',
'Tight')
241 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
243 configSeq += config.makeConfig (
'TauJets.MCTCClassification',
244 containerName=
'AnaTauJets')
245 configSeq.setOptionValue (
'.prefix',
'truth_')
249 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaJets')
251 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaLargeRJets')
252 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaElectrons')
253 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaPhotons')
254 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaMuons')
255 configSeq += config.makeConfig(
'SystObjectLink', containerName=
'AnaTauJets')
259 configSeq += config.makeConfig (
'PL_Electrons',
260 containerName=
'TruthElectrons')
261 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification',
262 containerName=
'TruthElectrons')
263 configSeq.setOptionValue (
'.prefix',
'')
264 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection',
265 containerName=
'TruthElectrons')
266 configSeq.setOptionValue (
'.skipOnData',
True)
267 configSeq.setOptionValue (
'.useDressedProperties',
True)
268 configSeq.setOptionValue (
'.minPt', 20e3)
270 configSeq += config.makeConfig (
'PL_Muons',
271 containerName=
'TruthMuons')
272 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification',
273 containerName=
'TruthMuons')
274 configSeq.setOptionValue (
'.prefix',
'')
275 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection',
276 containerName=
'TruthMuons')
277 configSeq.setOptionValue (
'.skipOnData',
True)
278 configSeq.setOptionValue (
'.useDressedProperties',
True)
279 configSeq.setOptionValue (
'.minPt', 20e3)
281 configSeq += config.makeConfig (
'PL_Neutrinos')
282 configSeq.setOptionValue (
'.skipOnData',
True)
284 configSeq += config.makeConfig (
'PL_Jets',
285 containerName=
'AntiKt4TruthDressedWZJets')
286 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection',
287 containerName=
'AntiKt4TruthDressedWZJets')
288 configSeq.setOptionValue (
'.skipOnData',
True)
289 configSeq.setOptionValue (
'.minPt', 20e3)
291 configSeq += config.makeConfig (
'PL_Taus',
292 containerName=
'TruthTaus')
293 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification',
294 containerName=
'TruthTaus')
295 configSeq.setOptionValue (
'.prefix',
'')
296 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection',
297 containerName=
'TruthTaus')
298 configSeq.setOptionValue (
'.skipOnData',
True)
299 configSeq.setOptionValue (
'.minPt', 20e3)
301 configSeq += config.makeConfig (
'PL_Photons',
302 containerName=
'TruthPhotons')
303 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection',
304 containerName=
'TruthPhotons')
305 configSeq.setOptionValue (
'.skipOnData',
True)
306 configSeq.setOptionValue (
'.minPt', 20e3)
308 configSeq += config.makeConfig (
'PL_MissingET')
309 configSeq.setOptionValue (
'.skipOnData',
True)
311 configSeq += config.makeConfig (
'PL_OverlapRemoval')
312 configSeq.setOptionValue (
'.skipOnData',
True)
313 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
314 configSeq.setOptionValue (
'.muons',
'TruthMuons')
315 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
316 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
317 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
320 if dataType
is not DataType.Data :
322 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
326 configSeq += config.makeConfig (
'MissingET',
327 containerName=
'AnaMET')
328 configSeq.setOptionValue (
'.jets',
'AnaJets')
329 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
330 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
331 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
340 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
344 configSeq += config.makeConfig(
'OverlapRemoval' )
345 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
346 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
349 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
350 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
351 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
352 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
353 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
354 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
358 configSeq += config.makeConfig (
'ObjectCutFlow',
359 containerName=
'AnaJets',
361 configSeq += config.makeConfig (
'ObjectCutFlow',
362 containerName=
'AnaElectrons',
363 selectionName=
'loose')
364 configSeq += config.makeConfig (
'ObjectCutFlow',
365 containerName=
'AnaPhotons',
366 selectionName=
'tight')
367 configSeq += config.makeConfig (
'ObjectCutFlow',
368 containerName=
'AnaMuons',
369 selectionName=
'medium')
370 configSeq += config.makeConfig (
'ObjectCutFlow',
371 containerName=
'AnaTauJets',
372 selectionName=
'tight')
376 if geometry
is not LHCPeriod.Run4:
383 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
385 met =
'AnaMET', btagDecoration =
'ftag_select_ftag',
386 selectionCutsDict = exampleSelectionCuts, noFilter =
True,
387 cutFlowHistograms =
True)
389 configSeq += config.makeConfig (
'Bootstraps')
390 configSeq.setOptionValue (
'.nReplicas', 2000 )
391 configSeq.setOptionValue (
'.skipOnMC',
False)
394 configSeq += config.makeConfig (
'LeptonSF')
395 if geometry
is not LHCPeriod.Run2:
396 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
397 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
398 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
399 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
402 configSeq += config.makeConfig (
'Thinning',
403 containerName=
'AnaElectrons')
404 configSeq.setOptionValue (
'.selectionName',
'loose')
405 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
406 configSeq += config.makeConfig (
'Thinning',
407 containerName=
'AnaPhotons')
408 configSeq.setOptionValue (
'.selectionName',
'tight')
409 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
410 configSeq += config.makeConfig (
'Thinning',
411 containerName=
'AnaMuons')
412 configSeq.setOptionValue (
'.selectionName',
'medium')
413 configSeq.setOptionValue (
'.outputName',
'OutMuons')
414 configSeq += config.makeConfig (
'Thinning',
415 containerName=
'AnaTauJets')
416 configSeq.setOptionValue (
'.selectionName',
'tight')
417 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
418 configSeq += config.makeConfig (
'Thinning',
419 containerName=
'AnaJets')
420 configSeq.setOptionValue (
'.outputName',
'OutJets')
422 configSeq += config.makeConfig (
'Thinning',
423 containerName=
'AnaLargeRJets')
424 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
425 configSeq += config.makeConfig (
'Thinning',
426 containerName=
'TruthElectrons')
427 configSeq.setOptionValue (
'.skipOnData',
True)
428 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
429 configSeq += config.makeConfig (
'Thinning',
430 containerName=
'TruthPhotons')
431 configSeq.setOptionValue (
'.skipOnData',
True)
432 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
433 configSeq += config.makeConfig (
'Thinning',
434 containerName=
'TruthMuons')
435 configSeq.setOptionValue (
'.skipOnData',
True)
436 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
437 configSeq += config.makeConfig (
'Thinning',
438 containerName=
'TruthTaus')
439 configSeq.setOptionValue (
'.skipOnData',
True)
440 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
441 configSeq += config.makeConfig (
'Thinning',
442 containerName=
'AntiKt4TruthDressedWZJets')
443 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
444 configSeq.setOptionValue (
'.skipOnData',
True)
446 configSeq += config.makeConfig (
'Output')
447 configSeq.setOptionValue (
'.treeName',
'analysis')
448 configSeq.setOptionValue (
'.vars', [
449 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
451 configSeq.setOptionValue (
'.metVars', [
452 'AnaMET_%SYS%.met -> met_%SYS%',
454 configSeq.setOptionValue (
'.truthMetVars', [
455 'TruthMET_NOSYS.met -> truth_met',
457 configSeq.setOptionValue (
'.containers', outputContainers)
458 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
459 configSeq.setOptionValue (
'.commands', [
460 'disable actualInteractionsPerCrossing',
464 configSeq += config.makeConfig (
'PrintConfiguration')
470 configAccumulator = ConfigAccumulator (algSeq, dataType, isPhyslite, geometry, autoconfigFromFlags=autoconfigFromFlags, noSystematics=noSystematics)
471 configSeq.fullConfigure (configAccumulator)
474 configSeq.printOptions()
476 from AnaAlgorithm.DualUseConfig
import isAthena, useComponentAccumulator
477 if isAthena
and useComponentAccumulator:
478 return configAccumulator.CA