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)
157 configSeq.setOptionValue(
'.triggerChainsPerYear',
158 bjetTriggerChainsPerYear)
161 configSeq += config.makeConfig(
'Jets',
162 containerName=
'AnaLargeRJets',
163 jetCollection=
'AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets' )
164 outputContainers[
'larger_jet_'] =
'OutLargeRJets'
165 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
170 configSeq += config.makeConfig (
'Electrons')
171 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
172 configSeq.setOptionValue (
'.decorateTruth',
True)
173 configSeq.setOptionValue (
'.decorateCaloClusterEta',
True)
174 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
175 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
176 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
177 configSeq.setOptionValue (
'.minPt', electronMinPt)
178 configSeq += config.makeConfig (
'Electrons.WorkingPoint')
179 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
180 configSeq.setOptionValue (
'.selectionName',
'loose')
181 configSeq.setOptionValue (
'.forceFullSimConfig', forceEGammaFullSimConfig)
183 configSeq.setOptionValue (
'.identificationWP',
'LooseBLayerLH')
185 configSeq.setOptionValue (
'.identificationWP',
'LooseDNN')
186 configSeq.setOptionValue (
'.isolationWP',
'Tight_VarRad')
187 configSeq.setOptionValue (
'.chargeIDSelectionRun2',
True)
188 configSeq.setOptionValue (
'.addChargeMisIDSF', geometry
is LHCPeriod.Run2)
189 configSeq += config.makeConfig(
'Electrons.TriggerSF')
190 configSeq.setOptionValue(
'.containerName',
'AnaElectrons')
191 configSeq.setOptionValue(
'.electronID',
'LooseBLayerLH')
192 configSeq.setOptionValue(
'.electronIsol',
'Tight_VarRad')
193 configSeq.setOptionValue(
'.triggerChainsPerYear', triggerChainsPerYear)
195 configSeq += config.makeConfig (
'Electrons.IFFClassification')
196 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
197 configSeq += config.makeConfig (
'Electrons.MCTCClassification')
198 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
199 configSeq.setOptionValue (
'.prefix',
'truth_')
201 configSeq += config.makeConfig (
'Electrons.PtEtaSelection')
202 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
203 configSeq.setOptionValue (
'.minPt', electronMinPt)
207 configSeq += config.makeConfig (
'Photons')
208 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
209 configSeq.setOptionValue (
'.decorateTruth',
True)
210 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
211 configSeq.setOptionValue (
'.recomputeIsEM',
False)
212 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
213 configSeq += config.makeConfig (
'Photons.WorkingPoint')
214 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
215 configSeq.setOptionValue (
'.selectionName',
'tight')
216 configSeq.setOptionValue (
'.forceFullSimConfigForID', forceEGammaFullSimConfig)
217 configSeq.setOptionValue (
'.forceFullSimConfigForIso', forceEGammaFullSimConfig)
218 configSeq.setOptionValue (
'.qualityWP',
'Tight')
219 configSeq.setOptionValue (
'.isolationWP',
'FixedCutTight')
220 configSeq.setOptionValue (
'.recomputeIsEM',
False)
222 configSeq += config.makeConfig (
'Photons.PtEtaSelection')
223 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
224 configSeq.setOptionValue (
'.minPt', photonMinPt)
228 configSeq += config.makeConfig (
'Muons')
229 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
230 configSeq.setOptionValue (
'.decorateTruth',
True)
231 configSeq.setOptionValue (
'.writeTrackD0Z0',
True)
232 configSeq.setOptionValue (
'.recalibratePhyslite',
False)
234 configSeq += config.makeConfig (
'Muons.WorkingPoint')
235 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
236 configSeq.setOptionValue (
'.selectionName',
'medium')
237 configSeq.setOptionValue (
'.quality',
'Medium')
238 configSeq.setOptionValue (
'.isolation',
'Loose_VarRad')
240 configSeq += config.makeConfig (
'Muons.IFFClassification')
241 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
242 configSeq += config.makeConfig (
'Muons.MCTCClassification')
243 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
244 configSeq.setOptionValue (
'.prefix',
'truth_')
253 configSeq += config.makeConfig (
'TauJets')
254 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
255 configSeq.setOptionValue (
'.decorateTruth',
True)
256 configSeq += config.makeConfig (
'TauJets.WorkingPoint')
257 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
258 configSeq.setOptionValue (
'.selectionName',
'tight')
259 configSeq.setOptionValue (
'.quality',
'Tight')
261 configSeq += config.makeConfig(
'TauJets.TriggerSF')
262 configSeq.setOptionValue(
'.containerName',
'AnaTauJets')
263 configSeq.setOptionValue(
'.tauID',
'Tight')
264 configSeq.setOptionValue(
'.triggerChainsPerYear', tauTriggerChainsSF)
266 configSeq += config.makeConfig (
'TauJets.MCTCClassification')
267 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
268 configSeq.setOptionValue (
'.prefix',
'truth_')
272 configSeq += config.makeConfig(
'SystObjectLink')
273 configSeq.setOptionValue (
'.containerName',
'AnaJets')
275 configSeq += config.makeConfig(
'SystObjectLink')
276 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
277 configSeq += config.makeConfig(
'SystObjectLink')
278 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
279 configSeq += config.makeConfig(
'SystObjectLink')
280 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
281 configSeq += config.makeConfig(
'SystObjectLink')
282 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
283 configSeq += config.makeConfig(
'SystObjectLink')
284 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
288 configSeq += config.makeConfig (
'PL_Electrons')
289 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
290 configSeq += config.makeConfig (
'PL_Electrons.MCTCClassification')
291 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
292 configSeq.setOptionValue (
'.prefix',
'')
293 configSeq += config.makeConfig (
'PL_Electrons.PtEtaSelection')
294 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
295 configSeq.setOptionValue (
'.skipOnData',
True)
296 configSeq.setOptionValue (
'.useDressedProperties',
True)
297 configSeq.setOptionValue (
'.minPt', 20e3)
299 configSeq += config.makeConfig (
'PL_Muons')
300 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
301 configSeq += config.makeConfig (
'PL_Muons.MCTCClassification')
302 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
303 configSeq.setOptionValue (
'.prefix',
'')
304 configSeq += config.makeConfig (
'PL_Muons.PtEtaSelection')
305 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
306 configSeq.setOptionValue (
'.skipOnData',
True)
307 configSeq.setOptionValue (
'.useDressedProperties',
True)
308 configSeq.setOptionValue (
'.minPt', 20e3)
310 configSeq += config.makeConfig (
'PL_Neutrinos')
311 configSeq.setOptionValue (
'.skipOnData',
True)
313 configSeq += config.makeConfig (
'PL_Jets')
314 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
315 configSeq += config.makeConfig (
'PL_Jets.PtEtaSelection')
316 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
317 configSeq.setOptionValue (
'.skipOnData',
True)
318 configSeq.setOptionValue (
'.minPt', 20e3)
320 configSeq += config.makeConfig (
'PL_Taus')
321 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
322 configSeq += config.makeConfig (
'PL_Taus.MCTCClassification')
323 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
324 configSeq.setOptionValue (
'.prefix',
'')
325 configSeq += config.makeConfig (
'PL_Taus.PtEtaSelection')
326 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
327 configSeq.setOptionValue (
'.skipOnData',
True)
328 configSeq.setOptionValue (
'.minPt', 20e3)
330 configSeq += config.makeConfig (
'PL_Photons')
331 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
332 configSeq += config.makeConfig (
'PL_Photons.PtEtaSelection')
333 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
334 configSeq.setOptionValue (
'.skipOnData',
True)
335 configSeq.setOptionValue (
'.minPt', 20e3)
337 configSeq += config.makeConfig (
'PL_MissingET')
338 configSeq.setOptionValue (
'.skipOnData',
True)
340 configSeq += config.makeConfig (
'PL_OverlapRemoval')
341 configSeq.setOptionValue (
'.skipOnData',
True)
342 configSeq.setOptionValue (
'.electrons',
'TruthElectrons')
343 configSeq.setOptionValue (
'.muons',
'TruthMuons')
344 configSeq.setOptionValue (
'.photons',
'TruthPhotons')
345 configSeq.setOptionValue (
'.jets',
'AntiKt4TruthDressedWZJets')
346 configSeq.setOptionValue (
'.useRapidityForDeltaR',
False)
349 if dataType
is not DataType.Data :
351 configSeq += config.makeConfig(
'GeneratorLevelAnalysis')
355 configSeq += config.makeConfig (
'MissingET')
356 configSeq.setOptionValue (
'.containerName',
'AnaMET')
357 configSeq.setOptionValue (
'.jets',
'AnaJets')
358 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
359 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
360 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
369 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
373 configSeq += config.makeConfig(
'OverlapRemoval' )
374 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
375 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
378 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
379 configSeq.setOptionValue (
'.jets',
'AnaJets.baselineJvt')
380 configSeq.setOptionValue (
'.taus',
'AnaTauJets.tight')
381 configSeq.setOptionValue (
'.inputLabel',
'preselectOR')
382 configSeq.setOptionValue (
'.outputLabel',
'passesOR' )
383 configSeq.setOptionValue (
'.nominalOnly', onlyNominalOR )
387 configSeq += config.makeConfig (
'ObjectCutFlow')
388 configSeq.setOptionValue (
'.containerName',
'AnaJets')
389 configSeq.setOptionValue (
'.selectionName',
'jvt')
390 configSeq += config.makeConfig (
'ObjectCutFlow')
391 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
392 configSeq.setOptionValue (
'.selectionName',
'loose')
393 configSeq += config.makeConfig (
'ObjectCutFlow')
394 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
395 configSeq.setOptionValue (
'.selectionName',
'tight')
396 configSeq += config.makeConfig (
'ObjectCutFlow')
397 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
398 configSeq.setOptionValue (
'.selectionName',
'medium')
399 configSeq += config.makeConfig (
'ObjectCutFlow')
400 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
401 configSeq.setOptionValue (
'.selectionName',
'tight')
404 if geometry
is not LHCPeriod.Run4:
411 from EventSelectionAlgorithms.EventSelectionConfig
import makeMultipleEventSelectionConfigs
412 makeMultipleEventSelectionConfigs(configSeq, electrons =
'AnaElectrons.loose', muons =
'AnaMuons.medium', jets =
'AnaJets.baselineJvt',
413 met =
'AnaMET', btagDecoration =
'ftag_select_ftag',
414 selectionCutsDict = exampleSelectionCuts, noFilter =
True,
415 cutFlowHistograms =
True)
417 configSeq += config.makeConfig (
'Bootstraps')
418 configSeq.setOptionValue (
'.nReplicas', 2000 )
419 configSeq.setOptionValue (
'.skipOnMC',
False)
422 configSeq += config.makeConfig (
'LeptonSF')
423 if geometry
is not LHCPeriod.Run2:
424 configSeq.setOptionValue (
'.electrons',
'AnaElectrons.loose')
425 configSeq.setOptionValue (
'.muons',
'AnaMuons.medium')
426 configSeq.setOptionValue (
'.photons',
'AnaPhotons.tight')
427 configSeq.setOptionValue (
'.lepton_postfix',
'nominal')
430 configSeq += config.makeConfig (
'Thinning')
431 configSeq.setOptionValue (
'.containerName',
'AnaElectrons')
432 configSeq.setOptionValue (
'.selectionName',
'loose')
433 configSeq.setOptionValue (
'.outputName',
'OutElectrons')
434 configSeq += config.makeConfig (
'Thinning')
435 configSeq.setOptionValue (
'.containerName',
'AnaPhotons')
436 configSeq.setOptionValue (
'.selectionName',
'tight')
437 configSeq.setOptionValue (
'.outputName',
'OutPhotons')
438 configSeq += config.makeConfig (
'Thinning')
439 configSeq.setOptionValue (
'.containerName',
'AnaMuons')
440 configSeq.setOptionValue (
'.selectionName',
'medium')
441 configSeq.setOptionValue (
'.outputName',
'OutMuons')
442 configSeq += config.makeConfig (
'Thinning')
443 configSeq.setOptionValue (
'.containerName',
'AnaTauJets')
444 configSeq.setOptionValue (
'.selectionName',
'tight')
445 configSeq.setOptionValue (
'.outputName',
'OutTauJets')
446 configSeq += config.makeConfig (
'Thinning')
447 configSeq.setOptionValue (
'.containerName',
'AnaJets')
448 configSeq.setOptionValue (
'.outputName',
'OutJets')
450 configSeq += config.makeConfig (
'Thinning')
451 configSeq.setOptionValue (
'.containerName',
'AnaLargeRJets')
452 configSeq.setOptionValue (
'.outputName',
'OutLargeRJets')
454 configSeq += config.makeConfig (
'Thinning')
455 configSeq.setOptionValue (
'.containerName',
'TruthElectrons')
456 configSeq.setOptionValue (
'.skipOnData',
True)
457 configSeq.setOptionValue (
'.outputName',
'OutTruthElectrons')
458 configSeq += config.makeConfig (
'Thinning')
459 configSeq.setOptionValue (
'.containerName',
'TruthPhotons')
460 configSeq.setOptionValue (
'.skipOnData',
True)
461 configSeq.setOptionValue (
'.outputName',
'OutTruthPhotons')
462 configSeq += config.makeConfig (
'Thinning')
463 configSeq.setOptionValue (
'.containerName',
'TruthMuons')
464 configSeq.setOptionValue (
'.skipOnData',
True)
465 configSeq.setOptionValue (
'.outputName',
'OutTruthMuons')
466 configSeq += config.makeConfig (
'Thinning')
467 configSeq.setOptionValue (
'.containerName',
'TruthTaus')
468 configSeq.setOptionValue (
'.skipOnData',
True)
469 configSeq.setOptionValue (
'.outputName',
'OutTruthTaus')
470 configSeq += config.makeConfig (
'Thinning')
471 configSeq.setOptionValue (
'.containerName',
'AntiKt4TruthDressedWZJets')
472 configSeq.setOptionValue (
'.outputName',
'OutTruthJets')
473 configSeq.setOptionValue (
'.skipOnData',
True)
475 configSeq += config.makeConfig (
'Output')
476 configSeq.setOptionValue (
'.treeName',
'analysis')
477 configSeq.setOptionValue (
'.vars', [
478 'EventInfo.actualInteractionsPerCrossing -> actualMuScaled',
479 'OutMuons_NOSYS.muonType -> mu_muonType type=uint16'
481 configSeq.setOptionValue (
'.metVars', [
482 'AnaMET_%SYS%.met -> met_%SYS%',
484 configSeq.setOptionValue (
'.truthMetVars', [
485 'TruthMET_NOSYS.met -> truth_met',
487 configSeq.setOptionValue (
'.containers', outputContainers)
488 configSeq.setOptionValue (
'.containersOnlyForMC', outputContainersForMC)
489 configSeq.setOptionValue (
'.commands', [
490 'disable actualInteractionsPerCrossing',
494 configSeq += config.makeConfig (
'PrintConfiguration')
500 configAccumulator = ConfigAccumulator (algSeq=algSeq, flags=autoconfigFromFlags, noSystematics=noSystematics)
501 configSeq.fullConfigure (configAccumulator)
504 configSeq.printOptions()
506 return configAccumulator.CA
if isAthena
else None