ATLAS Offline Software
Loading...
Searching...
No Matches
TileMuonReceiverConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2
3"""Define method to construct configured Tile pulse for muon receiver algorithm"""
4
5from TileSimAlgs.TileHitVecToCntConfig import TileHitVecToCntCfg
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import ProductionStep
8
9def TilePulseForTileMuonReceiverCfg(flags, **kwargs):
10 """Return component accumulator with configured Tile muon receiver algorithm
11
12 Arguments:
13 flags -- Athena configuration flags
14 """
15
16 kwargs.setdefault('name', 'TilePulseForTileMuonReceiver')
17 kwargs.setdefault('TileHitContainer', 'TileHitCnt')
18 kwargs.setdefault('MuonReceiverRawChannelContainer', 'MuRcvRawChCnt')
19 kwargs.setdefault('MaskBadChannels', False)
20 kwargs.setdefault('UseCoolPulseShapes', True)
21 kwargs.setdefault('UseCoolPedestal', False)
22 kwargs.setdefault('UseCoolNoise', False)
23 kwargs.setdefault('TilePulseShape', 'TileMuRcvPulseShape')
24
25 acc = TileHitVecToCntCfg(flags)
26
27 from TileConditions.TileInfoLoaderConfig import TileInfoLoaderCfg
28 acc.merge( TileInfoLoaderCfg(flags) )
29 infoLoader = acc.getService('TileInfoLoader')
30 pedestal = infoLoader._descriptors['MuRcvPed'].default
31
32 from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
33 acc.merge(TileCablingSvcCfg(flags))
34
35 from TileConditions.TileSamplingFractionConfig import TileSamplingFractionCondAlgCfg
36 acc.merge( TileSamplingFractionCondAlgCfg(flags) )
37
38 if 'RndmSvc' not in kwargs:
39 from RngComps.RngCompsConfig import AthRNGSvcCfg
40 kwargs['RndmSvc'] = acc.getPrimaryAndMerge(AthRNGSvcCfg(flags))
41
42 if kwargs['UseCoolNoise'] or kwargs['UseCoolPedestal']:
43 from TileConditions.TileSampleNoiseConfig import TileSampleNoiseCondAlgCfg
44 acc.merge( TileSampleNoiseCondAlgCfg(flags) )
45
46 from TileConditions.TileEMScaleConfig import TileEMScaleCondAlgCfg
47 acc.merge( TileEMScaleCondAlgCfg(flags) )
48
49 if kwargs['MaskBadChannels']:
50 from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
51 acc.merge( TileBadChannelsCondAlgCfg(flags) )
52
53 if kwargs['UseCoolPulseShapes']:
54 from TileConditions.TilePulseShapeConfig import TilePulseShapeCondAlgCfg
55 acc.merge( TilePulseShapeCondAlgCfg(flags, Source='FILE', TilePulseShape=kwargs['TilePulseShape'], PulseType='MURCV') )
56
57 if 'TileRawChannelBuilderMF' not in kwargs:
58 from TileConditions.TilePulseShapeConfig import TileCondToolMuRcvPulseShapeCfg
59 pulseShapeTool = acc.popToolsAndMerge( TileCondToolMuRcvPulseShapeCfg(flags) )
60
61 from TileConditions.TileOFCConfig import TileCondToolOfcCfg
62 ofcTool = acc.popToolsAndMerge( TileCondToolOfcCfg(flags,
63 OptFilterDeltaCorrelation = True,
64 TileCondToolPulseShape = pulseShapeTool) )
65
66
67 from TileRecUtils.TileRawChannelBuilderMFConfig import TileRawChannelBuilderMFCfg
68 rawChanBuilder = acc.popToolsAndMerge( TileRawChannelBuilderMFCfg(flags, MF = 1,
69 PedestalMode = 0,
70 DefaultPedestal = pedestal,
71 TileCondToolOfcOnFly = ofcTool,
72 TileCondToolOfc = ofcTool,
73 TileRawChannelContainer = "") )
74 kwargs['TileRawChannelBuilderMF'] = rawChanBuilder
75
76
77 kwargs.setdefault('IntegerDigits', flags.Common.ProductionStep != ProductionStep.PileUpPresampling)
78
79 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
80 kwargs.setdefault('MuonReceiverDigitsContainer', flags.Overlay.BkgPrefix + 'MuRcvDigitsCnt')
81 else:
82 kwargs.setdefault('MuonReceiverDigitsContainer', 'MuRcvDigitsCnt')
83
84 if flags.Common.isOverlay and flags.Concurrency.NumThreads > 0:
85 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
86
87 TilePulseForTileMuonReceiver=CompFactory.TilePulseForTileMuonReceiver
88 acc.addEventAlgo(TilePulseForTileMuonReceiver(**kwargs), primary = True)
89
90 return acc
91
92
94 """Return component accumulator with configured Tile muon receiver algorithm and Output stream
95
96 Arguments:
97 flags -- Athena configuration flags
98 """
99
100 acc = TilePulseForTileMuonReceiverCfg(flags, **kwargs)
101 tilePulseForMuRcv = acc.getPrimary()
102
103 if hasattr(tilePulseForMuRcv, 'MuonReceiverDigitsContainer'):
104 muRcvDigitsCnt = tilePulseForMuRcv.MuonReceiverDigitsContainer
105 else:
106 muRcvDigitsCnt = tilePulseForMuRcv.getDefaultProperty('MuonReceiverDigitsContainer')
107 muRcvDigitsCnt = str(muRcvDigitsCnt).split('+').pop()
108 outputItemList = ['TileDigitsContainer#' + muRcvDigitsCnt]
109
110 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
111 if hasattr(tilePulseForMuRcv, 'MuonReceiverRawChannelContainer'):
112 muRcvRawChCnt = tilePulseForMuRcv.MuonReceiverRawChannelContainer
113 else:
114 muRcvRawChCnt = tilePulseForMuRcv.getDefaultProperty('MuonReceiverRawChannelContainer')
115 muRcvRawChCnt = str(muRcvRawChCnt).split('+').pop()
116 outputItemList += ['TileRawChannelContainer#' + muRcvRawChCnt]
117
118 if flags.Output.doWriteRDO:
119 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
120 acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) )
121
122 return acc
123
124
125
126if __name__ == "__main__":
127
128 from AthenaConfiguration.AllConfigFlags import initConfigFlags
129 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultTestFiles
130 from AthenaCommon.Logging import log
131 from AthenaCommon.Constants import DEBUG
132
133 # Test setup
134 log.setLevel(DEBUG)
135
136 flags = initConfigFlags()
137 flags.Input.Files = defaultTestFiles.HITS_RUN2
138 flags.Output.RDOFileName = 'myRDO-TileMuonReceiver.pool.root'
139 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_MC
140 flags.Digitization.PileUp = False
141 flags.Exec.MaxEvents = 3
142
143 flags.fillFromArgs()
144 flags.lock()
145
146 # Construct our accumulator to run
147 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
148 acc = MainServicesCfg(flags)
149
150 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
151 acc.merge(PoolReadCfg(flags))
152
153 if 'EventInfo' not in flags.Input.Collections:
154 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
155 acc.merge(EventInfoCnvAlgCfg(flags,
156 inputKey='McEventInfo',
157 outputKey='EventInfo'))
158
159 acc.merge( TilePulseForTileMuonReceiverOutputCfg(flags) )
160
161 acc.printConfig(withDetails = True, summariseProps = True)
162 flags.dump()
163 acc.store( open('TileMuonReceiver.pkl','wb') )
164
165 sc = acc.run()
166 # Success should be 0
167 import sys
168 sys.exit(not sc.isSuccess())
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
TilePulseForTileMuonReceiverOutputCfg(flags, **kwargs)
TilePulseForTileMuonReceiverCfg(flags, **kwargs)