ATLAS Offline Software
Loading...
Searching...
No Matches
muonBucketRecoChain.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3import os
4import logging
5
6# Suppress ONNX Runtime warnings at Python logging level before Athena initialization
7logging.getLogger("onnxruntime").setLevel(logging.ERROR)
8
9# Set environment variable for ONNX Runtime before imports (attempt early suppression)
10os.environ["ORT_LOGGING_LEVEL"] = "3" # 3 = ERROR
11
12if __name__=="__main__":
13 from MuonGeoModelTestR4.testGeoModel import setupGeoR4TestCfg, SetupArgParser, MuonPhaseIITestDefaults
14 from MuonConfig.MuonConfigUtils import executeTest, setupHistSvcCfg
15 parser = SetupArgParser()
16 parser.add_argument("--noMonitorPlots", default = False, action='store_true', help="If set to true, there're no monitoring plots")
17 parser.add_argument("--writeSpacePoints", default=False, action='store_true', help="If set to true, the spacepoints in the bucket are saved to disk")
18 parser.add_argument("--noPerfMon", default=False, action='store_true', help="If set to true, disable performance monitoring")
19 parser.add_argument("--LegacyChain", default = False, action = 'store_true', help="If set to true, the legacy chain is not scheduled",)
20 parser.add_argument("--use-cpu", default = False, action = 'store_true', help="Use CPU for ONNX inference")
21 parser.add_argument("--skip-onnx", action="store_true", default=False, help="Skip ONNX inference step")
22 from MuonInference.InferenceConfig import (
23 DEFAULT_BUCKET_MODEL_PATH,
24 DEFAULT_BUCKET_SCORE_THRESHOLD,
25 DEFAULT_BUCKET_SINGLE_OUTPUT_MODE,
26 )
27 parser.add_argument("--bucket-model-path", dest="bucket_model_path", default=DEFAULT_BUCKET_MODEL_PATH)
28 parser.add_argument("--score-threshold", type=float, default=DEFAULT_BUCKET_SCORE_THRESHOLD, dest="score_threshold")
29 parser.add_argument("--output-name", default="logits", dest="output_name")
30 score_mode = parser.add_mutually_exclusive_group()
31 score_mode.add_argument("--single-output-mode", choices=("logit", "prob"), default=DEFAULT_BUCKET_SINGLE_OUTPUT_MODE, dest="single_output_mode",
32 help="Scalar ONNX-output interpretation. 'logit' applies sigmoid before thresholding.")
33 score_mode.add_argument("--is-logit", action="store_const", const="logit", dest="single_output_mode", help="alias for --single-output-mode logit.")
34 score_mode.add_argument("--is-prob", action="store_const", const="prob", dest="single_output_mode", help="alias for --single-output-mode prob.")
35 parser.set_defaults(nEvents = -1)
36
37 parser.set_defaults(outRootFile="MsTrkTester.root")
38 parser.set_defaults(inputFile=MuonPhaseIITestDefaults.HITS_PG_R3)
39
40 args = parser.parse_args()
41 from AthenaConfiguration.AllConfigFlags import initConfigFlags
42 flags = initConfigFlags()
43 flags.PerfMon.doFullMonMT = not args.noPerfMon
44 flags.PerfMon.OutputJSON = "perfmonmt_MuonR4Reco.json"
45 flags.Trigger.Muon.useNewRegionSelector = False
46
47 from AthOnnxComps.OnnxRuntimeFlags import OnnxRuntimeType
48 if args.use_cpu:
49 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CPU
50 else:
51 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CUDA
52
53 flags, cfg = setupGeoR4TestCfg(args,flags)
54
55 from MuonConfig.ReconstructionConfigR4 import MuonReconstructionConfig
56 cfg.merge(MuonReconstructionConfig(flags))
57
58 if not args.skip_onnx:
59 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
60 bucketTool = cfg.popToolsAndMerge(
61 GraphBucketFilterToolCfg(
62 flags,
63 ModelPath=args.bucket_model_path,
64 ScoreThreshold=args.score_threshold,
65 OutputName=args.output_name,
66 SingleOutputMode=args.single_output_mode,
67 )
68 )
69 cfg.merge(
70 GraphInferenceAlgCfg(
71 flags,
72 InferenceTools=[bucketTool],
73 )
74 )
75 cfg.getEventAlgo("MuonEtaHoughTransformAlg").SpacePointContainer = "FilteredMlBuckets"
76
77
78 from MuonPatternRecognitionTest.PatternTestConfig import LegacyMuonRecoChainCfg
79
80 if args.LegacyChain:
81 cfg.merge(LegacyMuonRecoChainCfg(flags))
82
83 from MuonTrackFindingTest.MsTrackFindingTester import MsTrackTesterCfg
84 cfg.merge(MsTrackTesterCfg(flags, scheduleLegacy = args.LegacyChain, outFile = args.outRootFile))
85
86 cfg.merge(setupHistSvcCfg(flags,outFile=args.outRootFile,
87 outStream="MuonEtaHoughTransformTest"))
88
89 from MuonPatternRecognitionTest.PatternTestConfig import MuonHoughTransformTesterCfg, PatternVisualizationToolCfg
90
91
92 cfg.merge(MuonHoughTransformTesterCfg(flags,
93 VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags, CanvasLimits =0))))
94
95
96 if not args.noMonitorPlots:
97 from MuonTrackFindingTest.MsTrackFindingTester import MsTrackVisualizationToolCfg
98 cfg.getEventAlgo("MSTrackFinderAlg").VisualizationTool = cfg.popToolsAndMerge(MsTrackVisualizationToolCfg(flags))
99 cfg.getEventAlgo("MuonSegmentFittingAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
100 CanvasPreFix="SegmentPlotValid", outSubDir="SegmentValidPlots",
101 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
102
103 cfg.getEventAlgo("MuonNswSegmentFinderAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
104 CanvasPreFix="NswSegmentFitPlotValid", outSubDir="SegmentValidPlots",
105 doPhiBucketViews = False, saveSinglePDFs = False,
106 saveSummaryPDF= False,CanvasLimits=10000))
107
108
109 cfg.getService("MessageSvc").setVerbose = []
110 executeTest(cfg)