ATLAS Offline Software
Loading...
Searching...
No Matches
RPC_DigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured RPC 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 LHCPeriod, ProductionStep
8from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
9from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
10from MuonConfig.MuonByteStreamCnvTestConfig import RpcDigitToRpcRDOCfg
11from MuonConfig.MuonByteStreamCnvTestConfig import NrpcDigitToNrpcRDOCfg
12from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
13from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
14from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
15from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
16
17
18# The earliest and last bunch crossing times for which interactions will be sent
19# to the RpcDigitizationTool.
21 return -150
22
23
25 return 125
26
27
28def RPC_RangeCfg(flags, name="RPC_Range", **kwargs):
29 """Return a PileUpXingFolder tool configured for RPC"""
30 kwargs.setdefault("FirstXing", RPC_FirstXing())
31 kwargs.setdefault("LastXing", RPC_LastXing())
32 kwargs.setdefault("CacheRefreshFrequency", 1.0)
33 if flags.Muon.usePhaseIIGeoSetup:
34 kwargs.setdefault("ItemList", ["xAOD::MuonSimHitContainer#xRpcSimHits",
35 "xAOD::MuonSimHitAuxContainer#xRpcSimHitsAux."])
36 else:
37 kwargs.setdefault("ItemList", ["RPCSimHitCollection#RPC_Hits"])
38
39 return PileUpXingFolderCfg(flags, name, **kwargs)
40
41
42
43def RPC_DigitizationToolCommonCfg(flags, name="RpcDigitizationTool", **kwargs):
44 """Return ComponentAccumulator with configured RpcDigitizationTool"""
45 acc = ComponentAccumulator()
46
47 if flags.GeoModel.Run < LHCPeriod.Run3: # Run 3 and later currently do not use conditions
48 from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg
49 acc.merge(RpcCondDbAlgCfg(flags))
50
51 if flags.Digitization.DoXingByXingPileUp:
52 kwargs.setdefault("FirstXing", RPC_FirstXing())
53 kwargs.setdefault("LastXing", RPC_LastXing())
54 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
55 kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "RPC_SDO")
56 else:
57 kwargs.setdefault("OutputSDOName", "RPC_SDO")
58
59 from RngComps.RngCompsConfig import AthRNGSvcCfg
60 kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
61 kwargs.setdefault("OutputObjectName", "RPC_DIGITS")
62
63
64 if flags.Muon.usePhaseIIGeoSetup:
65 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
66 acc.merge(ActsGeometryContextAlgCfg(flags))
67 kwargs.setdefault("StreamName", "RpcSimForklift")
68 kwargs.setdefault("SimHitKey", "xRpcSimHits")
69 kwargs.setdefault("EffiDataKey", "")
70 if flags.Muon.doFastRpcDigitization:
71 the_tool = CompFactory.MuonR4.RpcFastDigiTool(name="RpcDigitizationTool", **kwargs)
72 else:
73 the_tool = CompFactory.MuonR4.RpcDigiTool(name="RpcDigitizationTool", **kwargs)
74 acc.setPrivateTools(the_tool)
75 return acc
76
77 # config
78 kwargs.setdefault("DeadTime", 100)
79 kwargs.setdefault("PatchForRpcTime", True)
80 # kwargs.setdefault("PatchForRpcTimeShift", 9.6875)
81 kwargs.setdefault("PatchForRpcTimeShift", 12.5)
82 kwargs.setdefault("turnON_efficiency", True)
83 kwargs.setdefault("turnON_clustersize", True)
84 kwargs.setdefault("ClusterSize1_2uncorr", False)
85 kwargs.setdefault("CutProjectedTracks", 100)
86 kwargs.setdefault("RPCInfoFromDb", True)
87 kwargs.setdefault("Efficiency_fromCOOL", True)
88 kwargs.setdefault("EfficiencyPatchForBMShighEta", False)
89 kwargs.setdefault("ClusterSize_fromCOOL", True)
90 kwargs.setdefault("IgnoreRunDependentConfig", False)
91 kwargs.setdefault("PhiAndEtaEff_A",[0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938])
92 kwargs.setdefault("OnlyPhiEff_A" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
93 kwargs.setdefault("OnlyEtaEff_A" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
94 kwargs.setdefault("PhiAndEtaEff_C",[0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938, 0.938])
95 kwargs.setdefault("OnlyPhiEff_C" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
96 kwargs.setdefault("OnlyEtaEff_C" ,[0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022, 0.022])
97 kwargs.setdefault("FracClusterSize1_A", [0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664])
98 kwargs.setdefault("FracClusterSize2_A", [0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986])
99 kwargs.setdefault("FracClusterSizeTail_A",[0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035 ])
100 kwargs.setdefault("MeanClusterSizeTail_A",[0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598])
101 kwargs.setdefault("FracClusterSize1_C", [0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664, 0.609664])
102 kwargs.setdefault("FracClusterSize2_C", [0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986, 0.259986])
103 kwargs.setdefault("FracClusterSizeTail_C",[0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035, 0.13035 ])
104 kwargs.setdefault("MeanClusterSizeTail_C",[0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598, 0.548598])
105 RpcDigitizationTool = CompFactory.RpcDigitizationTool(name, **kwargs)
106 acc.setPrivateTools(RpcDigitizationTool)
107 return acc
108
109
110def RPC_DigitizationToolCfg(flags, name="RpcDigitizationTool", **kwargs):
111 """Return ComponentAccumulator with configured RpcDigitizationTool"""
112 acc = ComponentAccumulator()
113 if flags.Digitization.PileUp:
114 intervals = []
115 if not flags.Digitization.DoXingByXingPileUp:
116 intervals += [acc.popToolsAndMerge(RPC_RangeCfg(flags))]
117 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
118 else:
119 kwargs.setdefault("PileUpMergeSvc", '')
120 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
121 kwargs.setdefault("OutputObjectName", "RPC_DIGITS")
122 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
123 kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "RPC_SDO")
124 else:
125 kwargs.setdefault("OutputSDOName", "RPC_SDO")
126 tool = acc.popToolsAndMerge(RPC_DigitizationToolCommonCfg(flags, name, **kwargs))
127 acc.setPrivateTools(tool)
128 return acc
129
130
131def RPC_OverlayDigitizationToolCfg(flags, name="Rpc_OverlayDigitizationTool", **kwargs):
132 """Return ComponentAccumulator with RpcDigitizationTool configured for Overlay"""
133 kwargs.setdefault("OnlyUseContainerName", False)
134 kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "RPC_DIGITS")
135 kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "RPC_SDO")
136 kwargs.setdefault("PileUpMergeSvc", '')
137 return RPC_DigitizationToolCommonCfg(flags, name, **kwargs)
138
139
140def RPC_OutputCfg(flags):
141 """Return ComponentAccumulator with Output for RPC. Not standalone."""
142 acc = ComponentAccumulator()
143 if flags.Output.doWriteRDO:
144 ItemList = []
145 if not flags.Muon.usePhaseIIGeoSetup:
146 ItemList+=["RpcPadContainer#*"]
147 if flags.Digitization.EnableTruth:
148 ItemList += ["MuonSimDataCollection#*"]
149 if flags.Muon.enableNRPC:
150 ItemList += [ 'xAOD::NRPCRDOContainer#*' , 'xAOD::NRPCRDOAuxContainer#*' ]
151 if flags.Digitization.EnableTruth:
152 ItemList += ["xAOD::MuonSimHitContainer#*RPC_SDO",
153 "xAOD::MuonSimHitAuxContainer#*RPC_SDOAux."]
154 acc.merge(TruthDigitizationOutputCfg(flags))
155 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
156 return acc
157
158
159def RPC_DigitizationBasicCfg(flags, **kwargs):
160 """Return ComponentAccumulator for RPC digitization"""
161 acc = MuonGeoModelCfg(flags)
162 if "PileUpTools" not in kwargs:
163 PileUpTools = acc.popToolsAndMerge(RPC_DigitizationToolCfg(flags))
164 kwargs["PileUpTools"] = PileUpTools
165 acc.merge(PileUpToolsCfg(flags, **kwargs))
166 return acc
167
168
170 """Return ComponentAccumulator with RPC Overlay digitization"""
171 acc = MuonGeoModelCfg(flags)
172
173 if flags.Common.ProductionStep != ProductionStep.FastChain:
174 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
175 if flags.Muon.usePhaseIIGeoSetup:
176 acc.merge(SGInputLoaderCfg(flags,["xAOD::MuonSimHitContainer#xRpcSimHits",
177 "xAOD::MuonSimHitAuxContainer#xRpcSimHitsAux."]))
178 else:
179 acc.merge(SGInputLoaderCfg(flags, ["RPCSimHitCollection#RPC_Hits"]))
180
181 kwargs.setdefault("DigitizationTool", acc.popToolsAndMerge(RPC_OverlayDigitizationToolCfg(flags)))
182
183 if flags.Concurrency.NumThreads > 0:
184 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
185
186 # Set common overlay extra inputs
187 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
188
189 the_alg = CompFactory.MuonDigitizer(name="RPC_OverlayDigitizer", **kwargs)
190 acc.addEventAlgo(the_alg)
191 return acc
192
193
194# with output defaults
195def RPC_DigitizationCfg(flags, **kwargs):
196 """Return ComponentAccumulator for RPC digitization and Output"""
197 acc = RPC_DigitizationBasicCfg(flags, **kwargs)
198 acc.merge(RPC_OutputCfg(flags))
199 return acc
200
201
203 """Return ComponentAccumulator with RPC digitization and Digit to RPCPAD RDO"""
204 acc = RPC_DigitizationCfg(flags)
205 acc.merge(RPCCablingConfigCfg(flags))
206 if not flags.Muon.usePhaseIIGeoSetup:
207 acc.merge(RpcDigitToRpcRDOCfg(flags))
208 if flags.Muon.enableNRPC:
209 acc.merge(NrpcDigitToNrpcRDOCfg(flags))
210 return acc
211
RPC_RangeCfg(flags, name="RPC_Range", **kwargs)
RPC_DigitizationToolCommonCfg(flags, name="RpcDigitizationTool", **kwargs)
RPC_OverlayDigitizationToolCfg(flags, name="Rpc_OverlayDigitizationTool", **kwargs)
RPC_DigitizationBasicCfg(flags, **kwargs)
RPC_DigitizationToolCfg(flags, name="RpcDigitizationTool", **kwargs)
RPC_OverlayDigitizationBasicCfg(flags, **kwargs)