57 **kwargs) -> ComponentAccumulator:
58 def tolist(c):
59 return c if isinstance(c, list) else [c]
60
61 acc = ComponentAccumulator()
62
63 from ActsConfig.ActsGeometryConfig import ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg
64
65 acc.merge( ActsInDetVolumeIdToDetectorCollectionMappingAlgCfg(flags) )
66 kwargs.setdefault("ActsVolumeIdToDetectorElementCollectionMapKey", "VolumeIdToDetectorElementCollectionMap")
67
68 if flags.Detector.EnablePixel:
69 from PixelConditionsAlgorithms.PixelConditionsConfig import PixelDetectorElementStatusAlgCfg
70 acc.merge(PixelDetectorElementStatusAlgCfg(flags))
71 if flags.Detector.EnableSCT:
72 from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConfig import SCT_DetectorElementStatusAlgCfg
73 acc.merge(SCT_DetectorElementStatusAlgCfg(flags))
74 kwargs.setdefault("DetElStatus", seedOrder(flags, pixel=["PixelDetectorElementStatus"], strip=["SCTDetectorElementStatus"]))
75
76
77
78
79 kwargs.setdefault("SeedLabels", seedOrder(flags, pixel=["PPP"], strip=["SSS"]))
80 kwargs.setdefault("SeedContainerKeys", seedOrder(flags, pixel=["ActsPixelSeeds"], strip=["ActsSCT_Seeds"]))
81 kwargs.setdefault('DetectorElementsKeys', seedOrder(flags, pixel=['PixelDetectorElementCollection'], strip=['SCT_DetectorElementCollection']))
82 if flags.Acts.Tracks.doAnalysis:
83 kwargs.setdefault("SeedDestiny", [f'{seedkey}Destiny' for seedkey in kwargs["SeedContainerKeys"]])
84
85 kwargs.setdefault("UncalibratedMeasurementContainerKeys", isdet(flags, pixel=["PixelClusters"], strip=["SCT_Clusters"]))
86
87 kwargs.setdefault('ACTSTracksLocation', 'ActsTracks')
88
89 kwargs.setdefault("maxPropagationStep", 10000)
90 kwargs.setdefault("skipDuplicateSeeds", True)
91 kwargs.setdefault("seedMeasOffset", 1)
92
93
94 kwargs.setdefault("ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
95
96 if (not flags.Acts.doAmbiguityResolution) :
97 kwargs.setdefault("MaximumSharedHits", 3)
98 kwargs.setdefault("MaximumIterations", 10000)
99 kwargs.setdefault("NMeasurementsMin", 7)
100
101 kwargs.setdefault("refitSeeds", seedOrder(flags, pixel=[False], strip=[False]))
102 kwargs.setdefault("doTwoWay", flags.Acts.doTwoWayCKF)
103 kwargs.setdefault("autoReverseSearch", flags.Acts.autoReverseSearchCKF)
104
105
106
107
108 kwargs.setdefault("forceTrackOnSeed", flags.Acts.forceTrackOnSeed and not flags.Tracking.ActiveConfig.isSecondaryPass)
109
110
111
112
113
114 kwargs.setdefault("etaBins", flags.Tracking.ActiveConfig.etaBins)
115
116 kwargs.setdefault("chi2CutOff", tolist(flags.Tracking.ActiveConfig.Xi2max*1))
117 kwargs.setdefault("chi2OutlierCutOff", tolist(flags.Tracking.ActiveConfig.Xi2maxNoAdd*1))
118 kwargs.setdefault("checkCounts", True)
119 kwargs.setdefault("doBranchStopper", True)
120
121 kwargs.setdefault("branchStopperPtMinFactor", 0.9)
122 kwargs.setdefault("branchStopperAbsEtaMaxExtra", 0.1)
123
124
125
126 kwargs.setdefault("branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
127 kwargs.setdefault("branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
128
129 kwargs.setdefault("numMeasurementsCutOff", [1])
130
131
132
133 kwargs.setdefault("StatisticEtaBins", [eta/10. for eta in range(5, 40, 5)])
134
135 kwargs.setdefault("absEtaMax", flags.Tracking.ActiveConfig.maxEta)
136 kwargs.setdefault("ptMin", [p / Units.GeV * UnitConstants.GeV for p in tolist(flags.Tracking.ActiveConfig.minPT)])
137
138 kwargs.setdefault("z0Min", [-flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
139 kwargs.setdefault("z0Max", [ flags.Tracking.ActiveConfig.maxZImpact / Units.mm * UnitConstants.mm for etabin in flags.Tracking.ActiveConfig.etaBins[:-1]])
140 kwargs.setdefault("d0Min", [-d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
141 kwargs.setdefault("d0Max", [ d0 / Units.mm * UnitConstants.mm for d0 in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpactList)])
142 kwargs.setdefault("minMeasurements", tolist([ 8, 8, 8]))
143 kwargs.setdefault("maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
144 kwargs.setdefault("minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
145 kwargs.setdefault("maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
146 kwargs.setdefault("maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
147
148
149
150
151
152 if flags.Acts.SeedingStrategy is not SeedingStrategy.Gbts2:
153 kwargs.setdefault("ptMinMeasurements", seedOrder(flags, pixel=[3], strip=[6]))
154 kwargs.setdefault("absEtaMaxMeasurements", seedOrder(flags, pixel=[3], strip=[999999]))
155
156 if 'TrackingGeometryTool' not in kwargs:
157 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
158 kwargs.setdefault(
159 "TrackingGeometryTool",
160 acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)),
161 )
162
163 if 'ATLASConverterTool' not in kwargs:
164 from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
165 kwargs.setdefault('ATLASConverterTool', acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags)))
166
167 if 'TrackParamsEstimationTool' not in kwargs:
168 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
169 kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
170
171 if 'ExtrapolationTool' not in kwargs:
172 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
173 kwargs.setdefault(
174 "ExtrapolationTool",
175 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
176 )
177
178 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
179 kwargs.setdefault(
180 "TrackStatePrinter",
181 acc.popToolsAndMerge(ActsInDetTrackStatePrinterToolCfg(flags)),
182 )
183
184 if 'FitterTool' not in kwargs:
185 from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
186 kwargs.setdefault(
187 'FitterTool',
188 acc.popToolsAndMerge(ActsFitterCfg(flags,
189 ReverseFilteringPt=0,
190 OutlierChi2Cut=float('inf')))
191 )
192
193
194 if 'PixelCalibrator' not in kwargs:
195 from AthenaConfiguration.Enums import BeamType
196
197 if not (flags.Beam.Type is BeamType.Cosmics):
198 from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
199 from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
200
201 if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
202 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
203
204 kwargs.setdefault(
205 'PixelCalibrator',
206 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
207 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
208 )
209
210 if 'StripCalibrator' not in kwargs:
211 from AthenaConfiguration.Enums import BeamType
212 if not (flags.Beam.Type is BeamType.Cosmics):
213 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
214 from ActsConfig.ActsConfigFlags import StripCalibrationStrategy
215
216 if flags.Acts.StripCalibrationStrategy in (StripCalibrationStrategy.DigitalCalibration,
217 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
218
219 kwargs.setdefault(
220 'StripCalibrator',
221 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
222 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
223 )
224
225 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
226 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
227 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
228 ActsTrackFindingMonitoringToolCfg(flags)))
229
230 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
231 return acc
232
233
234