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, MSTrackFitterCfg
60 kwargs.setdefault("SegmentSelectionTool", result.popToolsAndMerge(SegmentSelectorCfg(flags)))
61 from MuonSpacePointCalibrator.CalibrationConfig import MuonSpacePointCalibratorCfg
62 kwargs.setdefault("Calibrator", result.popToolsAndMerge(MuonSpacePointCalibratorCfg(flags)))
63 kwargs.setdefault("FittingTool", result.popToolsAndMerge(MSTrackFitterCfg(flags,
64 DoStraightLine=True)))
65 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
66 kwargs.setdefault("ExtrapolationTool", result.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=10000)))
67 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
68 kwargs.setdefault("TrackingGeometryTool", result.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
69 kwargs.setdefault("SegmentContainer", "MuonSegmentsFromR4")
70 theAlg = CompFactory.MuonR4.SegmentActsRefitAlg(name, **kwargs)
71 result.addEventAlgo(theAlg, primary = True)
72 return result
73
74
75def MuonPatternRecognitionCfg(flags, suffix = ""):
76 result = ComponentAccumulator()
77 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
78 result.merge(ActsGeometryContextAlgCfg(flags))
79
80 if flags.Muon.enableMLBucketFilter:
81 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
82 bucketTool = result.popToolsAndMerge(GraphBucketFilterToolCfg(flags))
83 result.merge(GraphInferenceAlgCfg(flags,
84 name = f"GraphInferenceAlg{suffix}",
85 InferenceTools=[bucketTool]))
86
87 segmentContainers = []
88 if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
89 segmentContainers+=["MuonNswSegments"]
90 result.merge(MuonEtaHoughTransformAlgCfg(flags, name=f"MuonNswEtaHoughTransformAlg{suffix}",
91 EtaHoughMaxContainer = "MuonHoughNswMaxima",
92 SpacePointContainer = "NswSpacePoints"))
93 result.merge(MuonNSWSegmentFinderAlgCfg(flags, name=f"MuonNswSegmentFinderAlg{suffix}",
94 MuonNswSegmentWriteKey = segmentContainers[-1],
95 MuonNswSegmentSeedWriteKey = "MuonNswSegmentSeeds",
96 CombinatorialReadKey = "MuonHoughNswMaxima"))
97
98 if flags.Detector.GeometryMDT or flags.Detector.GeometryRPC or flags.Detector.GeometryTGC:
99 if flags.Muon.enableMLBucketFilter:
100 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}",
101 SpacePointContainer = "FilteredMlBuckets"))
102 else:
103 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}"))
104 result.merge(MuonPhiHoughTransformAlgCfg(flags, name = f"MuonPhiHoughTransformAlg{suffix}"))
105 segmentContainers+=["R4MuonSegments"]
106
107 result.merge(MuonSegmentFittingAlgCfg(flags,
108 name = f"MuonSegmentFittingAlg{suffix}",
109 OutSegmentContainer=segmentContainers[-1]))
110
111 from MuonSegmentCnv.MuonSegmentCnvConfig import xAODSegmentCnvAlgCfg
112 result.merge(xAODSegmentCnvAlgCfg(flags, name = f"MuonR4xAODSegmentCnvAlg{suffix}", InSegmentKeys = segmentContainers))
113 if flags.Input.isMC:
114 from MuonTruthAlgsR4.MuonTruthAlgsConfig import RecoSegmentTruthAssocCfg
115 result.merge(RecoSegmentTruthAssocCfg(flags,
116 name=f"MuonSegmentsFromR4TruthMatching{suffix}",
117 SegmentKey="MuonSegmentsFromR4"))
118 if flags.Muon.scheduleActsReco:
119 from MuonSegmentCnv.MuonSegmentCnvConfig import MuonR4SegmentCnvAlgCfg
120 result.merge(MuonR4SegmentCnvAlgCfg(flags,
121 name=f"MuonR4SegmentCnvAlg{suffix}",
122 ReadSegments = segmentContainers,
123 WriteKey="TrackMuonSegments"))
124 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)