ATLAS Offline Software
Loading...
Searching...
No Matches
BPHY25.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2#====================================================================
3# BPHY25.py
4# Contact: xin.chen@cern.ch
5#====================================================================
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.Enums import MetadataCategory
10
11BPHYDerivationName = "BPHY25"
12streamName = "StreamDAOD_BPHY25"
13
14def BPHY25Cfg(flags):
15 from AthenaServices.PartPropSvcConfig import PartPropSvcCfg
16 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import (
17 BPHY_V0ToolCfg, BPHY_InDetDetailedTrackSelectorToolCfg,
18 BPHY_VertexPointEstimatorCfg, BPHY_TrkVKalVrtFitterCfg,
19 AugOriginalCountsCfg)
20 from JpsiUpsilonTools.JpsiUpsilonToolsConfig import PrimaryVertexRefittingToolCfg
21 acc = ComponentAccumulator()
22 acc.getPrimaryAndMerge(PartPropSvcCfg(flags))
23 isSimulation = flags.Input.isMC
24
25 # Adds primary vertex counts and track counts to EventInfo before they are thinned
26 BPHY25_AugOriginalCounts = acc.popToolsAndMerge(
27 AugOriginalCountsCfg(flags, name = "BPHY25_AugOriginalCounts"))
28
29 doLRT = flags.Tracking.doLargeD0
30 mainIDInput = "InDetWithLRTTrackParticles" if doLRT else "InDetTrackParticles"
31 if doLRT:
32 from DerivationFrameworkInDet.InDetToolsConfig import InDetLRTMergeCfg
33 acc.merge(InDetLRTMergeCfg( flags, OutputTrackParticleLocation = mainIDInput ))
34
35 TrkToRelink = ["InDetTrackParticles", "InDetLargeD0TrackParticles"] if doLRT else ["InDetTrackParticles"]
36
37 V0Tools = acc.popToolsAndMerge(BPHY_V0ToolCfg(flags, BPHYDerivationName))
38 vkalvrt = acc.popToolsAndMerge(BPHY_TrkVKalVrtFitterCfg(flags, BPHYDerivationName)) # VKalVrt vertex fitter
39 acc.addPublicTool(vkalvrt)
40 acc.addPublicTool(V0Tools)
41 trackselect = acc.popToolsAndMerge(BPHY_InDetDetailedTrackSelectorToolCfg(flags, BPHYDerivationName))
42 acc.addPublicTool(trackselect)
43 vpest = acc.popToolsAndMerge(BPHY_VertexPointEstimatorCfg(flags, BPHYDerivationName))
44 acc.addPublicTool(vpest)
45 pvrefitter = acc.popToolsAndMerge(PrimaryVertexRefittingToolCfg(flags))
46 acc.addPublicTool(pvrefitter)
47 from TrkConfig.TrkV0FitterConfig import TrkV0VertexFitter_InDetExtrCfg
48 v0fitter = acc.popToolsAndMerge(TrkV0VertexFitter_InDetExtrCfg(flags))
49 acc.addPublicTool(v0fitter)
50 from TrackToVertex.TrackToVertexConfig import InDetTrackToVertexCfg
51 tracktovtxtool = acc.popToolsAndMerge(InDetTrackToVertexCfg(flags))
52 acc.addPublicTool(tracktovtxtool)
53 from TrkConfig.TrkVKalVrtFitterConfig import V0VKalVrtFitterCfg
54 gammafitter = acc.popToolsAndMerge(V0VKalVrtFitterCfg(
55 flags, BPHYDerivationName+"_GammaFitter",
56 Robustness = 6,
57 usePhiCnst = True,
58 useThetaCnst = True,
59 InputParticleMasses = [0.511,0.511] ))
60 acc.addPublicTool(gammafitter)
61 from InDetConfig.InDetTrackSelectorToolConfig import V0InDetConversionTrackSelectorToolCfg
62 v0trackselect = acc.popToolsAndMerge(V0InDetConversionTrackSelectorToolCfg(flags))
63 acc.addPublicTool(v0trackselect)
64 from TrkConfig.AtlasExtrapolatorConfig import AtlasExtrapolatorCfg
65 extrapolator = acc.popToolsAndMerge(AtlasExtrapolatorCfg(flags))
66 acc.addPublicTool(extrapolator)
67
68 # mass limits and constants used in the following
69 Jpsi_lo = 2600.0
70 Jpsi_hi = 3500.0
71 B_lo = 5080.0
72 B_hi = 5480.0
73 Ks_lo = 430.0
74 Ks_hi = 565.0
75 Ld_lo = 1030.0
76 Ld_hi = 1200.0
77 Xi_lo = 1260.0
78 Xi_hi = 1383.0
79 Omg_lo = 1600.0
80 Omg_hi = 1745.0
81 Ldb0_lo = 5310.0
82 Ldb0_hi = 5910.0
83
84 Mumass = 105.658
85 Pimass = 139.570
86 Kmass = 493.677
87 Ksmass = 497.611
88 Jpsimass = 3096.916
89 B0mass = 5279.66
90 Lambdamass = 1115.683
91 Ximass = 1321.71
92 Omegamass = 1672.45
93 Lambdab0mass = 5619.60
94
95 BPHY25JpsiFinder = CompFactory.Analysis.JpsiFinder(
96 name = "BPHY25JpsiFinder",
97 muAndMu = True,
98 muAndTrack = False,
99 TrackAndTrack = False,
100 assumeDiMuons = True, # If true, will assume dimu hypothesis and use PDG value for mu mass
101 trackThresholdPt = 3400.,
102 invMassLower = 500.,
103 invMassUpper = 4500.,
104 Chi2Cut = 4., # NDF=1 if no mass constraint
105 oppChargesOnly = True,
106 atLeastOneComb = True,
107 useCombinedMeasurement = False, # Only takes effect if combOnly=True
108 muonCollectionKey = "Muons",
109 TrackParticleCollection = "InDetTrackParticles",
110 V0VertexFitterTool = None,
111 useV0Fitter = False, # if False a TrkVertexFitterTool will be used
112 TrkVertexFitterTool = vkalvrt, # VKalVrt vertex fitter
113 TrackSelectorTool = trackselect,
114 VertexPointEstimator = vpest,
115 useMCPCuts = False )
116 acc.addPublicTool(BPHY25JpsiFinder)
117
118 BPHY25_Reco_mumu = CompFactory.DerivationFramework.Reco_Vertex(
119 name = "BPHY25_Reco_mumu",
120 VertexSearchTool = BPHY25JpsiFinder,
121 OutputVtxContainerName = "BPHY25OniaCandidates",
122 PVContainerName = "PrimaryVertices",
123 RelinkTracks = TrkToRelink,
124 V0Tools = V0Tools,
125 PVRefitter = pvrefitter,
126 RefitPV = True,
127 MaxPVrefit = 500,
128 RefPVContainerName = "BPHY25_mumuRefittedPrimaryVertices",
129 DoVertexType = 7)
130
131 # B0 -> J/psi + K pi
132 BPHY25B0_Jpsi2Trk = CompFactory.Analysis.JpsiPlus2Tracks(
133 name = "BPHY25B0_Jpsi2Trk",
134 kaonkaonHypothesis = False,
135 pionpionHypothesis = False,
136 kaonpionHypothesis = True,
137 kaonprotonHypothesis = False,
138 trkThresholdPt = 760.,
139 trkMaxEta = 2.6,
140 oppChargesOnly = False,
141 JpsiMassLower = Jpsi_lo,
142 JpsiMassUpper = Jpsi_hi,
143 TrkQuadrupletMassLower = B_lo-100,
144 TrkQuadrupletMassUpper = B_hi+100,
145 BMassLower = B_lo,
146 BMassUpper = B_hi,
147 DiTrackMassLower = 500.,
148 DiTrackMassUpper = 1100.,
149 Chi2Cut = 4.,
150 JpsiContainerKey = "BPHY25OniaCandidates",
151 TrackParticleCollection = "InDetTrackParticles",
152 MuonsUsedInJpsi = "Muons",
153 ExcludeJpsiMuonsOnly = True,
154 TrkVertexFitterTool = vkalvrt,
155 TrackSelectorTool = trackselect,
156 UseMassConstraint = True)
157 acc.addPublicTool(BPHY25B0_Jpsi2Trk)
158
159 # B+ -> J/psi K
160 BPHY25Bpm_Jpsi1Trk = CompFactory.Analysis.JpsiPlus1Track(
161 name = "BPHY25Bpm_Jpsi1Trk",
162 pionHypothesis = False,
163 kaonHypothesis = True,
164 trkThresholdPt = 950.,
165 trkMaxEta = 2.6,
166 JpsiMassLower = Jpsi_lo,
167 JpsiMassUpper = Jpsi_hi,
168 TrkTrippletMassLower = B_lo-100,
169 TrkTrippletMassUpper = B_hi+100,
170 BMassLower = B_lo,
171 BMassUpper = B_hi,
172 Chi2Cut = 4.,
173 JpsiContainerKey = "BPHY25OniaCandidates",
174 TrackParticleCollection = "InDetTrackParticles",
175 MuonsUsedInJpsi = "Muons",
176 ExcludeJpsiMuonsOnly = True,
177 TrkVertexFitterTool = vkalvrt,
178 TrackSelectorTool = trackselect,
179 UseMassConstraint = True)
180 acc.addPublicTool(BPHY25Bpm_Jpsi1Trk)
181
182 BPHY25FourTrackReco_B0 = CompFactory.DerivationFramework.Reco_Vertex(
183 name = "BPHY25FourTrackReco_B0",
184 VertexSearchTool = BPHY25B0_Jpsi2Trk,
185 OutputVtxContainerName = "BPHY25FourTrack_B0",
186 PVContainerName = "PrimaryVertices",
187 RelinkTracks = TrkToRelink,
188 V0Tools = V0Tools,
189 PVRefitter = pvrefitter,
190 RefitPV = True,
191 MaxPVrefit = 500,
192 RefPVContainerName = "BPHY25_B0RefittedPrimaryVertices",
193 DoVertexType = 7)
194
195 BPHY25ThreeTrackReco_Bpm = CompFactory.DerivationFramework.Reco_Vertex(
196 name = "BPHY25ThreeTrackReco_Bpm",
197 VertexSearchTool = BPHY25Bpm_Jpsi1Trk,
198 OutputVtxContainerName = "BPHY25ThreeTrack_Bpm",
199 PVContainerName = "PrimaryVertices",
200 RelinkTracks = TrkToRelink,
201 V0Tools = V0Tools,
202 PVRefitter = pvrefitter,
203 RefitPV = True,
204 MaxPVrefit = 500,
205 RefPVContainerName = "BPHY25_BpmRefittedPrimaryVertices",
206 DoVertexType = 7)
207
208 BPHY25Select_Jpsi = CompFactory.DerivationFramework.Select_onia2mumu(
209 name = "BPHY25Select_Jpsi",
210 HypothesisName = "Jpsi",
211 InputVtxContainerName = "BPHY25OniaCandidates",
212 V0Tools = V0Tools,
213 TrkMasses = [Mumass, Mumass],
214 MassMin = Jpsi_lo,
215 MassMax = Jpsi_hi,
216 DoVertexType = 0)
217
218 BPHY25Select_mumu = CompFactory.DerivationFramework.Select_onia2mumu(
219 name = "BPHY25Select_mumu",
220 HypothesisName = "mumu",
221 InputVtxContainerName = "BPHY25OniaCandidates",
222 V0Tools = V0Tools,
223 TrkMasses = [Mumass, Mumass],
224 MassMin = 500.,
225 MassMax = 4500.,
226 DoVertexType = 0)
227
228
232
233 list_disV_hypo = ["JpsiXi", "JpsiOmg", "mumuXi"]
234 list_disV_jxHypo = ["Jpsi", "Jpsi", "mumu"]
235 list_disV_jxCons = [True, True, False]
236 list_disV_disVLo = [Xi_lo, Omg_lo, Xi_lo]
237 list_disV_disVHi = [Xi_hi, Omg_hi, Xi_hi]
238 list_disV_disVDau3Mass = [Pimass, Kmass, Pimass]
239 list_disV_disVDaug3MinPt = [650., 750., 650.]
240 list_disV_jxMass = [Jpsimass, Jpsimass, -9999.]
241 list_disV_disVMass = [Ximass, Omegamass, Ximass]
242
243 list_disV_obj = []
244 for hypo in list_disV_hypo:
245 list_disV_obj.append( CompFactory.DerivationFramework.JpsiXPlusDisplaced("BPHY25_"+hypo) )
246
247 for i in range(len(list_disV_obj)):
248 list_disV_obj[i].JXVertices = "BPHY25OniaCandidates"
249 list_disV_obj[i].JXVtxHypoNames = [list_disV_jxHypo[i]]
250 list_disV_obj[i].TrackParticleCollection = mainIDInput
251 list_disV_obj[i].RelinkTracks = TrkToRelink
252 if i == 0:
253 # create V0 container for all following instances
254 list_disV_obj[i].OutputV0VtxCollection = "V0Collection"
255 else:
256 list_disV_obj[i].V0Vertices = "V0Collection"
257 list_disV_obj[i].UseImprovedMass = True
258 list_disV_obj[i].LambdaMassLowerCut = Ld_lo
259 list_disV_obj[i].LambdaMassUpperCut = Ld_hi
260 list_disV_obj[i].KsMassLowerCut = Ks_lo
261 list_disV_obj[i].KsMassUpperCut = Ks_hi
262 list_disV_obj[i].DisplacedMassLowerCut = list_disV_disVLo[i]
263 list_disV_obj[i].DisplacedMassUpperCut = list_disV_disVHi[i]
264 list_disV_obj[i].MassLowerCut = 0.
265 list_disV_obj[i].MassUpperCut = 20000.
266 list_disV_obj[i].CascadeVertexCollections = ["BPHY25_"+list_disV_hypo[i]+"_CascadeVtx1_sub","BPHY25_"+list_disV_hypo[i]+"_CascadeVtx1","BPHY25_"+list_disV_hypo[i]+"_CascadeMainVtx"]
267 list_disV_obj[i].HasJXSubVertex = False
268 list_disV_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
269 list_disV_obj[i].V0Hypothesis = "Lambda"
270 list_disV_obj[i].MassCutGamma = 10.
271 list_disV_obj[i].Chi2CutGamma = 3.
272 list_disV_obj[i].LxyV0Cut = 1.
273 list_disV_obj[i].LxyDisVtxCut = 2.
274 list_disV_obj[i].HypothesisName = list_disV_hypo[i]
275 list_disV_obj[i].NumberOfJXDaughters = 2
276 list_disV_obj[i].JXDaug1MassHypo = Mumass
277 list_disV_obj[i].JXDaug2MassHypo = Mumass
278 list_disV_obj[i].NumberOfDisVDaughters = 3
279 list_disV_obj[i].DisVDaug3MassHypo = list_disV_disVDau3Mass[i]
280 list_disV_obj[i].DisVDaug3MinPt = list_disV_disVDaug3MinPt[i]
281 list_disV_obj[i].JpsiMass = list_disV_jxMass[i]
282 list_disV_obj[i].LambdaMass = Lambdamass
283 list_disV_obj[i].KsMass = Ksmass
284 list_disV_obj[i].DisVtxMass = list_disV_disVMass[i]
285 list_disV_obj[i].ApplyJpsiMassConstraint = list_disV_jxCons[i]
286 list_disV_obj[i].ApplyV0MassConstraint = True
287 list_disV_obj[i].ApplyDisVMassConstraint = True
288 list_disV_obj[i].ApplyMainVMassConstraint = False
289 list_disV_obj[i].Chi2CutV0 = 4.
290 list_disV_obj[i].Chi2CutDisV = 4.
291 list_disV_obj[i].Chi2Cut = 4.
292 list_disV_obj[i].Trackd0Cut = 3.0
293 list_disV_obj[i].MaxJXCandidates = 10
294 list_disV_obj[i].MaxV0Candidates = 20
295 list_disV_obj[i].MaxDisVCandidates = 30
296 list_disV_obj[i].MaxMainVCandidates = 30
297 list_disV_obj[i].RefitPV = False
298 list_disV_obj[i].PVContainerName = "BPHY25_mumuRefittedPrimaryVertices"
299 list_disV_obj[i].DoCascadeFitWithPV = 2
300 list_disV_obj[i].FirstDecayAtPV = False
301 list_disV_obj[i].TrkVertexFitterTool = vkalvrt
302 list_disV_obj[i].V0VertexFitterTool = v0fitter
303 list_disV_obj[i].GammaFitterTool = gammafitter
304 list_disV_obj[i].PVRefitter = pvrefitter
305 list_disV_obj[i].V0Tools = V0Tools
306 list_disV_obj[i].TrackToVertexTool = tracktovtxtool
307 list_disV_obj[i].V0TrackSelectorTool = v0trackselect
308 list_disV_obj[i].TrackSelectorTool = trackselect
309 list_disV_obj[i].Extrapolator = extrapolator
310
311
314 list_BpmV0_hypo = ["BpmLd", "BpmKs"]
315 list_BpmV0_jxInput = ["BPHY25ThreeTrack_Bpm", "BPHY25ThreeTrack_Bpm"]
316 list_BpmV0_jxDau3Mass = [Kmass, Kmass]
317 list_BpmV0_jxMassLo = [B_lo, B_lo]
318 list_BpmV0_jxMassHi = [B_hi, B_hi]
319 list_BpmV0_v0hypo = ["Lambda", "Ks"]
320
321 list_BpmV0_obj = []
322 for hypo in list_BpmV0_hypo:
323 list_BpmV0_obj.append( CompFactory.DerivationFramework.JpsiXPlusDisplaced("BPHY25_"+hypo) )
324
325 for i in range(len(list_BpmV0_obj)):
326 list_BpmV0_obj[i].JXVertices = list_BpmV0_jxInput[i]
327 list_BpmV0_obj[i].TrackParticleCollection = mainIDInput
328 list_BpmV0_obj[i].RelinkTracks = TrkToRelink
329 list_BpmV0_obj[i].V0Vertices = "V0Collection"
330 list_BpmV0_obj[i].UseImprovedMass = True
331 list_BpmV0_obj[i].LambdaMassLowerCut = Ld_lo
332 list_BpmV0_obj[i].LambdaMassUpperCut = Ld_hi
333 list_BpmV0_obj[i].KsMassLowerCut = Ks_lo
334 list_BpmV0_obj[i].KsMassUpperCut = Ks_hi
335 list_BpmV0_obj[i].JXMassLowerCut = list_BpmV0_jxMassLo[i]
336 list_BpmV0_obj[i].JXMassUpperCut = list_BpmV0_jxMassHi[i]
337 list_BpmV0_obj[i].JpsiMassLowerCut = Jpsi_lo
338 list_BpmV0_obj[i].JpsiMassUpperCut = Jpsi_hi
339 list_BpmV0_obj[i].MassLowerCut = 0.
340 list_BpmV0_obj[i].MassUpperCut = 150000.
341 list_BpmV0_obj[i].CascadeVertexCollections = ["BPHY25_"+list_BpmV0_hypo[i]+"_CascadeVtx1","BPHY25_"+list_BpmV0_hypo[i]+"_CascadeVtx2","BPHY25_"+list_BpmV0_hypo[i]+"_CascadeMainVtx"]
342 list_BpmV0_obj[i].HasJXSubVertex = True
343 list_BpmV0_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
344 list_BpmV0_obj[i].V0Hypothesis = list_BpmV0_v0hypo[i]
345 list_BpmV0_obj[i].MassCutGamma = 10.
346 list_BpmV0_obj[i].Chi2CutGamma = 3.
347 list_BpmV0_obj[i].LxyV0Cut = 3.
348 list_BpmV0_obj[i].HypothesisName = list_BpmV0_hypo[i]
349 list_BpmV0_obj[i].NumberOfJXDaughters = 3
350 list_BpmV0_obj[i].JXDaug1MassHypo = Mumass
351 list_BpmV0_obj[i].JXDaug2MassHypo = Mumass
352 list_BpmV0_obj[i].JXDaug3MassHypo = list_BpmV0_jxDau3Mass[i]
353 list_BpmV0_obj[i].JXPtOrdering = False
354 list_BpmV0_obj[i].NumberOfDisVDaughters = 2
355 list_BpmV0_obj[i].JpsiMass = Jpsimass
356 list_BpmV0_obj[i].LambdaMass = Lambdamass
357 list_BpmV0_obj[i].KsMass = Ksmass
358 list_BpmV0_obj[i].ApplyJXMassConstraint = True
359 list_BpmV0_obj[i].ApplyJpsiMassConstraint = True
360 list_BpmV0_obj[i].ApplyV0MassConstraint = True
361 list_BpmV0_obj[i].ApplyMainVMassConstraint = False
362 list_BpmV0_obj[i].Chi2CutV0 = 4.
363 list_BpmV0_obj[i].Chi2Cut = 4.
364 list_BpmV0_obj[i].Trackd0Cut = 3.0
365 list_BpmV0_obj[i].MaxJXCandidates = 20
366 list_BpmV0_obj[i].MaxV0Candidates = 20
367 list_BpmV0_obj[i].MaxMainVCandidates = 30
368 list_BpmV0_obj[i].RefitPV = False
369 list_BpmV0_obj[i].PVContainerName = "BPHY25_BpmRefittedPrimaryVertices"
370 list_BpmV0_obj[i].DoCascadeFitWithPV = 2
371 list_BpmV0_obj[i].FirstDecayAtPV = True
372 list_BpmV0_obj[i].TrkVertexFitterTool = vkalvrt
373 list_BpmV0_obj[i].V0VertexFitterTool = v0fitter
374 list_BpmV0_obj[i].GammaFitterTool = gammafitter
375 list_BpmV0_obj[i].PVRefitter = pvrefitter
376 list_BpmV0_obj[i].V0Tools = V0Tools
377 list_BpmV0_obj[i].TrackToVertexTool = tracktovtxtool
378 list_BpmV0_obj[i].V0TrackSelectorTool = v0trackselect
379 list_BpmV0_obj[i].TrackSelectorTool = trackselect
380 list_BpmV0_obj[i].Extrapolator = extrapolator
381
382
385
386 list_B0Ld_hypo = ["B0KpiLd", "B0piKLd"]
387 list_B0Ld_jxInput = ["BPHY25FourTrack_B0", "BPHY25FourTrack_B0"]
388 list_B0Ld_jxMass = [B0mass, B0mass]
389 list_B0Ld_jxDau3Mass = [Kmass, Pimass]
390 list_B0Ld_jxDau4Mass = [Pimass, Kmass]
391 list_B0Ld_jxMassLo = [B_lo, B_lo]
392 list_B0Ld_jxMassHi = [B_hi, B_hi]
393
394 list_B0Ld_obj = []
395 for hypo in list_B0Ld_hypo:
396 list_B0Ld_obj.append( CompFactory.DerivationFramework.JpsiXPlusDisplaced("BPHY25_"+hypo) )
397
398 for i in range(len(list_B0Ld_obj)):
399 list_B0Ld_obj[i].JXVertices = list_B0Ld_jxInput[i]
400 list_B0Ld_obj[i].TrackParticleCollection = mainIDInput
401 list_B0Ld_obj[i].RelinkTracks = TrkToRelink
402 list_B0Ld_obj[i].V0Vertices = "V0Collection"
403 list_B0Ld_obj[i].UseImprovedMass = True
404 list_B0Ld_obj[i].LambdaMassLowerCut = Ld_lo
405 list_B0Ld_obj[i].LambdaMassUpperCut = Ld_hi
406 list_B0Ld_obj[i].KsMassLowerCut = Ks_lo
407 list_B0Ld_obj[i].KsMassUpperCut = Ks_hi
408 list_B0Ld_obj[i].JXMassLowerCut = list_B0Ld_jxMassLo[i]
409 list_B0Ld_obj[i].JXMassUpperCut = list_B0Ld_jxMassHi[i]
410 list_B0Ld_obj[i].JpsiMassLowerCut = Jpsi_lo
411 list_B0Ld_obj[i].JpsiMassUpperCut = Jpsi_hi
412 list_B0Ld_obj[i].MassLowerCut = 0.
413 list_B0Ld_obj[i].MassUpperCut = 150000.
414 list_B0Ld_obj[i].CascadeVertexCollections = ["BPHY25_"+list_B0Ld_hypo[i]+"_CascadeVtx1","BPHY25_"+list_B0Ld_hypo[i]+"_CascadeVtx2","BPHY25_"+list_B0Ld_hypo[i]+"_CascadeMainVtx"]
415 list_B0Ld_obj[i].HasJXSubVertex = True
416 list_B0Ld_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
417 list_B0Ld_obj[i].V0Hypothesis = "Lambda"
418 list_B0Ld_obj[i].MassCutGamma = 10.
419 list_B0Ld_obj[i].Chi2CutGamma = 3.
420 list_B0Ld_obj[i].LxyV0Cut = 3.
421 list_B0Ld_obj[i].HypothesisName = list_B0Ld_hypo[i]
422 list_B0Ld_obj[i].NumberOfJXDaughters = 4
423 list_B0Ld_obj[i].JXDaug1MassHypo = Mumass
424 list_B0Ld_obj[i].JXDaug2MassHypo = Mumass
425 list_B0Ld_obj[i].JXDaug3MassHypo = list_B0Ld_jxDau3Mass[i]
426 list_B0Ld_obj[i].JXDaug4MassHypo = list_B0Ld_jxDau4Mass[i]
427 list_B0Ld_obj[i].JXPtOrdering = False
428 list_B0Ld_obj[i].NumberOfDisVDaughters = 2
429 list_B0Ld_obj[i].JXMass = list_B0Ld_jxMass[i]
430 list_B0Ld_obj[i].JpsiMass = Jpsimass
431 list_B0Ld_obj[i].LambdaMass = Lambdamass
432 list_B0Ld_obj[i].KsMass = Ksmass
433 list_B0Ld_obj[i].ApplyJXMassConstraint = True
434 list_B0Ld_obj[i].ApplyJpsiMassConstraint = True
435 list_B0Ld_obj[i].ApplyV0MassConstraint = True
436 list_B0Ld_obj[i].ApplyMainVMassConstraint = False
437 list_B0Ld_obj[i].Chi2CutV0 = 4.
438 list_B0Ld_obj[i].Chi2Cut = 4.
439 list_B0Ld_obj[i].Trackd0Cut = 3.0
440 list_B0Ld_obj[i].MaxJXCandidates = 20
441 list_B0Ld_obj[i].MaxV0Candidates = 20
442 list_B0Ld_obj[i].MaxMainVCandidates = 30
443 list_B0Ld_obj[i].RefitPV = False
444 list_B0Ld_obj[i].PVContainerName = "BPHY25_B0RefittedPrimaryVertices"
445 list_B0Ld_obj[i].DoCascadeFitWithPV = 2
446 list_B0Ld_obj[i].FirstDecayAtPV = True
447 list_B0Ld_obj[i].TrkVertexFitterTool = vkalvrt
448 list_B0Ld_obj[i].V0VertexFitterTool = v0fitter
449 list_B0Ld_obj[i].GammaFitterTool = gammafitter
450 list_B0Ld_obj[i].PVRefitter = pvrefitter
451 list_B0Ld_obj[i].V0Tools = V0Tools
452 list_B0Ld_obj[i].TrackToVertexTool = tracktovtxtool
453 list_B0Ld_obj[i].V0TrackSelectorTool = v0trackselect
454 list_B0Ld_obj[i].TrackSelectorTool = trackselect
455 list_B0Ld_obj[i].Extrapolator = extrapolator
456
457
460
461 list_B0Ks_hypo = ["B0KpiKs", "B0piKKs"]
462 list_B0Ks_jxInput = ["BPHY25FourTrack_B0", "BPHY25FourTrack_B0"]
463 list_B0Ks_jxMass = [B0mass, B0mass]
464 list_B0Ks_jxDau3Mass = [Kmass, Pimass]
465 list_B0Ks_jxDau4Mass = [Pimass, Kmass]
466 list_B0Ks_jxMassLo = [B_lo, B_lo]
467 list_B0Ks_jxMassHi = [B_hi, B_hi]
468
469 list_B0Ks_obj = []
470 for hypo in list_B0Ks_hypo:
471 list_B0Ks_obj.append( CompFactory.DerivationFramework.JpsiXPlusDisplaced("BPHY25_"+hypo) )
472
473 for i in range(len(list_B0Ks_obj)):
474 list_B0Ks_obj[i].JXVertices = list_B0Ks_jxInput[i]
475 list_B0Ks_obj[i].TrackParticleCollection = mainIDInput
476 list_B0Ks_obj[i].RelinkTracks = TrkToRelink
477 list_B0Ks_obj[i].V0Vertices = "V0Collection"
478 list_B0Ks_obj[i].UseImprovedMass = True
479 list_B0Ks_obj[i].LambdaMassLowerCut = Ld_lo
480 list_B0Ks_obj[i].LambdaMassUpperCut = Ld_hi
481 list_B0Ks_obj[i].KsMassLowerCut = Ks_lo
482 list_B0Ks_obj[i].KsMassUpperCut = Ks_hi
483 list_B0Ks_obj[i].JXMassLowerCut = list_B0Ks_jxMassLo[i]
484 list_B0Ks_obj[i].JXMassUpperCut = list_B0Ks_jxMassHi[i]
485 list_B0Ks_obj[i].JpsiMassLowerCut = Jpsi_lo
486 list_B0Ks_obj[i].JpsiMassUpperCut = Jpsi_hi
487 list_B0Ks_obj[i].MassLowerCut = 0.
488 list_B0Ks_obj[i].MassUpperCut = 150000.
489 list_B0Ks_obj[i].CascadeVertexCollections = ["BPHY25_"+list_B0Ks_hypo[i]+"_CascadeVtx1","BPHY25_"+list_B0Ks_hypo[i]+"_CascadeVtx2","BPHY25_"+list_B0Ks_hypo[i]+"_CascadeMainVtx"]
490 list_B0Ks_obj[i].HasJXSubVertex = True
491 list_B0Ks_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
492 list_B0Ks_obj[i].V0Hypothesis = "Ks"
493 list_B0Ks_obj[i].MassCutGamma = 10.
494 list_B0Ks_obj[i].Chi2CutGamma = 3.
495 list_B0Ks_obj[i].LxyV0Cut = 3.
496 list_B0Ks_obj[i].HypothesisName = list_B0Ks_hypo[i]
497 list_B0Ks_obj[i].NumberOfJXDaughters = 4
498 list_B0Ks_obj[i].JXDaug1MassHypo = Mumass
499 list_B0Ks_obj[i].JXDaug2MassHypo = Mumass
500 list_B0Ks_obj[i].JXDaug3MassHypo = list_B0Ks_jxDau3Mass[i]
501 list_B0Ks_obj[i].JXDaug4MassHypo = list_B0Ks_jxDau4Mass[i]
502 list_B0Ks_obj[i].JXPtOrdering = False
503 list_B0Ks_obj[i].NumberOfDisVDaughters = 2
504 list_B0Ks_obj[i].JXMass = list_B0Ks_jxMass[i]
505 list_B0Ks_obj[i].JpsiMass = Jpsimass
506 list_B0Ks_obj[i].LambdaMass = Lambdamass
507 list_B0Ks_obj[i].KsMass = Ksmass
508 list_B0Ks_obj[i].MainVtxMass = 5839.88 # Bs2
509 list_B0Ks_obj[i].ApplyJXMassConstraint = True
510 list_B0Ks_obj[i].ApplyJpsiMassConstraint = True
511 list_B0Ks_obj[i].ApplyV0MassConstraint = True
512 list_B0Ks_obj[i].ApplyMainVMassConstraint = False
513 list_B0Ks_obj[i].Chi2CutV0 = 5.
514 list_B0Ks_obj[i].Chi2Cut = 5.
515 list_B0Ks_obj[i].Trackd0Cut = 3.0
516 list_B0Ks_obj[i].MaxJXCandidates = 20
517 list_B0Ks_obj[i].MaxV0Candidates = 20
518 list_B0Ks_obj[i].MaxMainVCandidates = 30
519 list_B0Ks_obj[i].RefitPV = False
520 list_B0Ks_obj[i].PVContainerName = "BPHY25_B0RefittedPrimaryVertices"
521 list_B0Ks_obj[i].DoCascadeFitWithPV = 2
522 list_B0Ks_obj[i].FirstDecayAtPV = True
523 list_B0Ks_obj[i].TrkVertexFitterTool = vkalvrt
524 list_B0Ks_obj[i].V0VertexFitterTool = v0fitter
525 list_B0Ks_obj[i].GammaFitterTool = gammafitter
526 list_B0Ks_obj[i].PVRefitter = pvrefitter
527 list_B0Ks_obj[i].V0Tools = V0Tools
528 list_B0Ks_obj[i].TrackToVertexTool = tracktovtxtool
529 list_B0Ks_obj[i].V0TrackSelectorTool = v0trackselect
530 list_B0Ks_obj[i].TrackSelectorTool = trackselect
531 list_B0Ks_obj[i].Extrapolator = extrapolator
532
533
536
537 list_2V0A_hypo = ["Jpsi2V0A"]
538
539 list_2V0A_obj = []
540 for hypo in list_2V0A_hypo:
541 list_2V0A_obj.append( CompFactory.DerivationFramework.JpsiXPlus2V0("BPHY25_"+hypo) )
542
543 for i in range(len(list_2V0A_obj)):
544 list_2V0A_obj[i].JXVertices = "BPHY25OniaCandidates"
545 list_2V0A_obj[i].JXVtxHypoNames = ["Jpsi"]
546 list_2V0A_obj[i].TrackParticleCollection = mainIDInput
547 list_2V0A_obj[i].RelinkTracks = TrkToRelink
548 list_2V0A_obj[i].V0Vertices = "V0Collection"
549 list_2V0A_obj[i].UseImprovedMass = True
550 list_2V0A_obj[i].LambdaMassLowerCut = Ld_lo
551 list_2V0A_obj[i].LambdaMassUpperCut = Ld_hi
552 list_2V0A_obj[i].KsMassLowerCut = Ks_lo
553 list_2V0A_obj[i].KsMassUpperCut = Ks_hi
554 list_2V0A_obj[i].JpsiMassLowerCut = Jpsi_lo
555 list_2V0A_obj[i].JpsiMassUpperCut = Jpsi_hi
556 list_2V0A_obj[i].MassLowerCut = 0.
557 list_2V0A_obj[i].MassUpperCut = 150000.
558 list_2V0A_obj[i].CascadeVertexCollections = ["BPHY25_"+list_2V0A_hypo[i]+"_CascadeVtx1","BPHY25_"+list_2V0A_hypo[i]+"_CascadeVtx2","BPHY25_"+list_2V0A_hypo[i]+"_CascadeMainVtx"]
559 list_2V0A_obj[i].HasJXSubVertex = False
560 list_2V0A_obj[i].HasJXV02SubVertex = False
561 list_2V0A_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
562 list_2V0A_obj[i].V01Hypothesis = "Lambda/Ks"
563 list_2V0A_obj[i].V02Hypothesis = "Lambda/Ks"
564 list_2V0A_obj[i].LxyV01Cut = 2.
565 list_2V0A_obj[i].LxyV02Cut = 2.
566 list_2V0A_obj[i].MassCutGamma = 10.
567 list_2V0A_obj[i].Chi2CutGamma = 3.
568 list_2V0A_obj[i].HypothesisName = list_2V0A_hypo[i]
569 list_2V0A_obj[i].NumberOfJXDaughters = 2
570 list_2V0A_obj[i].JXDaug1MassHypo = Mumass
571 list_2V0A_obj[i].JXDaug2MassHypo = Mumass
572 list_2V0A_obj[i].JpsiMass = Jpsimass
573 list_2V0A_obj[i].LambdaMass = Lambdamass
574 list_2V0A_obj[i].KsMass = Ksmass
575 list_2V0A_obj[i].ApplyJpsiMassConstraint = True
576 list_2V0A_obj[i].ApplyV01MassConstraint = True
577 list_2V0A_obj[i].ApplyV02MassConstraint = True
578 list_2V0A_obj[i].ApplyMainVMassConstraint = False
579 list_2V0A_obj[i].Chi2CutV0 = 4.
580 list_2V0A_obj[i].Chi2Cut = 4.
581 list_2V0A_obj[i].Trackd0Cut = 3.0
582 list_2V0A_obj[i].MaxJXCandidates = 10
583 list_2V0A_obj[i].MaxV0Candidates = 20
584 list_2V0A_obj[i].MaxMainVCandidates = 30
585 list_2V0A_obj[i].RefitPV = False
586 list_2V0A_obj[i].PVContainerName = "BPHY25_mumuRefittedPrimaryVertices"
587 list_2V0A_obj[i].DoCascadeFitWithPV = 2
588 list_2V0A_obj[i].FirstDecayAtPV = False
589 list_2V0A_obj[i].TrkVertexFitterTool = vkalvrt
590 list_2V0A_obj[i].V0VertexFitterTool = v0fitter
591 list_2V0A_obj[i].GammaFitterTool = gammafitter
592 list_2V0A_obj[i].PVRefitter = pvrefitter
593 list_2V0A_obj[i].V0Tools = V0Tools
594 list_2V0A_obj[i].TrackToVertexTool = tracktovtxtool
595 list_2V0A_obj[i].V0TrackSelectorTool = v0trackselect
596 list_2V0A_obj[i].Extrapolator = extrapolator
597
598 list_2V0B_hypo = ["Jpsi2V0B1", "Jpsi2V0B2"]
599 list_2V0B_v02hypo = ["Lambda", "Ks"]
600 list_2V0B_jxv02mass = [Lambdab0mass, B0mass]
601 list_2V0B_jxv02massLo = [Ldb0_lo, B_lo]
602 list_2V0B_jxv02massHi = [Ldb0_hi, B_hi]
603
604 list_2V0B_obj = []
605 for hypo in list_2V0B_hypo:
606 list_2V0B_obj.append( CompFactory.DerivationFramework.JpsiXPlus2V0("BPHY25_"+hypo) )
607
608 for i in range(len(list_2V0B_obj)):
609 list_2V0B_obj[i].JXVertices = "BPHY25OniaCandidates"
610 list_2V0B_obj[i].JXVtxHypoNames = ["Jpsi"]
611 list_2V0B_obj[i].TrackParticleCollection = mainIDInput
612 list_2V0B_obj[i].RelinkTracks = TrkToRelink
613 list_2V0B_obj[i].V0Vertices = "V0Collection"
614 list_2V0B_obj[i].UseImprovedMass = True
615 list_2V0B_obj[i].LambdaMassLowerCut = Ld_lo
616 list_2V0B_obj[i].LambdaMassUpperCut = Ld_hi
617 list_2V0B_obj[i].KsMassLowerCut = Ks_lo
618 list_2V0B_obj[i].KsMassUpperCut = Ks_hi
619 list_2V0B_obj[i].JpsiMassLowerCut = Jpsi_lo
620 list_2V0B_obj[i].JpsiMassUpperCut = Jpsi_hi
621 list_2V0B_obj[i].JXV02MassLowerCut = list_2V0B_jxv02massLo[i]
622 list_2V0B_obj[i].JXV02MassUpperCut = list_2V0B_jxv02massHi[i]
623 list_2V0B_obj[i].MassLowerCut = 0.
624 list_2V0B_obj[i].MassUpperCut = 150000.
625 list_2V0B_obj[i].CascadeVertexCollections = ["BPHY25_"+list_2V0B_hypo[i]+"_CascadeVtx1","BPHY25_"+list_2V0B_hypo[i]+"_CascadeVtx2","BPHY25_"+list_2V0B_hypo[i]+"_CascadeVtx3","BPHY25_"+list_2V0B_hypo[i]+"_CascadeMainVtx"]
626 list_2V0B_obj[i].HasJXSubVertex = True
627 list_2V0B_obj[i].HasJXV02SubVertex = True
628 list_2V0B_obj[i].VxPrimaryCandidateName = "PrimaryVertices"
629 list_2V0B_obj[i].V01Hypothesis = "Lambda/Ks"
630 list_2V0B_obj[i].V02Hypothesis = list_2V0B_v02hypo[i]
631 list_2V0B_obj[i].LxyV01Cut = 2.
632 list_2V0B_obj[i].LxyV02Cut = 2.
633 list_2V0B_obj[i].MassCutGamma = 10.
634 list_2V0B_obj[i].Chi2CutGamma = 3.
635 list_2V0B_obj[i].HypothesisName = list_2V0B_hypo[i]
636 list_2V0B_obj[i].NumberOfJXDaughters = 2
637 list_2V0B_obj[i].JXDaug1MassHypo = Mumass
638 list_2V0B_obj[i].JXDaug2MassHypo = Mumass
639 list_2V0B_obj[i].JpsiMass = Jpsimass
640 list_2V0B_obj[i].LambdaMass = Lambdamass
641 list_2V0B_obj[i].KsMass = Ksmass
642 list_2V0B_obj[i].JXV02VtxMass = list_2V0B_jxv02mass[i]
643 list_2V0B_obj[i].ApplyJpsiMassConstraint = True
644 list_2V0B_obj[i].ApplyV01MassConstraint = True
645 list_2V0B_obj[i].ApplyV02MassConstraint = True
646 list_2V0B_obj[i].ApplyJXV02MassConstraint = True
647 list_2V0B_obj[i].ApplyMainVMassConstraint = False
648 list_2V0B_obj[i].Chi2CutV0 = 4.
649 list_2V0B_obj[i].Chi2Cut = 4.
650 list_2V0B_obj[i].Trackd0Cut = 3.0
651 list_2V0B_obj[i].MaxJXCandidates = 10
652 list_2V0B_obj[i].MaxV0Candidates = 20
653 list_2V0B_obj[i].MaxMainVCandidates = 30
654 list_2V0B_obj[i].RefitPV = False
655 list_2V0B_obj[i].PVContainerName = "BPHY25_mumuRefittedPrimaryVertices"
656 list_2V0B_obj[i].DoCascadeFitWithPV = 2
657 list_2V0B_obj[i].FirstDecayAtPV = True
658 list_2V0B_obj[i].TrkVertexFitterTool = vkalvrt
659 list_2V0B_obj[i].V0VertexFitterTool = v0fitter
660 list_2V0B_obj[i].GammaFitterTool = gammafitter
661 list_2V0B_obj[i].PVRefitter = pvrefitter
662 list_2V0B_obj[i].V0Tools = V0Tools
663 list_2V0B_obj[i].TrackToVertexTool = tracktovtxtool
664 list_2V0B_obj[i].V0TrackSelectorTool = v0trackselect
665 list_2V0B_obj[i].Extrapolator = extrapolator
666
667 Collections = [ ]
668 RefPVContainers = [ ]
669 RefPVAuxContainers = [ ]
670 passedCandidates = [ ]
671
672 list_obj = list_disV_obj + list_BpmV0_obj + list_B0Ld_obj + list_B0Ks_obj + list_2V0A_obj + list_2V0B_obj
673
674 for obj in list_obj:
675 Collections += obj.CascadeVertexCollections
676 passedCandidates += ["BPHY25_" + obj.HypothesisName + "_CascadeMainVtx"]
677
678 RefPVContainers += [
679 "xAOD::VertexContainer#BPHY25_mumuRefittedPrimaryVertices",
680 "xAOD::VertexContainer#BPHY25_BpmRefittedPrimaryVertices",
681 "xAOD::VertexContainer#BPHY25_B0RefittedPrimaryVertices"
682 ]
683 RefPVAuxContainers += [
684 "xAOD::VertexAuxContainer#BPHY25_mumuRefittedPrimaryVerticesAux.",
685 "xAOD::VertexAuxContainer#BPHY25_BpmRefittedPrimaryVerticesAux.",
686 "xAOD::VertexAuxContainer#BPHY25_B0RefittedPrimaryVerticesAux."
687 ]
688
689 BPHY25_SelectEvent = CompFactory.DerivationFramework.AnyVertexSkimmingTool(name = "BPHY25_SelectEvent", VertexContainerNames = passedCandidates)
690 acc.addPublicTool(BPHY25_SelectEvent)
691
692 augmentation_tools = [BPHY25_AugOriginalCounts, BPHY25_Reco_mumu,
693 BPHY25FourTrackReco_B0, BPHY25ThreeTrackReco_Bpm,
694 BPHY25Select_Jpsi, BPHY25Select_mumu] + list_obj
695 for t in augmentation_tools : acc.addPublicTool(t)
696
697 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(
698 "BPHY25Kernel",
699 AugmentationTools = augmentation_tools,
700 SkimmingTools = [BPHY25_SelectEvent]
701 ))
702
703 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
704 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
705 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
706 BPHY25SlimmingHelper = SlimmingHelper("BPHY25SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
707 from DerivationFrameworkBPhys.commonBPHYMethodsCfg import getDefaultAllVariables
708 BPHY25_AllVariables = getDefaultAllVariables()
709 BPHY25_StaticContent = []
710
711 # Needed for trigger objects
712 BPHY25SlimmingHelper.IncludeMuonTriggerContent = True
713 BPHY25SlimmingHelper.IncludeBPhysTriggerContent = True
714
715
716 BPHY25_AllVariables += ["PrimaryVertices"]
717 BPHY25_StaticContent += RefPVContainers
718 BPHY25_StaticContent += RefPVAuxContainers
719
720
721 BPHY25_AllVariables += ["InDetTrackParticles", "InDetLargeD0TrackParticles"]
722
723
726 BPHY25_AllVariables += ["CombinedMuonTrackParticles", "ExtrapolatedMuonTrackParticles"]
727
728
729 BPHY25_AllVariables += ["Muons", "MuonSegments"]
730
731
732 for collection in Collections:
733 BPHY25_StaticContent += ["xAOD::VertexContainer#%s" % collection]
734 BPHY25_StaticContent += ["xAOD::VertexAuxContainer#%sAux.-vxTrackAtVertex" % collection]
735
736 # Truth information for MC only
737 if isSimulation:
738 BPHY25_AllVariables += ["TruthEvents","TruthParticles","TruthVertices","MuonTruthParticles"]
739
740 BPHY25SlimmingHelper.SmartCollections = ["Muons", "PrimaryVertices", "InDetTrackParticles", "InDetLargeD0TrackParticles"]
741 BPHY25SlimmingHelper.AllVariables = BPHY25_AllVariables
742 BPHY25SlimmingHelper.StaticContent = BPHY25_StaticContent
743
744 BPHY25ItemList = BPHY25SlimmingHelper.GetItemList()
745 acc.merge(OutputStreamCfg(flags, "DAOD_BPHY25", ItemList=BPHY25ItemList, AcceptAlgs=["BPHY25Kernel"]))
746 acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_BPHY25", AcceptAlgs=["BPHY25Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData]))
747 acc.printConfig(withDetails=True, summariseProps=True, onlyComponents = [], printDefaults=True)
748 return acc
BPHY25Cfg(flags)
Definition BPHY25.py:14