ATLAS Offline Software
Loading...
Searching...
No Matches
muonBucketRecoChain.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("--houghR4", help="Schedules the R4 pattern -> legacy segment -> legacy track chain",
21 action="store_true", default = False)
22 parser.add_argument("--use-gpu", action="store_true", dest="use_gpu", default=None,
23 help="Use GPU for ONNX inference (default: True)")
24 parser.add_argument("--use-cpu", dest="use_gpu", action="store_false",
25 help="Use CPU for ONNX inference")
26 parser.add_argument("--skip-onnx", action="store_true", default=False,
27 help="Skip ONNX inference step")
28
29 args = parser.parse_args()
30
31 from AthenaConfiguration.AllConfigFlags import initConfigFlags
32 flags = initConfigFlags()
33 flags.PerfMon.doFullMonMT = not args.noPerfMon
34 flags.PerfMon.OutputJSON="perfmonmt_MuonR4Reco.json"
35
36 from AthOnnxComps.OnnxRuntimeFlags import OnnxRuntimeType
37 # Use command line argument if provided, otherwise default to True
38 use_gpu_requested = args.use_gpu if args.use_gpu is not None else True
39 # Runtime check for GPU availability. Prefer ONNXRuntime provider list,
40 # fall back to PyTorch if ONNX runtime isn't available.
41 gpu_available = False
42 try:
43 import onnxruntime as ort
44 gpu_available = "CUDAExecutionProvider" in ort.get_available_providers()
45 except Exception:
46 try:
47 import torch
48 gpu_available = torch.cuda.is_available()
49 except Exception:
50 gpu_available = False
51 if use_gpu_requested and gpu_available:
52 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CUDA
53 else:
54 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CPU
55
56 flags, cfg = setupGeoR4TestCfg(args,flags)
57
58 cfg.merge(setupHistSvcCfg(flags,outFile=args.outRootFile,
59 outStream="MuonEtaHoughTransformTest"))
60
61 from MuonConfig.MuonDataPrepConfig import xAODUncalibMeasPrepCfg
62 cfg.merge(xAODUncalibMeasPrepCfg(flags))
63
64 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
65 cfg.merge(MuonSpacePointFormationCfg(flags))
66
67
68 from MuonPatternRecognitionTest.PatternTestConfig import LegacyMuonRecoChainCfg
69 cfg.merge(LegacyMuonRecoChainCfg(flags))
70
71 if not args.skip_onnx:
72
73 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
74 bucketTool = cfg.popToolsAndMerge(
75 GraphBucketFilterToolCfg(
76 flags,
77 ModelPath="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/MuonRecRTT/edgecnn_multi_bucket_sparse_meta.onnx"
78 )
79 )
80 cfg.merge(
81 GraphInferenceAlgCfg(
82 flags,
83 InferenceTools=[bucketTool],
84 )
85 )
86
87
88 from MuonPatternRecognitionAlgs.MuonPatternRecognitionConfig import MuonPatternRecognitionCfg
89 cfg.merge(MuonPatternRecognitionCfg(flags))
90
91 if not args.skip_onnx:
92 cfg.getEventAlgo("MuonEtaHoughTransformAlg").SpacePointContainer = "FilteredMlBuckets"
93
94 from MuonPatternRecognitionTest.PatternTestConfig import MuonR4PatternRecoChainCfg, MuonR4SegmentRecoChainCfg
95 if args.houghR4:
96 cfg.merge(MuonR4PatternRecoChainCfg(flags))
97
98
99 cfg.merge(MuonR4SegmentRecoChainCfg(flags))
100
101 from MuonPatternRecognitionTest.PatternTestConfig import TrackTruthMatchCfg
102 cfg.merge(TrackTruthMatchCfg(flags, setupHoughR4 = args.houghR4))
103
104
105 from MuonPatternRecognitionTest.PatternTestConfig import MuonRecoChainTesterCfg
106 cfg.merge(MuonRecoChainTesterCfg(flags,
107 SegmentFromR4HoughKey = "MuonSegmentsFromHoughR4" if args.houghR4 else "" ))
108
109 if args.runVtune:
110 from PerfMonVTune.PerfMonVTuneConfig import VTuneProfilerServiceCfg
111 cfg.merge(VTuneProfilerServiceCfg(flags, ProfiledAlgs=["MuonHoughTransformAlg"]))
112
113 if args.monitorPlots:
114 from MuonPatternRecognitionTest.PatternTestConfig import PatternVisualizationToolCfg
115 cfg.getEventAlgo("MuonEtaHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
116 CanvasPreFix="EtaHoughPlotValid",
117 AllCanvasName="AllEtaHoughiDiPuffPlots", doPhiBucketViews = False,
118 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
119 cfg.getEventAlgo("MuonPhiHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
120 CanvasPreFix="PhiHoughPlotValid",
121 AllCanvasName="AllPhiHoughiDiPuffPlots",doEtaBucketViews = False,
122 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
123 cfg.getEventAlgo("MuonSegmentFittingAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
124 CanvasPreFix="SegmentPlotValid",
125 AllCanvasName="AllSegmentFitPlots", doPhiBucketViews = False,
126 displayTruthOnly = True, saveSinglePDFs = True, saveSummaryPDF= False))
127 executeTest(cfg)
128
129