ATLAS Offline Software
PHYS.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 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  "BTagging_AntiKt4EMPFlow",
107  "AntiKt4EMPFlowJets_FTAG",
108  "MET_Baseline_AntiKt4EMTopo",
109  "MET_Baseline_AntiKt4EMPFlow",
110  "TauJets",
111  "TauJets_MuonRM",
112  "DiTauJets",
113  "DiTauJetsLowPt",
114  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets",
115  "AntiKtVR30Rmax4Rmin02PV0TrackJets",
116  ]
117  if flags.Tau.TauEleRM_isAvailable:
118  PHYSSlimmingHelper.SmartCollections.append("TauJets_EleRM")
119 
120  excludedVertexAuxData = "-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"
121  StaticContent = []
122  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Tight_Vertices"]
123  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Tight_VerticesAux." + excludedVertexAuxData]
124  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Medium_Vertices"]
125  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Medium_VerticesAux." + excludedVertexAuxData]
126  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Loose_Vertices"]
127  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Loose_VerticesAux." + excludedVertexAuxData]
128 
129  PHYSSlimmingHelper.StaticContent = StaticContent
130 
131  # Extra content
132  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",
133  "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.GhostPartons.isJvtHS.isJvtPU.IsoFixedCone5PtPUsub",
134  "TruthPrimaryVertices.t.x.y.z",
135  "InDetTrackParticles.TTVA_AMVFVertices.TTVA_AMVFWeights.eProbabilityHT.numberOfTRTHits.numberOfTRTOutliers",
136  "EventInfo.GenFiltHT.GenFiltMET.GenFiltHTinclNu.GenFiltPTZ.GenFiltFatJ.HF_Classification.HF_SimpleClassification",
137  "TauJets.dRmax.etOverPtLeadTrk",
138  "TauJets_MuonRM.dRmax.etOverPtLeadTrk",
139  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET.ex.ey",
140  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_mht.ex.ey"]
141 
142  if addExtraVariables:
143  PHYSSlimmingHelper.ExtraVariables += addExtraVariables
144 
145  if flags.Tau.TauEleRM_isAvailable:
146  PHYSSlimmingHelper.ExtraVariables += ["TauJets_EleRM.dRmax.etOverPtLeadTrk"]
147 
148  # IFF extra content
149  from LeptonTaggers.LeptonTaggersConfig import GetExtraPLITVariablesForDxAOD
150  PHYSSlimmingHelper.ExtraVariables += GetExtraPLITVariablesForDxAOD()
151 
152  # boosted jet taggers
153  PHYSSlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.TopTransformer_ConstScore"]
154 
155  # Truth extra content
156  if flags.Input.isMC:
157 
158  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
159  addTruth3ContentToSlimmerTool(PHYSSlimmingHelper)
160  PHYSSlimmingHelper.AllVariables += ['TruthLHEParticles', 'TruthHFWithDecayParticles','TruthHFWithDecayVertices','TruthCharm','TruthPileupParticles','InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
161  PHYSSlimmingHelper.ExtraVariables += ["Electrons.TruthLink",
162  "Muons.TruthLink",
163  "Photons.TruthLink",
164  "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt.HFHadronOriginID"]
165 
166  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
167  acc.merge(AddTauAndDownstreamParticlesCfg(flags))
168  PHYSSlimmingHelper.AllVariables += ['TruthTausWithDecayParticles','TruthTausWithDecayVertices']
169 
170 
171  from DerivationFrameworkHiggs.HiggsPhysContent import setupHiggsSlimmingVariables
172  setupHiggsSlimmingVariables(flags, PHYSSlimmingHelper)
173 
174 
175  PHYSSlimmingHelper.AllVariables += [ 'AFPSiHitContainer', 'AFPToFHitContainer' ]
176 
177  # Trigger content
178  PHYSSlimmingHelper.IncludeTriggerNavigation = False
179  PHYSSlimmingHelper.IncludeJetTriggerContent = False
180  PHYSSlimmingHelper.IncludeMuonTriggerContent = False
181  PHYSSlimmingHelper.IncludeEGammaTriggerContent = False
182  PHYSSlimmingHelper.IncludeTauTriggerContent = False
183  PHYSSlimmingHelper.IncludeEtMissTriggerContent = False
184  PHYSSlimmingHelper.IncludeBJetTriggerContent = False
185  PHYSSlimmingHelper.IncludeBPhysTriggerContent = False
186  PHYSSlimmingHelper.IncludeMinBiasTriggerContent = False
187  # Compact b-jet trigger matching info
188  PHYSSlimmingHelper.IncludeBJetTriggerByYearContent = True
189 
190  # Trigger matching
191  # Run 2
192  if flags.Trigger.EDMVersion == 2:
193  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
194  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
195  OutputContainerPrefix = "TrigMatch_",
196  TriggerList = TriggerListsHelper.Run2TriggerNamesTau)
197  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
198  OutputContainerPrefix = "TrigMatch_",
199  TriggerList = TriggerListsHelper.Run2TriggerNamesNoTau)
200  # Run 3, or Run 2 with navigation conversion
201  if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
202  from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
204 
205  # L1 trigger objects
206  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import getDataYear
207  if getDataYear(flags) >= 2024:
208  # Run 3 with Phase I jet RoIs.
209  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddjFexRoIsToSlimmingHelper
210  AddjFexRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
211  elif getDataYear(flags) >= 2015:
212  # Run 2 and early Run 3, legacy L1 RoIs
213  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddLegacyL1JetRoIsToSlimmingHelper
214  AddLegacyL1JetRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
215 
216  # Output stream
217  PHYSItemList = PHYSSlimmingHelper.GetItemList()
218  acc.merge(OutputStreamCfg(flags, "DAOD_"+name_tag, ItemList=PHYSItemList, AcceptAlgs=[name_tag+"Kernel"]))
219  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_"+name_tag, AcceptAlgs=[name_tag+"Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TruthMetaData]))
220 
221  return acc
222 
223 def PHYSCfg(flags):
224 
225  logPHYS.info('****************** STARTING PHYS *****************')
226 
227  stream_name = 'StreamDAOD_PHYS'
228  acc = ComponentAccumulator()
229 
230  # Get the lists of triggers needed for trigger matching.
231  # This is needed at this scope (for the slimming) and further down in the config chain
232  # for actually configuring the matching, so we create it here and pass it down
233  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
234  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
235  PHYSTriggerListsHelper = TriggerListsHelper(flags)
236 
237  # Common augmentations
238  acc.merge(PHYSKernelCfg(
239  flags,
240  name="PHYSKernel",
241  StreamName = stream_name,
242  TriggerListsHelper = PHYSTriggerListsHelper
243  ))
244  # PHYS content
245  acc.merge(PHYSCoreCfg(
246  flags,
247  "PHYS",
248  StreamName = stream_name,
249  TriggerListsHelper = PHYSTriggerListsHelper
250  ))
251 
252  return acc
python.PHYS.PHYSKernelCfg
def PHYSKernelCfg(flags, name='PHYSKernel', **kwargs)
Definition: PHYS.py:17
TrigNavSlimmingMTConfig.AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
def AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(slimmingHelper)
Definition: TrigNavSlimmingMTConfig.py:98
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.PhysCommonThinningConfig.PhysCommonThinningCfg
def PhysCommonThinningCfg(flags, StreamName="StreamDAOD_PHYS", **kwargs)
Definition: PhysCommonThinningConfig.py:9
python.TriggerMatchingCommonConfig.AddjFexRoIsToSlimmingHelper
def AddjFexRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:80
python.MCTruthCommonConfig.AddTauAndDownstreamParticlesCfg
def AddTauAndDownstreamParticlesCfg(flags, generations=-1, rejectHadronChildren=False)
Definition: MCTruthCommonConfig.py:266
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:16
python.TriggerMatchingCommonConfig.getDataYear
def getDataYear(flags)
Definition: TriggerMatchingCommonConfig.py:30
python.TriggerMatchingCommonConfig.AddRun2TriggerMatchingToSlimmingHelper
def AddRun2TriggerMatchingToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:49
LeptonTaggersConfig.GetExtraPLITVariablesForDxAOD
def GetExtraPLITVariablesForDxAOD(name='')
Definition: LeptonTaggersConfig.py:586
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:465
LeptonTaggersConfig.DecoratePLITAlgsCfg
ComponentAccumulator DecoratePLITAlgsCfg(ConfigFlags, name="DecoratePLITAlgsCfg", lepton_type="", **kwargs)
Definition: LeptonTaggersConfig.py:456
python.TriggerMatchingCommonConfig.AddLegacyL1JetRoIsToSlimmingHelper
def AddLegacyL1JetRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:70
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:115
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:223