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 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg, ActsGeometryRealmConvTool
158 kwargs.setdefault("TrackingGeometryTool", acc.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
159 kwargs.setdefault("GeometryRealmConvTool", acc.getPrimaryAndMerge(ActsGeometryRealmConvTool(flags)))
160
161 if 'TrackParamsEstimationTool' not in kwargs:
162 from ActsConfig.ActsTrackParamsEstimationConfig import ActsTrackParamsEstimationToolCfg
163 kwargs.setdefault('TrackParamsEstimationTool', acc.popToolsAndMerge(ActsTrackParamsEstimationToolCfg(flags)))
164
165 if 'ExtrapolationTool' not in kwargs:
166 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
167 kwargs.setdefault(
168 "ExtrapolationTool",
169 acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)),
170 )
171
172 if flags.Acts.doPrintTrackStates and 'TrackStatePrinter' not in kwargs:
173 kwargs.setdefault(
174 "TrackStatePrinter",
175 acc.popToolsAndMerge(ActsInDetTrackStatePrinterToolCfg(flags)),
176 )
177
178 if 'FitterTool' not in kwargs:
179 from ActsConfig.ActsTrackFittingConfig import ActsFitterCfg
180 kwargs.setdefault(
181 'FitterTool',
182 acc.popToolsAndMerge(ActsFitterCfg(flags,
183 ReverseFilteringPt=0,
184 OutlierChi2Cut=float('inf')))
185 )
186
187
188 if 'PixelCalibrator' not in kwargs:
189 from AthenaConfiguration.Enums import BeamType
190
191 if flags.Beam.Type is not BeamType.Cosmics:
192 from ActsConfig.ActsConfigFlags import PixelCalibrationStrategy
193 from ActsConfig.ActsMeasurementCalibrationConfig import ActsAnalogueClusteringToolCfg
194
195 if flags.Acts.PixelCalibrationStrategy in (PixelCalibrationStrategy.AnalogueClustering,
196 PixelCalibrationStrategy.AnalogueClusteringAfterSelection,
197 PixelCalibrationStrategy.NNClustering):
198
199 kwargs.setdefault(
200 'PixelCalibrator',
201 acc.popToolsAndMerge(ActsAnalogueClusteringToolCfg(flags,
202 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
203 )
204
205 if 'StripCalibrator' not in kwargs:
206 from AthenaConfiguration.Enums import BeamType
207 if flags.Beam.Type is not BeamType.Cosmics:
208 from ActsConfig.ActsMeasurementCalibrationConfig import ActsStripCalibrationToolCfg
209 from ActsConfig.ActsConfigFlags import StripCalibrationStrategy
210
211 if flags.Acts.StripCalibrationStrategy in (StripCalibrationStrategy.DigitalCalibration,
212 StripCalibrationStrategy.DigitalCalibrationAfterSelection) :
213
214 kwargs.setdefault(
215 'StripCalibrator',
216 acc.popToolsAndMerge(ActsStripCalibrationToolCfg(flags,
217 CalibrateAfterMeasurementSelection = flags.Acts.StripCalibrationStrategy is StripCalibrationStrategy.DigitalCalibrationAfterSelection))
218 )
219
220 if flags.Acts.doMonitoring and 'MonTool' not in kwargs:
221 from ActsConfig.ActsMonitoringConfig import ActsTrackFindingMonitoringToolCfg
222 kwargs.setdefault('MonTool', acc.popToolsAndMerge(
223 ActsTrackFindingMonitoringToolCfg(flags)))
224
225 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
226 return acc
227
228
229