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