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
111 kwargs.setdefault("doSecondPassBranchStopper", flags.Tracking.ActiveConfig.isLargeD0)
112
113 kwargs.setdefault("recordMaterialStates", False)
114
115 kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
116
117
118
119
120
121 if flags.Detector.GeometryITk:
122 kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
123
124 kwargs.setdefault("chi2CutOffSigma", flags.Tracking.ActiveConfig.Xi2maxSigma)
125 kwargs.setdefault("chi2OutlierCutOffSigma", flags.Tracking.ActiveConfig.Xi2maxNoAddSigma)
126
127 kwargs.setdefault("branchStopperPtMinFactor", 0.9)
128 kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
129 if flags.Tracking.ActiveConfig.isLargeD0:
130
131 kwargs.setdefault("seedPtMinFactor", 0.9)
132
133 doBremRecovery = kwargs.setdefault(
134 "doBremRecovery",
135 flags.Acts.doBremRecovery
136 and flags.Tracking.ActiveConfig.doBremRecoverySi
137 and flags.Tracking.doCaloSeededBrem)
138 if doBremRecovery:
139 from InDetConfig.InDetCaloClusterROISelectorConfig import (
140 ITkCaloClusterROIPhiRZContainerMakerCfg,
141 )
142 acc.merge(ITkCaloClusterROIPhiRZContainerMakerCfg(flags))
143 kwargs.setdefault("phiWidthROI", flags.Acts.phiWidthROI)
144 kwargs.setdefault("etaWidthROI", flags.Acts.etaWidthROI)
145 kwargs.setdefault("bremMaxComponents", flags.Acts.GsfMaxComponents)
146 kwargs.setdefault("bremWeightCutoff", flags.Acts.GsfWeightCutoff)
147 kwargs.setdefault("bremMergeMethod", flags.Acts.GsfComponentMergeMethod)
148
149
150 kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
151 kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
152
153 kwargs.setdefault("numMeasurementsCutOff", [1])
154
155
156
157 kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)])
158
159 kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
160 kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
161
162 kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
163 kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
164 kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
165 kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
166 kwargs.setdefault("minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
167 kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
168 kwargs.setdefault("maxOutliers", tolist(flags.Tracking.ActiveConfig.maxOutliers))
169 if flags.Tracking.ActiveConfig.maxHolesAndOutliers:
170 kwargs.setdefault("maxHolesAndOutliers", tolist(flags.Tracking.ActiveConfig.maxHolesAndOutliers))
171 kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
172 kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
173 kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
174
175
176
177
178
179 if flags.Tracking.ActiveConfig.PixelSeedingStrategy is not SeedingStrategy.Gbts:
180 kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
181 kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
182
183 if 'TrackParamsEstimationTool' not in kwargs:
184 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
185
186
187 tpe_tool_kwargs = {}
188 if flags.Tracking.ActiveConfig.isLargeD0:
189 tpe_tool_kwargs["allowPropagatorFailure"] = True
190 tpe_tool_kwargs["stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
191 tpe = acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs))
192
193 kwargs.setdefault('TrackParamsEstimationTool', seedOrder(flags, pixel=[tpe], strip=[tpe]))
194
195 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
196 kwargs.setdefault(
197 "TrackStatePrinter",
198 acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
199 )
200
201 if 'PixelCalibrator' not in kwargs:
202 from AthenaConfiguration.Enums import BeamType
203
204 if flags.Beam.Type is not BeamType.Cosmics and flags.Acts.PixelCalibrationStrategy.usesCalibration():
205 from ActsConfig.ActsMeasurementCalibrationConfig import ActsPixelCalibrationToolCfg
206
207 kwargs.setdefault(
208 'PixelCalibrator',
209 acc.popToolsAndMerge(ActsPixelCalibrationToolCfg(flags))
210 )
211
212 if 'StripCalibrator' not in kwargs:
213 from AthenaConfiguration.Enums import BeamType
214
215 if flags.Beam.Type is not BeamType.Cosmics and flags.Acts.StripCalibrationStrategy.usesCalibration():
216 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
217
218 kwargs.setdefault(
219 'StripCalibrator',
220 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags))
221 )
222
223
224 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
225 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
226 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
227 ActsTrackFindingMonitoringToolCfg(flags)))
228
229 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
230 return acc
231
232
233