54 **kwargs) -> ComponentAccumulator:
55 def tolist(c):
56 return c if isinstance(c, list) else [c]
57
58 acc = ComponentAccumulator()
59
60 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
61 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometrySvcCfg
62 acc.merge(ActsGeometryContextAlgCfg(flags))
63 acc.merge(ActsTrackingGeometrySvcCfg(flags))
64
65 from ActsConfig.ActsGeometryConfig import ActsVolumeIdToDetectorCollectionMappingAlgCfg
66
67 if not flags.Acts.useHGTDClusterInTrackFinding:
68
69
70
71 kwargs.setdefault('EndOfTheWorldVolumeIds', [2, 25])
72
73 acc.merge( ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
74 kwargs.setdefault("ActsVolumeIdToDetectorElementCollectionMapKey", "VolumeIdToDetectorElementCollectionMap")
75
76 if flags.Detector.EnableITkPixel:
77 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
78 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
79 if flags.Detector.EnableITkStrip:
80 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
81 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
82 kwargs.setdefault("DetElStatus", seedOrder(flags, pixel=["ITkPixelDetectorElementStatus"], strip=["ITkStripDetectorElementStatus"]))
83
84
85
86
87 kwargs.setdefault("SeedLabels", seedOrder(flags, pixel=["PPP"], strip=["SSS"]))
88 kwargs.setdefault("SeedContainerKeys", seedOrder(flags, pixel=["ActsPixelSeeds"], strip=["ActsStripSeeds"]))
89 if flags.Acts.Tracks.doAnalysis:
90 kwargs.setdefault("SeedDestiny", [f'{seedkey}Destiny' for seedkey in kwargs["SeedContainerKeys"]])
91
92 kwargs.setdefault("UncalibratedMeasurementContainerKeys", isdet(flags, pixel=["ITkPixelClusters_Cached" if flags.Acts.useCache else "ITkPixelClusters"], strip=["ITkStripClusters_Cached" if flags.Acts.useCache else "ITkStripClusters"], hgtd=["HGTD_Clusters"]))
93
94 kwargs.setdefault('ACTSTracksLocation', 'ActsTracks')
95
96 kwargs.setdefault("maxPropagationStep", 10000)
97 kwargs.setdefault("skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
98 kwargs.setdefault("seedMeasOffset", 1)
99
100
101 kwargs.setdefault("ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
102
103 if (not flags.Acts.doAmbiguityResolution) :
104 kwargs.setdefault("MaximumSharedHits", 3)
105 kwargs.setdefault("MaximumIterations", 10000)
106 kwargs.setdefault("NMeasurementsMin", 7)
107
108 kwargs.setdefault("doTwoWay", flags.Acts.doTwoWayCKF)
109
110 kwargs.setdefault("recordMaterialStates", False)
111 kwargs.setdefault("autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
112
113 kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
114
115
116
117
118
119 if flags.Detector.GeometryITk:
120 kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
121
122 kwargs.setdefault("chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
123 kwargs.setdefault("chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
124
125 kwargs.setdefault("branchStopperPtMinFactor", 0.9)
126 kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
127 if not flags.Tracking.ActiveConfig.isLargeD0:
128 kwargs.setdefault("seedRefitPtMinFactor", 0.9)
129
130
131
132 kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
133 kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
134
135 kwargs.setdefault("numMeasurementsCutOff", [1])
136
137
138
139 kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)])
140
141 kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
142 kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
143
144 kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
145 kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
146 kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
147 kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
148 kwargs.setdefault("minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
149 kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
150 kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
151 kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
152 kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
153
154
155
156
157
158 if flags.Tracking.ActiveConfig.SeedingStrategy not in [
159 SeedingStrategy.GbtsFtf, SeedingStrategy.Gbts]:
160 kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
161 kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
162
163 if 'TrackParamsEstimationTool' not in kwargs:
164 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
165
166
167 tpe_tool_kwargs = {}
168 if flags.Tracking.ActiveConfig.isLargeD0:
169 tpe_tool_kwargs["allowPropagatorFailure"] = True
170 tpe_tool_kwargs["stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
171 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs))
172
173 kwargs.setdefault('TrackParamsEstimationTool', seedOrder(flags, pixel=[tpe], strip=[tpe]))
174
175 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
176 kwargs.setdefault(
177 "TrackStatePrinter",
178 acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
179 )
180
181 if 'PixelCalibrator' not in kwargs:
182 from AthenaConfiguration.Enums import BeamType
183
184 if flags.Beam.Type is not BeamType.Cosmics and flags.Acts.PixelCalibrationStrategy.usesCalibration():
185 from ActsConfig.ActsMeasurementCalibrationConfig import ActsPixelCalibrationToolCfg
186
187 kwargs.setdefault(
188 'PixelCalibrator',
189 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
190 )
191
192 if 'StripCalibrator' not in kwargs:
193 from AthenaConfiguration.Enums import BeamType
194
195 if flags.Beam.Type is not BeamType.Cosmics and flags.Acts.StripCalibrationStrategy.usesCalibration():
196 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
197
198 kwargs.setdefault(
199 'StripCalibrator',
200 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
201 )
202
203
204 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
205 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
206 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
207 ActsTrackFindingMonitoringToolCfg(flags)))
208
209 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
210 return acc
211
212
213