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