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 from AthenaConfiguration.Enums import LHCPeriod
30 acc.merge(LRTMuonMergerAlg( flags,
31 PromptMuonLocation = "Muons",
32 LRTMuonLocation = "MuonsLRT",
33 OutputMuonLocation = mainMuonInput,
34 CreateViewCollection = True,
35 UseRun3WP = flags.GeoModel.Run is LHCPeriod.Run3 ))
36 from DerivationFrameworkInDet.InDetToolsConfig import InDetLRTMergeCfg
37 acc.merge(InDetLRTMergeCfg( flags, OutputTrackParticleLocation = mainIDInput ))
38
39 MuonToRelink = [ "Muons", "MuonsLRT" ] if doLRT else []
40 TrkToRelink = ["InDetTrackParticles", "InDetLargeD0TrackParticles"] if doLRT else []
41
42 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import (
43 BPHY_V0ToolCfg, BPHY_InDetDetailedTrackSelectorToolCfg,
44 BPHY_VertexPointEstimatorCfg, BPHY_TrkVKalVrtFitterCfg,
45 AugOriginalCountsCfg)
46
47
48 HIGG9D1_AugOriginalCounts = acc.popToolsAndMerge(
49 AugOriginalCountsCfg(flags, name = "HIGG9D1_AugOriginalCounts"))
50 acc.addPublicTool(HIGG9D1_AugOriginalCounts)
51
52 V0Tools = acc.popToolsAndMerge(BPHY_V0ToolCfg(flags, "HIGG9D1"))
53 vkalvrt = acc.popToolsAndMerge(BPHY_TrkVKalVrtFitterCfg(flags, "HIGG9D1"))
54 acc.addPublicTool(vkalvrt)
55 acc.addPublicTool(V0Tools)
56 TrackSelector = acc.popToolsAndMerge(BPHY_InDetDetailedTrackSelectorToolCfg(flags, "HIGG9D1"))
57 acc.addPublicTool(TrackSelector)
58 vpest = acc.popToolsAndMerge(BPHY_VertexPointEstimatorCfg(flags, "HIGG9D1"))
59 acc.addPublicTool(vpest)
60
61 from JpsiUpsilonTools.JpsiUpsilonToolsConfig import PrimaryVertexRefittingToolCfg
62 pvRefitter = acc.popToolsAndMerge(PrimaryVertexRefittingToolCfg(flags))
63 acc.addPublicTool(pvRefitter)
64
65 HIGG9D1JpsiFinder = CompFactory.Analysis.JpsiFinder(
66 name = "HIGG9D1JpsiFinder",
67 muAndMu = True,
68 muAndTrack = False,
69 TrackAndTrack = False,
70 assumeDiMuons = True,
71 trackThresholdPt = 2400.,
72 invMassLower = 2600.0,
73 invMassUpper = 3500.0,
74 Chi2Cut = 20.,
75 oppChargesOnly = True,
76 atLeastOneComb = True,
77 useCombinedMeasurement = False,
78 muonCollectionKey = mainMuonInput,
79 TrackParticleCollection = mainIDInput,
80 V0VertexFitterTool = None,
81 useV0Fitter = False,
82 TrkVertexFitterTool = vkalvrt,
83 TrackSelectorTool = TrackSelector,
84 VertexPointEstimator = vpest,
85 useMCPCuts = False )
86 acc.addPublicTool(HIGG9D1JpsiFinder)
87
88 HIGG9D1UpsiFinder = CompFactory.Analysis.JpsiFinder(
89 name = "HIGG9D1UpsiFinder",
90 muAndMu = True,
91 muAndTrack = False,
92 TrackAndTrack = False,
93 assumeDiMuons = True,
94 trackThresholdPt = 2400.,
95 invMassLower = 8900.0,
96 invMassUpper = 9900.0,
97 Chi2Cut = 20.,
98 oppChargesOnly = True,
99 atLeastOneComb = True,
100 useCombinedMeasurement = False,
101 muonCollectionKey = mainMuonInput,
102 TrackParticleCollection = mainIDInput,
103 V0VertexFitterTool = None,
104 useV0Fitter = False,
105 TrkVertexFitterTool = vkalvrt,
106 TrackSelectorTool = TrackSelector,
107 VertexPointEstimator = vpest,
108 useMCPCuts = False )
109 acc.addPublicTool(HIGG9D1UpsiFinder)
110
111 HIGG9D1_Jpsi = CompFactory.DerivationFramework.Reco_Vertex(
112 name = "HIGG9D1_Jpsi",
113 VertexSearchTool = HIGG9D1JpsiFinder,
114 OutputVtxContainerName = "HIGG9D1_JpsiCandidates",
115 PVContainerName = "PrimaryVertices",
116 RefPVContainerName = "HIGG9D1_JpsiRefittedPrimaryVertices",
117 RefitPV = True,
118 MaxPVrefit = 100,
119 V0Tools = V0Tools,
120 RelinkTracks = TrkToRelink,
121 RelinkMuons = MuonToRelink,
122 PVRefitter = pvRefitter,
123 DoVertexType = 7)
124 acc.addPublicTool(HIGG9D1_Jpsi)
125
126 HIGG9D1_Upsi = CompFactory.DerivationFramework.Reco_Vertex(
127 name = "HIGG9D1_Upsi",
128 VertexSearchTool = HIGG9D1UpsiFinder,
129 OutputVtxContainerName = "HIGG9D1_UpsiCandidates",
130 PVContainerName = "PrimaryVertices",
131 RefPVContainerName = "HIGG9D1_UpsiRefittedPrimaryVertices",
132 RefitPV = True,
133 MaxPVrefit = 100,
134 V0Tools = V0Tools,
135 RelinkTracks = TrkToRelink,
136 RelinkMuons = MuonToRelink,
137 PVRefitter = pvRefitter,
138 DoVertexType = 7)
139 acc.addPublicTool(HIGG9D1_Upsi)
140
141 from InDetConfig.InDetTrackSelectionToolConfig import 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
174 from AthenaCommon.CFElements import seqAND
175 acc.addSequence( seqAND("HIGG9D1Sequence") )
176
177
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
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
210
211
212
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
215 HIGG9D1_bjet_sel = "%s && %s && %s" % (HIGG9D1_smallR_EMPFlow_2j_sel, HIGG9D1_smallR_EMPFlow_1j_sel, HIGG9D1_smallR_EMPFlow_1b_sel)
216 HIGG9D1_bb_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
217 flags, name = "HIGG9D1_bb_skim", expression = HIGG9D1_bjet_sel))
218
219
220 HIGG9D1_tauTrks = '(TauJets.nTracks + TauJets.nTracksIsolation >= 1 && TauJets.nTracks + TauJets.nTracksIsolation <= 8)'
221 HIGG9D1_tauLead = '(TauJets.pt > 23.0*GeV || TauJets.ptFinalCalib > 23.0*GeV)'
222 HIGG9D1_tauSubl = '(TauJets.pt > 18.0*GeV || TauJets.ptFinalCalib > 18.0*GeV)'
223 HIGG9D1_tauId = 'TauJets.DFTauRNNLoose'
224 HIGG9D1_tauReq0 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' ) >= 2'
225 HIGG9D1_tauReq1 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' && '+HIGG9D1_tauId+' ) >= 1'
226 HIGG9D1_tauReq2 = 'count( '+HIGG9D1_tauLead+' && '+HIGG9D1_tauTrks+' ) >= 1'
227 HIGG9D1_tau_sel = "%s && %s && %s" % (HIGG9D1_tauReq0, HIGG9D1_tauReq1, HIGG9D1_tauReq2)
228
229 HIGG9D1_tautau_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
230 flags, name = "HIGG9D1_tautau_skim", expression = HIGG9D1_tau_sel))
231
232
233 from DerivationFrameworkHiggs.SkimmingToolHIGG1Config import SkimmingToolHIGG1Cfg
234 HIGG9D1_yy_skim = acc.popToolsAndMerge(SkimmingToolHIGG1Cfg(
235 flags,
236 name = "HIGG9D1_yy_skim",
237 RequireGRL = False,
238 ReqireLArError = True,
239 RequireTrigger = False,
240 RequirePreselection = True,
241 RequireKinematic = False,
242 RequireQuality = False,
243 RequireIsolation = False,
244 RequireInvariantMass = False,
245 IncludeSingleMergedElectronPreselection = False,
246 IncludeSingleElectronPreselection = False,
247 IncludeDoubleElectronPreselection = False,
248 IncludeSingleMuonPreselection = False,
249 IncludeDoubleMuonPreselection = False,
250 IncludePhotonDoubleElectronPreselection = False,
251 IncludePhotonMergedElectronPreselection = False,
252 IncludeHighPtPhotonElectronPreselection = False,
253 IncludeDoublePhotonPreselection = True,
254 MinimumPhotonPt = 4800.0,
255 RemoveCrack = True,
256 MaxEta = 2.47))
257 acc.addPublicTool(HIGG9D1_yy_skim)
258
259
260 HIGG9D1_bb_tautau_yy_skim = CompFactory.DerivationFramework.FilterCombinationOR(
261 name = "HIGG9D1_bb_tautau_yy_skim",
262 FilterList = [HIGG9D1_bb_skim, HIGG9D1_tautau_skim, HIGG9D1_yy_skim])
263 acc.addPublicTool(HIGG9D1_bb_tautau_yy_skim)
264
265
266 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (CaloDecoratorKernelCfg, ClusterEnergyPerLayerDecoratorCfg)
267 acc.merge(CaloDecoratorKernelCfg(flags), sequenceName="HIGG9D1Sequence")
268
269
270 augmentationTools = []
271 cluster_sizes = (3,5), (5,7), (7,7)
272 for neta, nphi in cluster_sizes:
273 cename = "ClusterEnergyPerLayerDecorator_%sx%s" % (neta, nphi)
274 ClusterEnergyPerLayerDecorator = acc.popToolsAndMerge( ClusterEnergyPerLayerDecoratorCfg(flags, neta = neta, nphi=nphi, name=cename ))
275 acc.addPublicTool(ClusterEnergyPerLayerDecorator)
276 augmentationTools.append(ClusterEnergyPerLayerDecorator)
277
278 HIGG9D1_bb_tautau_yy_skimKernel = CompFactory.DerivationFramework.DerivationKernel(
279 "HIGG9D1_bb_tautau_yy_skimKernel",
280 AugmentationTools = augmentationTools,
281 SkimmingTools = [ HIGG9D1_bb_tautau_yy_skim ])
282
283 acc.addEventAlgo(HIGG9D1_bb_tautau_yy_skimKernel, sequenceName="HIGG9D1Sequence")
284
285 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
286 acc.merge(DerivationTrackIsoCfg(flags, object_types=("Electrons", "Photons", "Muons"), sequenceName="HIGG9D1Sequence"))
287
288
289 from LeptonTaggers.LeptonTaggersConfig import DecoratePLITAlgsCfg
290 acc.merge(DecoratePLITAlgsCfg(flags), sequenceName="HIGG9D1Sequence")
291
292 from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
293 contNames = [ "Muons", "Electrons", "Photons" ]
294 acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = False, containerNames = contNames, useSelTools = True, stream_name = kwargs['StreamName']), sequenceName="HIGG9D1Sequence")
295
296
297 from DerivationFrameworkEGamma.EGammaToolsConfig import PhotonVertexSelectionWrapperKernelCfg
298 acc.merge(PhotonVertexSelectionWrapperKernelCfg(flags), sequenceName="HIGG9D1Sequence")
299 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig import DiphotonVertexDecoratorCfg
300 DiphotonVertexDecorator = acc.popToolsAndMerge(DiphotonVertexDecoratorCfg(
301 flags,
302 MinimumPhotonPt = 4800.0,
303 DiphotonVertexName = "HIGG9D1_DiphotonPrimaryVertices"))
304 acc.addPublicTool(DiphotonVertexDecorator)
305 acc.addEventAlgo(CompFactory.DerivationFramework.CommonAugmentation(name = "DiphotonVertexAugmentation", AugmentationTools = [DiphotonVertexDecorator]), sequenceName="HIGG9D1Sequence")
306
307
308
309
310
311 HIGG9D1MuonTPThinningTool = CompFactory.DerivationFramework.MuonTrackParticleThinning(
312 name = "HIGG9D1MuonTPThinningTool",
313 StreamName = kwargs['StreamName'],
314 MuonKey = "Muons",
315 InDetTrackParticlesKey = "InDetTrackParticles")
316 acc.addPublicTool(HIGG9D1MuonTPThinningTool)
317
318
319 HIGG9D1ElectronTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
320 name = "HIGG9D1ElectronTPThinningTool",
321 SGKey = "Electrons",
322 StreamName = kwargs['StreamName'],
323 GSFTrackParticlesKey = "GSFTrackParticles",
324 InDetTrackParticlesKey = "InDetTrackParticles")
325 acc.addPublicTool(HIGG9D1ElectronTPThinningTool)
326
327
328 HIGG9D1PhotonTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
329 name = "HIGG9D1PhotonTPThinningTool",
330 SGKey = "Photons",
331 StreamName = kwargs['StreamName'],
332 GSFTrackParticlesKey = "GSFTrackParticles",
333 GSFConversionVerticesKey = "GSFConversionVertices",
334 InDetTrackParticlesKey = "InDetTrackParticles")
335 acc.addPublicTool(HIGG9D1PhotonTPThinningTool)
336
337
338 HIGG9D1TauTPThinningTool = CompFactory.DerivationFramework.TauTrackParticleThinning(
339 name = "HIGG9D1TauTPThinningTool",
340 StreamName = kwargs['StreamName'],
341 TauKey = "TauJets",
342 InDetTrackParticlesKey = "InDetTrackParticles",
343 DoTauTracksThinning = True,
344 TauTracksKey = "TauTracks")
345 acc.addPublicTool(HIGG9D1TauTPThinningTool)
346
347
348 HIGG9D1_ThinVtxTracks = CompFactory.DerivationFramework.Thin_vtxTrk(
349 name = "HIGG9D1_ThinVtxTracks",
350 StreamName = kwargs['StreamName'],
351 TrackParticleContainerName = "InDetTrackParticles",
352 VertexContainerNames = [ HIGG9D1_Jpsi.OutputVtxContainerName, HIGG9D1_Upsi.OutputVtxContainerName ],
353 IgnoreFlags = True )
354 acc.addPublicTool(HIGG9D1_ThinVtxTracks)
355
356 thinningTools = [HIGG9D1MuonTPThinningTool,
357 HIGG9D1ElectronTPThinningTool,
358 HIGG9D1PhotonTPThinningTool,
359 HIGG9D1TauTPThinningTool,
360 HIGG9D1_ThinVtxTracks]
361
362
363 if flags.Input.isMC:
364 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MenuTruthThinningCfg
365 HIGG9D1TruthTool = acc.getPrimaryAndMerge(MenuTruthThinningCfg(
366 flags = flags,
367 name = "HIGG9D1TruthTool",
368 StreamName = kwargs['StreamName'],
369 ParticlesKey = "TruthParticles",
370 VerticesKey = "TruthVertices",
371 WritePartons = False,
372 WriteHadrons = True,
373 WriteBHadrons = True,
374 WriteCHadrons = True,
375 WriteGeant = False,
376 WriteTauHad = True,
377 WriteBSM = True,
378 WriteBosons = True,
379 WriteBSMProducts = True,
380 WriteBosonProducts = False,
381 WriteTopAndDecays = True,
382 WriteEverything = False,
383 WriteAllLeptons = True,
384 WriteNotPhysical = False,
385 PreserveDescendants = False,
386 PreserveGeneratorDescendants = True,
387 PreserveAncestors = True))
388 acc.addPublicTool(HIGG9D1TruthTool)
389 thinningTools.append(HIGG9D1TruthTool)
390
391
392
393
394 from DerivationFrameworkMCTruth.HFClassificationCommonConfig import HFClassificationCommonCfg
395 acc.merge(HFClassificationCommonCfg(flags), sequenceName="HIGG9D1Sequence")
396
397
398 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(name, ThinningTools = thinningTools), sequenceName="HIGG9D1Sequence")
399
400 return acc
401