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
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,
70 trackThresholdPt = 2400.,
71 invMassLower = 2600.0,
72 invMassUpper = 3500.0,
73 Chi2Cut = 20.,
74 oppChargesOnly = True,
75 atLeastOneComb = True,
76 useCombinedMeasurement = False,
77 muonCollectionKey = mainMuonInput,
78 TrackParticleCollection = mainIDInput,
79 TrkVertexFitterTool = vkalvrt,
80 TrackSelectorTool = TrackSelector,
81 VertexPointEstimator = vpest,
82 useMCPCuts = False )
83 acc.addPublicTool(HIGG9D1JpsiFinder)
84
85 HIGG9D1UpsiFinder = CompFactory.Analysis.JpsiFinder(
86 name = "HIGG9D1UpsiFinder",
87 muAndMu = True,
88 muAndTrack = False,
89 TrackAndTrack = False,
90 assumeDiMuons = True,
91 trackThresholdPt = 2400.,
92 invMassLower = 8900.0,
93 invMassUpper = 9900.0,
94 Chi2Cut = 20.,
95 oppChargesOnly = True,
96 atLeastOneComb = True,
97 useCombinedMeasurement = False,
98 muonCollectionKey = mainMuonInput,
99 TrackParticleCollection = mainIDInput,
100 TrkVertexFitterTool = vkalvrt,
101 TrackSelectorTool = TrackSelector,
102 VertexPointEstimator = vpest,
103 useMCPCuts = False )
104 acc.addPublicTool(HIGG9D1UpsiFinder)
105
106 HIGG9D1_Jpsi = CompFactory.DerivationFramework.Reco_Vertex(
107 name = "HIGG9D1_Jpsi",
108 VertexSearchTool = HIGG9D1JpsiFinder,
109 OutputVtxContainerName = "HIGG9D1_JpsiCandidates",
110 PVContainerName = "PrimaryVertices",
111 RefPVContainerName = "HIGG9D1_JpsiRefittedPrimaryVertices",
112 RefitPV = True,
113 MaxPVrefit = 100,
114 V0Tools = V0Tools,
115 RelinkTracks = TrkToRelink,
116 RelinkMuons = MuonToRelink,
117 PVRefitter = pvRefitter,
118 DoVertexType = 7)
119 acc.addPublicTool(HIGG9D1_Jpsi)
120
121 HIGG9D1_Upsi = CompFactory.DerivationFramework.Reco_Vertex(
122 name = "HIGG9D1_Upsi",
123 VertexSearchTool = HIGG9D1UpsiFinder,
124 OutputVtxContainerName = "HIGG9D1_UpsiCandidates",
125 PVContainerName = "PrimaryVertices",
126 RefPVContainerName = "HIGG9D1_UpsiRefittedPrimaryVertices",
127 RefitPV = True,
128 MaxPVrefit = 100,
129 V0Tools = V0Tools,
130 RelinkTracks = TrkToRelink,
131 RelinkMuons = MuonToRelink,
132 PVRefitter = pvRefitter,
133 DoVertexType = 7)
134 acc.addPublicTool(HIGG9D1_Upsi)
135
136 from InDetTrackSelectionTool.InDetTrackSelectionToolConfig import (
137 InDetTrackSelectionTool_Loose_Cfg)
138 HIGG9D1_isoTrackSelTool = acc.popToolsAndMerge(InDetTrackSelectionTool_Loose_Cfg(
139 flags,
140 name = "HIGG9D1_isoTrackSelTool",
141 maxZ0SinTheta = 3.0,
142 minPt = 500.))
143
144 from IsolationAlgs.IsoToolsConfig import TrackIsolationToolCfg
145 HIGG9D1_TrackIsoTool = acc.popToolsAndMerge(TrackIsolationToolCfg(
146 flags,
147 name = "HIGG9D1_TrackIsoTool",
148 TrackSelectionTool = HIGG9D1_isoTrackSelTool))
149 acc.addPublicTool(HIGG9D1_TrackIsoTool)
150
151 HIGG9D1_JpsiVtxTrkIsoDecor = CompFactory.DerivationFramework.VertexTrackIsolation(
152 name = "HIGG9D1_JpsiVtxTrkIsoDecor",
153 TrackIsoTool = HIGG9D1_TrackIsoTool,
154 TrackContainer = "InDetTrackParticles",
155 InputVertexContainer = "HIGG9D1_JpsiCandidates",
156 FixElecExclusion = False,
157 IncludeV0 = False)
158 acc.addPublicTool(HIGG9D1_JpsiVtxTrkIsoDecor)
159
160 HIGG9D1_UpsiVtxTrkIsoDecor = CompFactory.DerivationFramework.VertexTrackIsolation(
161 name = "HIGG9D1_UpsiVtxTrkIsoDecor",
162 TrackIsoTool = HIGG9D1_TrackIsoTool,
163 TrackContainer = "InDetTrackParticles",
164 InputVertexContainer = "HIGG9D1_UpsiCandidates",
165 FixElecExclusion = False,
166 IncludeV0 = False)
167 acc.addPublicTool(HIGG9D1_UpsiVtxTrkIsoDecor)
168
169
170 from AthenaCommon.CFElements import seqAND
171 acc.addSequence( seqAND("HIGG9D1Sequence") )
172
173
174 from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
175 acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']), sequenceName="HIGG9D1Sequence")
176
177
180 HIGG9D1_onia_skim = CompFactory.DerivationFramework.AnyVertexSkimmingTool(name = "HIGG9D1_onia_skim", VertexContainerNames = ["HIGG9D1_JpsiCandidates", "HIGG9D1_UpsiCandidates"])
181 acc.addPublicTool(HIGG9D1_onia_skim)
182
183 HIGG9D1_onia_skimKernel = CompFactory.DerivationFramework.DerivationKernel(
184 "HIGG9D1_onia_skimKernel",
185 AugmentationTools = [ HIGG9D1_AugOriginalCounts, HIGG9D1_Jpsi, HIGG9D1_Upsi, HIGG9D1_JpsiVtxTrkIsoDecor, HIGG9D1_UpsiVtxTrkIsoDecor ],
186 SkimmingTools = [ HIGG9D1_onia_skim ])
187
188 acc.addEventAlgo(HIGG9D1_onia_skimKernel, sequenceName="HIGG9D1Sequence")
189
190
191 from BTagging.FlavorTaggingConfig import FlavorTaggingCfg
192 acc.merge(FlavorTaggingCfg(flags, "AntiKt4EMPFlowJets"), sequenceName="HIGG9D1Sequence")
193
194
197
198 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
199 xAODStringSkimmingToolCfg)
200
201
203 HIGG9D1_smallR_EMPFlow_2j_sel = "count(AntiKt4EMPFlowJets.pt > 18*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 2"
204 HIGG9D1_smallR_EMPFlow_1j_sel = "count(AntiKt4EMPFlowJets.pt > 33*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 1"
205
206
207
208
209 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"
210
211
212 if flags.GeoModel.Run >= LHCPeriod.Run4:
213 HIGG9D1_smallR_EMPFlow_1b_sel = "count(AntiKt4EMPFlowJets.pt > 18*GeV && abs(AntiKt4EMPFlowJets.eta) < 2.8) >= 1"
214
215
216 HIGG9D1_bjet_sel = "%s && %s && %s" % (HIGG9D1_smallR_EMPFlow_2j_sel, HIGG9D1_smallR_EMPFlow_1j_sel, HIGG9D1_smallR_EMPFlow_1b_sel)
217 HIGG9D1_bb_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
218 flags, name = "HIGG9D1_bb_skim", expression = HIGG9D1_bjet_sel))
219
220
221 HIGG9D1_tauTrks = '(TauJets.nTracks + TauJets.nTracksIsolation >= 1 && TauJets.nTracks + TauJets.nTracksIsolation <= 8)'
222 HIGG9D1_tauLead = '(TauJets.pt > 23.0*GeV || TauJets.ptFinalCalib > 23.0*GeV)'
223 HIGG9D1_tauSubl = '(TauJets.pt > 18.0*GeV || TauJets.ptFinalCalib > 18.0*GeV)'
224 HIGG9D1_tauId = 'TauJets.DFTauGNTauLoose'
225 HIGG9D1_tauReq0 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' ) >= 2'
226 HIGG9D1_tauReq1 = 'count( '+HIGG9D1_tauSubl+' && '+HIGG9D1_tauTrks+' && '+HIGG9D1_tauId+' ) >= 1'
227 HIGG9D1_tauReq2 = 'count( '+HIGG9D1_tauLead+' && '+HIGG9D1_tauTrks+' ) >= 1'
228 HIGG9D1_tau_sel = "%s && %s && %s" % (HIGG9D1_tauReq0, HIGG9D1_tauReq1, HIGG9D1_tauReq2)
229
230 HIGG9D1_tautau_skim = acc.getPrimaryAndMerge(xAODStringSkimmingToolCfg(
231 flags, name = "HIGG9D1_tautau_skim", expression = HIGG9D1_tau_sel))
232
233
234 from DerivationFrameworkHiggs.SkimmingToolHIGG1Config import SkimmingToolHIGG1Cfg
235 HIGG9D1_yy_skim = acc.popToolsAndMerge(SkimmingToolHIGG1Cfg(
236 flags,
237 name = "HIGG9D1_yy_skim",
238 RequireGRL = False,
239 ReqireLArError = True,
240 RequireTrigger = False,
241 RequirePreselection = True,
242 RequireKinematic = False,
243 RequireQuality = False,
244 RequireIsolation = False,
245 RequireInvariantMass = False,
246 IncludeSingleMergedElectronPreselection = False,
247 IncludeSingleElectronPreselection = False,
248 IncludeDoubleElectronPreselection = False,
249 IncludeSingleMuonPreselection = False,
250 IncludeDoubleMuonPreselection = False,
251 IncludePhotonDoubleElectronPreselection = False,
252 IncludePhotonMergedElectronPreselection = False,
253 IncludeHighPtPhotonElectronPreselection = False,
254 IncludeDoublePhotonPreselection = True,
255 MinimumPhotonPt = 4800.0,
256 RemoveCrack = True,
257 MaxEta = 2.47))
258 acc.addPublicTool(HIGG9D1_yy_skim)
259
260
261 HIGG9D1_bb_tautau_yy_skim = CompFactory.DerivationFramework.FilterCombinationOR(
262 name = "HIGG9D1_bb_tautau_yy_skim",
263 FilterList = [HIGG9D1_bb_skim, HIGG9D1_tautau_skim, HIGG9D1_yy_skim])
264 acc.addPublicTool(HIGG9D1_bb_tautau_yy_skim)
265
266
267 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import (CaloDecoratorKernelCfg, ClusterEnergyPerLayerDecoratorCfg)
268 acc.merge(CaloDecoratorKernelCfg(flags), sequenceName="HIGG9D1Sequence")
269
270
271 augmentationTools = []
272 cluster_sizes = (3,5), (5,7), (7,7)
273 for neta, nphi in cluster_sizes:
274 cename = "ClusterEnergyPerLayerDecorator_%sx%s" % (neta, nphi)
275 ClusterEnergyPerLayerDecorator = acc.popToolsAndMerge( ClusterEnergyPerLayerDecoratorCfg(flags, neta = neta, nphi=nphi, name=cename ))
276 acc.addPublicTool(ClusterEnergyPerLayerDecorator)
277 augmentationTools.append(ClusterEnergyPerLayerDecorator)
278
279 HIGG9D1_bb_tautau_yy_skimKernel = CompFactory.DerivationFramework.DerivationKernel(
280 "HIGG9D1_bb_tautau_yy_skimKernel",
281 AugmentationTools = augmentationTools,
282 SkimmingTools = [ HIGG9D1_bb_tautau_yy_skim ])
283
284 acc.addEventAlgo(HIGG9D1_bb_tautau_yy_skimKernel, sequenceName="HIGG9D1Sequence")
285
286 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
287 acc.merge(DerivationTrackIsoCfg(flags, object_types=("Electrons", "Photons", "Muons"), sequenceName="HIGG9D1Sequence"))
288
289
290 from LeptonTaggers.LeptonTaggersConfig import DecoratePLITAlgsCfg
291 acc.merge(DecoratePLITAlgsCfg(flags), sequenceName="HIGG9D1Sequence")
292
293 from IsolationSelection.IsolationSelectionConfig import IsoCloseByAlgsCfg
294 contNames = [ "Muons", "Electrons", "Photons" ]
295 acc.merge(IsoCloseByAlgsCfg(flags, isPhysLite = False, containerNames = contNames, useSelTools = True, stream_name = kwargs['StreamName']), sequenceName="HIGG9D1Sequence")
296
297
298 from DerivationFrameworkEGamma.EGammaToolsConfig import PhotonVertexSelectionWrapperKernelCfg
299 acc.merge(PhotonVertexSelectionWrapperKernelCfg(flags), sequenceName="HIGG9D1Sequence")
300 from DerivationFrameworkHiggs.HIGG1D1CustomVertexConfig import DiphotonVertexDecoratorCfg
301 DiphotonVertexDecorator = acc.popToolsAndMerge(DiphotonVertexDecoratorCfg(
302 flags,
303 MinimumPhotonPt = 4800.0,
304 DiphotonVertexName = "HIGG9D1_DiphotonPrimaryVertices"))
305 acc.addPublicTool(DiphotonVertexDecorator)
306 acc.addEventAlgo(CompFactory.DerivationFramework.CommonAugmentation(name = "DiphotonVertexAugmentation", AugmentationTools = [DiphotonVertexDecorator]), sequenceName="HIGG9D1Sequence")
307
308
309
310
311
312 HIGG9D1MuonTPThinningTool = CompFactory.DerivationFramework.MuonTrackParticleThinning(
313 name = "HIGG9D1MuonTPThinningTool",
314 StreamName = kwargs['StreamName'],
315 MuonKey = "Muons",
316 InDetTrackParticlesKey = "InDetTrackParticles")
317 acc.addPublicTool(HIGG9D1MuonTPThinningTool)
318
319
320 HIGG9D1ElectronTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
321 name = "HIGG9D1ElectronTPThinningTool",
322 SGKey = "Electrons",
323 StreamName = kwargs['StreamName'],
324 GSFTrackParticlesKey = "GSFTrackParticles",
325 InDetTrackParticlesKey = "InDetTrackParticles")
326 acc.addPublicTool(HIGG9D1ElectronTPThinningTool)
327
328
329 HIGG9D1PhotonTPThinningTool = CompFactory.DerivationFramework.EgammaTrackParticleThinning(
330 name = "HIGG9D1PhotonTPThinningTool",
331 SGKey = "Photons",
332 StreamName = kwargs['StreamName'],
333 GSFTrackParticlesKey = "GSFTrackParticles",
334 GSFConversionVerticesKey = "GSFConversionVertices",
335 InDetTrackParticlesKey = "InDetTrackParticles")
336 acc.addPublicTool(HIGG9D1PhotonTPThinningTool)
337
338
339 HIGG9D1TauTPThinningTool = CompFactory.DerivationFramework.TauTrackParticleThinning(
340 name = "HIGG9D1TauTPThinningTool",
341 StreamName = kwargs['StreamName'],
342 TauKey = "TauJets",
343 InDetTrackParticlesKey = "InDetTrackParticles",
344 DoTauTracksThinning = True,
345 TauTracksKey = "TauTracks")
346 acc.addPublicTool(HIGG9D1TauTPThinningTool)
347
348
349 HIGG9D1_ThinVtxTracks = CompFactory.DerivationFramework.Thin_vtxTrk(
350 name = "HIGG9D1_ThinVtxTracks",
351 StreamName = kwargs['StreamName'],
352 TrackParticleContainerName = "InDetTrackParticles",
353 VertexContainerNames = [ HIGG9D1_Jpsi.OutputVtxContainerName, HIGG9D1_Upsi.OutputVtxContainerName ],
354 IgnoreFlags = True )
355 acc.addPublicTool(HIGG9D1_ThinVtxTracks)
356
357 thinningTools = [HIGG9D1MuonTPThinningTool,
358 HIGG9D1ElectronTPThinningTool,
359 HIGG9D1PhotonTPThinningTool,
360 HIGG9D1TauTPThinningTool,
361 HIGG9D1_ThinVtxTracks]
362
363
364 if flags.Input.isMC:
365 from DerivationFrameworkMCTruth.TruthDerivationToolsConfig import MenuTruthThinningCfg
366 HIGG9D1TruthTool = acc.getPrimaryAndMerge(MenuTruthThinningCfg(
367 flags = flags,
368 name = "HIGG9D1TruthTool",
369 StreamName = kwargs['StreamName'],
370 ParticlesKey = "TruthParticles",
371 VerticesKey = "TruthVertices",
372 WritePartons = False,
373 WriteHadrons = True,
374 WriteBHadrons = True,
375 WriteCHadrons = True,
376 WriteGeant = False,
377 WriteTauHad = True,
378 WriteBSM = True,
379 WriteBosons = True,
380 WriteBSMProducts = True,
381 WriteBosonProducts = False,
382 WriteTopAndDecays = True,
383 WriteEverything = False,
384 WriteAllLeptons = True,
385 WriteNotPhysical = False,
386 PreserveDescendants = False,
387 PreserveGeneratorDescendants = True,
388 PreserveAncestors = True))
389 acc.addPublicTool(HIGG9D1TruthTool)
390 thinningTools.append(HIGG9D1TruthTool)
391
392
393
394
395 from DerivationFrameworkMCTruth.HFClassificationCommonConfig import HFClassificationCommonCfg
396 acc.merge(HFClassificationCommonCfg(flags), sequenceName="HIGG9D1Sequence")
397
398
399 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(name, ThinningTools = thinningTools), sequenceName="HIGG9D1Sequence")
400
401 return acc
402