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.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  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.WTransformer_ConstScore",
155  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.WTransformer_massdec_ConstScore"]
156 
157  # Truth extra content
158  if flags.Input.isMC:
159 
160  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
161  addTruth3ContentToSlimmerTool(PHYSSlimmingHelper)
162  PHYSSlimmingHelper.AllVariables += ['TruthLHEParticles', 'TruthHFWithDecayParticles','TruthHFWithDecayVertices','TruthCharm','TruthPileupParticles','InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
163  PHYSSlimmingHelper.ExtraVariables += ["Electrons.TruthLink",
164  "Muons.TruthLink",
165  "Photons.TruthLink",
166  "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt.HFHadronOriginID"]
167 
168  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
169  acc.merge(AddTauAndDownstreamParticlesCfg(flags))
170  PHYSSlimmingHelper.AllVariables += ['TruthTausWithDecayParticles','TruthTausWithDecayVertices']
171 
172 
173  from DerivationFrameworkHiggs.HiggsPhysContent import setupHiggsSlimmingVariables
174  setupHiggsSlimmingVariables(flags, PHYSSlimmingHelper)
175 
176 
177  PHYSSlimmingHelper.AllVariables += [ 'AFPSiHitContainer', 'AFPToFHitContainer' ]
178 
179  # Trigger content
180  PHYSSlimmingHelper.IncludeTriggerNavigation = False
181  PHYSSlimmingHelper.IncludeJetTriggerContent = False
182  PHYSSlimmingHelper.IncludeMuonTriggerContent = False
183  PHYSSlimmingHelper.IncludeEGammaTriggerContent = False
184  PHYSSlimmingHelper.IncludeTauTriggerContent = False
185  PHYSSlimmingHelper.IncludeEtMissTriggerContent = False
186  PHYSSlimmingHelper.IncludeBJetTriggerContent = False
187  PHYSSlimmingHelper.IncludeBPhysTriggerContent = False
188  PHYSSlimmingHelper.IncludeMinBiasTriggerContent = False
189  # Compact b-jet trigger matching info
190  PHYSSlimmingHelper.IncludeBJetTriggerByYearContent = True
191 
192  # Trigger matching
193  # Run 2
194  if flags.Trigger.EDMVersion == 2:
195  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
196  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
197  OutputContainerPrefix = "TrigMatch_",
198  TriggerList = TriggerListsHelper.Run2TriggerNamesTau)
199  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
200  OutputContainerPrefix = "TrigMatch_",
201  TriggerList = TriggerListsHelper.Run2TriggerNamesNoTau)
202  # Run 3, or Run 2 with navigation conversion
203  if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
204  from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
206 
207  # L1 trigger objects
208  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import getDataYear
209  if getDataYear(flags) >= 2024:
210  # Run 3 with Phase I jet RoIs.
211  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddjFexRoIsToSlimmingHelper
212  AddjFexRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
213  elif getDataYear(flags) >= 2015:
214  # Run 2 and early Run 3, legacy L1 RoIs
215  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddLegacyL1JetRoIsToSlimmingHelper
216  AddLegacyL1JetRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
217 
218  # Output stream
219  PHYSItemList = PHYSSlimmingHelper.GetItemList()
220  acc.merge(OutputStreamCfg(flags, "DAOD_"+name_tag, ItemList=PHYSItemList, AcceptAlgs=[name_tag+"Kernel"]))
221  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_"+name_tag, AcceptAlgs=[name_tag+"Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TruthMetaData]))
222 
223  return acc
224 
225 def PHYSCfg(flags):
226 
227  logPHYS.info('****************** STARTING PHYS *****************')
228 
229  stream_name = 'StreamDAOD_PHYS'
230  acc = ComponentAccumulator()
231 
232  # Get the lists of triggers needed for trigger matching.
233  # This is needed at this scope (for the slimming) and further down in the config chain
234  # for actually configuring the matching, so we create it here and pass it down
235  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
236  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
237  PHYSTriggerListsHelper = TriggerListsHelper(flags)
238 
239  # Common augmentations
240  acc.merge(PHYSKernelCfg(
241  flags,
242  name="PHYSKernel",
243  StreamName = stream_name,
244  TriggerListsHelper = PHYSTriggerListsHelper
245  ))
246  # PHYS content
247  acc.merge(PHYSCoreCfg(
248  flags,
249  "PHYS",
250  StreamName = stream_name,
251  TriggerListsHelper = PHYSTriggerListsHelper
252  ))
253 
254  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: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:268
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:469
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:225