ATLAS Offline Software
Loading...
Searching...
No Matches
sTGC_DigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured STGC Digitization tools and algorithms
2
3Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4"""
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import ProductionStep
8from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
9from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
10from MuonConfig.MuonByteStreamCnvTestConfig import STGC_DigitToRDOCfg
11from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
12from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
13from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
14
15
16# The earliest and last bunch crossing times for which interactions will be sent
17# to the sTgcDigitizationTool.
19 return -100
20
21
23 return 100
24
25
26def sTGC_RangeCfg(flags, name="sTgcRange", **kwargs):
27 """Return a PileUpXingFolder tool configured for sTGC"""
28 kwargs.setdefault("FirstXing", sTGC_FirstXing())
29 kwargs.setdefault("LastXing", sTGC_LastXing())
30 kwargs.setdefault("CacheRefreshFrequency", 1.0)
31 if flags.Muon.usePhaseIIGeoSetup:
32 kwargs.setdefault("ItemList", ["xAOD::MuonSimHitContainer#xStgcSimHits",
33 "xAOD::MuonSimHitAuxContainer#xStgcSimHitsAux."])
34 else:
35 kwargs.setdefault("ItemList", ["sTGCSimHitCollection#sTGC_Hits"])
36 return PileUpXingFolderCfg(flags, name, **kwargs)
37
38def sTGC_DigitizationToolCfg(flags, name="sTgcDigitizationTool", **kwargs):
39 result = ComponentAccumulator()
40
41 from RngComps.RngCompsConfig import AthRNGSvcCfg
42 kwargs.setdefault("RndmSvc", result.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
43
44
45 if flags.Digitization.PileUp:
46 intervals = []
47 if flags.Digitization.DoXingByXingPileUp:
48 kwargs.setdefault("FirstXing", sTGC_FirstXing())
49 kwargs.setdefault("LastXing", sTGC_LastXing())
50 else:
51 intervals += [result.popToolsAndMerge(sTGC_RangeCfg(flags))]
52 kwargs.setdefault("PileUpMergeSvc", result.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
53 else:
54 kwargs.setdefault("PileUpMergeSvc", '')
55 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
56
57 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
58 kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "sTGC_SDO")
59 else:
60 kwargs.setdefault("OutputSDOName", "sTGC_SDO")
61 kwargs.setdefault("OutputObjectName", "sTGC_DIGITS")
62
63 the_tool = None
64 if not flags.Muon.usePhaseIIGeoSetup:
65 from MuonConfig.MuonCalibrationConfig import NSWCalibToolCfg, STgcCalibSmearingToolCfg
66 kwargs.setdefault("CalibrationTool", result.popToolsAndMerge(NSWCalibToolCfg(flags)))
67 kwargs.setdefault("SmearingTool", result.popToolsAndMerge(STgcCalibSmearingToolCfg(flags)))
68 # sTGC VMM configurables
69 kwargs.setdefault("doToFCorrection", True)
70 kwargs.setdefault("InputObjectName", "sTGC_Hits")
71 the_tool = CompFactory.sTgcDigitizationTool(name, **kwargs)
72
73 elif flags.Muon.doFastsTGCDigitization:
74 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
75 result.merge(ActsGeometryContextAlgCfg(flags))
76 kwargs.setdefault("StreamName", "sTgcSimForklift")
77 kwargs.setdefault("SimHitKey", "xStgcSimHits")
78 kwargs.setdefault("EffiDataKey", "")
79 """
80 from MuonConfig.MuonCondAlgConfig import sTgcDigitEffiCondAlgCfg
81 result.merge(sTgcDigitEffiCondAlgCfg(flags,readFromJSON="EffMapsTGC.json"))
82 kwargs.setdefault("EffiDataKey", "sTgcDigitEff")
83 """
84 from MuonConfig.MuonCalibrationConfig import NswErrorCalibDbAlgCfg
85 result.merge(NswErrorCalibDbAlgCfg(flags))
86 the_tool = CompFactory.MuonR4.sTgcFastDigiTool(name, **kwargs)
87
88 else:
89 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
90 result.merge(ActsGeometryContextAlgCfg(flags))
91 kwargs.setdefault("StreamName", "sTgcSimForklift")
92 kwargs.setdefault("SimHitKey", "xStgcSimHits")
93 kwargs.setdefault("EffiDataKey", "")
94
95 from MuonConfig.MuonCalibrationConfig import NswErrorCalibDbAlgCfg, STgcCalibSmearingToolCfg
96 kwargs.setdefault("doToFCorrection", True)
97 kwargs.setdefault("SmearingTool", result.popToolsAndMerge(STgcCalibSmearingToolCfg(flags)))
98 result.merge(NswErrorCalibDbAlgCfg(flags))
99 the_tool = CompFactory.MuonR4.sTgcDigitizationTool(name, **kwargs)
100
101 result.setPrivateTools(the_tool)
102 return result
103
104def sTGC_OverlayDigitizationToolCfg(flags, name="STGC_OverlayDigitizationTool", **kwargs):
105 """Return ComponentAccumulator with TgcDigitizationTool configured for Overlay"""
106 acc = ComponentAccumulator()
107 kwargs.setdefault("PileUpMergeSvc", '')
108 kwargs.setdefault("OnlyUseContainerName", False)
109 kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "sTGC_DIGITS")
110 kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "sTGC_SDO")
111 the_tool = acc.popToolsAndMerge(sTGC_DigitizationToolCfg(flags, name=name, **kwargs))
112 acc.setPrivateTools(the_tool)
113 return acc
114
115
116def sTGC_OutputCfg(flags):
117 """Return ComponentAccumulator with Output for sTGC. Not standalone."""
118 acc = ComponentAccumulator()
119 if flags.Output.doWriteRDO:
120 ItemList = ["Muon::STGC_RawDataContainer#*"]
121 if flags.Digitization.EnableTruth:
122 ItemList += ["MuonSimDataCollection#*"]
123 ItemList += ["xAOD::MuonSimHitContainer#*STGC_SDO",
124 "xAOD::MuonSimHitAuxContainer#*STGC_SDOAux."]
125
126 acc.merge(TruthDigitizationOutputCfg(flags))
127 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
128 return acc
129
130
131def sTGC_DigitizationBasicCfg(flags, **kwargs):
132 """Return ComponentAccumulator for sTGC digitization"""
133 acc = MuonGeoModelCfg(flags)
134 if "PileUpTools" not in kwargs:
135 PileUpTools = acc.popToolsAndMerge(sTGC_DigitizationToolCfg(flags))
136 kwargs["PileUpTools"] = PileUpTools
137 acc.merge(PileUpToolsCfg(flags, **kwargs))
138 return acc
139
140
142 """Return ComponentAccumulator with sTGC Overlay digitization"""
143 acc = MuonGeoModelCfg(flags)
144 if flags.Common.ProductionStep != ProductionStep.FastChain:
145 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
146 if flags.Muon.usePhaseIIGeoSetup:
147 acc.merge(SGInputLoaderCfg(flags, ["xAOD::MuonSimHitContainer#xStgcSimHits",
148 "xAOD::MuonSimHitAuxContainer#xStgcSimHitsAux."]))
149 else:
150 acc.merge(SGInputLoaderCfg(flags, ["sTGCSimHitCollection#sTGC_Hits"]))
151 kwargs.setdefault("DigitizationTool", acc.popToolsAndMerge(sTGC_OverlayDigitizationToolCfg(flags)))
152
153 if flags.Concurrency.NumThreads > 0:
154 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
155
156 # Set common overlay extra inputs
157 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
158
159 the_alg = CompFactory.MuonDigitizer(name="STGC_OverlayDigitizer", **kwargs)
160 acc.addEventAlgo(the_alg)
161 return acc
162
163
164# with output defaults
165def sTGC_DigitizationCfg(flags, **kwargs):
166 """Return ComponentAccumulator for sTGC digitization and Output"""
167 acc = sTGC_DigitizationBasicCfg(flags, **kwargs)
168 acc.merge(sTGC_OutputCfg(flags))
169 return acc
170
171
173 """Return ComponentAccumulator with sTGC digitization and Digit to TGCRDO"""
174 acc = sTGC_DigitizationCfg(flags)
175 acc.merge(STGC_DigitToRDOCfg(flags))
176 return acc
sTGC_OverlayDigitizationToolCfg(flags, name="STGC_OverlayDigitizationTool", **kwargs)
sTGC_OverlayDigitizationBasicCfg(flags, **kwargs)
sTGC_DigitizationBasicCfg(flags, **kwargs)
sTGC_RangeCfg(flags, name="sTgcRange", **kwargs)
sTGC_DigitizationToolCfg(flags, name="sTgcDigitizationTool", **kwargs)