ATLAS Offline Software
Loading...
Searching...
No Matches
MuonPatternRecognitionConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6
7def MuonPhiHoughTransformAlgCfg(flags, name = "MuonPhiHoughTransformAlg", **kwargs):
8 result = ComponentAccumulator()
9 kwargs.setdefault("downWeightPrdMultiplicity", True)
10 theAlg = CompFactory.MuonR4.PhiHoughTransformAlg(name, **kwargs)
11 result.addEventAlgo(theAlg, primary=True)
12 return result
13
14
15def MuonNSWSegmentFinderAlgCfg(flags, name = "MuonNswSegmentFinderAlg", **kwargs):
16 result = ComponentAccumulator()
17 from MuonSpacePointCalibrator.CalibrationConfig import MuonSpacePointCalibratorCfg
18 kwargs.setdefault("Calibrator", result.popToolsAndMerge(MuonSpacePointCalibratorCfg(flags)))
19 theAlg = CompFactory.MuonR4.NswSegmentFinderAlg(name, **kwargs)
20 result.addEventAlgo(theAlg, primary=True)
21 return result
22
23
24def MuonEtaHoughTransformAlgCfg(flags, name = "MuonEtaHoughTransformAlg", **kwargs):
25 result = ComponentAccumulator()
26 kwargs.setdefault("downWeightPrdMultiplicity", True)
27 theAlg = CompFactory.MuonR4.EtaHoughTransformAlg(name, **kwargs)
28 result.addEventAlgo(theAlg, primary=True)
29 return result
30
31def MuonSegmentFittingAlgCfg(flags, name = "MuonSegmentFittingAlg", **kwargs):
32 result = ComponentAccumulator()
33 from MuonSpacePointCalibrator.CalibrationConfig import MuonSpacePointCalibratorCfg
34 kwargs.setdefault("Calibrator", result.popToolsAndMerge(MuonSpacePointCalibratorCfg(flags)))
35 kwargs.setdefault("ResoSeedHitAssoc", 5. )
36 kwargs.setdefault("RecoveryPull", 3.)
37 # Configure T0 fitting, disabled by default
38 kwargs.setdefault("fitSegmentT0", False)
39 if kwargs.get("fitSegmentT0"):
40 kwargs.setdefault("useHessianResidual", True)
41 kwargs.setdefault("recalibInFit", True)
42 kwargs.setdefault("maxIterations", 400)
43 # temporarily disable beamspot constraint when fitting T0, as it causes FPEs
44 kwargs.setdefault("doBeamspotConstraint", False)
45 # Configure pre-fitting, disabled by default
46 kwargs.setdefault("useFastPreFitter", False)
47 if kwargs.get("useFastPreFitter"):
48 kwargs.setdefault("useFastFitter", True)
49 # Configure main (full) fitting
50 kwargs.setdefault("useFastFitter", False)
51 kwargs.setdefault("recalibInFit", False)
52 kwargs.setdefault("doBeamspotConstraint", True)
53 theAlg = CompFactory.MuonR4.SegmentFittingAlg(name, **kwargs)
54 result.addEventAlgo(theAlg, primary=True)
55 return result
56
57def ActsMuonSegmentRefitAlgCfg(flags,name="ActsMuonSegmentRefitAlg", **kwargs):
58 result = ComponentAccumulator()
59 from MuonTrackFindingAlgs.TrackFindingConfig import SegmentSelectorCfg
60 kwargs.setdefault("SegmentSelectionTool", result.popToolsAndMerge(SegmentSelectorCfg(flags)))
61 from MuonSpacePointCalibrator.CalibrationConfig import MuonSpacePointCalibratorCfg
62 kwargs.setdefault("Calibrator", result.popToolsAndMerge(MuonSpacePointCalibratorCfg(flags)))
63 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
64 kwargs.setdefault("ExtrapolationTool", result.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)))
65 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
66 kwargs.setdefault("TrackingGeometryTool", result.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
67 kwargs.setdefault("SegmentContainer", "MuonSegmentsFromR4")
68 theAlg = CompFactory.MuonR4.SegmentActsRefitAlg(name, **kwargs)
69 result.addEventAlgo(theAlg, primary = True)
70 return result
71
72
73def MuonPatternRecognitionCfg(flags, suffix = ""):
74 result = ComponentAccumulator()
75 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
76 result.merge(ActsGeometryContextAlgCfg(flags))
77
78 if flags.Muon.enableMLBucketFilter:
79 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
80 bucketTool = result.popToolsAndMerge(GraphBucketFilterToolCfg(flags))
81 result.merge(GraphInferenceAlgCfg(flags,
82 name = f"GraphInferenceAlg{suffix}",
83 InferenceTools=[bucketTool]))
84
85 segmentContainers = []
86 if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
87 segmentContainers+=["MuonNswSegments"]
88 result.merge(MuonEtaHoughTransformAlgCfg(flags, name=f"MuonNswEtaHoughTransformAlg{suffix}",
89 EtaHoughMaxContainer = "MuonHoughNswMaxima",
90 SpacePointContainer = "NswSpacePoints"))
91 result.merge(MuonNSWSegmentFinderAlgCfg(flags, name=f"MuonNswSegmentFinderAlg{suffix}",
92 MuonNswSegmentWriteKey = segmentContainers[-1],
93 MuonNswSegmentSeedWriteKey = "MuonNswSegmentSeeds",
94 CombinatorialReadKey = "MuonHoughNswMaxima"))
95
96 if flags.Detector.GeometryMDT or flags.Detector.GeometryRPC or flags.Detector.GeometryTGC:
97 if flags.Muon.enableMLBucketFilter:
98 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}",
99 SpacePointContainer = "FilteredMlBuckets"))
100 else:
101 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}"))
102 result.merge(MuonPhiHoughTransformAlgCfg(flags, name = f"MuonPhiHoughTransformAlg{suffix}"))
103 segmentContainers+=["R4MuonSegments"]
104
105 result.merge(MuonSegmentFittingAlgCfg(flags,
106 name = f"MuonSegmentFittingAlg{suffix}",
107 OutSegmentContainer=segmentContainers[-1]))
108
109 from MuonSegmentCnv.MuonSegmentCnvConfig import xAODSegmentCnvAlgCfg
110 result.merge(xAODSegmentCnvAlgCfg(flags, name = f"MuonR4xAODSegmentCnvAlg{suffix}", InSegmentKeys = segmentContainers))
111 if flags.Muon.setupTruthAlgorithms:
112 from MuonTruthAlgsR4.MuonTruthAlgsConfig import RecoSegmentTruthAssocCfg
113 result.merge(RecoSegmentTruthAssocCfg(flags,
114 name=f"MuonSegmentsFromR4TruthMatching{suffix}",
115 SegmentKey="MuonSegmentsFromR4"))
116 if flags.Muon.scheduleActsReco:
117 from MuonSegmentCnv.MuonSegmentCnvConfig import MuonR4SegmentCnvAlgCfg
118 result.merge(MuonR4SegmentCnvAlgCfg(flags,
119 name=f"MuonR4SegmentCnvAlg{suffix}",
120 ReadSegments = segmentContainers,
121 WriteKey="TrackMuonSegments"))
122 return result
MuonEtaHoughTransformAlgCfg(flags, name="MuonEtaHoughTransformAlg", **kwargs)
MuonPatternRecognitionCfg(flags, suffix="")
Main config fragment for pattern recognition.
ActsMuonSegmentRefitAlgCfg(flags, name="ActsMuonSegmentRefitAlg", **kwargs)
MuonPhiHoughTransformAlgCfg(flags, name="MuonPhiHoughTransformAlg", **kwargs)
MuonSegmentFittingAlgCfg(flags, name="MuonSegmentFittingAlg", **kwargs)
MuonNSWSegmentFinderAlgCfg(flags, name="MuonNswSegmentFinderAlg", **kwargs)