ATLAS Offline Software
Loading...
Searching...
No Matches
MuonPhaseII/MuonPatternRecognition/MuonTruthAlgsR4/python/MuonTruthAlgsConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2from AthenaConfiguration.AccumulatorCache import AccumulatorCache
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6
7def TruthSegmentMakerCfg(flags, name = "MuonTruthSegmentMaker", useSDO = True, **kwargs):
8 result = ComponentAccumulator()
9 if not flags.Input.isMC:
10 return result
11
12 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
13 result.merge(ActsGeometryContextAlgCfg(flags))
14 containerNames = []
15
16 if flags.Detector.EnableMDT: containerNames+=["MDT_SDO" if useSDO else "xMdtSimHits"]
17 if flags.Detector.EnableRPC: containerNames+=["RPC_SDO" if useSDO else "xRpcSimHits"]
18 if flags.Detector.EnableTGC: containerNames+=["TGC_SDO" if useSDO else "xTgcSimHits"]
19 if flags.Detector.EnableMM: containerNames+=["MM_SDO" if useSDO else "xMmSimHits"]
20 if flags.Detector.EnablesTGC: containerNames+=["sTGC_SDO" if useSDO else "xStgcSimHits"]
21
22 from MuonConfig.MuonCalibrationConfig import MdtCalibDbAlgCfg, NswErrorCalibDbAlgCfg
23 if flags.Detector.EnableMDT:
24 result.merge(MdtCalibDbAlgCfg(flags))
25 if flags.Detector.EnableMM or flags.Detector.EnablesTGC:
26 result.merge(NswErrorCalibDbAlgCfg(flags))
27 kwargs.setdefault("SimHitKeys", containerNames)
28
29 the_alg = CompFactory.MuonR4.TruthSegmentMaker(name, **kwargs)
30 result.addEventAlgo(the_alg, primary = True)
31 return result
32
33def MeasToSimHitAssocAlgCfg(flags, name="MeasToSimHitConvAlg", **kwargs):
34 result = ComponentAccumulator()
35 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
36 result.merge(ActsGeometryContextAlgCfg(flags))
37 the_alg = CompFactory.MuonR4.PrepDataToSimHitAssocAlg(name, **kwargs)
38 result.addEventAlgo(the_alg, primary = True)
39 return result
40
42 result = ComponentAccumulator()
43 if not flags.Input.isMC:
44 return result
45 from MuonConfig.MuonDataPrepConfig import PrimaryMeasContNamesCfg
46 for cont_name in PrimaryMeasContNamesCfg(flags):
47 simHits = ""
48 if "xMdt" in cont_name:
49 simHits = "MDT_SDO"
50 elif "xRpc" in cont_name:
51 simHits = "RPC_SDO"
52 elif "xTgc" in cont_name:
53 simHits = "TGC_SDO"
54 elif "MM" in cont_name:
55 simHits = "MM_SDO"
56 else:
57 simHits = "sTGC_SDO"
58 result.merge(MeasToSimHitAssocAlgCfg(flags,
59 name=f"{cont_name}PrepDataToSimHitAssoc",
60 SimHits = simHits,
61 Measurements=cont_name))
62 return result
63
64def SimHitToTruthPartAlgCfg(flags, useSDO = False):
65 result = ComponentAccumulator()
66 if flags.Detector.GeometryMDT:
67 container = "xMdtSimHits" if not useSDO else "MDT_SDO"
68 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMdtSimHitToTruthMappingAlg",
69 SimHitContainer = container,
70 HitIdDecoration = "truthMdtHits")
71 result.addEventAlgo(the_alg)
72 if flags.Detector.GeometryRPC:
73 container = "xRpcSimHits" if not useSDO else "RPC_SDO"
74 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonRpcSimHitToTruthMappingAlg",
75 SimHitContainer = container,
76 HitIdDecoration = "truthRpcHits")
77 result.addEventAlgo(the_alg)
78 if flags.Detector.GeometryTGC:
79 container = "xTgcSimHits" if not useSDO else "TGC_SDO"
80 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonTgcSimHitToTruthMappingAlg",
81 SimHitContainer = container,
82 HitIdDecoration = "truthTgcHits")
83 result.addEventAlgo(the_alg)
84 if flags.Detector.GeometryMM:
85 container = "xMmSimHits" if not useSDO else "MM_SDO"
86 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonMmSimHitToTruthMappingAlg",
87 SimHitContainer = container,
88 HitIdDecoration = "truthMMHits")
89 result.addEventAlgo(the_alg)
90 if flags.Detector.GeometrysTGC:
91 container = "xStgcSimHits" if not useSDO else "sTGC_SDO"
92 the_alg = CompFactory.MuonR4.SimHitToTruthPartAssocAlg("MuonsTGCSimHitToTruthMappingAlg",
93 SimHitContainer = container,
94 HitIdDecoration = "truthStgcHits")
95 result.addEventAlgo(the_alg)
96
97 return result
98
99def TruthHitSummaryAlgCfg(flags, name="MuonTruthHitSummaryAlg", **kwargs):
100 result = ComponentAccumulator()
101 from MuonTrackFindingAlgs.TrackFindingConfig import TrackSummaryToolCfg
102 kwargs.setdefault("SummaryTool", result.popToolsAndMerge(TrackSummaryToolCfg(flags,
103 fillHoles=False, fillOutliers=False,
104 recomputeSegment =False)))
105 the_alg = CompFactory.MuonR4.TruthHitSummaryAlg(name, **kwargs)
106 result.addEventAlgo(the_alg, primary = True)
107 return result
108
109def RecoSegmentTruthAssocCfg(flags, **kwargs):
110 result = ComponentAccumulator()
111
112 kwargs.setdefault("SegmentKey", "")
113 from MuonConfig.MuonDataPrepConfig import PrimaryMeasContNamesCfg
114 kwargs.setdefault("PrdContainer", PrimaryMeasContNamesCfg(flags))
115 the_alg = CompFactory.MuonR4.RecoSegToTruthAssocAlg(**kwargs)
116 result.addEventAlgo(the_alg, primary = True)
117 return result
118
119def TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs):
120 result = ComponentAccumulator()
121 hitDecors = []
122 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
123 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
124 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
125 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
126 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
127 kwargs.setdefault("SimHitIds", hitDecors)
128 from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
129 kwargs.setdefault("ExtrapolationTool", result.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=100000)))
130 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
131 kwargs.setdefault("TrackingGeometryTool", result.getPrimaryAndMerge(ActsTrackingGeometryToolCfg(flags)))
132
133 the_alg = CompFactory.MuonR4.TruthSegToTruthPartAssocAlg(name, **kwargs)
134 result.addEventAlgo(the_alg, primary = True)
135 return result
136
137def TrackToTruthPartAssocCfg(flags, **kwargs):
138 result = ComponentAccumulator()
139 hitDecors = []
140 if flags.Detector.GeometryMDT: hitDecors+=["truthMdtHits"]
141 if flags.Detector.GeometryRPC: hitDecors+=["truthRpcHits"]
142 if flags.Detector.GeometryTGC: hitDecors+=["truthTgcHits"]
143 if flags.Detector.GeometryMM: hitDecors+=["truthMMHits"]
144 if flags.Detector.GeometrysTGC: hitDecors+=["truthStgcHits"]
145 kwargs.setdefault("SimHitIds", hitDecors)
146 the_alg = CompFactory.MuonR4.TrackToTruthPartAssocAlg(**kwargs)
147 result.addEventAlgo(the_alg, primary = True)
148 return result
149
150
151@AccumulatorCache
152def MuonTruthAlgsCfg(flags, useSDO=True, recoAssoc = True):
153 result = ComponentAccumulator()
154 if not flags.Input.isMC:
155 return result
156 if useSDO and recoAssoc:
157 result.merge(TruthHitAssociationCfg(flags))
158
159 from MuonConfig.MuonTruthAlgsConfig import TruthMuonMakerAlgCfg
160 result.merge(TruthMuonMakerAlgCfg(flags))
161 result.merge(SimHitToTruthPartAlgCfg(flags, useSDO = useSDO))
162 result.merge(TruthSegmentMakerCfg(flags, useSDO = useSDO))
163 result.merge(TruthHitSummaryAlgCfg(flags))
164
165 # result.merge(MuonTruthHitCountsAlgCfg(flags))
166
169 result.merge(TruthSegmentToTruthPartAssocCfg(flags))
170
171 return result
TruthSegmentToTruthPartAssocCfg(flags, name="MuonTruthSegmentToTruthAssocAlg", **kwargs)
TruthMuonMakerAlgCfg(flags, name="TruthMuonMakerAlg", **kwargs)
TruthSegmentMakerCfg(flags, name="MuonTruthSegmentMaker", useSDO=True, **kwargs)