ATLAS Offline Software
Loading...
Searching...
No Matches
muonBucketRecoChainLegacy.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=False)
10 parser.set_defaults(noSTGC=False)
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", action='store_true', default = False,
17 help="runs VTune profiler service for the muon hough alg")
18 parser.add_argument("--noPerfMon", default=False, action='store_true', help="If set to true, full perfmonMT is enabled")
19 parser.add_argument("--houghR4", action="store_true", default = False,
20 help="Schedules the R4 pattern -> legacy segment -> legacy track chain")
21 parser.add_argument("--use-cpu", action="store_true", default=False, help="Use CPU for ONNX inference")
22 parser.add_argument("--skip-onnx", action="store_true", default=False, help="Skip ONNX inference step")
23 from MuonInference.InferenceConfig import (
24 DEFAULT_BUCKET_MODEL_PATH,
25 DEFAULT_BUCKET_SCORE_THRESHOLD,
26 DEFAULT_BUCKET_SINGLE_OUTPUT_MODE,
27 )
28 parser.add_argument("--bucket-model-path", dest="bucket_model_path", default=DEFAULT_BUCKET_MODEL_PATH)
29 parser.add_argument("--score-threshold", type=float, default=DEFAULT_BUCKET_SCORE_THRESHOLD, dest="score_threshold")
30 parser.add_argument("--output-name", default="logits", dest="output_name")
31 score_mode = parser.add_mutually_exclusive_group()
32 score_mode.add_argument("--single-output-mode", choices=("logit", "prob"), default=DEFAULT_BUCKET_SINGLE_OUTPUT_MODE, dest="single_output_mode",
33 help="Scalar ONNX-output interpretation. 'logit' applies sigmoid before thresholding.")
34 score_mode.add_argument("--is-logit", action="store_const", const="logit", dest="single_output_mode", help="alias for --single-output-mode logit.",)
35 score_mode.add_argument("--is-prob", action="store_const", const="prob", dest="single_output_mode", help="alias for --single-output-mode prob.",)
36 parser.add_argument("--athenaDebug", action="store_true", default=False, help="Enable DEBUG verbosity for bucket inference components")
37 parser.add_argument("--athenaVerbose", action="store_true", default=False, help="Enable VERBOSE verbosity for bucket inference components")
38 parser.add_argument("--bucket-filter-summary", action="store_true", default=False, help="Print compact per-event input/selected/rejected bucket counts")
39 parser.add_argument("--bucket-print-labels", action="store_true", default=False, help="Also print truth/segment expected-signal summary for each event")
40 parser.add_argument("--bucket-label-print-first-n-buckets", type=int, default=0, dest="bucket_label_print_first_n_buckets",
41 help="Print detailed label/decision lines for the first N buckets per event")
42
43 args = parser.parse_args()
44
45 from AthenaConfiguration.AllConfigFlags import initConfigFlags
46 flags = initConfigFlags()
47 flags.PerfMon.doFullMonMT = not args.noPerfMon
48 flags.PerfMon.OutputJSON="perfmonmt_MuonR4Reco.json"
49 if args.athenaDebug or args.athenaVerbose:
50 flags.Common.MsgSuppression = False
51
52 from AthOnnxComps.OnnxRuntimeFlags import OnnxRuntimeType
53
54 if args.use_cpu:
55 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CPU
56 else:
57 flags.AthOnnx.ExecutionProvider = OnnxRuntimeType.CUDA
58
59 flags, cfg = setupGeoR4TestCfg(args,flags)
60
61 cfg.merge(setupHistSvcCfg(flags,outFile=args.outRootFile,
62 outStream="MuonEtaHoughTransformTest"))
63
64 from MuonConfig.MuonDataPrepConfig import xAODUncalibMeasPrepCfg
65 cfg.merge(xAODUncalibMeasPrepCfg(flags))
66
67 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
68 cfg.merge(MuonSpacePointFormationCfg(flags))
69
70
71 from MuonPatternRecognitionTest.PatternTestConfig import LegacyMuonRecoChainCfg
72 cfg.merge(LegacyMuonRecoChainCfg(flags))
73
74 if not args.skip_onnx:
75
76 from MuonInference.InferenceConfig import GraphBucketFilterToolCfg, GraphInferenceAlgCfg
77
78 output_level = 1 if args.athenaVerbose else (2 if args.athenaDebug else 3)
79 bucket_tool_kwargs = dict(
80 ModelPath=args.bucket_model_path,
81 ScoreThreshold=args.score_threshold,
82 OutputName=args.output_name,
83 SingleOutputMode=args.single_output_mode,
84 OutputLevel=output_level,
85 PrintFilterSummary=args.bucket_filter_summary,
86 PrintLabels=args.bucket_print_labels,
87 LabelPrintFirstNBuckets=args.bucket_label_print_first_n_buckets,
88 )
89 if args.bucket_print_labels:
90 if flags.Input.isMC:
91 from MuonPatternRecognitionTest.PatternTestConfig import PatternVisualizationToolCfg
92 bucket_tool_kwargs["LabelVisualizationTool"] = cfg.popToolsAndMerge(
93 PatternVisualizationToolCfg(flags, CanvasLimits=0))
94 else:
95 # LegacyMuonRecoChainCfg has already built the segment container.
96 bucket_tool_kwargs["LabelSegmentKey"] = "MuonSegmentsFromR4"
97
98 bucketTool = cfg.popToolsAndMerge(
99 GraphBucketFilterToolCfg(flags, **bucket_tool_kwargs)
100 )
101 cfg.merge(
102 GraphInferenceAlgCfg(
103 flags,
104 "BucketFilterAlg",
105 InferenceTools=[bucketTool],
106 )
107 )
108
109
111 nsw_bucket_tool_kwargs = dict(bucket_tool_kwargs)
112 nsw_bucket_tool_kwargs.update(
113 ReadSpacePoints="NswSpacePoints",
114 WriteSpacePointKey="NswFilteredMlBuckets",
115 )
116 nswBucketTool = cfg.popToolsAndMerge(
117 GraphBucketFilterToolCfg(
118 flags, "NswGraphBucketFilterTool", **nsw_bucket_tool_kwargs
119 )
120 )
121 cfg.merge(
122 GraphInferenceAlgCfg(
123 flags,
124 "NswBucketFilterAlg",
125 InferenceTools=[nswBucketTool],
126 )
127 )
128
129
130 from MuonPatternRecognitionAlgs.MuonPatternRecognitionConfig import MuonPatternRecognitionCfg
131 cfg.merge(MuonPatternRecognitionCfg(flags))
132
133 if not args.skip_onnx:
134 cfg.getEventAlgo("MuonEtaHoughTransformAlg").SpacePointContainer = "FilteredMlBuckets"
135 cfg.getEventAlgo("MuonNswEtaHoughTransformAlg").SpacePointContainer = "NswFilteredMlBuckets"
136
137 from MuonPatternRecognitionTest.PatternTestConfig import MuonR4PatternRecoChainCfg, MuonR4SegmentRecoChainCfg
138 if args.houghR4:
139 cfg.merge(MuonR4PatternRecoChainCfg(flags))
140
141
142 cfg.merge(MuonR4SegmentRecoChainCfg(flags))
143
144 from MuonPatternRecognitionTest.PatternTestConfig import TrackTruthMatchCfg
145 cfg.merge(TrackTruthMatchCfg(flags, setupHoughR4 = args.houghR4))
146
147
148 from MuonPatternRecognitionTest.PatternTestConfig import MuonRecoChainTesterCfg
149 cfg.merge(MuonRecoChainTesterCfg(flags,
150 SegmentFromR4HoughKey = "MuonSegmentsFromHoughR4" if args.houghR4 else "" ))
151
152 if args.runVtune:
153 from PerfMonVTune.PerfMonVTuneConfig import VTuneProfilerServiceCfg
154 cfg.merge(VTuneProfilerServiceCfg(flags, ProfiledAlgs=["MuonHoughTransformAlg", "BucketFilterAlg"]))
155
156 if args.monitorPlots:
157 from MuonPatternRecognitionTest.PatternTestConfig import PatternVisualizationToolCfg
158 cfg.getEventAlgo("MuonEtaHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
159 CanvasPreFix="EtaHoughPlotValid",
160 AllCanvasName="AllEtaHoughiDiPuffPlots", doPhiBucketViews = False,
161 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
162 cfg.getEventAlgo("MuonPhiHoughTransformAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
163 CanvasPreFix="PhiHoughPlotValid",
164 AllCanvasName="AllPhiHoughiDiPuffPlots",doEtaBucketViews = False,
165 displayTruthOnly = True, saveSinglePDFs = False, saveSummaryPDF= False))
166 cfg.getEventAlgo("MuonSegmentFittingAlg").VisualizationTool = cfg.popToolsAndMerge(PatternVisualizationToolCfg(flags,
167 CanvasPreFix="SegmentPlotValid",
168 AllCanvasName="AllSegmentFitPlots", doPhiBucketViews = False,
169 displayTruthOnly = True, saveSinglePDFs = True, saveSummaryPDF= False))
170 executeTest(cfg)