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