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 ActsTrackingGeometrySvcCfg
64 result.merge(ActsTrackingGeometrySvcCfg(flags))
65 kwargs.setdefault("SegmentContainer", "MuonSegmentsFromR4")
66 theAlg = CompFactory.MuonR4.SegmentActsRefitAlg(name, **kwargs)
67 result.addEventAlgo(theAlg, primary = True)
68 return result
69
70
71def MuonPatternRecognitionCfg(flags, suffix = ""):
72 result = ComponentAccumulator()
73 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
74 result.merge(ActsGeometryContextAlgCfg(flags))
75
76 if flags.Muon.enableMLBucketFilter:
77 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
78 bucketTool = result.popToolsAndMerge(GraphBucketFilterToolCfg(flags))
79 result.merge(GraphInferenceAlgCfg(flags,
80 name = f"GraphInferenceAlg{suffix}",
81 InferenceTools=[bucketTool]))
82
83 segmentContainers = []
84 if flags.Detector.GeometrysTGC or flags.Detector.GeometryMM:
85 segmentContainers+=["MuonNswSegments"]
86 result.merge(MuonEtaHoughTransformAlgCfg(flags, name=f"MuonNswEtaHoughTransformAlg{suffix}",
87 EtaHoughMaxContainer = "MuonHoughNswMaxima",
88 SpacePointContainer = "NswSpacePoints"))
89 result.merge(MuonNSWSegmentFinderAlgCfg(flags, name=f"MuonNswSegmentFinderAlg{suffix}",
90 MuonNswSegmentWriteKey = segmentContainers[-1],
91 MuonNswSegmentSeedWriteKey = "MuonNswSegmentSeeds",
92 CombinatorialReadKey = "MuonHoughNswMaxima"))
93
94 if flags.Detector.GeometryMDT or flags.Detector.GeometryRPC or flags.Detector.GeometryTGC:
95 if flags.Muon.enableMLBucketFilter:
96 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}",
97 SpacePointContainer = "FilteredMlBuckets"))
98 else:
99 result.merge(MuonEtaHoughTransformAlgCfg(flags, name = f"MuonEtaHoughTransformAlg{suffix}"))
100 result.merge(MuonPhiHoughTransformAlgCfg(flags, name = f"MuonPhiHoughTransformAlg{suffix}"))
101 segmentContainers+=["R4MuonSegments"]
102
103 result.merge(MuonSegmentFittingAlgCfg(flags,
104 name = f"MuonSegmentFittingAlg{suffix}",
105 OutSegmentContainer=segmentContainers[-1]))
106
107 from MuonSegmentCnv.MuonSegmentCnvConfig import xAODSegmentCnvAlgCfg
108 result.merge(xAODSegmentCnvAlgCfg(flags, name = f"MuonR4xAODSegmentCnvAlg{suffix}", InSegmentKeys = segmentContainers))
109 if flags.Muon.setupTruthAlgorithms:
110 from MuonTruthAlgsR4.MuonTruthAlgsConfig import RecoSegmentTruthAssocCfg
111 result.merge(RecoSegmentTruthAssocCfg(flags,
112 name=f"MuonSegmentsFromR4TruthMatching{suffix}",
113 SegmentKey="MuonSegmentsFromR4"))
114 return result
ActsMuonSegmentRefitAlgCfg(flags, name="ActsMuonSegmentRefitAlg", **kwargs)
MuonPhiHoughTransformAlgCfg(flags, name="MuonPhiHoughTransformAlg", **kwargs)
MuonPatternRecognitionCfg(flags, suffix="")
Main config fragment for pattern recognition.
MuonSegmentFittingAlgCfg(flags, name="MuonSegmentFittingAlg", **kwargs)
MuonNSWSegmentFinderAlgCfg(flags, name="MuonNswSegmentFinderAlg", **kwargs)
MuonEtaHoughTransformAlgCfg(flags, name="MuonEtaHoughTransformAlg", **kwargs)