ATLAS Offline Software
Loading...
Searching...
No Matches
MuonRdoDecodeConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5from AthenaConfiguration.Enums import Format
6from AthenaCommon.Constants import DEBUG, INFO
7
8
9class MuonPrdCacheNames(object):
10 MdtCache = "MdtPrdCache"
11 CscCache = "CscPrdCache"
12 CscStripCache = "CscStripPrdCache"
13 RpcCache = "RpcPrdCache"
14 TgcCache = "TgcPrdCacheAllBCs"
15 sTgcCache = "sTgcPrdCache"
16 MmCache = "MmPrdCache"
17 RpcCoinCache = "RpcCoinCache"
18 TgcCoinCache = "TgcCoinCache"
19
20
21
25def MuonPrdCacheCfg(flags):
26 # Use MuonGeometryFlags to identify which configuration is being used
27
28 acc = ComponentAccumulator()
29 from MuonConfig.MuonGeometryConfig import MuonIdHelperSvcCfg
30 MuonIdHelperSvc = acc.getPrimaryAndMerge( MuonIdHelperSvcCfg(flags) )
31
32 MuonPRDCacheCreator=CompFactory.MuonPRDCacheCreator
33 cacheCreator = MuonPRDCacheCreator(CscStripCacheKey = (MuonPrdCacheNames.CscStripCache if flags.Detector.GeometryCSC else ""),
34 MdtCacheKey = MuonPrdCacheNames.MdtCache,
35 CscCacheKey = (MuonPrdCacheNames.CscCache if flags.Detector.GeometryCSC else ""),
36 RpcCacheKey = MuonPrdCacheNames.RpcCache,
37 TgcCacheKey = MuonPrdCacheNames.TgcCache,
38 sTgcCacheKey = (MuonPrdCacheNames.sTgcCache if flags.Detector.GeometrysTGC else ""),
39 MmCacheKey = (MuonPrdCacheNames.MmCache if flags.Detector.GeometryMM else ""),
40 TgcCoinCacheStr = MuonPrdCacheNames.TgcCoinCache,
41 RpcCoinCacheKey = MuonPrdCacheNames.RpcCoinCache,
42 MuonIdHelperSvc = MuonIdHelperSvc
43 )
44
45 acc.addEventAlgo( cacheCreator, primary=True )
46 return acc
47
48def MuonRdoToPrepDataAlgCfg(flags, name="MuonRdoToPrepDataAlg", **kwargs):
49 result = ComponentAccumulator()
50 # Make sure muon geometry is configured
51 from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
52 result.merge(MuonGeoModelCfg(flags))
53 if flags.Muon.usePhaseIIGeoSetup:
54 from ActsAlignmentAlgs.AlignmentAlgsConfig import ActsGeometryContextAlgCfg
55 result.merge(ActsGeometryContextAlgCfg(flags))
56
57 kwargs.setdefault("DoSeededDecoding", flags.Trigger.doHLT )
58 the_alg = CompFactory.MuonRdoToPrepDataAlg(name, **kwargs)
59 result.addEventAlgo(the_alg, primary = True)
60 return result
61
64def RpcRdoToPrepDataToolCfg(flags, suffix ="", RDOContainer = None, **kwargs):
65 result = ComponentAccumulator()
66
68 if flags.Muon.usePhaseIIGeoSetup and ( \
69 not flags.Input.isMC or len([x for x in flags.Input.TypedCollections if x.find("RpcPadContainer#") != -1])):
70
71 from MuonConfig.MuonByteStreamCnvTestConfig import RpcRdoToRpcDigitCfg, NrpcDigitToNrpcRDOCfg
72
73 cnv_args = {}
74 if RDOContainer: cnv_args.setdefault("RpcRdoContainer", RDOContainer)
75
76 result.merge(RpcRdoToRpcDigitCfg(flags,
77 name="RpcRdoDigitPatchAlg" + suffix,
78 RpcDigitContainer="CnvRpcDigits",
79 **cnv_args))
80
81 result.merge(NrpcDigitToNrpcRDOCfg(flags,
82 name="RpcBackConverterAlg" + suffix,
83 RpcDigitContainer="CnvRpcDigits",
84 NrpcRdoKey="CnvRpcRDOs"))
85 kwargs.setdefault("RpcRdoContainer", "CnvRpcRDOs")
86
88 if RDOContainer:
89 kwargs.setdefault("RpcRdoContainer", RDOContainer)
90
91 if flags.Muon.usePhaseIIGeoSetup:
92 from MuonConfig.MuonCablingConfig import NRPCCablingConfigCfg
93 result.merge(NRPCCablingConfigCfg(flags))
94 from AthenaConfiguration.Enums import LHCPeriod
95 kwargs.setdefault("decode2DStrips", flags.GeoModel.Run >= LHCPeriod.Run4)
96 if not kwargs["decode2DStrips"]:
97 kwargs.setdefault("OutputContainer", "xRpcMeasurements")
98 the_tool = CompFactory.MuonR4.RpcRdoToRpcPrepDataTool(name="RpcPrepDataProviderTool", **kwargs)
99 result.setPrivateTools(the_tool)
100 else:
101 # We need the RPC cabling to be setup
102 from MuonConfig.MuonCablingConfig import RPCLegacyCablingConfigCfg
103 result.merge(RPCLegacyCablingConfigCfg(flags))
104
105 if not flags.Input.isMC:
106 kwargs["reduceCablingOverlap"] = True
107 kwargs["produceRpcCoinDatafromTriggerWords"] = True
108 kwargs["overlap_timeTolerance"] = 1000
109 kwargs["solvePhiAmbiguities"] = True
110 kwargs["etaphi_coincidenceTime"] = 1000
111 if not flags.Trigger.doHLT:
112 kwargs["RpcPrdContainerCacheKey"] = ""
113 kwargs["RpcCoinDataContainerCacheKey"] = ""
114
115 from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg
116 result.merge(RpcCondDbAlgCfg(flags))
117 else:
118 kwargs["RPCInfoFromDb"] = False
119
120 if not flags.Muon.enableNRPC:
121 kwargs["NrpcInputCollection"] = ""
122
123
124
129 if not flags.Input.isMC and (flags.Muon.MuonTrigger or flags.Input.RunNumbers[0] >= 454434):
130 kwargs["timeShift"] = 37.5
131 #Setup RPC RDO decoder to be consistent with RPC readout settings
132 if flags.Muon.MuonTrigger:
133 kwargs["RdoDecoderTool"] = CompFactory.Muon.RpcRDO_Decoder("RpcRDO_Decoder", BCZERO=flags.Trigger.L1MuonSim.RPCNBCZ)
134
135 kwargs.setdefault("isMC", flags.Input.isMC)
136 the_tool = CompFactory.Muon.RpcRdoToPrepDataToolMT(name="RpcPrepDataProviderTool",**kwargs)
137 result.setPrivateTools(the_tool)
138
139 return result
140
141def RpcRDODecodeCfg(flags, name="MuonRpcRdoToPrdConv", RDOContainer = None, **kwargs):
142 acc = ComponentAccumulator()
143
144 suffix = name[name.find("_") :] if name.find("_") != -1 else ""
145 # Conditions not needed for online
146 # Get the RDO -> PRD tool
147 kwargs.setdefault("DecodingTool", acc.popToolsAndMerge(RpcRdoToPrepDataToolCfg(flags, suffix=suffix, RDOContainer=RDOContainer)))
148 # add RegSelTool
149 from RegionSelector.RegSelToolConfig import regSelTool_RPC_Cfg
150 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_RPC_Cfg(flags)))
151 kwargs.setdefault("useROBs", False)
152
153 # Add the RDO -> PRD alorithm
154 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
155
156
157 if flags.Muon.usePhaseIIGeoSetup:
158 from xAODMuonTrkPrepDataCnv.MuonPrepDataCnvCfg import xRpcToPrepDataCnvAlgCfg
159 from AthenaConfiguration.Enums import LHCPeriod
160 if flags.GeoModel.Run >= LHCPeriod.Run4:
161 from xAODMuonViewAlgs.ViewAlgsConfig import RpcMeasViewAlgCfg
162 acc.merge(RpcMeasViewAlgCfg(flags, name=f"RpcMeasViewAlg{suffix}"))
163 acc.merge(xRpcToPrepDataCnvAlgCfg(flags, name=f"xAODRpcToPrepDataCnvAlg{suffix}"))
164
165 return acc
166
167
168def TgcRDODecodeCfg(flags, name="MuonTgcRdoToPrdConv", RDOContainer = None, **kwargs):
169 acc = ComponentAccumulator()
170 suffix = name[name.find("_") :] if name.find("_") != -1 else ""
171
172 # We need the TGC cabling to be setup
173 from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
174 acc.merge(TGCCablingConfigCfg(flags))
175
176 # Get the RDO -> PRD tool
177 tool_args = {}
178
179 if flags.Muon.usePhaseIIGeoSetup:
180 from MuonConfig.MuonByteStreamCnvTestConfig import TgcRdoToTgcDigitCfg
181 acc.merge(TgcRdoToTgcDigitCfg(flags, name=f"MuonTgcRdoToDigitR4{suffix}",
182 TgcRdoContainer = "TGCRDO" if not RDOContainer else RDOContainer,
183 TgcDigitContainer="TgcDigitsRdoConv"))
184 kwargs.setdefault("DecodingTool",
185 CompFactory.MuonR4.TgcDigitToPrepDataCnvTool(name="TgcPrepDataProviderTool",
186 ReadKey="TgcDigitsRdoConv",
187 convertAllBCs = not flags.Muon.useTGCPriorNextBC))
188 from xAODMuonTrkPrepDataCnv.MuonPrepDataCnvCfg import xTgcToPrepDataCnvAlgCfg
189 acc.merge(xTgcToPrepDataCnvAlgCfg(flags, name=f"xAODTgcToPrepDataCnvAlg{suffix}"))
190
191 else:
192 if not flags.Trigger.doHLT:
193 tool_args.setdefault("UpdateKeyPrd", "")
194 tool_args.setdefault("CoinCacheString", "")
195
196 if RDOContainer:
197 tool_args.setdefault("RDOContainer", RDOContainer)
198 tool_args.setdefault("convertAllBCs", not flags.Muon.useTGCPriorNextBC)
199 kwargs.setdefault("DecodingTool", CompFactory.Muon.TgcRdoToPrepDataToolMT(name="TgcPrepDataProviderTool", **tool_args))
200
201 # add RegSelTool
202 from RegionSelector.RegSelToolConfig import regSelTool_TGC_Cfg
203 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_TGC_Cfg(flags)))
204 kwargs.setdefault("useROBs", False)
205
206
207
208 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
209 return acc
210
211def StgcRdoToPrepDataToolCfg(flags, name="STGC_PrepDataProviderTool", **kwargs):
212 result = ComponentAccumulator()
213 kwargs.setdefault("UseR4DetMgr", flags.Muon.usePhaseIIGeoSetup)
214 if flags.Muon.writexAODPRD or flags.Muon.usePhaseIIGeoSetup:
215 kwargs.setdefault("xAODStripKey", "xAODsTgcStrips")
216 kwargs.setdefault("xAODWireKey", "xAODsTgcWires")
217 kwargs.setdefault("xAODPadKey", "xAODsTgcPads")
218
219 from MuonConfig.MuonRecToolsConfig import SimpleSTgcClusterBuilderToolCfg
220 kwargs.setdefault("ClusterBuilderTool",result.popToolsAndMerge(SimpleSTgcClusterBuilderToolCfg(flags)))
221 from MuonConfig.MuonCalibrationConfig import NSWCalibToolCfg
222 kwargs.setdefault("NSWCalibTool", result.popToolsAndMerge(NSWCalibToolCfg(flags)))
223 the_tool = CompFactory.Muon.sTgcRdoToPrepDataToolMT(name, **kwargs)
224 result.setPrivateTools(the_tool)
225 return result
226
227
228def StgcRDODecodeCfg(flags, name="MuonStgcRdoToPrdConv", **kwargs):
229 acc = ComponentAccumulator()
230 # Get the RDO -> PRD tool
231 kwargs.setdefault("DecodingTool", acc.popToolsAndMerge(StgcRdoToPrepDataToolCfg(flags)))
232 # add RegSelTool
233 from RegionSelector.RegSelToolConfig import regSelTool_STGC_Cfg
234 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_STGC_Cfg(flags)))
235 kwargs.setdefault("useROBs", False)
236
237
238
239 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
240 if flags.Muon.writexAODPRD or flags.Muon.usePhaseIIGeoSetup:
241 suffix = name[name.find("_") :] if name.find("_") != -1 else ""
242 from xAODMuonViewAlgs.ViewAlgsConfig import sTgcMeasViewAlgCfg
243 acc.merge(sTgcMeasViewAlgCfg(flags, name=f"sTgcMeasViewAlg{suffix}"))
244
245 return acc
246
247
248def MMRdoToPrepDataToolCfg(flags, name="MmRdoToPrepDataTool", **kwargs):
249 result = ComponentAccumulator()
250
251 from MuonConfig.MuonRecToolsConfig import SimpleMMClusterBuilderToolCfg
252 kwargs.setdefault("ClusterBuilderTool",result.popToolsAndMerge(SimpleMMClusterBuilderToolCfg(flags)))
253 from MuonConfig.MuonCalibrationConfig import NSWCalibToolCfg
254 kwargs.setdefault("NSWCalibTool", result.popToolsAndMerge(NSWCalibToolCfg(flags)))
255 kwargs["xAODKey"] = "xAODMMClusters" if flags.Muon.writexAODPRD or flags.Muon.usePhaseIIGeoSetup else ""
256 kwargs["UseR4DetMgr"] = flags.Muon.usePhaseIIGeoSetup
257 the_tool = CompFactory.Muon.MmRdoToPrepDataToolMT(name, **kwargs)
258 result.setPrivateTools(the_tool)
259 return result
260
261
262def MMRDODecodeCfg(flags, name="MuonMmRdoToPrdConv", **kwargs):
263 acc = ComponentAccumulator()
264
265 kwargs.setdefault("DecodingTool", acc.popToolsAndMerge(MMRdoToPrepDataToolCfg(flags)))
266 # add RegSelTool
267 from RegionSelector.RegSelToolConfig import regSelTool_MM_Cfg
268 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_MM_Cfg(flags)))
269 kwargs.setdefault("useROBs", False)
270 # Add the RDO -> PRD alorithm
271 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
272 return acc
273
274
275def MdtRDODecodeCfg(flags, name="MuonMdtRdoToPrdConv", RDOContainer = None, **kwargs):
276 acc = ComponentAccumulator()
277 from MuonConfig.MuonCalibrationConfig import MdtCalibrationToolCfg
278
279 tool_kwargs = {}
280
281 # Twin tube conditions not available in COMP200.
282 tool_kwargs.setdefault('UseTwin', True)
283 if flags.IOVDb.DatabaseInstance == 'COMP200':
284 tool_kwargs['UseTwin'] = False
285
286 # We need the MDT cabling to be setup
287 from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg, MdtTwinTubeMapCondAlgCfg
288 acc.merge(MDTCablingConfigCfg(flags))
289 if tool_kwargs['UseTwin']:
290 acc.merge(MdtTwinTubeMapCondAlgCfg(flags))
291
292 tool_kwargs["CalibrationTool"] = acc.popToolsAndMerge(MdtCalibrationToolCfg(flags, TimeWindowSetting = 2,
293 DoPropagationCorrection = False))
294 if RDOContainer: tool_kwargs["RDOContainer"] = RDOContainer
295
296 # add RegSelTool
297 from RegionSelector.RegSelToolConfig import regSelTool_MDT_Cfg
298 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_MDT_Cfg(flags)))
299
300 # Add RDO -> PRD algorithm for Phase II
301 if flags.Muon.usePhaseIIGeoSetup:
302 kwargs["DecodingTool"] = CompFactory.MuonR4.MdtRdoToMdtPrepDataTool(name="MdtRdoToMdtPrepDataTool", **tool_kwargs)
303 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
304 suffix = name[name.find("_") :] if name.find("_") != -1 else ""
305 from xAODMuonViewAlgs.ViewAlgsConfig import MdtMeasViewAlgCfg
306 acc.merge(MdtMeasViewAlgCfg(flags, name=f"MdtMeasViewAlg{suffix}"))
307 from xAODMuonTrkPrepDataCnv.MuonPrepDataCnvCfg import xMdtToPrepDataCnvAlgCfg
308 acc.merge(xMdtToPrepDataCnvAlgCfg(flags, name=f"xAODMdtToPrepDataCnvAlg{suffix}"))
309 # else, use legacy
310 else:
311 kwargs.setdefault("DecodingTool", CompFactory.Muon.MdtRdoToPrepDataToolMT(name="MdtPrepDataProviderTool", **tool_kwargs))
312 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
313
314 return acc
315
316
317def CscRDODecodeCfg(flags, name="CscRdoToCscPrepData", RDOContainer = None, **kwargs):
318 acc = ComponentAccumulator()
319
320 # We need the CSC cabling to be setup
321 from MuonConfig.MuonCablingConfig import CSCCablingConfigCfg # Not yet been prepared
322 acc.merge(CSCCablingConfigCfg(flags))
323
324 from MuonConfig.MuonCondAlgConfig import CscCondDbAlgCfg
325 acc.merge(CscCondDbAlgCfg(flags))
326
327 # Get the RDO -> PRD tool
328
329 kwargs.setdefault("useROBs", False)
330 kwargs.setdefault("DecodingTool", CompFactory.Muon.CscRdoToCscPrepDataToolMT(name="CscPrepDataProviderTool"))
331 if RDOContainer:
332 kwargs["DecodingTool"].RDOContainer = RDOContainer
333 # add RegSelTool
334 from RegionSelector.RegSelToolConfig import regSelTool_CSC_Cfg
335 kwargs.setdefault("RegSelector", acc.popToolsAndMerge(regSelTool_CSC_Cfg(flags)))
336
337 # Add the RDO -> PRD alorithm
338 acc.merge(MuonRdoToPrepDataAlgCfg(flags, name, **kwargs))
339 return acc
340
341
342def CscClusterBuildCfg(flags, name="CscThresholdClusterBuilder"):
343 acc = ComponentAccumulator()
344 from MuonConfig.MuonGeometryConfig import MuonIdHelperSvcCfg
345 from MuonConfig.MuonSegmentFindingConfig import CalibCscStripFitterCfg, QratCscClusterFitterCfg, CscAlignmentTool
346 from MuonConfig.MuonCalibrationConfig import CscCalibToolCfg
347
348 # Get cluster creator tool
349
350 MuonIdHelperSvc = acc.getPrimaryAndMerge( MuonIdHelperSvcCfg(flags) )
351 CalibCscStripFitter = acc.getPrimaryAndMerge( CalibCscStripFitterCfg(flags) )
352 QratCscClusterFitter = acc.getPrimaryAndMerge( QratCscClusterFitterCfg(flags) )
353 SimpleCscClusterFitter = CompFactory.SimpleCscClusterFitter(CscAlignmentTool = CscAlignmentTool(flags) )
354 CscSplitClusterFitter = CompFactory.CscSplitClusterFitter( precision_fitter = QratCscClusterFitter,
355 default_fitter = SimpleCscClusterFitter )
356 CscCalibTool = acc.getPrimaryAndMerge( CscCalibToolCfg(flags) )
357 CscThresholdClusterBuilderTool=CompFactory.CscThresholdClusterBuilderTool
358 CscClusterBuilderTool = CscThresholdClusterBuilderTool(name = "CscThresholdClusterBuilderTool" ,
359 MuonIdHelperSvc = MuonIdHelperSvc,
360 strip_fitter = CalibCscStripFitter,
361 precision_fitter = QratCscClusterFitter,
362 default_fitter = SimpleCscClusterFitter,
363 split_fitter = CscSplitClusterFitter,
364 cscCalibTool = CscCalibTool)
365
366 #CSC cluster building
367 CscThresholdClusterBuilder=CompFactory.CscThresholdClusterBuilder
368 CscClusterBuilder = CscThresholdClusterBuilder(name = name,
369 cluster_builder = CscClusterBuilderTool,
370 MuonIdHelperSvc = MuonIdHelperSvc
371 )
372 acc.addEventAlgo(CscClusterBuilder)
373
374 return acc
375
376
377def MuonPRD_MultiTruthMakerCfg(flags, name="MuonPRD_MultiTruthMaker", **kwargs):
378 from MuonConfig.MuonGeometryConfig import MuonIdHelperSvcCfg
379 result = ComponentAccumulator()
380 result.merge(MuonIdHelperSvcCfg(flags))
381
382 if not flags.Detector.GeometryMDT: kwargs.setdefault("MdtPrdKey", "")
383 if not flags.Detector.GeometryRPC: kwargs.setdefault("RpcPrdKey", "")
384 if not flags.Detector.GeometryTGC: kwargs.setdefault("TgcPrdKey", "")
385 if not flags.Detector.GeometryCSC: kwargs.setdefault("CscPrdKey", "")
386
387 if not flags.Detector.GeometrysTGC: kwargs.setdefault("sTgcPrdKey", "")
388 if not flags.Detector.GeometryMM: kwargs.setdefault("MmPrdKey", "")
389
390 kwargs.setdefault("TgcPrdKey", 'TGC_MeasurementsAllBCs')
391 result.addEventAlgo(CompFactory.MuonPRD_MultiTruthMaker(name, **kwargs), primary = True)
392 return result
393
394
396 # Schedule RDO conversion
397 acc = ComponentAccumulator()
398
399 if flags.Detector.GeometryMDT:
400 acc.merge(MdtRDODecodeCfg(flags))
401
402 if flags.Detector.GeometryRPC:
403 acc.merge(RpcRDODecodeCfg(flags))
404
405 if flags.Detector.GeometryTGC:
406 acc.merge(TgcRDODecodeCfg(flags))
407
408 if flags.Detector.GeometrysTGC:
409 acc.merge(StgcRDODecodeCfg(flags))
410
411 if flags.Detector.GeometryMM:
412 acc.merge(MMRDODecodeCfg(flags))
413
414
415 if flags.Detector.GeometryCSC:
416 acc.merge(CscRDODecodeCfg(flags))
417 acc.merge(CscClusterBuildCfg(flags))
418
419 if flags.Muon.scheduleActsReco:
420 from MuonSpacePointFormation.SpacePointFormationConfig import MuonSpacePointFormationCfg
421 acc.merge(MuonSpacePointFormationCfg(flags))
422
423 from AthenaConfiguration.Enums import Format
424 if flags.Input.isMC and flags.Input.Format!=Format.BS:
425 if not flags.Muon.usePhaseIIGeoSetup:
426 acc.merge(MuonPRD_MultiTruthMakerCfg(flags))
427 elif flags.Muon.setupTruthAlgorithms:
428 from MuonTruthAlgsR4.MuonTruthAlgsConfig import MuonTruthAlgsCfg
429 acc.merge(MuonTruthAlgsCfg(flags))
430 return acc
431
432
433# This function runs the decoding on a data file
434def muonRdoDecodeTestData( forTrigger = False ):
435 from AthenaConfiguration.AllConfigFlags import initConfigFlags
436 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
437 flags = initConfigFlags()
438 flags.Input.Files = defaultTestFiles.RAW_RUN2
439 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
440 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
441
442 flags.lock()
443 flags.dump()
444
445 from AthenaCommon.Logging import log
446
447 log.setLevel(INFO)
448 log.info('About to setup Raw data decoding')
449
450 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
451 cfg = MainServicesCfg(flags)
452
453 # Add the MuonCache to ComponentAccumulator for trigger/RoI testing mode
454 if forTrigger:
455 # cache creators loaded independently
456 from MuonConfig.MuonBytestreamDecodeConfig import MuonCacheCfg
457 cfg.merge( MuonCacheCfg(flags) )
458
459 if flags.Input.Format is Format.BS:
460 from MuonConfig.MuonBytestreamDecodeConfig import MuonByteStreamDecodersCfg
461 cfg.merge( MuonByteStreamDecodersCfg( flags) )
462
463 cfg.merge( MuonRDOtoPRDConvertorsCfg( flags) )
464
465 log.info('Print Config')
466 cfg.printConfig(withDetails=True)
467
468 if forTrigger:
469 pklName = 'MuonRdoDecode_Cache.pkl'
470 else:
471 pklName = 'MuonRdoDecode.pkl'
472
473 # Store config as pickle
474 log.info('Save Config')
475 with open(pklName,'wb') as f:
476 cfg.store(f)
477 f.close()
478 return cfg
479
480# This function runs the decoding on a MC file
482
483 from AthenaConfiguration.AllConfigFlags import initConfigFlags
484 from AthenaConfiguration.TestDefaults import defaultTestFiles
485 flags = initConfigFlags()
486 flags.Input.Files = defaultTestFiles.RDO_RUN3
487
488 flags.lock()
489 flags.dump()
490
491 from AthenaCommon.Logging import log
492
493 log.setLevel(DEBUG)
494 log.info('About to setup Rpc RDO data decoding')
495
496 cfg=ComponentAccumulator()
497
498 # We are reading a pool file for this test
499 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
500 cfg.merge(PoolReadCfg(flags))
501
502 # Schedule RDO conversion
503 cfg.merge( MuonRDOtoPRDConvertorsCfg( flags) )
504
505 log.info('Print Config')
506 cfg.printConfig(withDetails=True)
507
508 # Store config as pickle
509 log.info('Save Config')
510 with open('MuonRdoDecode.pkl','wb') as f:
511 cfg.store(f)
512 f.close()
513 return cfg
514
515if __name__=="__main__":
516 # To run this, do e.g.
517 # python ../athena/MuonSpectrometer/MuonConfig/python/MuonRdoDecodeConfig.py
519 #muonRdoDecodeTestMC()
520
521
Small class to hold the names for cache containers, should help to avoid copy / paste errors.
RpcRdoToPrepDataToolCfg(flags, suffix="", RDOContainer=None, **kwargs)
This configuration function sets up everything for decoding RPC RDO to PRD conversion.
MMRDODecodeCfg(flags, name="MuonMmRdoToPrdConv", **kwargs)
MdtRDODecodeCfg(flags, name="MuonMdtRdoToPrdConv", RDOContainer=None, **kwargs)
StgcRdoToPrepDataToolCfg(flags, name="STGC_PrepDataProviderTool", **kwargs)
MuonPrdCacheCfg(flags)
This configuration function creates the IdentifiableCaches for PRD.
MuonPRD_MultiTruthMakerCfg(flags, name="MuonPRD_MultiTruthMaker", **kwargs)
CscClusterBuildCfg(flags, name="CscThresholdClusterBuilder")
MMRdoToPrepDataToolCfg(flags, name="MmRdoToPrepDataTool", **kwargs)
CscRDODecodeCfg(flags, name="CscRdoToCscPrepData", RDOContainer=None, **kwargs)
TgcRDODecodeCfg(flags, name="MuonTgcRdoToPrdConv", RDOContainer=None, **kwargs)
RpcRDODecodeCfg(flags, name="MuonRpcRdoToPrdConv", RDOContainer=None, **kwargs)
muonRdoDecodeTestData(forTrigger=False)
MuonRdoToPrepDataAlgCfg(flags, name="MuonRdoToPrepDataAlg", **kwargs)
StgcRDODecodeCfg(flags, name="MuonStgcRdoToPrdConv", **kwargs)