ATLAS Offline Software
Loading...
Searching...
No Matches
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
6from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7from AthenaConfiguration.ComponentFactory import CompFactory
8from AthenaConfiguration.Enums import MetadataCategory, LHCPeriod
9
10# Main algorithm config
11def 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, AntiKt4MLTopo
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, AntiKt4MLTopo]
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
99def 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
191 from DerivationFrameworkJetEtMiss.JetCommonConfig import addOriginCorrectedClustersToSlimmingTool
192 addOriginCorrectedClustersToSlimmingTool(JETM2SlimmingHelper,writeLC=True,writeEM=True)
193
194 # Truth containers
195 if flags.Input.isMC:
196
197 from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
198 addTruth3ContentToSlimmerTool(JETM2SlimmingHelper)
199
200 JETM2SlimmingHelper.AppendToDictionary.update({'TruthParticles': 'xAOD::TruthParticleContainer',
201 'TruthParticlesAux': 'xAOD::TruthParticleAuxContainer'})
202
203 JETM2SlimmingHelper.AllVariables += ["TruthTopQuarkWithDecayParticles","TruthTopQuarkWithDecayVertices","TruthHFWithDecayParticles",
204 "AntiKt4TruthJets", "InTimeAntiKt4TruthJets", "OutOfTimeAntiKt4TruthJets",
205 "TruthParticles", "TruthVertices","TruthEvents"]
206 JETM2SlimmingHelper.ExtraVariables += ["AntiKt10TruthSoftDropBeta100Zcut10Jets.SizeParameter"]
207 JETM2SlimmingHelper.SmartCollections += ["AntiKt4TruthJets","AntiKt10TruthJets","AntiKt4TruthWZJets","AntiKt10TruthDressedWZSoftDropBeta100Zcut10Jets"]
208
209 JETM2SlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostTQuarksFinalCount.GhostHBosonsCount.GhostZBosonsCount.GhostWBosonsCount",
210 "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostTQuarksFinalPt.GhostHBosonsPt.GhostZBosonsPt.GhostWBosonsPt",
211 "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets.GhostBHadronsFinalPt.GhostCHadronsFinalPt",
212 "AntiKt4TruthWZJets.IsoFixedCone5Pt",
213 "AntiKt4TruthDressedWZJets.IsoFixedCone5Pt"]
214
215 # Trigger content
216 JETM2SlimmingHelper.IncludeTriggerNavigation = False
217 JETM2SlimmingHelper.IncludeJetTriggerContent = False
218 JETM2SlimmingHelper.IncludeMuonTriggerContent = False
219 JETM2SlimmingHelper.IncludeEGammaTriggerContent = False
220 JETM2SlimmingHelper.IncludeTauTriggerContent = False
221 JETM2SlimmingHelper.IncludeEtMissTriggerContent = False
222 JETM2SlimmingHelper.IncludeBJetTriggerContent = False
223 JETM2SlimmingHelper.IncludeBPhysTriggerContent = False
224 JETM2SlimmingHelper.IncludeMinBiasTriggerContent = False
225
226 jetOutputList = ["AntiKt4UFOCSSKNoPtCutJets","AntiKt4EMPFlowNoPtCutJets", "AntiKt4EMPFlowMLJets", "AntiKt4MLTopoJets"]
227 from DerivationFrameworkJetEtMiss.JetCommonConfig import addJetsToSlimmingTool
228 addJetsToSlimmingTool(JETM2SlimmingHelper, jetOutputList, JETM2SlimmingHelper.SmartCollections)
229
230 # Output stream
231 JETM2ItemList = JETM2SlimmingHelper.GetItemList()
232 acc.merge(OutputStreamCfg(flags, "DAOD_JETM2", ItemList=JETM2ItemList, AcceptAlgs=["JETM2Kernel"]))
233 acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_JETM2", AcceptAlgs=["JETM2Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData]))
234
235 return acc
236
JETM2KernelCfg(flags, name='JETM2Kernel', **kwargs)
Definition JETM2.py:11
JETM2ExtraContentCfg(flags)
Definition JETM2.py:42
JETM2Cfg(flags)
Definition JETM2.py:99