4 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from ActsConfig.ActsConfigFlags
import SeedingStrategy
8 from ActsInterop
import UnitConstants
18 noStrip: bool =
False) -> list:
20 if flags.Detector.EnableITkPixel
and pixel
is not None:
22 if flags.Detector.EnableITkStrip
and strip
is not None and not noStrip:
24 if flags.Acts.useHGTDClusterInTrackFinding
and hgtd
is not None:
31 strip: list =
None) -> list:
32 keys =
isdet(flags, pixel=pixel, strip=strip)
33 if flags.Acts.useStripSeedsFirst:
38 name: str =
"ActsTrackStatePrinterTool",
39 **kwargs) -> ComponentAccumulator:
42 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
44 pixel=[
'ITkPixelSpacePoints_Cached']
if flags.Acts.useCache
else [
'ITkPixelSpacePoints'],
45 strip=[
'ITkStripSpacePoints_Cached',
'ITkStripOverlapSpacePoints_Cached']
if flags.Acts.useCache
else [
'ITkStripSpacePoints',
'ITkStripOverlapSpacePoints']))
47 if 'TrackingGeometryTool' not in kwargs:
48 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
50 "TrackingGeometryTool",
54 acc.setPrivateTools(CompFactory.ActsTrk.TrackStatePrinterTool(name, **kwargs))
60 name: str =
"ActsTrackFindingAlg",
61 **kwargs) -> ComponentAccumulator:
63 return c
if isinstance(c, list)
else [c]
67 from ActsConfig.ActsGeometryConfig
import ActsVolumeIdToDetectorCollectionMappingAlgCfg
69 if not flags.Acts.useHGTDClusterInTrackFinding:
73 kwargs.setdefault(
'EndOfTheWorldVolumeIds', [2, 25])
76 kwargs.setdefault(
"ActsVolumeIdToDetectorElementCollectionMapKey",
"VolumeIdToDetectorElementCollectionMap")
77 def filterCollections(flags, pixel_col, strip_col) :
79 if flags.Detector.GeometryITkPixel:
81 if flags.Detector.GeometryITkStrip:
85 if flags.Detector.EnableITkPixel:
86 from PixelConditionsAlgorithms.ITkPixelConditionsConfig
import ITkPixelDetectorElementStatusAlgCfg
88 if flags.Detector.EnableITkStrip:
89 from SCT_ConditionsAlgorithms.ITkStripConditionsAlgorithmsConfig
import ITkStripDetectorElementStatusAlgCfg
91 kwargs.setdefault(
"DetElStatus",filterCollections(flags,
'ITkStripDetectorElementStatus',
'ITkPixelDetectorElementStatus'))
96 kwargs.setdefault(
"SeedLabels",
seedOrder(flags, pixel=[
"PPP"], strip=[
"SSS"]))
97 kwargs.setdefault(
"SeedContainerKeys",
seedOrder(flags, pixel=[
"ActsPixelSeeds"], strip=[
"ActsStripSeeds"]))
98 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=[
'ITkPixelDetectorElementCollection'], strip=[
'ITkStripDetectorElementCollection']))
99 if flags.Acts.Tracks.doAnalysis:
100 kwargs.setdefault(
"SeedDestiny", [f
'{seedkey}Destiny' for seedkey
in kwargs[
"SeedContainerKeys"]])
102 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"]))
104 kwargs.setdefault(
'ACTSTracksLocation',
'ActsTracks')
106 kwargs.setdefault(
"maxPropagationStep", 10000)
107 kwargs.setdefault(
"skipDuplicateSeeds", flags.Acts.skipDuplicateSeeds)
108 kwargs.setdefault(
"seedMeasOffset", 1)
111 kwargs.setdefault(
"ambiStrategy", flags.Acts.AmbiguitySolverMode.value)
113 if (
not flags.Acts.doAmbiguityResolution) :
114 kwargs.setdefault(
"MaximumSharedHits", 3)
115 kwargs.setdefault(
"MaximumIterations", 10000)
116 kwargs.setdefault(
"NMeasurementsMin", 7)
118 kwargs.setdefault(
"refitSeeds",
seedOrder(flags, pixel=[
False], strip=[
False]))
119 kwargs.setdefault(
"doTwoWay", flags.Acts.doTwoWayCKF)
120 kwargs.setdefault(
"autoReverseSearch", flags.Acts.autoReverseSearchCKF)
122 kwargs.setdefault(
"forceTrackOnSeed", flags.Acts.forceTrackOnSeed
and not flags.Tracking.ActiveConfig.isSecondaryPass)
128 if flags.Detector.GeometryITk:
129 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
131 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
133 kwargs.setdefault(
"chi2CutOff", [50])
134 kwargs.setdefault(
"chi2OutlierCutOff", [100])
136 kwargs.setdefault(
"chi2CutOff", [25])
137 kwargs.setdefault(
"chi2OutlierCutOff", [25])
138 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
139 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
143 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
144 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
146 kwargs.setdefault(
"numMeasurementsCutOff", [1])
150 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
152 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
153 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
155 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
156 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
157 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
158 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
159 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
160 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
161 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
162 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
163 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
169 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts2:
170 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
171 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
173 if 'TrackingGeometryTool' not in kwargs:
174 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
176 "TrackingGeometryTool",
180 if 'ATLASConverterTool' not in kwargs:
181 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
184 if 'TrackParamsEstimationTool' not in kwargs:
185 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
188 if 'ExtrapolationTool' not in kwargs:
189 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
195 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
201 if 'FitterTool' not in kwargs:
202 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
206 ReverseFilteringPt=0,
207 OutlierChi2Cut=
float(
'inf')))
210 if 'PixelCalibrator' not in kwargs:
211 from AthenaConfiguration.Enums
import BeamType
212 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
213 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
215 if not (flags.Tracking.doPixelDigitalClustering
or flags.Beam.Type
is BeamType.Cosmics):
216 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
217 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
221 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
224 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
225 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
226 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
229 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
235 **kwargs) -> ComponentAccumulator:
239 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
240 if not flags.Tracking.ActiveConfig.isSecondaryPass:
242 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
243 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
244 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
246 if flags.Acts.useCache:
247 pixelClusters +=
'_Cached'
248 stripClusters +=
'_Cached'
252 pixelSeedLabels = [
'PPP']
253 stripSeedLabels = [
'SSS']
255 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
256 if flags.Tracking.ActiveConfig.extension
in [
'ActsConversion',
'ActsLargeRadius',
'ActsValidateLargeRadiusStandalone']:
257 pixelSeedLabels =
None
260 stripSeedLabels =
None
263 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
264 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
265 pixelDetElements = [
'ITkPixelDetectorElementCollection']
266 stripDetElements = [
'ITkStripDetectorElementCollection']
267 if pixelSeedLabels
is None:
269 pixelDetElements =
None
270 if stripSeedLabels
is None:
272 stripDetElements =
None
274 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
275 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
276 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
277 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
278 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
281 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
285 if flags.Acts.Tracks.doAnalysis:
286 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
288 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
289 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
292 if len(kwargs[
"SeedContainerKeys"]) != len(kwargs[
"DetectorElementsKeys"]):
293 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
295 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
296 seedKey = kwargs[
"SeedContainerKeys"][i]
297 detElKey = kwargs[
"DetectorElementsKeys"][i]
300 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
302 name = f
'{seedKey}SeedsToTrackParamsAlg',
303 InputSeedContainerKey = seedKey,
304 DetectorElementsKey = detElKey,
305 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
307 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
309 name = f
'{seedKey}ToTrackAnalysisAlg',
310 InputSeedCollection = seedKey,
311 InputTrackParamsCollection = f
'{seedKey}Params',
312 InputDestinyCollection = f
'{seedKey}Destiny'))
315 if flags.Acts.EDM.PersistifyTracks:
316 trackColl = kwargs[
'ACTSTracksLocation']
317 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
319 name = f
'{trackColl}ToXAODConverterAlg',
320 InputActsTracksLocation = trackColl,
321 OutputActsTracksLocation = trackColl))
324 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
325 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
326 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
327 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
328 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
329 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
330 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
331 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
332 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
333 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
334 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
335 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
336 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
337 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
338 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
339 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
346 name: str =
"ActsScoreBasedAmbiguityResolutionAlg",
347 **kwargs) -> ComponentAccumulator:
350 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
351 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
352 kwargs.setdefault(
'MinScore',1.0)
353 kwargs.setdefault(
'MinScoreSharedTracks', 1.0)
354 kwargs.setdefault(
'MaxSharedTracksPerMeasurement', 20)
355 kwargs.setdefault(
'MaxShared', 5)
356 kwargs.setdefault(
'MinUnshared', 5)
357 kwargs.setdefault(
'UseAmbiguityScoring',
True)
358 kwargs.setdefault(
'jsonFileName',
'ActsAmbiguityConfig.json')
360 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
361 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
362 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
366 CompFactory.ActsTrk.ScoreBasedAmbiguityResolutionAlg(name, **kwargs))
371 name: str =
"ActsAmbiguityResolutionAlg",
372 **kwargs) -> ComponentAccumulator:
375 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
376 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
377 kwargs.setdefault(
'MaximumSharedHits', 3)
378 kwargs.setdefault(
'MaximumIterations', 10000)
379 kwargs.setdefault(
'NMeasurementsMin', 7)
381 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
382 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
383 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
387 CompFactory.ActsTrk.AmbiguityResolutionAlg(name, **kwargs))
392 **kwargs) -> ComponentAccumulator:
394 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
395 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
396 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
398 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
400 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
404 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
407 if flags.Acts.Tracks.doAnalysis:
408 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
410 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
411 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
414 if flags.Acts.EDM.PersistifyTracks:
415 trackColl = kwargs[
'ResolvedTracksLocation']
416 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
418 name = f
'{trackColl}ToXAODConverterAlg',
419 InputActsTracksLocation = trackColl,
420 OutputActsTracksLocation = trackColl))
423 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
424 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
425 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
426 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
427 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
428 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
429 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
430 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
431 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
432 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
433 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
434 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
435 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
436 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
437 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
438 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
444 name: str =
"ActsTrackToTrackParticleCnvAlg",
445 **kwargs) -> ComponentAccumulator:
449 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
452 if 'ExtrapolationTool' not in kwargs:
453 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
456 kwargs.setdefault(
'BeamSpotKey',
'BeamSpotData')
457 kwargs.setdefault(
'FirstAndLastParameterOnly',
True)
458 kwargs.setdefault(
'ComputeExpectedLayerPattern',
True)
462 if flags.Detector.EnableITkPixel:
463 det_elements += [
'ITkPixelDetectorElementCollection']
465 if flags.Detector.EnableITkStrip:
466 det_elements += [
'ITkStripDetectorElementCollection']
469 kwargs.setdefault(
'SiDetectorElementCollections',det_elements)
470 kwargs.setdefault(
'SiDetEleCollToMeasurementType',element_types)
471 kwargs.setdefault(
"PerigeeExpression", flags.Tracking.perigeeExpression)
472 kwargs.setdefault(
'VertexContainerKey',
'PrimaryVertices')
474 CompFactory.ActsTrk.TrackToTrackParticleCnvAlg(name, **kwargs))
479 name: str =
"ActsToXAODTrackConverterAlg",
480 **kwargs) -> ComponentAccumulator:
483 kwargs.setdefault(
'InputActsTracksLocation',
'')
484 kwargs.setdefault(
'OutputActsTracksLocation',
'')
486 if 'TrackingGeometryTool' not in kwargs:
487 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
490 acc.addEventAlgo(CompFactory.ActsTrk.ActsToXAODTrackConverterAlg(name, **kwargs))