ATLAS Offline Software
Loading...
Searching...
No Matches
muonSPRecoChain.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaborationation
2
3if __name__=="__main__":
4
5 from MuonGeoModelTestR4.testGeoModel import setupGeoR4TestCfg, SetupArgParser, MuonPhaseIITestDefaults
6 from MuonConfig.MuonConfigUtils import executeTest,setupHistSvcCfg
7 parser = SetupArgParser()
8 parser.set_defaults(nEvents = -1)
9 parser.set_defaults(noMM=True)
10 parser.set_defaults(noSTGC=True)
11 parser.set_defaults(outRootFile="RecoChainTester.root")
12 parser.set_defaults(inputFile=MuonPhaseIITestDefaults.HITS_PG_R3)
13
14 parser.add_argument("--monitorPlots", action='store_true', default=False,
15 help="Setup monitoring plots of the pattern recognition")
16 parser.add_argument("--runVtune",
17 help="runs VTune profiler service for the muon hough alg", action='store_true', default = False)
18 parser.add_argument("--noPerfMon", help="If set to true, full perfmonMT is enabled",
19 default=False, action='store_true')
20 parser.add_argument("--use-gpu", action="store_true", default=True,
21 help="Use GPU for ONNX inference (default: True)")
22 parser.add_argument("--use-cpu", dest="use_gpu", action="store_false",
23 help="Use CPU for ONNX inference")
24 parser.add_argument("--skip_bucket_filter", action="store_true", default=False,
25 help="Skip the bucket filter inference step (default: False)")
26
27 args = parser.parse_args()
28
29 from AthenaConfiguration.AllConfigFlags import initConfigFlags
30 flags = initConfigFlags()
31 flags.PerfMon.doFullMonMT = not args.noPerfMon
32 flags.PerfMon.OutputJSON="perfmonmt_MuonR4Reco.json"
33
34 from AthOnnxComps.OnnxRuntimeFlags import OnnxRuntimeType
35 # Determine whether user requested GPU (parser sets args.use_gpu)
36 use_gpu_requested = getattr(args, "use_gpu", True)
37 # Runtime check for GPU availability. Prefer ONNXRuntime provider list,
38 # fall back to PyTorch if ONNX runtime isn't available.
39 gpu_available = False
40 try:
41 import onnxruntime as ort
42 gpu_available = "CUDAExecutionProvider" in ort.get_available_providers()
43 except Exception:
44 try:
45 import torch
46 gpu_available = torch.cuda.is_available()
47 except Exception:
48 gpu_available = False
49 if use_gpu_requested and gpu_available:
50 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CUDA
51 else:
52 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CPU
53
54 flags, cfg = setupGeoR4TestCfg(args,flags)
55
56
57 cfg.merge(setupHistSvcCfg(flags,outFile=args.outRootFile,
58 outStream="MuonEtaHoughTransformTest"))
59
60 from MuonConfig.MuonDataPrepConfig import xAODUncalibMeasPrepCfg
61 cfg.merge(xAODUncalibMeasPrepCfg(flags))
62
63 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
64 cfg.merge(MuonSpacePointFormationCfg(flags))
65
66
67
68
71
72
73 from MuonInference.InferenceConfig import (
74 GraphBucketFilterToolCfg,
75 GraphSPFilterToolCfg,
76 GraphInferenceAlgCfg,
77 )
78 # 1) Bucket filter: read raw SPs, write filtered buckets (optional)
79 if not args.skip_bucket_filter:
80 bucketTool = cfg.popToolsAndMerge(
81 GraphBucketFilterToolCfg(
82 flags,
83 ReadSpacePoints="MuonSpacePoints",
84 WriteSpacePointKey="FilteredMlBuckets",
85 )
86 )
87 cfg.merge(
88 GraphInferenceAlgCfg(
89 flags,
90 name="GraphInferenceAlgBuckets",
91 InferenceTools=[bucketTool],
92 )
93 )
94 # SP filter reads from bucket filter output
95 sp_input_container = "FilteredMlBuckets"
96 else:
97 # Skip bucket filter, SP filter reads directly from raw space points
98 sp_input_container = "MuonSpacePoints"
99
100 # 2) SP filter: read filtered buckets (or raw SPs), write filtered SPs
101 spTool = cfg.popToolsAndMerge(
102 GraphSPFilterToolCfg(
103 flags,
104 ReadSpacePoints=sp_input_container, # chain from previous stage or raw SPs
105 WriteSpacePointKey="FilteredMlSpacePoints", # final SPs for Hough
106 # MLFilterCut=-3.6,
107 )
108 )
109 cfg.merge(
110 GraphInferenceAlgCfg(
111 flags,
112 name="GraphInferenceAlgSP", # unique name
113 InferenceTools=[spTool],
114 )
115 )
116
117
118 from MuonPatternRecognitionTest.PatternTestConfig import LegacyMuonRecoChainCfg
119 cfg.merge(LegacyMuonRecoChainCfg(flags))
120
121
122 from MuonPatternRecognitionAlgs.MuonPatternRecognitionConfig import MuonPatternRecognitionCfg
123 cfg.merge(MuonPatternRecognitionCfg(flags))
124
125 cfg.getEventAlgo("MuonEtaHoughTransformAlg").SpacePointContainer = "FilteredMlSpacePoints"
126
127
128 from MuonPatternRecognitionTest.PatternTestConfig import MuonR4PatternRecoChainCfg, MuonR4SegmentRecoChainCfg
129 cfg.merge(MuonR4PatternRecoChainCfg(flags))
130
131
132 cfg.merge(MuonR4SegmentRecoChainCfg(flags))
133
134 from MuonPatternRecognitionTest.PatternTestConfig import TrackTruthMatchCfg
135 cfg.merge(TrackTruthMatchCfg(flags))
136
137 from MuonPatternRecognitionTest.PatternTestConfig import MuonRecoChainTesterCfg
138 cfg.merge(MuonRecoChainTesterCfg(flags))
139 if args.runVtune:
140 from PerfMonVTune.PerfMonVTuneConfig import VTuneProfilerServiceCfg
141 cfg.merge(VTuneProfilerServiceCfg(flags, ProfiledAlgs=["MuonHoughTransformAlg"]))
142
143 if args.monitorPlots:
144 from MuonPatternRecognitionTest.PatternTestConfig import PatternVisualizationToolCfg
145 cfg.getEventAlgo("MuonEtaHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
146 CanvasPreFix="EtaHoughPlotValid",
147 AllCanvasName="AllEtaHoughiDiPuffPlots", doPhiBucketViews = False,
148 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
149 cfg.getEventAlgo("MuonPhiHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
150 CanvasPreFix="PhiHoughPlotValid",
151 AllCanvasName="AllPhiHoughiDiPuffPlots",doEtaBucketViews = False,
152 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
153 cfg.getEventAlgo("MuonSegmentFittingAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
154 CanvasPreFix="SegmentPlotValid",
155 AllCanvasName="AllSegmentFitPlots", doPhiBucketViews = False,
156 displayTruthOnly = True, saveSinglePDFs = True, saveSummaryPDF= False))
157 executeTest(cfg)
158
159