24def createPriVertexingFlags():
25 from AthenaConfiguration.AthConfigFlags import AthConfigFlags
26 flags = AthConfigFlags()
27
28 flags.addFlag("maxAbsEta", 9999.0)
29 flags.addFlag("minNTrtHits", 0)
30 flags.addFlag("maxNPixelHoles", 1)
31 flags.addFlag("maxZ0", 1000.0 * Units.mm)
32 flags.addFlag("maxZ0SinTheta", 1000.0 * Units.mm)
33 flags.addFlag("minNInnermostLayerHits", 0)
34
35 flags.addFlag("doMaxTracksCut", lambda pcf:
36 not(pcf.Tracking.PriVertex.useBeamConstraint or
37 pcf.Tracking.PrimaryPassConfig is (
38 PrimaryPassConfig.HeavyIon)))
39 flags.addFlag("maxTracks", 3000)
40 flags.addFlag("maxVertices", lambda pcf:
41 1 if pcf.Tracking.PrimaryPassConfig in [
42 PrimaryPassConfig.HeavyIon, PrimaryPassConfig.VtxLumiHeavyIon]
43 else 200)
44
45
46
47 def vertexSetup(pcf):
48 if pcf.Reco.EnableHI:
49 return VertexSetup.FastIVF
50 elif pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.VtxLumiHeavyIon:
51 return VertexSetup.FastIVF
52 elif (pcf.Tracking.doMinBias or
53 pcf.Tracking.doLowMu or
54 pcf.Tracking.PrimaryPassConfig in [
55 PrimaryPassConfig.VtxLumi,
56 PrimaryPassConfig.VtxBeamSpot,
57 PrimaryPassConfig.HighPileup]):
58 return VertexSetup.IVF
59 else:
60 return VertexSetup.ActsGaussAMVF
61
62 flags.addFlag("setup", vertexSetup, type=VertexSetup)
63
64
65 flags.addFlag("sortingSetup", VertexSortingSetup.SumPt2Sorting, type=VertexSortingSetup)
66 flags.addFlag("useBeamConstraint", lambda pcf:
67 not(pcf.Tracking.PrimaryPassConfig in [
68 PrimaryPassConfig.VtxLumi,
69 PrimaryPassConfig.VtxBeamSpot]))
70
71 def maxD0(pcf):
72 if pcf.Detector.GeometryITk:
73 return 1.0 * Units.mm
74 else:
75 if not pcf.Tracking.PriVertex.useBeamConstraint:
76 return 10.0 * Units.mm
77 elif pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.VtxLumiHeavyIon:
78 return 10.0 * Units.mm
79 else:
80 return 4.0 * Units.mm
81
82 flags.addFlag("maxD0", maxD0)
83
84 def minPt(pcf):
85 if pcf.Detector.GeometryITk:
86 return 900.0 * Units.MeV
87 else:
88 if pcf.Tracking.doMinBias or pcf.Tracking.doLowPt:
89 return 100.0 * Units.MeV
90 elif pcf.Reco.EnableHI or pcf.Tracking.doLowMu \
91 or pcf.Tracking.PrimaryPassConfig is PrimaryPassConfig.VtxLumiHeavyIon:
92 return 400.0 * Units.MeV
93 else:
94 return 500.0 * Units.MeV
95
96 flags.addFlag("minPt", minPt)
97
98 def maxSigmaD0(pcf):
99 if pcf.Detector.GeometryITk:
100 return 0.35 * Units.mm
101 else:
102 if pcf.Tracking.doLowPt:
103 return 0.9 * Units.mm
104 else:
105 return 5.0 * Units.mm
106
107 flags.addFlag("maxSigmaD0", maxSigmaD0)
108
109 idflags = { "maxSigmaZ0SinTheta" : 10.0 * Units.mm,
110 "minNPixelHits" : 1,
111 "minNSctHits" : 4,
112 "minNSiHits" : 6,
113 "maxZinterval" : 3}
114
115 itkflags = {"maxSigmaZ0SinTheta" : 2.5 * Units.mm,
116 "minNPixelHits" : 3,
117 "minNSctHits" : 0,
118 "minNSiHits" : 7,
119 "maxZinterval" : 0.5}
120
121 for k in idflags:
122
123
124 flags.addFlag(k, lambda pcf, a=idflags[k], b=itkflags[k]:
125 a if pcf.Detector.GeometryID else b)
126
127 flags.addFlag("gridMainGridSize", 20)
128 flags.addFlag("gridTrkGridSize", 10)
129 flags.addFlag("gridUseHighestSumZPosition", False)
130 flags.addFlag("gridMaxD0Significance", 3.5)
131 flags.addFlag("gridMaxZ0Significance", 12.0)
132
133 return flags
134
135