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("refitSeeds", seedOrder(flags, pixel=[False], strip=[False]))
109 kwargs.setdefault("doTwoWay", flags.Acts.doTwoWayCKF)
110 kwargs.setdefault("autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
111
112 kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
113
114
115
116
117
118 if flags.Detector.GeometryITk:
119 kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
120
121 kwargs.setdefault("chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
122 kwargs.setdefault("chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
123
124 kwargs.setdefault("branchStopperPtMinFactor", 0.9)
125 kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
126 if not flags.Tracking.ActiveConfig.isLargeD0:
127 kwargs.setdefault("seedRefitPtMinFactor", 0.9)
128
129
130
131 kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
132 kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
133
134 kwargs.setdefault("numMeasurementsCutOff", [1])
135
136
137
138 kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)])
139
140 kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
141 kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
142
143 kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
144 kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
145 kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
146 kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
147 kwargs.setdefault("minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
148 kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
149 kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
150 kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
151 kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
152
153
154
155
156
157 if flags.Acts.SeedingStrategy not in (SeedingStrategy.GbtsFtf, SeedingStrategy.Gbts):
158 kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
159 kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
160
161
162 if 'TrackParamsEstimationTool' not in kwargs:
163 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
164
165 tpe_tool_kwargs = {}
166 if flags.Tracking.ActiveConfig.isLargeD0:
167 tpe_tool_kwargs["allowPropagatorFailure"] = True
168 tpe_tool_kwargs["stripCalibrationIterations"] = flags.Acts.stripCalibrationIterations
169
170 kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs)))
171
172
173 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
174 kwargs.setdefault(
175 "TrackStatePrinter",
176 acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
177 )
178
179 if 'FitterTool' not in kwargs:
180 from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
181
182
183
184
185
186 if any(kwargs["refitSeeds"]):
187 seedRefitOutlierChi2Cut = flags.Acts.SeedRefitOutlierChi2Cut
188 else:
189 seedRefitOutlierChi2Cut = float('inf')
190 kwargs.setdefault(
191 'FitterTool',
192 acc.popToolsAndMerge(ActsFitterCfg(flags,
193 ReverseFilteringPt=0,
194 OutlierChi2Cut=seedRefitOutlierChi2Cut))
195 )
196
197 if 'PixelCalibrator' not in kwargs:
198 from AthenaConfiguration.Enums import BeamType
199
200 if flags.Beam.Type is not BeamType.Cosmics:
201 from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
202 from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
203
204 if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
205 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
206 PixelCalibrationStrategy.NNClustering):
207
208 kwargs.setdefault(
209 'PixelCalibrator',
210 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
211 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
212 )
213
214 if 'StripCalibrator' not in kwargs:
215 from AthenaConfiguration.Enums import BeamType
216 if flags.Beam.Type is not BeamType.Cosmics:
217 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
218 from ActsConfig.ActsConfigFlags import StripCalibrationStrategy
219
220 if flags.Acts.StripCalibrationStrategy in (StripCalibrationStrategy.DigitalCalibration,
221 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
222
223 kwargs.setdefault(
224 'StripCalibrator',
225 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
226 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
227 )
228
229
230 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
231 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
232 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
233 ActsTrackFindingMonitoringToolCfg(flags)))
234
235 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
236 return acc
237
238
239