Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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  'DiTauTPThinningToolName' : nametag+"DiTauTPThinningTool",
42  'DiTauLowPtThinningToolName' : nametag+"DiTauLowPtThinningTool",
43  'DiTauLowPtTPThinningToolName' : nametag+"DiTauLowPtTPThinningTool",
44  }
45  # for AOD produced before 24.0.17, the electron removal tau is not available
46  if flags.Tau.TauEleRM_isAvailable:
47  thinningToolsArgs['TauJets_EleRMThinningToolName'] = nametag+"TauJets_EleRMThinningTool"
48  # Configure the thinning tools
49  from DerivationFrameworkPhys.PhysCommonThinningConfig import PhysCommonThinningCfg
50  acc.merge(PhysCommonThinningCfg(flags, StreamName = kwargs['StreamName'], **thinningToolsArgs))
51  # Get them from the CA so they can be added to the kernel
52  thinningTools = []
53  for key in thinningToolsArgs:
54  thinningTools.append(acc.getPublicTool(thinningToolsArgs[key]))
55 
56  # The kernel algorithm itself
57  DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
58  acc.addEventAlgo(DerivationKernel(name, ThinningTools = thinningTools))
59  return acc
60 
61 
62 def PHYSCoreCfg(flags, name_tag='PHYS', StreamName='StreamDAOD_PHYS', TriggerListsHelper=None):
63 
64  if TriggerListsHelper is None:
65  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
66  TriggerListsHelper = TriggerListsHelper(flags)
67 
68  acc = ComponentAccumulator()
69 
70 
71  from DerivationFrameworkHiggs.HiggsPhysContent import HiggsAugmentationAlgsCfg
72  acc.merge(HiggsAugmentationAlgsCfg(flags))
73 
74 
75  from DerivationFrameworkFlavourTag.FtagDerivationConfig import JetCollectionsBTaggingCfg
76  acc.merge(JetCollectionsBTaggingCfg(flags, ["AntiKt4EMPFlowJets"]))
77 
78 
80  from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
81  acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = False, stream_name = StreamName))
82 
83  #===================================================
84  # HEAVY FLAVOR CLASSIFICATION FOR ttbar+jets EVENTS
85  #===================================================
86  from DerivationFrameworkMCTruth.HFClassificationCommonConfig import HFClassificationCommonCfg
87  acc.merge(HFClassificationCommonCfg(flags))
88 
89  # ============================
90  # Define contents of the format
91  # =============================
92  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
93  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
94  from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
95 
96  PHYSSlimmingHelper = SlimmingHelper(name_tag+"SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
97  PHYSSlimmingHelper.SmartCollections = ["EventInfo",
98  "Electrons",
99  "Photons",
100  "Muons",
101  "PrimaryVertices",
102  "InDetTrackParticles",
103  "AntiKt4EMTopoJets",
104  "AntiKt4EMPFlowJets",
105  "BTagging_AntiKt4EMPFlow",
106  "AntiKt4EMPFlowJets_FTAG",
107  "MET_Baseline_AntiKt4EMTopo",
108  "MET_Baseline_AntiKt4EMPFlow",
109  "TauJets",
110  "TauJets_MuonRM",
111  "DiTauJets",
112  "DiTauJetsLowPt",
113  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets",
114  "AntiKtVR30Rmax4Rmin02PV0TrackJets",
115  ]
116  if flags.Tau.TauEleRM_isAvailable:
117  PHYSSlimmingHelper.SmartCollections.append("TauJets_EleRM")
118 
119  excludedVertexAuxData = "-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"
120  StaticContent = []
121  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Tight_Vertices"]
122  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Tight_VerticesAux." + excludedVertexAuxData]
123  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Medium_Vertices"]
124  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Medium_VerticesAux." + excludedVertexAuxData]
125  StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Loose_Vertices"]
126  StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Loose_VerticesAux." + excludedVertexAuxData]
127 
128  PHYSSlimmingHelper.StaticContent = StaticContent
129 
130  # Extra content
131  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",
132  "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",
133  "TruthPrimaryVertices.t.x.y.z",
134  "InDetTrackParticles.TTVA_AMVFVertices.TTVA_AMVFWeights.eProbabilityHT.numberOfTRTHits.numberOfTRTOutliers",
135  "EventInfo.GenFiltHT.GenFiltMET.GenFiltHTinclNu.GenFiltPTZ.GenFiltFatJ.HF_Classification.HF_SimpleClassification",
136  "TauJets.dRmax.etOverPtLeadTrk",
137  "TauJets_MuonRM.dRmax.etOverPtLeadTrk",
138  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET.ex.ey",
139  "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_mht.ex.ey"]
140  if flags.Tau.TauEleRM_isAvailable:
141  PHYSSlimmingHelper.ExtraVariables += ["TauJets_EleRM.dRmax.etOverPtLeadTrk"]
142 
143  # FTAG Xbb extra content
144  extraList = []
145  for tagger in ["GN2Xv01", "GN2Xv02"]:
146  for score in ["phbb", "phcc", "ptop", "pqcd"]:
147  extraList.append(f"{tagger}_{score}")
148  PHYSSlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets." + ".".join(extraList)]
149 
150  # Truth extra content
151  if flags.Input.isMC:
152 
153  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
154  addTruth3ContentToSlimmerTool(PHYSSlimmingHelper)
155  PHYSSlimmingHelper.AllVariables += ['TruthLHEParticles', 'TruthHFWithDecayParticles','TruthHFWithDecayVertices','TruthCharm','TruthPileupParticles','InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
156  PHYSSlimmingHelper.ExtraVariables += ["Electrons.TruthLink",
157  "Muons.TruthLink",
158  "Photons.TruthLink",
159  "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt"]
160 
161  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
162  acc.merge(AddTauAndDownstreamParticlesCfg(flags))
163  PHYSSlimmingHelper.AllVariables += ['TruthTausWithDecayParticles','TruthTausWithDecayVertices']
164 
165 
166  from DerivationFrameworkHiggs.HiggsPhysContent import setupHiggsSlimmingVariables
167  setupHiggsSlimmingVariables(flags, PHYSSlimmingHelper)
168 
169 
170  PHYSSlimmingHelper.AllVariables += [ 'AFPSiHitContainer', 'AFPToFHitContainer' ]
171 
172  # Trigger content
173  PHYSSlimmingHelper.IncludeTriggerNavigation = False
174  PHYSSlimmingHelper.IncludeJetTriggerContent = False
175  PHYSSlimmingHelper.IncludeMuonTriggerContent = False
176  PHYSSlimmingHelper.IncludeEGammaTriggerContent = False
177  PHYSSlimmingHelper.IncludeTauTriggerContent = False
178  PHYSSlimmingHelper.IncludeEtMissTriggerContent = False
179  PHYSSlimmingHelper.IncludeBJetTriggerContent = False
180  PHYSSlimmingHelper.IncludeBPhysTriggerContent = False
181  PHYSSlimmingHelper.IncludeMinBiasTriggerContent = False
182  # Compact b-jet trigger matching info
183  PHYSSlimmingHelper.IncludeBJetTriggerByYearContent = True
184 
185  # Trigger matching
186  # Run 2
187  if flags.Trigger.EDMVersion == 2:
188  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
189  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
190  OutputContainerPrefix = "TrigMatch_",
191  TriggerList = TriggerListsHelper.Run2TriggerNamesTau)
192  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper,
193  OutputContainerPrefix = "TrigMatch_",
194  TriggerList = TriggerListsHelper.Run2TriggerNamesNoTau)
195  # Run 3, or Run 2 with navigation conversion
196  if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
197  from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
199 
200  # L1 trigger objects
201  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import getDataYear
202  if getDataYear(flags) >= 2024:
203  # Run 3 with Phase I jet RoIs.
204  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddjFexRoIsToSlimmingHelper
205  AddjFexRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
206  elif getDataYear(flags) >= 2015:
207  # Run 2 and early Run 3, legacy L1 RoIs
208  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddLegacyL1JetRoIsToSlimmingHelper
209  AddLegacyL1JetRoIsToSlimmingHelper(SlimmingHelper = PHYSSlimmingHelper)
210 
211  # Output stream
212  PHYSItemList = PHYSSlimmingHelper.GetItemList()
213  acc.merge(OutputStreamCfg(flags, "DAOD_"+name_tag, ItemList=PHYSItemList, AcceptAlgs=[name_tag+"Kernel"]))
214  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_"+name_tag, AcceptAlgs=[name_tag+"Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TruthMetaData]))
215 
216  return acc
217 
218 def PHYSCfg(flags):
219 
220  logPHYS.info('****************** STARTING PHYS *****************')
221 
222  stream_name = 'StreamDAOD_PHYS'
223  acc = ComponentAccumulator()
224 
225  # Get the lists of triggers needed for trigger matching.
226  # This is needed at this scope (for the slimming) and further down in the config chain
227  # for actually configuring the matching, so we create it here and pass it down
228  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
229  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
230  PHYSTriggerListsHelper = TriggerListsHelper(flags)
231 
232  # Common augmentations
233  acc.merge(PHYSKernelCfg(
234  flags,
235  name="PHYSKernel",
236  StreamName = stream_name,
237  TriggerListsHelper = PHYSTriggerListsHelper
238  ))
239  # PHYS content
240  acc.merge(PHYSCoreCfg(
241  flags,
242  "PHYS",
243  StreamName = stream_name,
244  TriggerListsHelper = PHYSTriggerListsHelper
245  ))
246 
247  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.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:12
python.PhysCommonThinningConfig.PhysCommonThinningCfg
def PhysCommonThinningCfg(flags, StreamName="StreamDAOD_PHYS", **kwargs)
Definition: PhysCommonThinningConfig.py:9
python.FtagDerivationConfig.JetCollectionsBTaggingCfg
def JetCollectionsBTaggingCfg(cfgFlags, jet_cols, pv_cols=None, trackAugmenterPrefix=None)
Definition: FtagDerivationConfig.py:17
python.TriggerMatchingCommonConfig.AddjFexRoIsToSlimmingHelper
def AddjFexRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:80
python.MCTruthCommonConfig.AddTauAndDownstreamParticlesCfg
def AddTauAndDownstreamParticlesCfg(flags, generations=-1, rejectHadronChildren=False)
Definition: MCTruthCommonConfig.py:267
python.TriggerMatchingCommonConfig.getDataYear
def getDataYear(flags)
Definition: TriggerMatchingCommonConfig.py:30
IsolationSelectionConfig.IsoCloseByAlgsCfg
def IsoCloseByAlgsCfg(flags, suff="", isPhysLite=False, containerNames=["Muons", "Electrons", "Photons"], stream_name="", ttva_wp="Nonprompt_All_MaxWeight", useSelTools=False, isoDecSuffix="CloseByCorr", hasLRT=False)
Definition: IsolationSelectionConfig.py:145
python.TriggerMatchingCommonConfig.AddRun2TriggerMatchingToSlimmingHelper
def AddRun2TriggerMatchingToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:49
python.HiggsPhysContent.HiggsAugmentationAlgsCfg
def HiggsAugmentationAlgsCfg(flags)
Definition: HiggsPhysContent.py:4
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.GNNVertexConfig.GNNVertexCfg
def GNNVertexCfg(flags, **kwargs)
Definition: GNNVertexConfig.py:216
python.MCTruthCommonConfig.addTruth3ContentToSlimmerTool
def addTruth3ContentToSlimmerTool(slimmer)
Definition: MCTruthCommonConfig.py:466
python.TriggerMatchingCommonConfig.AddLegacyL1JetRoIsToSlimmingHelper
def AddLegacyL1JetRoIsToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:70
python.HiggsPhysContent.setupHiggsSlimmingVariables
def setupHiggsSlimmingVariables(ConfigFlags, slimmingHelper)
Definition: HiggsPhysContent.py:13
python.PhysCommonConfig.PhysCommonAugmentationsCfg
def PhysCommonAugmentationsCfg(flags, **kwargs)
Definition: PhysCommonConfig.py:14
python.HFClassificationCommonConfig.HFClassificationCommonCfg
def HFClassificationCommonCfg(flags)
Definition: HFClassificationCommonConfig.py:114
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.PHYSCoreCfg
def PHYSCoreCfg(flags, name_tag='PHYS', StreamName='StreamDAOD_PHYS', TriggerListsHelper=None)
Definition: PHYS.py:62
python.PHYS.PHYSCfg
def PHYSCfg(flags)
Definition: PHYS.py:218