ATLAS Offline Software
Loading...
Searching...
No Matches
HIGG9D1.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2#========================================================================
3# HIGG9D1.py for J/psi+bbbar, J/psi+tautau and J/psi+diphoton
4# This requires the flag "HIGG9D1" in Derivation_tf.py
5#========================================================================
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.Enums import MetadataCategory, LHCPeriod
10from AthenaCommon.Logging import logging
11log_HIGG9D1 = logging.getLogger('HIGG9D1')
12
13streamName = "StreamDAOD_HIGG9D1"
14
15def HIGG9D1KernelCfg(flags, name='HIGG9D1Kernel', **kwargs):
16 """Configure the derivation framework driving algorithm (kernel) for HIGG9D1"""
17 acc = ComponentAccumulator()
18
19 doLRT = flags.Tracking.doLargeD0
20 if doLRT:
21 log_HIGG9D1.info("flags.Tracking.doLargeD0 is True")
22 else:
23 log_HIGG9D1.info("flags.Tracking.doLargeD0 is False")
24
25 mainMuonInput = "StdWithLRTMuons" if doLRT else "Muons"
26 mainIDInput = "InDetWithLRTTrackParticles" if doLRT else "InDetTrackParticles"
27 if doLRT:
28 from DerivationFrameworkLLP.LLPToolsConfig import LRTMuonMergerAlg
29 acc.merge(LRTMuonMergerAlg( flags,
30 PromptMuonLocation = "Muons",
31 LRTMuonLocation = "MuonsLRT",
32 OutputMuonLocation = mainMuonInput,
33 CreateViewCollection = True,
34 UseRun3WP = flags.GeoModel.Run is LHCPeriod.Run3 ))
35 from DerivationFrameworkInDet.InDetToolsConfig import InDetLRTMergeCfg
36 acc.merge(InDetLRTMergeCfg( flags, OutputTrackParticleLocation = mainIDInput ))
37
38 MuonToRelink = [ "Muons", "MuonsLRT" ] if doLRT else []
39 TrkToRelink = ["InDetTrackParticles", "InDetLargeD0TrackParticles"] if doLRT else []
40
41 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import (
42 BPHY_V0ToolCfg, BPHY_InDetDetailedTrackSelectorToolCfg,
43 BPHY_VertexPointEstimatorCfg, BPHY_TrkVKalVrtFitterCfg,
44 AugOriginalCountsCfg)
45
46 # Adds primary vertex counts and track counts to EventInfo before they are thinned
47 HIGG9D1_AugOriginalCounts = acc.popToolsAndMerge(
48 AugOriginalCountsCfg(flags, name = "HIGG9D1_AugOriginalCounts"))
49 acc.addPublicTool(HIGG9D1_AugOriginalCounts)
50
51 V0Tools = acc.popToolsAndMerge(BPHY_V0ToolCfg(flags, "HIGG9D1"))
52 vkalvrt = acc.popToolsAndMerge(BPHY_TrkVKalVrtFitterCfg(flags, "HIGG9D1"))
53 acc.addPublicTool(vkalvrt)
54 acc.addPublicTool(V0Tools)
55 TrackSelector = acc.popToolsAndMerge(BPHY_InDetDetailedTrackSelectorToolCfg(flags, "HIGG9D1"))
56 acc.addPublicTool(TrackSelector)
57 vpest = acc.popToolsAndMerge(BPHY_VertexPointEstimatorCfg(flags, "HIGG9D1"))
58 acc.addPublicTool(vpest)
59
60 from JpsiUpsilonTools.JpsiUpsilonToolsConfig import PrimaryVertexRefittingToolCfg
61 pvRefitter = acc.popToolsAndMerge(PrimaryVertexRefittingToolCfg(flags))
62 acc.addPublicTool(pvRefitter)
63
64 HIGG9D1JpsiFinder = CompFactory.Analysis.JpsiFinder(
65 name = "HIGG9D1JpsiFinder",
66 muAndMu = True,
67 muAndTrack = False,
68 TrackAndTrack = False,
69 assumeDiMuons = True, # If true, will assume dimu hypothesis and use PDG value for mu mass
70 trackThresholdPt = 2400.,
71 invMassLower = 2600.0,
72 invMassUpper = 3500.0,
73 Chi2Cut = 20.,
74 oppChargesOnly = True,
75 atLeastOneComb = True,
76 useCombinedMeasurement = False, # Only takes effect if combOnly=True
77 muonCollectionKey = mainMuonInput,
78 TrackParticleCollection = mainIDInput,
79 V0VertexFitterTool = None, # V0 vertex fitter
80 useV0Fitter = False, # if False a TrkVertexFitterTool will be used
81 TrkVertexFitterTool = vkalvrt, # VKalVrt vertex fitter
82 TrackSelectorTool = TrackSelector,
83 VertexPointEstimator = vpest,
84 useMCPCuts = False )
85 acc.addPublicTool(HIGG9D1JpsiFinder)
86
87 HIGG9D1UpsiFinder = CompFactory.Analysis.JpsiFinder(
88 name = "HIGG9D1UpsiFinder",
89 muAndMu = True,
90 muAndTrack = False,
91 TrackAndTrack = False,
92 assumeDiMuons = True, # If true, will assume dimu hypothesis and use PDG value for mu mass
93 trackThresholdPt = 2400.,
94 invMassLower = 8900.0,
95 invMassUpper = 9900.0,
96 Chi2Cut = 20.,
97 oppChargesOnly = True,
98 atLeastOneComb = True,
99 useCombinedMeasurement = False, # Only takes effect if combOnly=True
100 muonCollectionKey = mainMuonInput,
101 TrackParticleCollection = mainIDInput,
102 V0VertexFitterTool = None, # V0 vertex fitter
103 useV0Fitter = False, # if False a TrkVertexFitterTool will be used
104 TrkVertexFitterTool = vkalvrt, # VKalVrt vertex fitter
105 TrackSelectorTool = TrackSelector,
106 VertexPointEstimator = vpest,
107 useMCPCuts = False )
108 acc.addPublicTool(HIGG9D1UpsiFinder)
109
110 HIGG9D1_Jpsi = CompFactory.DerivationFramework.Reco_Vertex(
111 name = "HIGG9D1_Jpsi",
112 VertexSearchTool = HIGG9D1JpsiFinder,
113 OutputVtxContainerName = "HIGG9D1_JpsiCandidates",
114 PVContainerName = "PrimaryVertices",
115 RefPVContainerName = "HIGG9D1_JpsiRefittedPrimaryVertices",
116 RefitPV = True,
117 MaxPVrefit = 100,
118 V0Tools = V0Tools,
119 RelinkTracks = TrkToRelink,
120 RelinkMuons = MuonToRelink,
121 PVRefitter = pvRefitter,
122 DoVertexType = 7)
123 acc.addPublicTool(HIGG9D1_Jpsi)
124
125 HIGG9D1_Upsi = CompFactory.DerivationFramework.Reco_Vertex(
126 name = "HIGG9D1_Upsi",
127 VertexSearchTool = HIGG9D1UpsiFinder,
128 OutputVtxContainerName = "HIGG9D1_UpsiCandidates",
129 PVContainerName = "PrimaryVertices",
130 RefPVContainerName = "HIGG9D1_UpsiRefittedPrimaryVertices",
131 RefitPV = True,
132 MaxPVrefit = 100,
133 V0Tools = V0Tools,
134 RelinkTracks = TrkToRelink,
135 RelinkMuons = MuonToRelink,
136 PVRefitter = pvRefitter,
137 DoVertexType = 7)
138 acc.addPublicTool(HIGG9D1_Upsi)
139
140 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig import (
141 InDetTrackSelectionTool_Loose_Cfg)
142 HIGG9D1_isoTrackSelTool = acc.popToolsAndMerge(InDetTrackSelectionTool_Loose_Cfg(
143 flags,
144 name = "HIGG9D1_isoTrackSelTool",
145 maxZ0SinTheta = 3.0,
146 minPt = 500.))
147
148 from IsolationAlgs.IsoToolsConfig import TrackIsolationToolCfg
149 HIGG9D1_TrackIsoTool = acc.popToolsAndMerge(TrackIsolationToolCfg(
150 flags,
151 name = "HIGG9D1_TrackIsoTool",
152 TrackSelectionTool = HIGG9D1_isoTrackSelTool))
153 acc.addPublicTool(HIGG9D1_TrackIsoTool)
154
155 HIGG9D1_JpsiVtxTrkIsoDecor = CompFactory.DerivationFramework.VertexTrackIsolation(
156 name = "HIGG9D1_JpsiVtxTrkIsoDecor",
157 TrackIsoTool = HIGG9D1_TrackIsoTool,
158 TrackContainer = "InDetTrackParticles",
159 InputVertexContainer = "HIGG9D1_JpsiCandidates",
160 FixElecExclusion = False,
161 IncludeV0 = False)
162 acc.addPublicTool(HIGG9D1_JpsiVtxTrkIsoDecor)
163
164 HIGG9D1_UpsiVtxTrkIsoDecor = CompFactory.DerivationFramework.VertexTrackIsolation(
165 name = "HIGG9D1_UpsiVtxTrkIsoDecor",
166 TrackIsoTool = HIGG9D1_TrackIsoTool,
167 TrackContainer = "InDetTrackParticles",
168 InputVertexContainer = "HIGG9D1_UpsiCandidates",
169 FixElecExclusion = False,
170 IncludeV0 = False)
171 acc.addPublicTool(HIGG9D1_UpsiVtxTrkIsoDecor)
172
173 # New subsequence
174 from AthenaCommon.CFElements import seqAND
175 acc.addSequence( seqAND("HIGG9D1Sequence") )
176
177 # Common augmentations
178 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
179 acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']), sequenceName="HIGG9D1Sequence")
180
181
184 HIGG9D1_onia_skim = CompFactory.DerivationFramework.AnyVertexSkimmingTool(name = "HIGG9D1_onia_skim", VertexContainerNames = ["HIGG9D1_JpsiCandidates", "HIGG9D1_UpsiCandidates"])
185 acc.addPublicTool(HIGG9D1_onia_skim)
186
187 HIGG9D1_onia_skimKernel = CompFactory.DerivationFramework.DerivationKernel(
188 "HIGG9D1_onia_skimKernel",
189 AugmentationTools = [ HIGG9D1_AugOriginalCounts, HIGG9D1_Jpsi, HIGG9D1_Upsi, HIGG9D1_JpsiVtxTrkIsoDecor, HIGG9D1_UpsiVtxTrkIsoDecor ],
190 SkimmingTools = [ HIGG9D1_onia_skim ])
191 # Add skimming tool to subsequence
192 acc.addEventAlgo(HIGG9D1_onia_skimKernel, sequenceName="HIGG9D1Sequence")
193
194
195 from BTagging.FlavorTaggingConfig import FlavorTaggingCfg
196 acc.merge(FlavorTaggingCfg(flags, "AntiKt4EMPFlowJets"), sequenceName="HIGG9D1Sequence")
197
198
201
202 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
203 xAODStringSkimmingToolCfg)
204
205
207 HIGG9D1_smallR_EMPFlow_2j_sel = "count(AntiKt4EMPFlowJets.pt > 18*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 2"
208 HIGG9D1_smallR_EMPFlow_1j_sel = "count(AntiKt4EMPFlowJets.pt > 33*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 1"
209 # https://gitlab.cern.ch/atlas/athena/-/blob/main/PhysicsAnalysis/JetTagging/JetTagPerformanceCalibration/xAODBTaggingEfficiency/Root/BTaggingSelectionTool.cxx
210 # fraction_c (0.2), fraction_tau (0.01) and cutvalue (0.844) from TDirectory "GN2v01/AntiKt4EMPFlowJets/FixedCutBEff_77" of
211 # /cvmfs/atlas.cern.ch/repo/sw/database/GroupData/xAODBTaggingEfficiency/13TeV/MC20_2024-10-17_GN2v01_v1.root (run-2) and
212 # /cvmfs/atlas.cern.ch/repo/sw/database/GroupData/xAODBTaggingEfficiency/13p6TeV/MC23_2024-10-17_GN2v01_v1.root (run-3)
213 HIGG9D1_smallR_EMPFlow_1b_sel = "count(AntiKt4EMPFlowJets.pt > 18*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8 && log(AntiKt4EMPFlowJets.GN2v01_pb/(0.2*AntiKt4EMPFlowJets.GN2v01_pc + (1.-0.2-0.01)*AntiKt4EMPFlowJets.GN2v01_pu + 0.01*AntiKt4EMPFlowJets.GN2v01_ptau))>=0.844) >= 1"
214 # Drop FTAG requirement for Run 4 as WPs are not available
215 # Should ultimately be reworked into a precomputed flag with an FTAG tool rather than hardcoding the FTAG discriminant cut
216 if flags.GeoModel.Run >= LHCPeriod.Run4:
217 HIGG9D1_smallR_EMPFlow_1b_sel = "count(AntiKt4EMPFlowJets.pt > 18*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 1"
218
219
220 HIGG9D1_bjet_sel = "%s && %s && %s" % (HIGG9D1_smallR_EMPFlow_2j_sel, HIGG9D1_smallR_EMPFlow_1j_sel, HIGG9D1_smallR_EMPFlow_1b_sel)
221 HIGG9D1_bb_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
222 flags, name = "HIGG9D1_bb_skim", expression = HIGG9D1_bjet_sel))
223
224
225 HIGG9D1_tauTrks = '(TauJets.nTracks + TauJets.nTracksIsolation >= 1 && TauJets.nTracks + TauJets.nTracksIsolation <= 8)'
226 HIGG9D1_tauLead = '(TauJets.pt > 23.0*GeV || TauJets.ptFinalCalib > 23.0*GeV)'
227 HIGG9D1_tauSubl = '(TauJets.pt > 18.0*GeV || TauJets.ptFinalCalib > 18.0*GeV)'
228 HIGG9D1_tauId = 'TauJets.DFTauGNTauLoose'
229 HIGG9D1_tauReq0 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' ) >= 2'
230 HIGG9D1_tauReq1 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' && '+HIGG9D1_tauId+' ) >= 1'
231 HIGG9D1_tauReq2 = 'count( '+HIGG9D1_tauLead+' && '+HIGG9D1_tauTrks+' ) >= 1'
232 HIGG9D1_tau_sel = "%s && %s && %s" % (HIGG9D1_tauReq0, HIGG9D1_tauReq1, HIGG9D1_tauReq2)
233
234 HIGG9D1_tautau_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
235 flags, name = "HIGG9D1_tautau_skim", expression = HIGG9D1_tau_sel))
236
237
238 from DerivationFrameworkHiggs.SkimmingToolHIGG1Config import SkimmingToolHIGG1Cfg
239 HIGG9D1_yy_skim = acc.popToolsAndMerge(SkimmingToolHIGG1Cfg(
240 flags,
241 name = "HIGG9D1_yy_skim",
242 RequireGRL = False,
243 ReqireLArError = True,
244 RequireTrigger = False,
245 RequirePreselection = True,
246 RequireKinematic = False,
247 RequireQuality = False, # True: "Tight" ID; False: DFCommonPhotonsIsEMLoose
248 RequireIsolation = False, # dummy
249 RequireInvariantMass = False,
250 IncludeSingleMergedElectronPreselection = False,
251 IncludeSingleElectronPreselection = False,
252 IncludeDoubleElectronPreselection = False,
253 IncludeSingleMuonPreselection = False,
254 IncludeDoubleMuonPreselection = False,
255 IncludePhotonDoubleElectronPreselection = False,
256 IncludePhotonMergedElectronPreselection = False,
257 IncludeHighPtPhotonElectronPreselection = False,
258 IncludeDoublePhotonPreselection = True, # di-photon requirement
259 MinimumPhotonPt = 4800.0,
260 RemoveCrack = True,
261 MaxEta = 2.47))
262 acc.addPublicTool(HIGG9D1_yy_skim)
263
264 # Combine skims with OR
265 HIGG9D1_bb_tautau_yy_skim = CompFactory.DerivationFramework.FilterCombinationOR(
266 name = "HIGG9D1_bb_tautau_yy_skim",
267 FilterList = [HIGG9D1_bb_skim, HIGG9D1_tautau_skim, HIGG9D1_yy_skim])
268 acc.addPublicTool(HIGG9D1_bb_tautau_yy_skim)
269
270 # Common calo decoration tools
271 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (CaloDecoratorKernelCfg, ClusterEnergyPerLayerDecoratorCfg)
272 acc.merge(CaloDecoratorKernelCfg(flags), sequenceName="HIGG9D1Sequence")
273
274 # Adding missing cluster energy decorators
275 augmentationTools = []
276 cluster_sizes = (3,5), (5,7), (7,7)
277 for neta, nphi in cluster_sizes:
278 cename = "ClusterEnergyPerLayerDecorator_%sx%s" % (neta, nphi)
279 ClusterEnergyPerLayerDecorator = acc.popToolsAndMerge( ClusterEnergyPerLayerDecoratorCfg(flags, neta = neta, nphi=nphi, name=cename ))
280 acc.addPublicTool(ClusterEnergyPerLayerDecorator)
281 augmentationTools.append(ClusterEnergyPerLayerDecorator)
282
283 HIGG9D1_bb_tautau_yy_skimKernel = CompFactory.DerivationFramework.DerivationKernel(
284 "HIGG9D1_bb_tautau_yy_skimKernel",
285 AugmentationTools = augmentationTools,
286 SkimmingTools = [ HIGG9D1_bb_tautau_yy_skim ])
287 # Add skimming tool to subsequence
288 acc.addEventAlgo(HIGG9D1_bb_tautau_yy_skimKernel, sequenceName="HIGG9D1Sequence")
289
290 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
291 acc.merge(DerivationTrackIsoCfg(flags, object_types=("Electrons", "Photons", "Muons"), sequenceName="HIGG9D1Sequence"))
292
293 # IFF augmentation - Adding Lepton Taggers
294 from LeptonTaggers.LeptonTaggersConfig import DecoratePLITAlgsCfg
295 acc.merge(DecoratePLITAlgsCfg(flags), sequenceName="HIGG9D1Sequence")
296
297 from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
298 contNames = [ "Muons", "Electrons", "Photons" ]
299 acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = False, containerNames = contNames, useSelTools = True, stream_name = kwargs['StreamName']), sequenceName="HIGG9D1Sequence")
300
301 # diphoton vertex augmentation
302 from DerivationFrameworkEGamma.EGammaToolsConfig import PhotonVertexSelectionWrapperKernelCfg
303 acc.merge(PhotonVertexSelectionWrapperKernelCfg(flags), sequenceName="HIGG9D1Sequence")
304 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig import DiphotonVertexDecoratorCfg
305 DiphotonVertexDecorator = acc.popToolsAndMerge(DiphotonVertexDecoratorCfg(
306 flags,
307 MinimumPhotonPt = 4800.0,
308 DiphotonVertexName = "HIGG9D1_DiphotonPrimaryVertices"))
309 acc.addPublicTool(DiphotonVertexDecorator)
310 acc.addEventAlgo(CompFactory.DerivationFramework.CommonAugmentation(name = "DiphotonVertexAugmentation", AugmentationTools = [DiphotonVertexDecorator]), sequenceName="HIGG9D1Sequence")
311
312 #================
313 # Thinning tools
314 #================
315 # Include inner detector tracks associated with muons
316 HIGG9D1MuonTPThinningTool = CompFactory.DerivationFramework.MuonTrackParticleThinning(
317 name = "HIGG9D1MuonTPThinningTool",
318 StreamName = kwargs['StreamName'],
319 MuonKey = "Muons",
320 InDetTrackParticlesKey = "InDetTrackParticles")
321 acc.addPublicTool(HIGG9D1MuonTPThinningTool)
322
323 # Include inner detector tracks associated with electonrs
324 HIGG9D1ElectronTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
325 name = "HIGG9D1ElectronTPThinningTool",
326 SGKey = "Electrons",
327 StreamName = kwargs['StreamName'],
328 GSFTrackParticlesKey = "GSFTrackParticles",
329 InDetTrackParticlesKey = "InDetTrackParticles")
330 acc.addPublicTool(HIGG9D1ElectronTPThinningTool)
331
332 # Include inner detector tracks associated with photons
333 HIGG9D1PhotonTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
334 name = "HIGG9D1PhotonTPThinningTool",
335 SGKey = "Photons",
336 StreamName = kwargs['StreamName'],
337 GSFTrackParticlesKey = "GSFTrackParticles",
338 GSFConversionVerticesKey = "GSFConversionVertices",
339 InDetTrackParticlesKey = "InDetTrackParticles")
340 acc.addPublicTool(HIGG9D1PhotonTPThinningTool)
341
342 # Include inner detector tracks associated with taus
343 HIGG9D1TauTPThinningTool = CompFactory.DerivationFramework.TauTrackParticleThinning(
344 name = "HIGG9D1TauTPThinningTool",
345 StreamName = kwargs['StreamName'],
346 TauKey = "TauJets",
347 InDetTrackParticlesKey = "InDetTrackParticles",
348 DoTauTracksThinning = True,
349 TauTracksKey = "TauTracks")
350 acc.addPublicTool(HIGG9D1TauTPThinningTool)
351
352 # ID tracks associated to vertices
353 HIGG9D1_ThinVtxTracks = CompFactory.DerivationFramework.Thin_vtxTrk(
354 name = "HIGG9D1_ThinVtxTracks",
355 StreamName = kwargs['StreamName'],
356 TrackParticleContainerName = "InDetTrackParticles",
357 VertexContainerNames = [ HIGG9D1_Jpsi.OutputVtxContainerName, HIGG9D1_Upsi.OutputVtxContainerName ],
358 IgnoreFlags = True )
359 acc.addPublicTool(HIGG9D1_ThinVtxTracks)
360
361 thinningTools = [HIGG9D1MuonTPThinningTool,
362 HIGG9D1ElectronTPThinningTool,
363 HIGG9D1PhotonTPThinningTool,
364 HIGG9D1TauTPThinningTool,
365 HIGG9D1_ThinVtxTracks]
366
367
368 if flags.Input.isMC:
369 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MenuTruthThinningCfg
370 HIGG9D1TruthTool = acc.getPrimaryAndMerge(MenuTruthThinningCfg(
371 flags = flags,
372 name = "HIGG9D1TruthTool",
373 StreamName = kwargs['StreamName'],
374 ParticlesKey = "TruthParticles",
375 VerticesKey = "TruthVertices",
376 WritePartons = False,
377 WriteHadrons = True,
378 WriteBHadrons = True,
379 WriteCHadrons = True,
380 WriteGeant = False,
381 WriteTauHad = True,
382 WriteBSM = True,
383 WriteBosons = True,
384 WriteBSMProducts = True,
385 WriteBosonProducts = False,
386 WriteTopAndDecays = True,
387 WriteEverything = False,
388 WriteAllLeptons = True,
389 WriteNotPhysical = False,
390 PreserveDescendants = False,
391 PreserveGeneratorDescendants = True,
392 PreserveAncestors = True))
393 acc.addPublicTool(HIGG9D1TruthTool)
394 thinningTools.append(HIGG9D1TruthTool)
395
396 #===================================================
397 # HEAVY FLAVOR CLASSIFICATION FOR ttbar+jets EVENTS
398 #===================================================
399 from DerivationFrameworkMCTruth.HFClassificationCommonConfig import HFClassificationCommonCfg
400 acc.merge(HFClassificationCommonCfg(flags), sequenceName="HIGG9D1Sequence")
401
402 # Apply thinning
403 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(name, ThinningTools = thinningTools), sequenceName="HIGG9D1Sequence")
404
405 return acc
406
407def HIGG9D1Cfg(flags):
408 log_HIGG9D1.info('****************** STARTING HIGG9D1 ******************')
409
410 acc = ComponentAccumulator()
411
412 # Get the lists of triggers needed for trigger matching.
413 # This is needed at this scope (for the slimming) and further down in the config chain
414 # for actually configuring the matching, so we create it here and pass it down
415 # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
416 from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
417 HIGG9D1TriggerListsHelper = TriggerListsHelper(flags)
418
419 # dedicated augmentations
420 acc.merge(HIGG9D1KernelCfg(flags, name="HIGG9D1Kernel", StreamName = streamName, TriggerListsHelper = HIGG9D1TriggerListsHelper))
421
422 # =============================
423 # Define contents of the format
424 # =============================
425 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
426 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
427 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
428
429 HIGG9D1SlimmingHelper = SlimmingHelper("HIGG9D1SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
430 HIGG9D1SlimmingHelper.SmartCollections = [
431 "EventInfo",
432 "Electrons",
433 "Photons",
434 "Muons",
435 "PrimaryVertices",
436 "InDetTrackParticles",
437 "AntiKt4EMTopoJets",
438 "AntiKt4EMPFlowJets",
439
440 "MET_Baseline_AntiKt4EMTopo",
441 "MET_Baseline_AntiKt4EMPFlow",
442 "TauJets",
443 "TauJets_MuonRM",
444 "DiTauJets",
445 "DiTauJetsLowPt",
446 "AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"]
447
448 if flags.Tau.TauEleRM_isAvailable:
449 HIGG9D1SlimmingHelper.SmartCollections.append("TauJets_EleRM")
450
451 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import getDefaultAllVariables
452 AllVariables = getDefaultAllVariables()
453 AllVariables += ["PrimaryVertices"]
454 AllVariables += ["CombinedMuonTrackParticles"]
455
456 doLRT = flags.Tracking.doLargeD0
457 AllVariables += ["InDetTrackParticles", "InDetLargeD0TrackParticles"] if doLRT else ["InDetTrackParticles"]
458 AllVariables += ["Muons", "MuonsLRT"] if doLRT else ["Muons"]
459 AllVariables += ["MuonSegments"]
460
461 # Additional content (shallow copy of PrimaryVertices)
462 HIGG9D1SlimmingHelper.AppendToDictionary.update({
463 "HIGG9D1_DiphotonPrimaryVertices" : "xAOD::VertexContainer",
464 "HIGG9D1_DiphotonPrimaryVerticesAux" : "xAOD::ShallowAuxContainer"
465 })
466 AllVariables += ["HIGG9D1_DiphotonPrimaryVertices"]
467
468 HIGG9D1_Jpsi = acc.getPublicTool("HIGG9D1_Jpsi")
469 HIGG9D1_Upsi = acc.getPublicTool("HIGG9D1_Upsi")
470
471 StaticContent = []
472 if HIGG9D1_Jpsi.RefitPV:
473 StaticContent += [ "xAOD::VertexContainer#%s" % HIGG9D1_Jpsi.RefPVContainerName ]
474 StaticContent += [ "xAOD::VertexAuxContainer#%sAux.-vxTrackAtVertex" % HIGG9D1_Jpsi.RefPVContainerName ]
475 if HIGG9D1_Upsi.RefitPV:
476 StaticContent += [ "xAOD::VertexContainer#%s" % HIGG9D1_Upsi.RefPVContainerName ]
477 StaticContent += [ "xAOD::VertexAuxContainer#%sAux.-vxTrackAtVertex" % HIGG9D1_Upsi.RefPVContainerName ]
478 StaticContent += [ "xAOD::VertexContainer#%s" % HIGG9D1_Jpsi.OutputVtxContainerName ]
479 StaticContent += [ "xAOD::VertexAuxContainer#%sAux.-vxTrackAtVertex" % HIGG9D1_Jpsi.OutputVtxContainerName ]
480 StaticContent += [ "xAOD::VertexContainer#%s" % HIGG9D1_Upsi.OutputVtxContainerName ]
481 StaticContent += [ "xAOD::VertexAuxContainer#%sAux.-vxTrackAtVertex" % HIGG9D1_Upsi.OutputVtxContainerName ]
482
483 excludedVertexAuxData = "-vxTrackAtVertex.-MvfFitInfo.-isInitialized.-VTAV"
484 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Tight_Vertices"]
485 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Tight_VerticesAux." + excludedVertexAuxData]
486 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Medium_Vertices"]
487 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Medium_VerticesAux." + excludedVertexAuxData]
488 StaticContent += ["xAOD::VertexContainer#SoftBVrtClusterTool_Loose_Vertices"]
489 StaticContent += ["xAOD::VertexAuxContainer#SoftBVrtClusterTool_Loose_VerticesAux." + excludedVertexAuxData]
490
491 # Extra CP content
492 from DerivationFrameworkEGamma.PhotonsCPDetailedContent import PhotonsCPDetailedContent
493 HIGG9D1SlimmingHelper.ExtraVariables += PhotonsCPDetailedContent
494
495 from DerivationFrameworkEGamma.ElectronsCPDetailedContent import (ElectronsCPDetailedContent, GSFTracksCPDetailedContent, ElectronsAddAmbiguityContent)
496 HIGG9D1SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
497 HIGG9D1SlimmingHelper.ExtraVariables += GSFTracksCPDetailedContent
498 HIGG9D1SlimmingHelper.ExtraVariables += ElectronsAddAmbiguityContent
499
500 from DerivationFrameworkTau.TauJetsCPContent import TauJetsCPContent
501 HIGG9D1SlimmingHelper.ExtraVariables += TauJetsCPContent
502
503 from DerivationFrameworkTau.TauJets_LepRMCPContent import (TauJets_EleRMCPContent, TauJets_MuonRMCPContent)
504 HIGG9D1SlimmingHelper.ExtraVariables += TauJets_EleRMCPContent
505 HIGG9D1SlimmingHelper.ExtraVariables += TauJets_MuonRMCPContent
506
507 StaticContent += ["xAOD::TauJetContainer#TauJets_MuonRM"]
508 StaticContent += ["xAOD::TauJetAuxContainer#TauJets_MuonRMAux.-VertexedClusters"]
509 StaticContent += ["xAOD::VertexContainer#TauSecondaryVertices_MuonRM"]
510 StaticContent += ["xAOD::VertexAuxContainer#TauSecondaryVertices_MuonRMAux.-vxTrackAtVertex"]
511
512 HIGG9D1SlimmingHelper.StaticContent = StaticContent
513
514 HIGG9D1SlimmingHelper.ExtraVariables += [
515 "AntiKt4EMTopoJets.ConeExclBHadronsFinal.ConeExclCHadronsFinal.GhostBHadronsFinal.GhostCHadronsFinal.GhostBHadronsFinalCount.GhostBHadronsFinalPt.GhostCHadronsFinalCount.GhostCHadronsFinalPt.IsoFixedCone5PtPUsub",
516 "AntiKt4EMPFlowJets.ConeExclBHadronsFinal.ConeExclCHadronsFinal.GhostBHadronsFinal.GhostCHadronsFinal.GhostBHadronsFinalCount.GhostBHadronsFinalPt.GhostCHadronsFinalCount.GhostCHadronsFinalPt.GhostPartons.isJvtHS.isJvtPU.IsoFixedCone5PtPUsub",
517 "InDetTrackParticles.TTVA_AMVFVertices.TTVA_AMVFWeights.eProbabilityHT.numberOfTRTHits.numberOfTRTOutliers",
518 "EventInfo.GenFiltHT.GenFiltMET.GenFiltHTinclNu.GenFiltPTZ.GenFiltFatJ.HF_Classification.HF_SimpleClassification",
519 "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET.ex.ey",
520 "HLT_xAOD__TrigMissingETContainer_TrigEFMissingET_mht.ex.ey"]
521
522 # FTAG Xbb extra content
523 extraList = []
524 for tagger in ["GN2Xv01", "GN2Xv02"]:
525 for score in ["phbb", "phcc", "ptop", "pqcd"]:
526 extraList.append(f"{tagger}_{score}")
527 HIGG9D1SlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets." + ".".join(extraList)]
528
529 # Large-Radius jet regression extra content
530 extraListReg = []
531 modelName = "bJR10v00"
532 for score in ["mass", "pt"]:
533 extraListReg.append(f"{modelName}_{score}")
534 HIGG9D1SlimmingHelper.ExtraVariables += ["AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets." + ".".join(extraListReg)]
535
536 # Truth content
537 if flags.Input.isMC:
538 from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
539 addTruth3ContentToSlimmerTool(HIGG9D1SlimmingHelper)
540 HIGG9D1SlimmingHelper.ExtraVariables += ["Electrons.TruthLink","Muons.TruthLink","Photons.TruthLink","AntiKt4TruthDressedWZJets.IsoFixedCone5Pt"]
541
542 AllVariables += ["TruthLHEParticles","TruthHFWithDecayParticles","TruthHFWithDecayVertices","TruthCharm","TruthPileupParticles","InTimeAntiKt4TruthJets","OutOfTimeAntiKt4TruthJets",
543 "TruthPrimaryVertices","TruthEvents","TruthParticles","TruthVertices","TruthElectrons","TruthMuons","TruthTaus"]
544
545 from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
546 acc.merge(AddTauAndDownstreamParticlesCfg(flags))
547 AllVariables += ["TruthTausWithDecayParticles","TruthTausWithDecayVertices"]
548
549 HIGG9D1SlimmingHelper.SmartCollections += [
550 "AntiKt4TruthDressedWZJets",
551 "AntiKt4TruthWZJets",
552 "AntiKt4TruthJets"
553 ]
554
555 # Extra isolation content
556 EgammaExtraContent= [
557 "ptcone20","ptcone30","ptcone40", "ptvarcone20", "ptvarcone30", "ptvarcone40", "topoetcone20", "topoetcone30",
558 "neflowisol20", "neflowisol30", "neflowisol40",
559 "ptvarcone20_Nonprompt_All_MaxWeightTTVA_pt500" ,"ptvarcone20_Nonprompt_All_MaxWeightTTVA_pt1000",
560 "ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500","ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000",
561 "ptvarcone40_Nonprompt_All_MaxWeightTTVA_pt500","ptvarcone40_Nonprompt_All_MaxWeightTTVA_pt1000",
562 "ptcone20_Nonprompt_All_MaxWeightTTVA_pt500", "ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000",
563 "ptcone30_Nonprompt_All_MaxWeightTTVA_pt500", "ptcone30_Nonprompt_All_MaxWeightTTVA_pt1000",
564 "ptcone40_Nonprompt_All_MaxWeightTTVA_pt500", "ptcone40_Nonprompt_All_MaxWeightTTVA_pt1000",
565 "topoetconecoreConeEnergyCorrection", "isoSelIsOK", "topoetcone20_CloseByCorr"
566 ]
567
568 ElectronsExtraContent = [ ".".join( ["Electrons", "deltaPhiRescaled2", "deltaPhiFromLastMeasurement", "originalTrackParticle", "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000", "ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr", "ptcone20_Nonprompt_All_MaxWeightTTVALooseCone_pt1000_CloseByCorr"] + EgammaExtraContent ) ]
569
570 PhotonsExtraContent = [ ".".join(["Photons", "topoetcone40", "topoetcone40_CloseByCorr", "ptcone20_CloseByCorr"] + EgammaExtraContent ) ]
571
572 MuonsExtraContent = [ ".".join( [
573 "Muons",
574 "MeasEnergyLoss.MeasEnergyLossSigma.EnergyLossSigma.ParamEnergyLoss",
575 "ParamEnergyLossSigmaMinus.ParamEnergyLossSigmaPlus.clusterLink.scatteringCurvatureSignificance",
576 "deltaPhiRescaled2.deltaPhiFromLastMeasurement.scatteringNeighbourSignificance",
577 "ptcone20.ptcone30.ptcone40.ptvarcone20.ptvarcone30.ptvarcone40.topoetcone30",
578 "neflowisol20.neflowisol30.neflowisol40.ptvarcone20_Nonprompt_All_MaxWeightTTVA_pt500",
579 "ptvarcone20_Nonprompt_All_MaxWeightTTVA_pt1000.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500",
580 "ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000.ptvarcone40_Nonprompt_All_MaxWeightTTVA_pt500",
581 "ptvarcone40_Nonprompt_All_MaxWeightTTVA_pt1000.ptcone20_Nonprompt_All_MaxWeightTTVA_pt500",
582 "ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000.ptcone30_Nonprompt_All_MaxWeightTTVA_pt500",
583 "ptcone30_Nonprompt_All_MaxWeightTTVA_pt1000.ptcone40_Nonprompt_All_MaxWeightTTVA_pt500",
584 "ptcone40_Nonprompt_All_MaxWeightTTVA_pt1000",
585 "msInnerMatchChi2", "isoSelIsOK", "ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr",
586 "ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr", "neflowisol20_CloseByCorr", "topoetcone20_CloseByCorr"
587 ] ) ]
588
589 HIGG9D1SlimmingHelper.ExtraVariables += ElectronsExtraContent
590 HIGG9D1SlimmingHelper.ExtraVariables += PhotonsExtraContent
591 HIGG9D1SlimmingHelper.ExtraVariables += MuonsExtraContent
592
593 from IsolationSelection.IsolationSelectionConfig import setupIsoCloseBySlimmingVariables
594 setupIsoCloseBySlimmingVariables(HIGG9D1SlimmingHelper)
595
596 from LeptonTaggers.LeptonTaggersConfig import GetExtraPLITVariablesForDxAOD
597 HIGG9D1SlimmingHelper.ExtraVariables += GetExtraPLITVariablesForDxAOD()
598
599 HIGG9D1SlimmingHelper.AllVariables = AllVariables
600
601 # Trigger content
602 HIGG9D1SlimmingHelper.IncludeTriggerNavigation = False
603 HIGG9D1SlimmingHelper.IncludeJetTriggerContent = False
604 HIGG9D1SlimmingHelper.IncludeMuonTriggerContent = False
605 HIGG9D1SlimmingHelper.IncludeEGammaTriggerContent = False
606 HIGG9D1SlimmingHelper.IncludeTauTriggerContent = False
607 HIGG9D1SlimmingHelper.IncludeEtMissTriggerContent = False
608 HIGG9D1SlimmingHelper.IncludeBJetTriggerContent = False
609 HIGG9D1SlimmingHelper.IncludeBPhysTriggerContent = False
610 HIGG9D1SlimmingHelper.IncludeMinBiasTriggerContent = False
611 # Compact b-jet trigger matching info
612 HIGG9D1SlimmingHelper.IncludeBJetTriggerByYearContent = True
613
614 # Trigger matching
615 # Run 2
616 if flags.Trigger.EDMVersion == 2:
617 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
618 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = HIGG9D1SlimmingHelper,
619 OutputContainerPrefix = "TrigMatch_",
620 TriggerList = HIGG9D1TriggerListsHelper.Run2TriggerNamesTau)
621 AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = HIGG9D1SlimmingHelper,
622 OutputContainerPrefix = "TrigMatch_",
623 TriggerList = HIGG9D1TriggerListsHelper.Run2TriggerNamesNoTau)
624 # Run 3, or Run 2 with navigation conversion
625 if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
626 from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
627 AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(HIGG9D1SlimmingHelper)
628
629 # L1 trigger objects
630 from Campaigns.Utils import getDataYear
631 if getDataYear(flags) >= 2024:
632 # Run 3 with Phase I jet RoIs.
633 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddjFexRoIsToSlimmingHelper
634 AddjFexRoIsToSlimmingHelper(SlimmingHelper = HIGG9D1SlimmingHelper)
635 elif getDataYear(flags) >= 2015:
636 # Run 2 and early Run 3, legacy L1 RoIs
637 from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddLegacyL1JetRoIsToSlimmingHelper
638 AddLegacyL1JetRoIsToSlimmingHelper(SlimmingHelper = HIGG9D1SlimmingHelper)
639
640 # Output stream
641 HIGG9D1ItemList = HIGG9D1SlimmingHelper.GetItemList()
642 acc.merge(OutputStreamCfg(flags, "DAOD_HIGG9D1", ItemList=HIGG9D1ItemList, AcceptAlgs=["HIGG9D1Kernel"]))
643 acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_HIGG9D1", AcceptAlgs=["HIGG9D1Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TruthMetaData]))
644 acc.printConfig(withDetails=True, summariseProps=True, onlyComponents = [], printDefaults=True)
645 return acc
HIGG9D1KernelCfg(flags, name='HIGG9D1Kernel', **kwargs)
Definition HIGG9D1.py:15
HIGG9D1Cfg(flags)
Definition HIGG9D1.py:407