ATLAS Offline Software
PHYS.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 #====================================================================
3 # DAOD_PHYS.py
4 # This defines DAOD_PHYS, an unskimmed DAOD format for Run 3.
5 # It contains the variables and objects needed for the large majority
6 # of physics analyses in ATLAS.
7 # It requires the flag PHYS in Derivation_tf.py
8 #====================================================================
9 
10 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
11 from AthenaConfiguration.ComponentFactory import CompFactory
12 from AthenaConfiguration.Enums import MetadataCategory
13 from AthenaCommon.Logging import logging
14 logPHYS = logging.getLogger('PHYS')
15 
16 # Main algorithm config
17 def PHYSKernelCfg(flags, name='PHYSKernel', **kwargs):
18  """Configure the derivation framework driving algorithm (kernel) for PHYS"""
19  acc = ComponentAccumulator()
20 
21  from TrkConfig.VertexFindingFlags import VertexSortingSetup
22  if flags.Tracking.PriVertex.sortingSetup is VertexSortingSetup.GNNSorting:
23  from DerivationFrameworkPhys.GNNVertexConfig import GNNVertexCfg
24  acc.merge(GNNVertexCfg(flags))
25 
26  # Common augmentations
27  from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
29  flags,
30  TriggerListsHelper = kwargs['TriggerListsHelper']
31  ))
32 
33  # Thinning tools
34  # These are set up in PhysCommonThinningConfig. Only thing needed here the list of tools to schedule
35  nametag = name.replace('Kernel', '') #get the name to label the tools below such that other formats can use this KernelCfg
36  thinningToolsArgs = {
37  'TrackParticleThinningToolName' : nametag+"TrackParticleThinningTool",
38  'MuonTPThinningToolName' : nametag+"MuonTPThinningTool",
39  'TauJetThinningToolName' : nametag+"TauJetThinningTool",
40  'TauJets_MuonRMThinningToolName' : nametag+"TauJets_MuonRMThinningTool",
41  'DiTauThinningToolName' : nametag+"DiTauThinningTool",
42  'DiTauTPThinningToolName' : nametag+"DiTauTPThinningTool",
43  'DiTauLowPtThinningToolName' : nametag+"DiTauLowPtThinningTool",
44  'DiTauLowPtTPThinningToolName' : nametag+"DiTauLowPtTPThinningTool",
45  }
46  # for AOD produced before 24.0.17, the electron removal tau is not available
47  if flags.Tau.TauEleRM_isAvailable:
48  thinningToolsArgs['TauJets_EleRMThinningToolName'] = nametag+"TauJets_EleRMThinningTool"
49  # Configure the thinning tools
50  from DerivationFrameworkPhys.PhysCommonThinningConfig import PhysCommonThinningCfg
51  acc.merge(PhysCommonThinningCfg(flags, StreamName = kwargs['StreamName'], **thinningToolsArgs))
52  # Get them from the CA so they can be added to the kernel
53  thinningTools = []
54  for key in thinningToolsArgs:
55  thinningTools.append(acc.getPublicTool(thinningToolsArgs[key]))
56 
57  # The kernel algorithm itself
58  DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
59  acc.addEventAlgo(DerivationKernel(name, ThinningTools = thinningTools))
60  return acc
61 
62 
63 def PHYSCoreCfg(flags, name_tag='PHYS', StreamName='StreamDAOD_PHYS', TriggerListsHelper=None, addExtraVariables=None):
64 
65  if TriggerListsHelper is None:
66  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
67  TriggerListsHelper = TriggerListsHelper(flags)
68 
69  acc = ComponentAccumulator()
70 
71 
72  from DerivationFrameworkHiggs.HiggsPhysContent import HiggsAugmentationAlgsCfg
73  acc.merge(HiggsAugmentationAlgsCfg(flags))
74 
75 
77  from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
78  acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = False, stream_name = StreamName))
79 
80 
81  from LeptonTaggers.LeptonTaggersConfig import DecoratePLITAlgsCfg
82  acc.merge(DecoratePLITAlgsCfg(flags))
83 
84  #===================================================
85  # HEAVY FLAVOR CLASSIFICATION FOR ttbar+jets EVENTS
86  #===================================================
87  from DerivationFrameworkMCTruth.HFClassificationCommonConfig import HFClassificationCommonCfg
88  acc.merge(HFClassificationCommonCfg(flags))
89 
90  # ============================
91  # Define contents of the format
92  # =============================
93  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
94  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
95  from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
96 
97  PHYSSlimmingHelper = SlimmingHelper(name_tag+"SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
98  PHYSSlimmingHelper.SmartCollections = ["EventInfo",
99  "Electrons",
100  "Photons",
101  "Muons",
102  "PrimaryVertices",
103  "InDetTrackParticles",
104  "AntiKt4EMTopoJets",
105  "AntiKt4EMPFlowJets",
106  "MET_Baseline_AntiKt4EMTopo",
107  "MET_Baseline_AntiKt4EMPFlow",
108  "TauJets",
109  "TauJets_MuonRM",
110  "DiTauJets",
111  "DiTauJetsLowPt",
112  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets",
113  "AntiKtVR30Rmax4Rmin02PV0TrackJets",
114  ]
115  if flags.Tau.TauEleRM_isAvailable:
116  PHYSSlimmingHelper.SmartCollections.append("TauJets_EleRM")
117 
118  excludedVertexAuxData = "-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"
119  StaticContent = []
120  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Tight_Vertices"]
121  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Tight_VerticesAux." + excludedVertexAuxData]
122  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Medium_Vertices"]
123  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Medium_VerticesAux." + excludedVertexAuxData]
124  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Loose_Vertices"]
125  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Loose_VerticesAux." + excludedVertexAuxData]
126 
127  PHYSSlimmingHelper.StaticContent = StaticContent
128 
129  # Extra content
130  PHYSSlimmingHelper.ExtraVariables += ["AntiKt4EMTopoJets.DFCommonJets_QGTagger_truthjet_nCharged.DFCommonJets_QGTagger_truthjet_pt.DFCommonJets_QGTagger_truthjet_eta.DFCommonJets_QGTagger_NTracks.DFCommonJets_QGTagger_TracksWidth.DFCommonJets_QGTagger_TracksC1.ConeExclBHadronsFinal.ConeExclCHadronsFinal.GhostBHadronsFinal.GhostCHadronsFinal.GhostBHadronsFinalCount.GhostBHadronsFinalPt.GhostCHadronsFinalCount.GhostCHadronsFinalPt.IsoFixedCone5PtPUsub",
131  "AntiKt4EMPFlowJets.QGTransformer_ConstScore.DFCommonJets_QGTagger_truthjet_nCharged.DFCommonJets_QGTagger_truthjet_pt.DFCommonJets_QGTagger_truthjet_eta.DFCommonJets_QGTagger_NTracks.DFCommonJets_QGTagger_TracksWidth.DFCommonJets_QGTagger_TracksC1.ConeExclBHadronsFinal.ConeExclCHadronsFinal.GhostBHadronsFinal.GhostCHadronsFinal.GhostBHadronsFinalCount.GhostBHadronsFinalPt.GhostCHadronsFinalCount.GhostCHadronsFinalPt.isJvtHS.isJvtPU.IsoFixedCone5PtPUsub",
132  "TruthPrimaryVertices.t.x.y.z",
133  "InDetTrackParticles.TTVA_AMVFVertices.TTVA_AMVFWeights.eProbabilityHT.numberOfTRTHits.numberOfTRTOutliers",
134  "EventInfo.GenFiltHT.GenFiltMET.GenFiltHTinclNu.GenFiltPTZ.GenFiltFatJ.HF_Classification.HF_SimpleClassification",
135  "TauJets.dRmax.etOverPtLeadTrk",
136  "TauJets_MuonRM.dRmax.etOverPtLeadTrk",
137  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET.ex.ey",
138  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_mht.ex.ey"]
139  if addExtraVariables:
140  PHYSSlimmingHelper.ExtraVariables += addExtraVariables
141 
142  if flags.Tau.TauEleRM_isAvailable:
143  PHYSSlimmingHelper.ExtraVariables += ["TauJets_EleRM.dRmax.etOverPtLeadTrk"]
144 
145  # IFF extra content
146  from LeptonTaggers.LeptonTaggersConfig import GetExtraPLITVariablesForDxAOD
147  PHYSSlimmingHelper.ExtraVariables += GetExtraPLITVariablesForDxAOD()
148 
149  # boosted jet taggers
150  PHYSSlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.TopTransformer_ConstScore",
151  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.WTransformer_ConstScore",
152  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.WTransformer_massdec_ConstScore",
153  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10TruthLabel_R22v1_TruthJetMass",
154  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10TruthLabel_R22v1_TruthJetPt",
155  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10TruthLabel_R22v1_TruthGroomedJetMass",
156  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10TruthLabel_R22v1_TruthGroomedJetPt",
157  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10WZTruthLabel_R22v1_TruthJetMass",
158  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10WZTruthLabel_R22v1_TruthJetPt",
159  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10WZTruthLabel_R22v1_TruthGroomedJetMass",
160  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.R10WZTruthLabel_R22v1_TruthGroomedJetPt"]
161 
162  # Truth extra content
163  if flags.Input.isMC:
164 
165  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
166  addTruth3ContentToSlimmerTool(PHYSSlimmingHelper)
167  PHYSSlimmingHelper.AllVariables += ['TruthLHEParticles', 'TruthHFWithDecayParticles','TruthHFWithDecayVertices','TruthCharm','TruthPileupParticles','InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
168  PHYSSlimmingHelper.ExtraVariables += ["Electrons.TruthLink",
169  "Muons.TruthLink",
170  "Photons.TruthLink",
171  "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt.HFHadronOriginID"]
172 
173  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
174  acc.merge(AddTauAndDownstreamParticlesCfg(flags))
175  PHYSSlimmingHelper.AllVariables += ['TruthTausWithDecayParticles','TruthTausWithDecayVertices']
176 
177 
178  from DerivationFrameworkHiggs.HiggsPhysContent import setupHiggsSlimmingVariables
179  setupHiggsSlimmingVariables(flags, PHYSSlimmingHelper)
180 
181 
182  PHYSSlimmingHelper.AllVariables += [ 'AFPSiHitContainer', 'AFPToFHitContainer' ]
183 
184  # Trigger content
185  PHYSSlimmingHelper.IncludeTriggerNavigation = False
186  PHYSSlimmingHelper.IncludeJetTriggerContent = False
187  PHYSSlimmingHelper.IncludeMuonTriggerContent = False
188  PHYSSlimmingHelper.IncludeEGammaTriggerContent = False
189  PHYSSlimmingHelper.IncludeTauTriggerContent = False
190  PHYSSlimmingHelper.IncludeEtMissTriggerContent = False
191  PHYSSlimmingHelper.IncludeBJetTriggerContent = False
192  PHYSSlimmingHelper.IncludeBPhysTriggerContent = False
193  PHYSSlimmingHelper.IncludeMinBiasTriggerContent = False
194  # Compact b-jet trigger matching info
195  PHYSSlimmingHelper.IncludeBJetTriggerByYearContent = True
196 
197  # Trigger matching
198  # Run 2
199  if flags.Trigger.EDMVersion == 2:
200  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
201  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
202  OutputContainerPrefix = "TrigMatch_",
203  TriggerList = TriggerListsHelper.Run2TriggerNamesTau)
204  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
205  OutputContainerPrefix = "TrigMatch_",
206  TriggerList = TriggerListsHelper.Run2TriggerNamesNoTau)
207  # Run 3, or Run 2 with navigation conversion
208  if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
209  from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
211 
212  # L1 trigger objects
213  from Campaigns.Utils import getDataYear
214  if getDataYear(flags) >= 2024:
215  # Run 3 with Phase I jet RoIs.
216  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddjFexRoIsToSlimmingHelper
217  AddjFexRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
218  elif getDataYear(flags) >= 2015:
219  # Run 2 and early Run 3, legacy L1 RoIs
220  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddLegacyL1JetRoIsToSlimmingHelper
221  AddLegacyL1JetRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
222 
223  # Output stream
224  PHYSItemList = PHYSSlimmingHelper.GetItemList()
225  acc.merge(OutputStreamCfg(flags, "DAOD_"+name_tag, ItemList=PHYSItemList, AcceptAlgs=[name_tag+"Kernel"]))
226  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_"+name_tag, AcceptAlgs=[name_tag+"Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TruthMetaData]))
227 
228  return acc
229 
230 def PHYSCfg(flags):
231 
232  logPHYS.info('****************** STARTING PHYS *****************')
233 
234  stream_name = 'StreamDAOD_PHYS'
235  acc = ComponentAccumulator()
236 
237  # Get the lists of triggers needed for trigger matching.
238  # This is needed at this scope (for the slimming) and further down in the config chain
239  # for actually configuring the matching, so we create it here and pass it down
240  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
241  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
242  PHYSTriggerListsHelper = TriggerListsHelper(flags)
243 
244  # Common augmentations
245  acc.merge(PHYSKernelCfg(
246  flags,
247  name="PHYSKernel",
248  StreamName = stream_name,
249  TriggerListsHelper = PHYSTriggerListsHelper
250  ))
251  # PHYS content
252  acc.merge(PHYSCoreCfg(
253  flags,
254  "PHYS",
255  StreamName = stream_name,
256  TriggerListsHelper = PHYSTriggerListsHelper
257  ))
258 
259  return acc
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=None, MetadataItemList=None, disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=None, HelperTools=None)
Definition: OutputStreamConfig.py:13
python.PHYS.PHYSKernelCfg
def PHYSKernelCfg(flags, name='PHYSKernel', **kwargs)
Definition: PHYS.py:17
TrigNavSlimmingMTConfig.AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
def AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(slimmingHelper)
Definition: TrigNavSlimmingMTConfig.py:99
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:342
python.PhysCommonThinningConfig.PhysCommonThinningCfg
def PhysCommonThinningCfg(flags, StreamName="StreamDAOD_PHYS", **kwargs)
Definition: PhysCommonThinningConfig.py:9
python.TriggerMatchingCommonConfig.AddjFexRoIsToSlimmingHelper
def AddjFexRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:60
python.MCTruthCommonConfig.AddTauAndDownstreamParticlesCfg
def AddTauAndDownstreamParticlesCfg(flags, generations=-1, rejectHadronChildren=False)
Definition: MCTruthCommonConfig.py:279
python.TriggerMatchingCommonConfig.AddRun2TriggerMatchingToSlimmingHelper
def AddRun2TriggerMatchingToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:29
python.Utils.getDataYear
def getDataYear(flags)
Definition: Tools/Campaigns/python/Utils.py:71
LeptonTaggersConfig.GetExtraPLITVariablesForDxAOD
def GetExtraPLITVariablesForDxAOD(name='')
Definition: LeptonTaggersConfig.py:584
python.PHYS.PHYSCoreCfg
def PHYSCoreCfg(flags, name_tag='PHYS', StreamName='StreamDAOD_PHYS', TriggerListsHelper=None, addExtraVariables=None)
Definition: PHYS.py:63
python.HiggsPhysContent.HiggsAugmentationAlgsCfg
def HiggsAugmentationAlgsCfg(flags)
Definition: HiggsPhysContent.py:4
python.GNNVertexConfig.GNNVertexCfg
def GNNVertexCfg(flags, **kwargs)
Definition: GNNVertexConfig.py:216
python.MCTruthCommonConfig.addTruth3ContentToSlimmerTool
def addTruth3ContentToSlimmerTool(slimmer)
Definition: MCTruthCommonConfig.py:502
LeptonTaggersConfig.DecoratePLITAlgsCfg
ComponentAccumulator DecoratePLITAlgsCfg(ConfigFlags, name="DecoratePLITAlgsCfg", lepton_type="", **kwargs)
Definition: LeptonTaggersConfig.py:465
python.TriggerMatchingCommonConfig.AddLegacyL1JetRoIsToSlimmingHelper
def AddLegacyL1JetRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:50
python.HiggsPhysContent.setupHiggsSlimmingVariables
def setupHiggsSlimmingVariables(ConfigFlags, slimmingHelper)
Definition: HiggsPhysContent.py:13
IsolationSelectionConfig.IsoCloseByAlgsCfg
def IsoCloseByAlgsCfg(flags, suff="", isPhysLite=False, containerNames=["Muons", "Electrons", "Photons"], stream_name="", ttva_wp="Nonprompt_All_MaxWeight", useSelTools=False, isoDecSuffix="CloseByCorr", caloDecSuffix="", hasLRT=False)
Definition: IsolationSelectionConfig.py:146
python.PhysCommonConfig.PhysCommonAugmentationsCfg
def PhysCommonAugmentationsCfg(flags, **kwargs)
Definition: PhysCommonConfig.py:13
python.HFClassificationCommonConfig.HFClassificationCommonCfg
def HFClassificationCommonCfg(flags)
Definition: HFClassificationCommonConfig.py:100
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
SlimmingHelper
Definition: SlimmingHelper.py:1
python.HION12.DerivationKernel
DerivationKernel
Definition: HION12.py:66
python.PHYS.PHYSCfg
def PHYSCfg(flags)
Definition: PHYS.py:230