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-cpu", action="store_true", default=False,
21 help="Use CPU for ONNX inference")
22 parser.add_argument("--skip_bucket_filter", action="store_true", default=False,
23 help="Skip the bucket filter inference step (default: False)")
24
25 args = parser.parse_args()
26
27 from AthenaConfiguration.AllConfigFlags import initConfigFlags
28 flags = initConfigFlags()
29 flags.PerfMon.doFullMonMT = not args.noPerfMon
30 flags.PerfMon.OutputJSON="perfmonmt_MuonR4Reco.json"
31
32 from AthOnnxComps.OnnxRuntimeFlags import OnnxRuntimeType
33 use_gpu_requested = not args.use_cpu
34 # Runtime check for GPU availability. Prefer ONNXRuntime provider list,
35 # fall back to PyTorch if ONNX runtime isn't available.
36 gpu_available = False
37 try:
38 import onnxruntime as ort
39 gpu_available = "CUDAExecutionProvider" in ort.get_available_providers()
40 except Exception:
41 try:
42 import torch
43 gpu_available = torch.cuda.is_available()
44 except Exception:
45 gpu_available = False
46 if use_gpu_requested and gpu_available:
47 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CUDA
48 else:
49 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CPU
50
51 flags, cfg = setupGeoR4TestCfg(args,flags)
52
53
54 cfg.merge(setupHistSvcCfg(flags,outFile=args.outRootFile,
55 outStream="MuonEtaHoughTransformTest"))
56
57 from MuonConfig.MuonDataPrepConfig import xAODUncalibMeasPrepCfg
58 cfg.merge(xAODUncalibMeasPrepCfg(flags))
59
60 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
61 cfg.merge(MuonSpacePointFormationCfg(flags))
62
63
64
65
68
69
70 from MuonInference.InferenceConfig import (
71 GraphBucketFilterToolCfg,
72 GraphSPFilterToolCfg,
73 GraphInferenceAlgCfg,
74 )
75 # 1) Bucket filter: read raw SPs, write filtered buckets (optional)
76 if not args.skip_bucket_filter:
77 bucketTool = cfg.popToolsAndMerge(
78 GraphBucketFilterToolCfg(
79 flags,
80 ReadSpacePoints="MuonSpacePoints",
81 WriteSpacePointKey="FilteredMlBuckets",
82 )
83 )
84 cfg.merge(
85 GraphInferenceAlgCfg(
86 flags,
87 name="GraphInferenceAlgBuckets",
88 InferenceTools=[bucketTool],
89 )
90 )
91 # SP filter reads from bucket filter output
92 sp_input_container = "FilteredMlBuckets"
93 else:
94 # Skip bucket filter, SP filter reads directly from raw space points
95 sp_input_container = "MuonSpacePoints"
96
97 # 2) SP filter: read filtered buckets (or raw SPs), write filtered SPs
98 spTool = cfg.popToolsAndMerge(
99 GraphSPFilterToolCfg(
100 flags,
101 ReadSpacePoints=sp_input_container, # chain from previous stage or raw SPs
102 WriteSpacePointKey="FilteredMlSpacePoints", # final SPs for Hough
103 # MLFilterCut=-3.6,
104 )
105 )
106 cfg.merge(
107 GraphInferenceAlgCfg(
108 flags,
109 name="GraphInferenceAlgSP", # unique name
110 InferenceTools=[spTool],
111 )
112 )
113
114
115 from MuonPatternRecognitionTest.PatternTestConfig import LegacyMuonRecoChainCfg
116 cfg.merge(LegacyMuonRecoChainCfg(flags))
117
118
119 from MuonConfig.ReconstructionConfigR4 import MuonReconstructionConfig
120 cfg.merge(MuonReconstructionConfig(flags))
121
122 cfg.getEventAlgo("MuonEtaHoughTransformAlg").SpacePointContainer = "FilteredMlSpacePoints"
123
124
125 from MuonPatternRecognitionTest.PatternTestConfig import MuonR4PatternRecoChainCfg, MuonR4SegmentRecoChainCfg
126 cfg.merge(MuonR4PatternRecoChainCfg(flags))
127
128
129 cfg.merge(MuonR4SegmentRecoChainCfg(flags))
130
131 from MuonPatternRecognitionTest.PatternTestConfig import TrackTruthMatchCfg
132 cfg.merge(TrackTruthMatchCfg(flags))
133
134 from MuonPatternRecognitionTest.PatternTestConfig import MuonRecoChainTesterCfg
135 cfg.merge(MuonRecoChainTesterCfg(flags))
136 if args.runVtune:
137 from PerfMonVTune.PerfMonVTuneConfig import VTuneProfilerServiceCfg
138 cfg.merge(VTuneProfilerServiceCfg(flags, ProfiledAlgs=["MuonHoughTransformAlg"]))
139
140 if args.monitorPlots:
141 from MuonPatternRecognitionTest.PatternTestConfig import PatternVisualizationToolCfg
142 cfg.getEventAlgo("MuonEtaHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
143 CanvasPreFix="EtaHoughPlotValid",
144 AllCanvasName="AllEtaHoughiDiPuffPlots", doPhiBucketViews = False,
145 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
146 cfg.getEventAlgo("MuonPhiHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
147 CanvasPreFix="PhiHoughPlotValid",
148 AllCanvasName="AllPhiHoughiDiPuffPlots",doEtaBucketViews = False,
149 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
150 cfg.getEventAlgo("MuonSegmentFittingAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
151 CanvasPreFix="SegmentPlotValid",
152 AllCanvasName="AllSegmentFitPlots", doPhiBucketViews = False,
153 displayTruthOnly = True, saveSinglePDFs = True, saveSummaryPDF= False))
154 executeTest(cfg)
155
156