ATLAS Offline Software
JetCommonConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 #==============================================================================
4 # Contains the configuration for common jet reconstruction + decorations
5 # used in analysis DAODs
6 #==============================================================================
7 
8 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 
11 def JetCommonCfg(ConfigFlags):
12  """Main config for jet reconstruction and decorations"""
13 
14  acc = ComponentAccumulator()
15 
16  acc.merge(StandardJetsInDerivCfg(ConfigFlags))
17  if "McEventCollection#GEN_EVENT" not in ConfigFlags.Input.TypedCollections:
18  acc.merge(AddBadBatmanCfg(ConfigFlags))
19  acc.merge(AddDistanceInTrainCfg(ConfigFlags))
20  acc.merge(AddSidebandEventShapeCfg(ConfigFlags))
21  acc.merge(AddEventCleanFlagsCfg(ConfigFlags))
22 
23  return acc
24 
25 
26 def StandardJetsInDerivCfg(ConfigFlags):
27  """Jet reconstruction needed for PHYS/PHYSLITE"""
28 
29  from JetRecConfig.StandardSmallRJets import AntiKt4EMTopo,AntiKt4EMPFlow,AntiKtVR30Rmax4Rmin02PV0Track
30  from JetRecConfig.StandardLargeRJets import AntiKt10UFOCSSKSoftDrop
31  from JetRecConfig.JetRecConfig import JetRecCfg
32 
33  acc = ComponentAccumulator()
34 
35  AntiKt4EMTopo_deriv = AntiKt4EMTopo.clone(
36  modifiers = AntiKt4EMTopo.modifiers+("JetPtAssociation","QGTagging")
37  )
38 
39  AntiKt4EMPFlow_deriv = AntiKt4EMPFlow.clone(
40  modifiers = AntiKt4EMPFlow.modifiers+("JetPtAssociation","QGTagging","fJVT","NNJVT","CaloEnergiesClus","JetPileupLabel","qgtransformer")
41  )
42 
43  AntiKt10UFOCSSKSoftDrop_deriv = AntiKt10UFOCSSKSoftDrop.clone(
44  modifiers = AntiKt10UFOCSSKSoftDrop.modifiers+("toptransformer",)
45  )
46 
47  jetList = [AntiKt4EMTopo_deriv, AntiKt4EMPFlow_deriv,
48  AntiKtVR30Rmax4Rmin02PV0Track,
49  AntiKt10UFOCSSKSoftDrop_deriv]
50 
51  for jd in jetList:
52  acc.merge(JetRecCfg(ConfigFlags,jd))
53 
54  return acc
55 
56 def AddBadBatmanCfg(ConfigFlags):
57  """Add bad batman decoration for events with large EMEC-IW noise"""
58 
59  acc = ComponentAccumulator()
60 
61  CommonAugmentation = CompFactory.DerivationFramework.CommonAugmentation
62  from DerivationFrameworkJetEtMiss.JetToolConfig import BadBatmanToolCfg
63  badBatmanTool = acc.getPrimaryAndMerge(BadBatmanToolCfg(ConfigFlags))
64  acc.addEventAlgo(CommonAugmentation("BadBatmanAugmentation", AugmentationTools = [badBatmanTool]))
65 
66  return acc
67 
68 def AddDistanceInTrainCfg(ConfigFlags):
69  """Add distance in train information to EventInfo"""
70  from DerivationFrameworkJetEtMiss.JetToolConfig import DistanceInTrainToolCfg
71 
72  acc = ComponentAccumulator()
73 
74  CommonAugmentation = CompFactory.DerivationFramework.CommonAugmentation
75  distanceInTrainTool = acc.getPrimaryAndMerge(DistanceInTrainToolCfg(ConfigFlags))
76  acc.addEventAlgo(CommonAugmentation("DistanceInTrainAugmentation", AugmentationTools = [distanceInTrainTool]))
77 
78  return acc
79 
80 def AddSidebandEventShapeCfg(ConfigFlags):
81  """Special rho definitions for PFlow jets"""
82  from JetRecConfig.JetRecConfig import getInputAlgs,getConstitPJGAlg,reOrderAlgs
83  from JetRecConfig.StandardJetConstits import stdConstitDic as cst
84  from JetRecConfig.JetInputConfig import buildEventShapeAlg
85 
86  acc = ComponentAccumulator()
87 
88  constit_algs = getInputAlgs(cst.GPFlow, flags=ConfigFlags)
89  constit_algs, ca = reOrderAlgs( [a for a in constit_algs if a is not None])
90 
91  acc.merge(ca)
92  for a in constit_algs:
93  acc.addEventAlgo(a)
94 
95  #Sideband definition
96  acc.addEventAlgo(getConstitPJGAlg(cst.GPFlow, suffix='PUSB'))
97  acc.addEventAlgo(buildEventShapeAlg(cst.GPFlow, '', suffix = 'PUSB' ))
98 
99  #New "sideband" definition when using CHS based on TTVA
100  acc.addEventAlgo(getConstitPJGAlg(cst.GPFlow, suffix='Neut'))
101  acc.addEventAlgo(buildEventShapeAlg(cst.GPFlow, '', suffix = 'Neut' ))
102 
103  return acc
104 
105 def AddJvtDecorationAlgCfg(ConfigFlags, algName = "JvtPassDecorAlg", jetContainer='AntiKt4EMTopo', **kwargs):
106  acc = ComponentAccumulator()
107  # Decorate if jet passed JVT criteria
108  from JetJvtEfficiency.JetJvtEfficiencyToolConfig import getJvtEffToolCfg
109 
110  passJvtTool = acc.popToolsAndMerge(getJvtEffToolCfg(ConfigFlags, jetContainer))
111  passJvtTool.PassJVTKey = "{}Jets.DFCommonJets_passJvt".format(jetContainer)
112  passJvtTool.SuppressOutputDependence = False
113  kwargs.setdefault("Decorators", [passJvtTool])
114  kwargs.setdefault("JetContainer", "{}Jets".format(jetContainer))
115  acc.addEventAlgo(CompFactory.JetDecorationAlg(algName, **kwargs), primary = True)
116  return acc
117 
118 def AddEventCleanFlagsCfg(ConfigFlags, workingPoints = ['Loose', 'Tight', 'LooseLLP']):
119  """Add event cleaning flags"""
120 
121  acc = ComponentAccumulator()
122  acc.merge(AddJvtDecorationAlgCfg(ConfigFlags, algName="JvtPassDecorAlg_EMTopo", jetContainer='AntiKt4EMTopo'))
123  acc.merge(AddJvtDecorationAlgCfg(ConfigFlags, algName="JvtPassDecorAlg", jetContainer='AntiKt4EMPFlow'))
124 
125  from DerivationFrameworkTau.TauCommonConfig import AddTauAugmentationCfg
126  acc.merge(AddTauAugmentationCfg(ConfigFlags, prefix="JetCommon", doRNNLoose=True))
127  acc.addSequence(CompFactory.AthSequencer('EventCleanSeq', Sequential=True))
128 
129  # Overlap for EMTopo
130  from AssociationUtils.AssociationUtilsConfig import OverlapRemovalToolCfg
131  inputLabel_legacy = 'selected_eventClean_EMTopo'
132  outputLabel_legacy = 'DFCommonJets_passOR_EMTopo'
133  bJetLabel = '' #default
134  tauLabel = 'DFTauRNNLoose'
135  orTool_legacy = acc.popToolsAndMerge(OverlapRemovalToolCfg(ConfigFlags,inputLabel=inputLabel_legacy,outputLabel=outputLabel_legacy,bJetLabel=bJetLabel))
136  algOR_legacy = CompFactory.OverlapRemovalGenUseAlg('OverlapRemovalGenUseAlg_EMTopo',
137  JetKey="AntiKt4EMTopoJets",
138  SelectionLabel=inputLabel_legacy,
139  OverlapLabel=outputLabel_legacy,
140  OverlapRemovalTool=orTool_legacy,
141  TauLabel=tauLabel,
142  BJetLabel=bJetLabel
143  )
144  acc.addEventAlgo(algOR_legacy, 'EventCleanSeq')
145 
146  # Overlap for EMPFlow
147  inputLabel = 'selected_eventClean_EMPFlow'
148  outputLabel = 'DFCommonJets_passOR_EMPFlow'
149  orTool = acc.popToolsAndMerge(OverlapRemovalToolCfg(ConfigFlags,inputLabel=inputLabel,outputLabel=outputLabel,bJetLabel=bJetLabel))
150  algOR = CompFactory.OverlapRemovalGenUseAlg('OverlapRemovalGenUseAlg',
151  SelectionLabel=inputLabel,
152  OverlapLabel=outputLabel,
153  OverlapRemovalTool=orTool,
154  TauLabel=tauLabel,
155  BJetLabel=bJetLabel)
156  acc.addEventAlgo(algOR, 'EventCleanSeq')
157 
158  CommonAugmentation = CompFactory.DerivationFramework.CommonAugmentation
159  from DerivationFrameworkMuons.MuonsToolsConfig import MuonJetDrToolCfg
160  muonJetDrTool = acc.getPrimaryAndMerge(MuonJetDrToolCfg(ConfigFlags, "MuonJetDrTool"))
161  acc.addEventAlgo(CommonAugmentation("DFCommonMuonsKernel2", AugmentationTools = [muonJetDrTool]), 'EventCleanSeq')
162 
163  from JetSelectorTools.JetSelectorToolsConfig import EventCleaningToolCfg,JetCleaningToolCfg
164 
165  supportedWPs = ['Loose', 'Tight', 'LooseLLP', 'VeryLooseLLP', 'SuperLooseLLP']
166  prefix = "DFCommonJets_"
167  evt_lvl_suppWPs_PFlow = ['LooseBad', 'TightBad']
168 
169  for wp in workingPoints:
170  if wp not in supportedWPs:
171  continue
172 
173  cleaningLevel = wp + 'Bad'
174  # LLP WPs have a slightly different name format
175  if 'LLP' in wp:
176  cleaningLevel = wp.replace('LLP', 'BadLLP')
177 
178  # Add support for TightBad event flag as well
179  doEvent_PFlow=False
180  for evt_swp in evt_lvl_suppWPs_PFlow:
181  if evt_swp == cleaningLevel:
182  doEvent_PFlow=True
183  break
184 
185  doEvent_EMTopo=False
186  if 'Loose' in cleaningLevel:
187  doEvent_EMTopo=True
188 
189 
190  if doEvent_EMTopo:
191  jetCleaningTool_legacy = acc.popToolsAndMerge(JetCleaningToolCfg(
192  ConfigFlags, 'JetCleaningTool_'+cleaningLevel+'_EMTopo',
193  'AntiKt4EMTopo', cleaningLevel, False))
194  acc.addPublicTool(jetCleaningTool_legacy)
195  ecTool_legacy = acc.popToolsAndMerge(EventCleaningToolCfg(
196  ConfigFlags,'EventCleaningTool_'+wp+'_EMTopo', cleaningLevel))
197  ecTool_legacy.JetCleanPrefix = prefix
198  ecTool_legacy.OrDecorator = "passOR_EMTopo"
199  ecTool_legacy.JetContainer = "AntiKt4EMTopoJets"
200  ecTool_legacy.JetCleaningTool = jetCleaningTool_legacy
201  acc.addPublicTool(ecTool_legacy)
202 
203  eventCleanAlg_legacy = CompFactory.EventCleaningTestAlg('EventCleaningTestAlg_'+wp+'_EMTopo',
204  EventCleaningTool=ecTool_legacy,
205  JetCollectionName="AntiKt4EMTopoJets",
206  EventCleanPrefix=prefix,
207  CleaningLevel=cleaningLevel,
208  doEvent=True) # Only store event-level flags for Loose and LooseLLP
209  acc.addEventAlgo(eventCleanAlg_legacy, 'EventCleanSeq')
210 
211 
212  if doEvent_PFlow:
213  jetCleaningTool = acc.popToolsAndMerge(JetCleaningToolCfg(
214  ConfigFlags, 'JetCleaningTool_'+cleaningLevel,
215  'AntiKt4EMPFlowJets', cleaningLevel, False))
216  acc.addPublicTool(jetCleaningTool)
217 
218  ecTool = acc.popToolsAndMerge(EventCleaningToolCfg(ConfigFlags,'EventCleaningTool_' + wp, cleaningLevel))
219  ecTool.JetCleanPrefix = prefix
220  ecTool.OrDecorator = "passOR_EMPFlow"
221  ecTool.JetContainer = "AntiKt4EMPFlowJets"
222  ecTool.JetCleaningTool = jetCleaningTool
223  acc.addPublicTool(ecTool)
224 
225  eventCleanAlg = CompFactory.EventCleaningTestAlg('EventCleaningTestAlg_'+wp,
226  EventCleaningTool=ecTool,
227  JetCollectionName="AntiKt4EMPFlowJets",
228  EventCleanPrefix=prefix,
229  CleaningLevel=cleaningLevel,
230  doEvent=True) # for PFlow we use Loose and Tight
231  acc.addEventAlgo(eventCleanAlg, 'EventCleanSeq')
232 
233  return acc
234 
235 
236 def addJetsToSlimmingTool(slimhelper,contentlist,smartlist=[]):
237  for item in contentlist:
238  if item not in slimhelper.AppendToDictionary:
239  slimhelper.AppendToDictionary.update({item:'xAOD::JetContainer',
240  item+"Aux":'xAOD::JetAuxContainer'})
241  if item in smartlist:
242  slimhelper.SmartCollections.append(item)
243  else:
244  slimhelper.AllVariables.append(item)
245 
246 
247 
250 def addOriginCorrectedClustersToSlimmingTool(slimhelper,writeLC=False,writeEM=False):
251 
252  slimhelper.ExtraVariables.append('CaloCalTopoClusters.calE.calEta.calPhi.calM')
253 
254  if writeLC:
255  if "LCOriginTopoClusters" not in slimhelper.AppendToDictionary:
256  slimhelper.AppendToDictionary.update({"LCOriginTopoClusters":'xAOD::CaloClusterContainer',
257  "LCOriginTopoClustersAux":'xAOD::ShallowAuxContainer'})
258  slimhelper.ExtraVariables.append('LCOriginTopoClusters.calEta.calPhi.originalObjectLink')
259 
260  if writeEM:
261  if "EMOriginTopoClusters" not in slimhelper.AppendToDictionary:
262  slimhelper.AppendToDictionary.update({"EMOriginTopoClusters":'xAOD::CaloClusterContainer',
263  "EMOriginTopoClustersAux":'xAOD::ShallowAuxContainer'})
264  slimhelper.ExtraVariables.append('EMOriginTopoClusters.calE.calEta.calPhi.originalObjectLink')
AssociationUtilsConfig.OverlapRemovalToolCfg
def OverlapRemovalToolCfg(ConfigFlags, masterName='OverlapRemovalTool', inputLabel='selected', outputLabel='overlaps', bJetLabel='', maxElePtForBJetAwareOR=100. *1000, boostedLeptons=False, outputPassValue=False, linkOverlapObjects=False, doEleEleOR=False, doElectrons=True, doMuons=True, doJets=True, doTaus=True, doPhotons=True, doFatJets=False, **kwargs)
Definition: AssociationUtilsConfig.py:5
python.JetCommonConfig.JetCommonCfg
def JetCommonCfg(ConfigFlags)
Definition: JetCommonConfig.py:11
python.JetCommonConfig.AddSidebandEventShapeCfg
def AddSidebandEventShapeCfg(ConfigFlags)
Definition: JetCommonConfig.py:80
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
vtune_athena.format
format
Definition: vtune_athena.py:14
python.JetRecConfig.getInputAlgs
def getInputAlgs(jetOrConstitdef, flags, context="default", monTool=None)
Definition: JetRecConfig.py:279
python.JetSelectorToolsConfig.EventCleaningToolCfg
def EventCleaningToolCfg(ConfigFlags, name, cleaningLevel)
Definition: JetSelectorToolsConfig.py:14
python.JetCommonConfig.addOriginCorrectedClustersToSlimmingTool
def addOriginCorrectedClustersToSlimmingTool(slimhelper, writeLC=False, writeEM=False)
Helper to add origin corrected clusters to output.
Definition: JetCommonConfig.py:250
python.JetRecConfig.reOrderAlgs
def reOrderAlgs(algs)
Definition: JetRecConfig.py:805
python.MuonsToolsConfig.MuonJetDrToolCfg
def MuonJetDrToolCfg(ConfigFlags, name)
Definition: MuonsToolsConfig.py:6
python.JetInputConfig.buildEventShapeAlg
def buildEventShapeAlg(jetOrConstitdef, inputspec, voronoiRf=0.9, radius=0.4, suffix=None)
Definition: JetInputConfig.py:152
python.JetSelectorToolsConfig.JetCleaningToolCfg
def JetCleaningToolCfg(ConfigFlags, name, jetdef, cleaningLevel, useDecorations)
Definition: JetSelectorToolsConfig.py:6
python.TauCommonConfig.AddTauAugmentationCfg
def AddTauAugmentationCfg(flags, **kwargs)
Definition: TauCommonConfig.py:6
python.JetRecConfig.JetRecCfg
def JetRecCfg(flags, jetdef, returnConfiguredDef=False)
Top level functions returning ComponentAccumulator out of JetDefinition.
Definition: JetRecConfig.py:36
python.JetCommonConfig.addJetsToSlimmingTool
def addJetsToSlimmingTool(slimhelper, contentlist, smartlist=[])
Definition: JetCommonConfig.py:236
python.JetToolConfig.DistanceInTrainToolCfg
def DistanceInTrainToolCfg(ConfigFlags)
Definition: JetToolConfig.py:13
python.JetCommonConfig.AddJvtDecorationAlgCfg
def AddJvtDecorationAlgCfg(ConfigFlags, algName="JvtPassDecorAlg", jetContainer='AntiKt4EMTopo', **kwargs)
Definition: JetCommonConfig.py:105
python.JetRecConfig.getConstitPJGAlg
def getConstitPJGAlg(constitdef, suffix=None, flags=None, parent_jetdef=None)
Definition: JetRecConfig.py:350
python.JetCommonConfig.StandardJetsInDerivCfg
def StandardJetsInDerivCfg(ConfigFlags)
Definition: JetCommonConfig.py:26
python.JetCommonConfig.AddBadBatmanCfg
def AddBadBatmanCfg(ConfigFlags)
Definition: JetCommonConfig.py:56
python.JetJvtEfficiencyToolConfig.getJvtEffToolCfg
def getJvtEffToolCfg(flags, jetalg)
Definition: JetJvtEfficiencyToolConfig.py:17
python.JetCommonConfig.AddDistanceInTrainCfg
def AddDistanceInTrainCfg(ConfigFlags)
Definition: JetCommonConfig.py:68
python.JetToolConfig.BadBatmanToolCfg
def BadBatmanToolCfg(ConfigFlags)
Definition: JetToolConfig.py:6
python.JetCommonConfig.AddEventCleanFlagsCfg
def AddEventCleanFlagsCfg(ConfigFlags, workingPoints=['Loose', 'Tight', 'LooseLLP'])
Definition: JetCommonConfig.py:118