ATLAS Offline Software
JETM2.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 #====================================================================
3 # DAOD_JETM2.py
4 #====================================================================
5 
6 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory import CompFactory
8 from AthenaConfiguration.Enums import MetadataCategory, LHCPeriod
9 
10 # Main algorithm config
11 def JETM2KernelCfg(flags, name='JETM2Kernel', **kwargs):
12  """Configure the derivation framework driving algorithm (kernel) for JETM2"""
13  acc = ComponentAccumulator()
14 
15  # Common augmentations
16  from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
17  acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']))
18 
19  if flags.Input.isMC:
20  # thinning tools:
21  truthThinningTool = CompFactory.DerivationFramework.MenuTruthThinning(name = "JETM2TruthThinning",
22  StreamName = kwargs['StreamName'],
23  WriteAllStable = True,
24  WritePartons = False,
25  WriteHadrons = False,
26  WriteBHadrons = True,
27  WriteCHadrons = False,
28  WriteGeant = False,
29  WriteFirstN = 10)
30 
31  acc.addPublicTool(truthThinningTool)
32 
33  DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
34  acc.addEventAlgo(DerivationKernel(name, ThinningTools = [truthThinningTool] if flags.Input.isMC else []))
35 
36  # Extra jet content:
37  acc.merge(JETM2ExtraContentCfg(flags))
38 
39  return acc
40 
41 
43 
44  acc = ComponentAccumulator()
45 
46  from JetRecConfig.JetRecConfig import JetRecCfg, getInputAlgs, getConstitPJGAlg
47  from JetRecConfig.JetInputConfig import buildEventShapeAlg
48  from JetRecConfig.StandardJetConstits import stdConstitDic as cst
49  from JetRecConfig.StandardSmallRJets import AntiKt4UFOCSSKNoPtCut, AntiKt4EMPFlowNoPtCut, AntiKt4EMPFlowML, AntiKt4EMTopoNoPtCut
50  from JetRecConfig.StandardLargeRJets import AntiKt10TruthDressedWZSoftDrop
51 
52  #=======================================
53  # CHS R = 0.4 UFO jets
54  #=======================================
55 
56  algs = getInputAlgs(cst.UFO, flags=flags)
57  for alg in algs:
58  if isinstance(alg, ComponentAccumulator):
59  acc.merge(alg)
60  else:
61  acc.addEventAlgo(alg)
62 
63  #=======================================
64  # NoPtCut containers
65  #=======================================
66  jetList = [AntiKt4UFOCSSKNoPtCut,AntiKt4EMPFlowNoPtCut,AntiKt4EMPFlowML,AntiKt4EMTopoNoPtCut]
67 
68  #=======================================
69  # R = 1.0 truth WZ Dressed jets
70  #=======================================
71  if flags.Input.isMC:
72  jetList += [AntiKt10TruthDressedWZSoftDrop]
73 
74 
75  for jd in jetList:
76  acc.merge(JetRecCfg(flags,jd))
77 
78  #=======================================
79  # UFO CSSK event shape
80  #=======================================
81 
82  acc.addEventAlgo(buildEventShapeAlg(cst.UFOCSSK,'', suffix=None))
83  acc.addEventAlgo(getConstitPJGAlg(cst.UFOCSSK, suffix='Neut'))
84  acc.addEventAlgo(buildEventShapeAlg(cst.UFOCSSK,'', suffix='Neut'))
85 
86  #=======================================
87  # More detailed truth information
88  #=======================================
89 
90  if flags.Input.isMC:
91  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTopQuarkAndDownstreamParticlesCfg, AddTruthCollectionNavigationDecorationsCfg
92  acc.merge(AddTopQuarkAndDownstreamParticlesCfg(flags))
93  acc.merge(AddTruthCollectionNavigationDecorationsCfg(flags, TruthCollections=["TruthTopQuarkWithDecayParticles","TruthBosonsWithDecayParticles"],prefix='Top'))
94 
95 
96  return acc
97 
98 
99 def JETM2Cfg(flags):
100 
101  acc = ComponentAccumulator()
102 
103  # Get the lists of triggers needed for trigger matching.
104  # This is needed at this scope (for the slimming) and further down in the config chain
105  # for actually configuring the matching, so we create it here and pass it down
106  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
107  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
108  JETM2TriggerListsHelper = TriggerListsHelper(flags)
109 
110  # Skimming, thinning, augmentation, extra content
111  acc.merge(JETM2KernelCfg(flags, name="JETM2Kernel", StreamName = 'StreamDAOD_JETM2', TriggerListsHelper = JETM2TriggerListsHelper))
112 
113  # ============================
114  # Define contents of the format
115  # =============================
116  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
117  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
118  from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
119 
120  JETM2SlimmingHelper = SlimmingHelper("JETM2SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
121 
122  JETM2SlimmingHelper.SmartCollections = ["EventInfo","InDetTrackParticles", "PrimaryVertices",
123  "Electrons", "Photons", "Muons", "TauJets",
124  "MET_Baseline_AntiKt4EMPFlow",
125  "AntiKt4EMTopoNoPtCutJets","AntiKt4EMPFlowJets",
126  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"]
127 
128  JETM2SlimmingHelper.AllVariables = ["CaloCalFwdTopoTowers",
129  "CHSGChargedParticleFlowObjects","CHSGNeutralParticleFlowObjects",
130  "CHSGlobalClusterMLCorrectedChargedParticleFlowObjects","CHSGlobalClusterMLCorrectedNeutralParticleFlowObjects",
131  "CSSKGChargedParticleFlowObjects","CSSKGNeutralParticleFlowObjects",
132  "Kt4EMTopoOriginEventShape","Kt4EMPFlowEventShape","Kt4EMPFlowPUSBEventShape",
133  "Kt4EMPFlowNeutEventShape","Kt4UFOCSSKEventShape","Kt4UFOCSSKNeutEventShape"]
134 
135  # Low-level inputs
136  from DerivationFrameworkJetEtMiss.CommonJETMXContent import ClusterVariables, FlowElementVariables, UFOVariables, TrackingVariables, TrackingVariablesHGTD, FELinks
137  JETM2SlimmingHelper.ExtraVariables += [".".join(["CaloCalTopoClusters"] + ClusterVariables + ["clusterE_ML.clusterE_ML_unc"])]
138  JETM2SlimmingHelper.ExtraVariables += [".".join(["EMOriginTopoClusters"] + ['calM'])]
139  JETM2SlimmingHelper.ExtraVariables += [".".join(["GlobalChargedParticleFlowObjects"] + FlowElementVariables)]
140  JETM2SlimmingHelper.ExtraVariables += [".".join(["GlobalNeutralParticleFlowObjects"] + FlowElementVariables)]
141  JETM2SlimmingHelper.ExtraVariables += [".".join(["GlobalClusterMLCorrectedChargedParticleFlowObjects"] + FlowElementVariables)]
142  JETM2SlimmingHelper.ExtraVariables += [".".join(["GlobalClusterMLCorrectedNeutralParticleFlowObjects"] + FlowElementVariables)]
143  JETM2SlimmingHelper.ExtraVariables += [".".join(["UFO"] + UFOVariables)]
144  JETM2SlimmingHelper.ExtraVariables += [".".join(["UFOCSSK"] + UFOVariables)]
145  JETM2SlimmingHelper.ExtraVariables += [".".join(["InDetTrackParticles"] + TrackingVariables)]
146  if flags.GeoModel.Run >= LHCPeriod.Run4:
147  JETM2SlimmingHelper.ExtraVariables += [".".join(["InDetTrackParticles"] + TrackingVariablesHGTD)]
148 
149  # Links of physics objects to FlowElements
150  JETM2SlimmingHelper.ExtraVariables += FELinks
151 
152  # Detailed substructure information
153  from DerivationFrameworkJetEtMiss.CommonJETMXContent import ExtraJSSVariables
154  JETM2SlimmingHelper.ExtraVariables += [".".join(["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"] + ExtraJSSVariables)]
155 
156  # sub-structure taggers score
157  from DerivationFrameworkJetEtMiss.CommonJETMXContent import JSSTaggersVariables
158  JETM2SlimmingHelper.ExtraVariables += JSSTaggersVariables
159 
160  JETM2SlimmingHelper.ExtraVariables += ["AntiKt4EMPFlowJets.GhostTower.IsoFixedCone5Pt.IsoFixedCone5PtPUsub",
161  "AntiKt4EMTopoNoPtCutJets.IsoFixedCone5Pt.IsoFixedCone5PtPUsub",
162  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.SizeParameter.GhostTrack",
163  "GSFTrackParticles.particleHypothesis.vx.vy.vz",
164  "PrimaryVertices.x.y.z.covariance.trackWeights",
165  "TauJets.clusterLinks",
166  "Muons.energyLossType.EnergyLoss.ParamEnergyLoss.MeasEnergyLoss.EnergyLossSigma.MeasEnergyLossSigma.ParamEnergyLossSigmaPlus.ParamEnergyLossSigmaMinus.clusterLinks.FSR_CandidateEnergy",
167  "MuonSegments.x.y.z.px.py.pz"]
168 
169  JETM2SlimmingHelper.AppendToDictionary.update({'CSSKGNeutralParticleFlowObjects': 'xAOD::FlowElementContainer',
170  'CSSKGNeutralParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
171  'CSSKGChargedParticleFlowObjects': 'xAOD::FlowElementContainer',
172  'CSSKGChargedParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
173  'CHSGlobalClusterMLCorrectedNeutralParticleFlowObjects': 'xAOD::FlowElementContainer',
174  'CHSGlobalClusterMLCorrectedNeutralParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
175  'CHSGlobalClusterMLCorrectedChargedParticleFlowObjects': 'xAOD::FlowElementContainer',
176  'CHSGlobalClusterMLCorrectedChargedParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
177  'GlobalClusterMLCorrectedChargedParticleFlowObjects': 'xAOD::FlowElementContainer',
178  'GlobalClusterMLCorrectedChargedParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
179  'GlobalClusterMLCorrectedNeutralParticleFlowObjects': 'xAOD::FlowElementContainer',
180  'GlobalClusterMLCorrectedNeutralParticleFlowObjectsAux': 'xAOD::ShallowAuxContainer',
181  'UFO': 'xAOD::FlowElementContainer',
182  'UFOAux': 'xAOD::FlowElementAuxContainer',
183  'Kt4UFOCSSKEventShape': 'xAOD::EventShape',
184  'Kt4UFOCSSKEventShapeAux': 'xAOD::EventShapeAuxInfo',
185  'Kt4UFOCSSKNeutEventShape': 'xAOD::EventShape',
186  'Kt4UFOCSSKNeutEventShapeAux': 'xAOD::EventShapeAuxInfo',
187  'AntiKt4EMTopoNoPtCutJets': 'xAOD::JetContainer',
188  'AntiKt4EMTopoNoPtCutJetsAux': 'xAOD::JetAuxContainer'})
189 
190  from DerivationFrameworkJetEtMiss.JetCommonConfig import addOriginCorrectedClustersToSlimmingTool
191  addOriginCorrectedClustersToSlimmingTool(JETM2SlimmingHelper,writeLC=True,writeEM=True)
192 
193  # Truth containers
194  if flags.Input.isMC:
195 
196  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
197  addTruth3ContentToSlimmerTool(JETM2SlimmingHelper)
198 
199  JETM2SlimmingHelper.AppendToDictionary.update({'TruthParticles': 'xAOD::TruthParticleContainer',
200  'TruthParticlesAux': 'xAOD::TruthParticleAuxContainer'})
201 
202  JETM2SlimmingHelper.AllVariables += ["TruthTopQuarkWithDecayParticles","TruthTopQuarkWithDecayVertices","TruthHFWithDecayParticles",
203  "AntiKt4TruthJets", "InTimeAntiKt4TruthJets", "OutOfTimeAntiKt4TruthJets",
204  "TruthParticles", "TruthVertices","TruthEvents"]
205  JETM2SlimmingHelper.ExtraVariables += ["AntiKt10TruthSoftDropBeta100Zcut10Jets.SizeParameter"]
206  JETM2SlimmingHelper.SmartCollections += ["AntiKt4TruthJets","AntiKt10TruthJets","AntiKt4TruthWZJets","AntiKt10TruthDressedWZSoftDropBeta100Zcut10Jets"]
207 
208  JETM2SlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostTQuarksFinalCount.GhostHBosonsCount.GhostZBosonsCount.GhostWBosonsCount",
209  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostTQuarksFinalPt.GhostHBosonsPt.GhostZBosonsPt.GhostWBosonsPt",
210  "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostBHadronsFinalPt.GhostCHadronsFinalPt",
211  "AntiKt4TruthWZJets.IsoFixedCone5Pt",
212  "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt"]
213 
214  # Trigger content
215  JETM2SlimmingHelper.IncludeTriggerNavigation = False
216  JETM2SlimmingHelper.IncludeJetTriggerContent = False
217  JETM2SlimmingHelper.IncludeMuonTriggerContent = False
218  JETM2SlimmingHelper.IncludeEGammaTriggerContent = False
219  JETM2SlimmingHelper.IncludeTauTriggerContent = False
220  JETM2SlimmingHelper.IncludeEtMissTriggerContent = False
221  JETM2SlimmingHelper.IncludeBJetTriggerContent = False
222  JETM2SlimmingHelper.IncludeBPhysTriggerContent = False
223  JETM2SlimmingHelper.IncludeMinBiasTriggerContent = False
224 
225  jetOutputList = ["AntiKt4UFOCSSKNoPtCutJets","AntiKt4EMPFlowNoPtCutJets", "AntiKt4EMPFlowMLJets"]
226  from DerivationFrameworkJetEtMiss.JetCommonConfig import addJetsToSlimmingTool
227  addJetsToSlimmingTool(JETM2SlimmingHelper, jetOutputList, JETM2SlimmingHelper.SmartCollections)
228 
229  # Output stream
230  JETM2ItemList = JETM2SlimmingHelper.GetItemList()
231  acc.merge(OutputStreamCfg(flags, "DAOD_JETM2", ItemList=JETM2ItemList, AcceptAlgs=["JETM2Kernel"]))
232  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_JETM2", AcceptAlgs=["JETM2Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData]))
233 
234  return acc
235 
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.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:342
python.JetRecConfig.getInputAlgs
def getInputAlgs(jetOrConstitdef, flags, context="default", monTool=None)
Definition: JetRecConfig.py:279
python.JetCommonConfig.addOriginCorrectedClustersToSlimmingTool
def addOriginCorrectedClustersToSlimmingTool(slimhelper, writeLC=False, writeEM=False)
Helper to add origin corrected clusters to output.
Definition: JetCommonConfig.py:251
python.JetInputConfig.buildEventShapeAlg
def buildEventShapeAlg(jetOrConstitdef, inputspec, voronoiRf=0.9, radius=0.4, suffix=None)
Definition: JetInputConfig.py:140
python.MCTruthCommonConfig.AddTopQuarkAndDownstreamParticlesCfg
def AddTopQuarkAndDownstreamParticlesCfg(flags, generations=1, rejectHadronChildren=False)
Definition: MCTruthCommonConfig.py:269
python.JetRecConfig.JetRecCfg
def JetRecCfg(flags, jetdef, returnConfiguredDef=False)
Top level functions returning ComponentAccumulator out of JetDefinition.
Definition: JetRecConfig.py:36
python.JETM2.JETM2ExtraContentCfg
def JETM2ExtraContentCfg(flags)
Definition: JETM2.py:42
python.JetCommonConfig.addJetsToSlimmingTool
def addJetsToSlimmingTool(slimhelper, contentlist, smartlist=[])
Definition: JetCommonConfig.py:237
python.JETM2.JETM2Cfg
def JETM2Cfg(flags)
Definition: JETM2.py:99
python.JETM2.JETM2KernelCfg
def JETM2KernelCfg(flags, name='JETM2Kernel', **kwargs)
Definition: JETM2.py:11
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.JetRecConfig.getConstitPJGAlg
def getConstitPJGAlg(constitdef, suffix=None, flags=None, parent_jetdef=None)
Definition: JetRecConfig.py:350
python.MCTruthCommonConfig.addTruth3ContentToSlimmerTool
def addTruth3ContentToSlimmerTool(slimmer)
Definition: MCTruthCommonConfig.py:502
python.MCTruthCommonConfig.AddTruthCollectionNavigationDecorationsCfg
def AddTruthCollectionNavigationDecorationsCfg(flags, TruthCollections=[], prefix='')
Definition: MCTruthCommonConfig.py:348
python.PhysCommonConfig.PhysCommonAugmentationsCfg
def PhysCommonAugmentationsCfg(flags, **kwargs)
Definition: PhysCommonConfig.py:13
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