ATLAS Offline Software
Loading...
Searching...
No Matches
MM_DigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured MM Digitization tools and algorithms
2
3Copyright (C) 2002-2022 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 DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
9from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
10from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
11from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
12from MuonConfig.MuonByteStreamCnvTestConfig import MM_DigitToRDOCfg
13from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
14from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
15
16# The earliest and last bunch crossing times for which interactions will be sent
17# to the MMDigitizationTool.
19 return -200
20
21
23 return 200
24
25
26def MM_RangeCfg(flags, name="MMRange", **kwargs):
27 """Return a PileUpXingFolder tool configured for MM"""
28 kwargs.setdefault("FirstXing", MM_FirstXing())
29 kwargs.setdefault("LastXing", MM_LastXing())
30 kwargs.setdefault("CacheRefreshFrequency", 1.0)
31 if flags.Muon.usePhaseIIGeoSetup:
32 kwargs.setdefault("ItemList", ["xAOD::MuonSimHitContainer#xMmSimHits",
33 "xAOD::MuonSimHitAuxContainer#xMmSimHitsAux."])
34 else:
35 kwargs.setdefault("ItemList", ["MMSimHitCollection#MM_Hits"])
36 return PileUpXingFolderCfg(flags, name, **kwargs)
37
38
39def MM_DigitizationToolCfg(flags, name="MM_DigitizationTool", **kwargs):
40 """Return ComponentAccumulator with configured MM_DigitizationTool"""
41 result = ComponentAccumulator()
42
43 from RngComps.RngCompsConfig import AthRNGSvcCfg
44 kwargs.setdefault("RndmSvc", result.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
45
46 if flags.Digitization.PileUp:
47 intervals = []
48 if flags.Digitization.DoXingByXingPileUp:
49 kwargs.setdefault("FirstXing", MM_FirstXing())
50 kwargs.setdefault("LastXing", MM_LastXing())
51 else:
52 intervals += [result.popToolsAndMerge(MM_RangeCfg(flags))]
53 kwargs.setdefault("PileUpMergeSvc", result.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
54 else:
55 kwargs.setdefault("PileUpMergeSvc", '')
56
57 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
58
59 kwargs.setdefault("OutputObjectName", "MM_DIGITS")
60 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
61 kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "MM_SDO")
62 else:
63 kwargs.setdefault("OutputSDOName", "MM_SDO")
64
65 the_tool = None
66 if not flags.Muon.usePhaseIIGeoSetup:
67 from MuonConfig.MuonCalibrationConfig import NSWCalibToolCfg, MMCalibSmearingToolCfg
68 kwargs.setdefault("CalibrationTool", result.popToolsAndMerge(NSWCalibToolCfg(flags)))
69 kwargs.setdefault("SmearingTool", result.popToolsAndMerge(MMCalibSmearingToolCfg(flags)))
70 result.merge(AtlasFieldCacheCondAlgCfg(flags))
71 kwargs.setdefault("CheckSimHits", True)
72 the_tool = CompFactory.MM_DigitizationTool(name, **kwargs)
73 elif flags.Muon.doFastMMDigitization:
74 kwargs.setdefault("StreamName", "MmSimForklift")
75 kwargs.setdefault("SimHitKey", "xMmSimHits")
76 """
77 from MuonConfig.MuonCondAlgConfig import MmDigitEffiCondAlgCfg
78 result.merge(MmDigitEffiCondAlgCfg(flags,readFromJSON="EffMapMM.json"))
79 kwargs.setdefault("EffiDataKey", "MmDigitEff")
80 """
81
82 kwargs.setdefault("EffiDataKey", "")
83
84 from MuonConfig.MuonCalibrationConfig import NswErrorCalibDbAlgCfg
85 result.merge(NswErrorCalibDbAlgCfg(flags))
86 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
87 result.merge(ActsGeometryContextAlgCfg(flags))
88 the_tool = CompFactory.MuonR4.MmFastDigiTool(name, **kwargs)
89 else:
90 from MuonConfig.MuonCalibrationConfig import NSWCalibToolCfg, MMCalibSmearingToolCfg
91 kwargs.setdefault("CalibrationTool", result.popToolsAndMerge(NSWCalibToolCfg(flags)))
92 kwargs.setdefault("SmearingTool", result.popToolsAndMerge(MMCalibSmearingToolCfg(flags)))
93 result.merge(AtlasFieldCacheCondAlgCfg(flags))
94 kwargs.setdefault("CheckSimHits", True)
95
96 kwargs.setdefault("StreamName", "MmSimForklift")
97 kwargs.setdefault("SimHitKey", "xMmSimHits")
98
99 kwargs.setdefault("EffiDataKey", "")
100
101 from MuonConfig.MuonCalibrationConfig import NswErrorCalibDbAlgCfg
102 result.merge(NswErrorCalibDbAlgCfg(flags))
103 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
104 result.merge(ActsGeometryContextAlgCfg(flags))
105 the_tool = CompFactory.MuonR4.MM_DigitizationTool(name, **kwargs)
106
107
108 result.setPrivateTools(the_tool)
109 return result
110
111
112def MM_OverlayDigitizationToolCfg(flags, name="MM_OverlayDigitizationTool", **kwargs):
113 """Return ComponentAccumulator with MM_DigitizationTool configured for Overlay"""
114 acc= ComponentAccumulator()
115 kwargs.setdefault("PileUpMergeSvc", '')
116
117 kwargs.setdefault("OnlyUseContainerName", False)
118 kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "MM_DIGITS")
119 kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "MM_SDO")
120 the_tool = acc.popToolsAndMerge(MM_DigitizationToolCfg(flags, **kwargs))
121 acc.setPrivateTools(the_tool)
122 return acc
123
124
125def MM_OutputCfg(flags):
126 """Return ComponentAccumulator with Output for MM. Not standalone."""
127 acc = ComponentAccumulator()
128 if flags.Output.doWriteRDO:
129 ItemList = ["Muon::MM_RawDataContainer#*"]
130 if flags.Digitization.EnableTruth:
131 ItemList += ["MuonSimDataCollection#*"]
132 ItemList += ["xAOD::MuonSimHitContainer#*MM_SDO",
133 "xAOD::MuonSimHitAuxContainer#*MM_SDOAux."]
134
135 acc.merge(TruthDigitizationOutputCfg(flags))
136 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
137 return acc
138
139
140def MM_DigitizationBasicCfg(flags, **kwargs):
141 """Return ComponentAccumulator for MM digitization"""
142 acc = MuonGeoModelCfg(flags)
143 if "PileUpTools" not in kwargs:
144 PileUpTools = acc.popToolsAndMerge(MM_DigitizationToolCfg(flags))
145 kwargs["PileUpTools"] = PileUpTools
146 acc.merge(PileUpToolsCfg(flags, **kwargs))
147 return acc
148
149
151 """Return ComponentAccumulator with MM Overlay digitization"""
152 acc = MuonGeoModelCfg(flags)
153 if flags.Common.ProductionStep != ProductionStep.FastChain:
154 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
155 if flags.Muon.usePhaseIIGeoSetup:
156 acc.merge(SGInputLoaderCfg(flags,["xAOD::MuonSimHitContainer#xMmSimHits",
157 "xAOD::muonSimHitAuxConatiner#xMmSimHitsAux."]))
158 else:
159 acc.merge(SGInputLoaderCfg(flags, ["MMSimHitCollection#MM_Hits"]))
160
161 kwargs.setdefault("DigitizationTool", acc.popToolsAndMerge(MM_OverlayDigitizationToolCfg(flags)))
162
163 if flags.Concurrency.NumThreads > 0:
164 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
165
166 # Set common overlay extra inputs
167 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
168
169 acc.addEventAlgo(CompFactory.MuonDigitizer(name="MM_OverlayDigitizer", **kwargs))
170 return acc
171
172
173# with output defaults
174def MM_DigitizationCfg(flags, **kwargs):
175 """Return ComponentAccumulator for MM digitization and Output"""
176 acc = MM_DigitizationBasicCfg(flags, **kwargs)
177 acc.merge(MM_OutputCfg(flags))
178 return acc
179
180
182 """Return ComponentAccumulator with TGC digitization and Digit to TGCRDO"""
183 acc = MM_DigitizationCfg(flags)
184 acc.merge(MM_DigitToRDOCfg(flags))
185 return acc
MM_DigitizationCfg(flags, **kwargs)
MM_DigitizationBasicCfg(flags, **kwargs)
MM_DigitizationToolCfg(flags, name="MM_DigitizationTool", **kwargs)
MM_RangeCfg(flags, name="MMRange", **kwargs)
MM_OverlayDigitizationToolCfg(flags, name="MM_OverlayDigitizationTool", **kwargs)
MM_OverlayDigitizationBasicCfg(flags, **kwargs)