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)
126 if flags.Detector.GeometryITk:
127 kwargs.setdefault(
"etaBins", flags.Tracking.ActiveConfig.etaBins)
129 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
131 kwargs.setdefault(
"chi2CutOff", [50])
132 kwargs.setdefault(
"chi2OutlierCutOff", [100])
134 kwargs.setdefault(
"chi2CutOff", [25])
135 kwargs.setdefault(
"chi2OutlierCutOff", [25])
136 kwargs.setdefault(
"branchStopperPtMinFactor", 0.9)
137 kwargs.setdefault(
"branchStopperAbsEtaMaxExtra", 0.1)
141 kwargs.setdefault(
"branchStopperMeasCutReduce", flags.Acts.branchStopperMeasCutReduce)
142 kwargs.setdefault(
"branchStopperAbsEtaMeasCut", flags.Acts.branchStopperAbsEtaMeasCut)
144 kwargs.setdefault(
"numMeasurementsCutOff", [1])
148 kwargs.setdefault(
"StatisticEtaBins", [eta/10.
for eta
in range(5, 40, 5)])
150 kwargs.setdefault(
"absEtaMax", flags.Tracking.ActiveConfig.maxEta)
151 kwargs.setdefault(
"ptMin", [p / Units.GeV * UnitConstants.GeV
for p
in tolist(flags.Tracking.ActiveConfig.minPT)])
153 kwargs.setdefault(
"z0Min", [-flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
154 kwargs.setdefault(
"z0Max", [ flags.Tracking.ActiveConfig.maxZImpactSeed / Units.mm * UnitConstants.mm
for etabin
in flags.Tracking.ActiveConfig.etaBins[:-1]])
155 kwargs.setdefault(
"d0Min", [-d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
156 kwargs.setdefault(
"d0Max", [ d0 / Units.mm * UnitConstants.mm
for d0
in tolist(flags.Tracking.ActiveConfig.maxPrimaryImpact)])
157 kwargs.setdefault(
"minMeasurements", tolist(flags.Tracking.ActiveConfig.minClusters))
158 kwargs.setdefault(
"maxHoles", tolist(flags.Tracking.ActiveConfig.maxHoles))
159 kwargs.setdefault(
"minPixelHits", tolist(flags.Tracking.ActiveConfig.minPixel))
160 kwargs.setdefault(
"maxPixelHoles", tolist(flags.Tracking.ActiveConfig.maxPixelHoles))
161 kwargs.setdefault(
"maxStripHoles", tolist(flags.Tracking.ActiveConfig.maxSctHoles))
167 if flags.Acts.SeedingStrategy
is not SeedingStrategy.Gbts2:
168 kwargs.setdefault(
"ptMinMeasurements",
seedOrder(flags, pixel=[3], strip=[6]))
169 kwargs.setdefault(
"absEtaMaxMeasurements",
seedOrder(flags, pixel=[3], strip=[999999]))
171 if 'TrackingGeometryTool' not in kwargs:
172 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
174 "TrackingGeometryTool",
178 if 'ATLASConverterTool' not in kwargs:
179 from ActsConfig.ActsEventCnvConfig
import ActsToTrkConverterToolCfg
182 if 'TrackParamsEstimationTool' not in kwargs:
183 from ActsConfig.ActsTrackParamsEstimationConfig
import ActsTrackParamsEstimationToolCfg
186 if 'ExtrapolationTool' not in kwargs:
187 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
193 if flags.Acts.doPrintTrackStates
and 'TrackStatePrinter' not in kwargs:
199 if 'FitterTool' not in kwargs:
200 from ActsConfig.ActsTrackFittingConfig
import ActsFitterCfg
204 ReverseFilteringPt=0,
205 OutlierChi2Cut=
float(
'inf')))
208 if 'PixelCalibrator' not in kwargs:
209 from AthenaConfiguration.Enums
import BeamType
210 from ActsConfig.ActsConfigFlags
import PixelCalibrationStrategy
211 from ActsConfig.ActsMeasurementCalibrationConfig
import ActsAnalogueClusteringToolCfg
213 if not (flags.Tracking.doPixelDigitalClustering
or flags.Beam.Type
is BeamType.Cosmics):
214 if flags.Acts.PixelCalibrationStrategy
in (PixelCalibrationStrategy.AnalogueClustering,
215 PixelCalibrationStrategy.AnalogueClusteringAfterSelection) :
219 CalibrateAfterMeasurementSelection = flags.Acts.PixelCalibrationStrategy
is PixelCalibrationStrategy.AnalogueClusteringAfterSelection))
222 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
223 from ActsConfig.ActsMonitoringConfig
import ActsTrackFindingMonitoringToolCfg
224 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
227 acc.addEventAlgo(CompFactory.ActsTrk.TrackFindingAlg(name, **kwargs))
233 **kwargs) -> ComponentAccumulator:
237 dataPrepPrefix = f
'{flags.Tracking.ActiveConfig.extension.replace("Acts", "")}'
238 if not flags.Tracking.ActiveConfig.isSecondaryPass:
240 pixelClusters = f
'ITk{dataPrepPrefix}PixelClusters'
241 stripClusters = f
'ITk{dataPrepPrefix}StripClusters'
242 hgtdClusters = f
'{dataPrepPrefix}HGTD_Clusters'
244 if flags.Acts.useCache:
245 pixelClusters +=
'_Cached'
246 stripClusters +=
'_Cached'
250 pixelSeedLabels = [
'PPP']
251 stripSeedLabels = [
'SSS']
253 from InDetConfig.ITkActsHelpers
import isFastPrimaryPass
254 if flags.Tracking.ActiveConfig.extension
in [
'ActsConversion',
'ActsLargeRadius']:
255 pixelSeedLabels =
None
258 stripSeedLabels =
None
261 pixelSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}PixelSeeds']
262 stripSeedKeys = [f
'{flags.Tracking.ActiveConfig.extension}StripSeeds']
263 pixelDetElements = [
'ITkPixelDetectorElementCollection']
264 stripDetElements = [
'ITkStripDetectorElementCollection']
265 if pixelSeedLabels
is None:
267 pixelDetElements =
None
268 if stripSeedLabels
is None:
270 stripDetElements =
None
272 kwargs.setdefault(
'ACTSTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
273 kwargs.setdefault(
'UncalibratedMeasurementContainerKeys',
isdet(flags, pixel=[pixelClusters], strip=[stripClusters], hgtd=[hgtdClusters]))
274 kwargs.setdefault(
'SeedLabels',
seedOrder(flags, pixel=pixelSeedLabels, strip=stripSeedLabels))
275 kwargs.setdefault(
'SeedContainerKeys',
seedOrder(flags, pixel=pixelSeedKeys, strip=stripSeedKeys))
276 kwargs.setdefault(
'DetectorElementsKeys',
seedOrder(flags, pixel=pixelDetElements, strip=stripDetElements))
279 name=f
"{flags.Tracking.ActiveConfig.extension}TrackFindingAlg",
283 if flags.Acts.Tracks.doAnalysis:
284 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
286 name=f
"{flags.Tracking.ActiveConfig.extension}TrackAnalysisAlg",
287 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}Tracks"))
290 if len(kwargs[
"SeedContainerKeys"]) != len(kwargs[
"DetectorElementsKeys"]):
291 raise AttributeError(
"SeedContainerKeys and DetectorElementsKeys must have same size")
293 for i
in range(0, len(kwargs[
"SeedContainerKeys"])):
294 seedKey = kwargs[
"SeedContainerKeys"][i]
295 detElKey = kwargs[
"DetectorElementsKeys"][i]
298 from ActsConfig.ActsAnalysisConfig
import ActsBaseSeedsToTrackParamsAlgCfg
300 name = f
'{seedKey}SeedsToTrackParamsAlg',
301 InputSeedContainerKey = seedKey,
302 DetectorElementsKey = detElKey,
303 OutputTrackParamsCollectionKey = f
'{seedKey}Params'))
305 from ActsConfig.ActsAnalysisConfig
import ActsSeedToTrackAnalysisAlgCfg
307 name = f
'{seedKey}ToTrackAnalysisAlg',
308 InputSeedCollection = seedKey,
309 InputTrackParamsCollection = f
'{seedKey}Params',
310 InputDestinyCollection = f
'{seedKey}Destiny'))
313 if flags.Acts.EDM.PersistifyTracks:
314 trackColl = kwargs[
'ACTSTracksLocation']
315 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
317 name = f
'{trackColl}ToXAODConverterAlg',
318 InputActsTracksLocation = trackColl,
319 OutputActsTracksLocation = trackColl))
322 prefix = f
"{flags.Tracking.ActiveConfig.extension}"
323 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
324 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
325 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
326 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
327 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
328 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
329 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
330 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
331 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
332 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
333 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
334 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
335 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
336 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
337 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
344 name: str =
"ActsScoreBasedAmbiguityResolutionAlg",
345 **kwargs) -> ComponentAccumulator:
348 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
349 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
350 kwargs.setdefault(
'MinScore',1.0)
351 kwargs.setdefault(
'MinScoreSharedTracks', 1.0)
352 kwargs.setdefault(
'MaxSharedTracksPerMeasurement', 20)
353 kwargs.setdefault(
'MaxShared', 5)
354 kwargs.setdefault(
'MinUnshared', 5)
355 kwargs.setdefault(
'UseAmbiguityScoring',
True)
356 kwargs.setdefault(
'jsonFileName',
'ActsAmbiguityConfig.json')
358 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
359 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
360 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
364 CompFactory.ActsTrk.ScoreBasedAmbiguityResolutionAlg(name, **kwargs))
369 name: str =
"ActsAmbiguityResolutionAlg",
370 **kwargs) -> ComponentAccumulator:
373 kwargs.setdefault(
'TracksLocation',
'ActsTracks')
374 kwargs.setdefault(
'ResolvedTracksLocation',
'ActsResolvedTracks')
375 kwargs.setdefault(
'MaximumSharedHits', 3)
376 kwargs.setdefault(
'MaximumIterations', 10000)
377 kwargs.setdefault(
'NMeasurementsMin', 7)
379 if flags.Acts.doMonitoring
and 'MonTool' not in kwargs:
380 from ActsConfig.ActsMonitoringConfig
import ActsAmbiguityResolutionMonitoringToolCfg
381 kwargs.setdefault(
'MonTool', acc.popToolsAndMerge(
385 CompFactory.ActsTrk.AmbiguityResolutionAlg(name, **kwargs))
390 **kwargs) -> ComponentAccumulator:
392 kwargs.setdefault(
'TracksLocation', f
"{flags.Tracking.ActiveConfig.extension}Tracks")
393 kwargs.setdefault(
'ResolvedTracksLocation', f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks")
394 from ActsConfig.ActsConfigFlags
import AmbiguitySolverStrategy
396 if flags.Acts.AmbiguitySolverStrategy
is AmbiguitySolverStrategy.ScoreBased:
398 name=f
"{flags.Tracking.ActiveConfig.extension}ScoreBasedAmbiguityResolutionAlg",
402 name=f
"{flags.Tracking.ActiveConfig.extension}AmbiguityResolutionAlg",
405 if flags.Acts.Tracks.doAnalysis:
406 from ActsConfig.ActsAnalysisConfig
import ActsTrackAnalysisAlgCfg
408 name=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTrackAnalysisAlg",
409 TracksLocation=f
"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"))
412 if flags.Acts.EDM.PersistifyTracks:
413 trackColl = kwargs[
'ResolvedTracksLocation']
414 from ActsConfig.ActsTrackFindingConfig
import ActsToXAODTrackConverterAlgCfg
416 name = f
'{trackColl}ToXAODConverterAlg',
417 InputActsTracksLocation = trackColl,
418 OutputActsTracksLocation = trackColl))
421 prefix = f
"{flags.Tracking.ActiveConfig.extension}Resolved"
422 toAOD += [f
"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
423 f
"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
424 f
"xAOD::TrackStateContainer#{prefix}TrackStates",
425 f
"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
426 f
"xAOD::TrackParametersContainer#{prefix}TrackParameters",
427 f
"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
428 f
"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
429 f
"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
430 f
"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
431 f
"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
432 f
"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
433 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
434 f
"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
435 f
"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
436 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
442 name: str =
"ActsTrackToTrackParticleCnvAlg",
443 **kwargs) -> ComponentAccumulator:
447 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
450 if 'ExtrapolationTool' not in kwargs:
451 from ActsConfig.ActsGeometryConfig
import ActsExtrapolationToolCfg
454 kwargs.setdefault(
'BeamSpotKey',
'BeamSpotData')
455 kwargs.setdefault(
'FirstAndLastParameterOnly',
True)
456 kwargs.setdefault(
'ComputeExpectedLayerPattern',
True)
460 if flags.Detector.EnableITkPixel:
461 det_elements += [
'ITkPixelDetectorElementCollection']
463 if flags.Detector.EnableITkStrip:
464 det_elements += [
'ITkStripDetectorElementCollection']
467 kwargs.setdefault(
'SiDetectorElementCollections',det_elements)
468 kwargs.setdefault(
'SiDetEleCollToMeasurementType',element_types)
469 kwargs.setdefault(
"PerigeeExpression", flags.Tracking.perigeeExpression)
470 kwargs.setdefault(
'VertexContainerKey',
'PrimaryVertices')
472 CompFactory.ActsTrk.TrackToTrackParticleCnvAlg(name, **kwargs))
477 name: str =
"ActsToXAODTrackConverterAlg",
478 **kwargs) -> ComponentAccumulator:
481 kwargs.setdefault(
'InputActsTracksLocation',
'')
482 kwargs.setdefault(
'OutputActsTracksLocation',
'')
484 if 'TrackingGeometryTool' not in kwargs:
485 from ActsConfig.ActsGeometryConfig
import ActsTrackingGeometryToolCfg
488 acc.addEventAlgo(CompFactory.ActsTrk.ActsToXAODTrackConverterAlg(name, **kwargs))