61 **kwargs) -> ComponentAccumulator:
62 def tolist(c):
63 return c if isinstance(c, list) else [c]
64
65 acc = ComponentAccumulator()
66
67 from ActsConfig.ActsGeometryConfig import ActsVolumeIdToDetectorCollectionMappingAlgCfg
68
69 if not flags.Acts.useHGTDClusterInTrackFinding:
70
71
72
73 kwargs.setdefault('EndOfTheWorldVolumeIds', [2, 25])
74
75 acc.merge( ActsVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
76 kwargs.setdefault("ActsVolumeIdToDetectorElementCollectionMapKey", "VolumeIdToDetectorElementCollectionMap")
77
78 if flags.Detector.EnableITkPixel:
79 from PixelConditionsAlgorithms.ITkPixelConditionsConfig import ITkPixelDetectorElementStatusAlgCfg
80 acc.merge(ITkPixelDetectorElementStatusAlgCfg(flags))
81 if flags.Detector.EnableITkStrip:
82 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig import ITkStripDetectorElementStatusAlgCfg
83 acc.merge(ITkStripDetectorElementStatusAlgCfg(flags))
84 kwargs.setdefault("DetElStatus", seedOrder(flags, pixel=["ITkPixelDetectorElementStatus"], strip=["ITkStripDetectorElementStatus"]))
85
86
87
88
89 kwargs.setdefault("SeedLabels", seedOrder(flags, pixel=["PPP"], strip=["SSS"]))
90 kwargs.setdefault("SeedContainerKeys", seedOrder(flags, pixel=["ActsPixelSeeds"], strip=["ActsStripSeeds"]))
91 if flags.Acts.Tracks.doAnalysis:
92 kwargs.setdefault("SeedDestiny", [f'{seedkey}Destiny' for seedkey in kwargs["SeedContainerKeys"]])
93
94 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"]))
95
96 kwargs.setdefault('ACTSTracksLocation', 'ActsTracks')
97
98 kwargs.setdefault("maxPropagationStep", 10000)
99 kwargs.setdefault("skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
100 kwargs.setdefault("seedMeasOffset", 1)
101
102
103 kwargs.setdefault("ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
104
105 if (not flags.Acts.doAmbiguityResolution) :
106 kwargs.setdefault("MaximumSharedHits", 3)
107 kwargs.setdefault("MaximumIterations", 10000)
108 kwargs.setdefault("NMeasurementsMin", 7)
109
110 kwargs.setdefault("refitSeeds", seedOrder(flags, pixel=[False], strip=[False]))
111 kwargs.setdefault("doTwoWay", flags.Acts.doTwoWayCKF)
112 kwargs.setdefault("autoReverseSearch", flags.Tracking.ActiveConfig.autoReverseSearch)
113
114 kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
115
116
117
118
119
120 if flags.Detector.GeometryITk:
121 kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
122
123 kwargs.setdefault("chi2CutOff", flags.Tracking.ActiveConfig.Xi2max)
124 kwargs.setdefault("chi2OutlierCutOff", flags.Tracking.ActiveConfig.Xi2maxNoAdd)
125
126 kwargs.setdefault("branchStopperPtMinFactor", 0.9)
127 kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
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 if 'TrackingGeometryTool' not in kwargs:
162 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
163 kwargs.setdefault(
164 "TrackingGeometryTool",
165 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
166 )
167
168 if 'TrackParamsEstimationTool' not in kwargs:
169 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
170
171 tpe_tool_kwargs = {}
172 if flags.Tracking.ActiveConfig.isLargeD0:
173 tpe_tool_kwargs["allowPropagatorFailure"] = True
174
175 kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags, **tpe_tool_kwargs)))
176
177 if 'ExtrapolationTool' not in kwargs:
178 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
179 kwargs.setdefault(
180 "ExtrapolationTool",
181 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
182 )
183
184 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
185 kwargs.setdefault(
186 "TrackStatePrinter",
187 acc.popToolsAndMerge(ActsTrackStatePrinterToolCfg(flags)),
188 )
189
190 if 'FitterTool' not in kwargs:
191 from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
192 kwargs.setdefault(
193 'FitterTool',
194 acc.popToolsAndMerge(ActsFitterCfg(flags,
195 ReverseFilteringPt=0,
196 OutlierChi2Cut=float('inf')))
197 )
198
199 if 'PixelCalibrator' not in kwargs:
200 from AthenaConfiguration.Enums import BeamType
201
202 if flags.Beam.Type is not BeamType.Cosmics:
203 from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
204 from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
205
206 if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
207 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
208 PixelCalibrationStrategy.NNClustering):
209
210 kwargs.setdefault(
211 'PixelCalibrator',
212 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
213 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
214 )
215
216 if 'StripCalibrator' not in kwargs:
217 from AthenaConfiguration.Enums import BeamType
218 if flags.Beam.Type is not BeamType.Cosmics:
219 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
220 from ActsConfig.ActsConfigFlags import StripCalibrationStrategy
221
222 if flags.Acts.StripCalibrationStrategy in (StripCalibrationStrategy.DigitalCalibration,
223 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
224
225 kwargs.setdefault(
226 'StripCalibrator',
227 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
228 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
229 )
230
231
232 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
233 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
234 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
235 ActsTrackFindingMonitoringToolCfg(flags)))
236
237 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
238 return acc
239
240
241