ATLAS Offline Software
Loading...
Searching...
No Matches
TileDigitsMakerConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3"""Define method to construct configured Tile digits maker algorithm"""
4
5from TileSimAlgs.TileHitVecToCntConfig import TileHitVecToCntCfg
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import ProductionStep
8from TileConfiguration.TileConfigFlags import TileRunType
9
10def TileDigitsMakerCfg(flags, **kwargs):
11 """Return component accumulator with configured Tile digits maker algorithm
12
13 Arguments:
14 flags -- Athena configuration flags
15 Keyword arguments:
16 name -- name of TileDigitsMaker algorithm. Defaults to TileDigitsMaker.
17 UseCoolPulseShapes -- flag to use pulse shape from database. Defaults to True.
18 RndmEvtOverlay -- flag to add PileUp or noise by overlaying random events.
19 True if flag.Common.isOverlay equals to True.
20 MaskBadChannels -- flag to mask channels tagged bad. Defaults to False.
21 """
22
23 kwargs.setdefault('name', 'TileDigitsMaker')
24 kwargs.setdefault('UseCoolPulseShapes', True)
25 kwargs.setdefault('MaskBadChannels', False)
26 kwargs.setdefault('RndmEvtOverlay', flags.Common.isOverlay)
27 kwargs.setdefault('OnlyUseContainerName', not flags.Common.isOverlay)
28
29 acc = TileHitVecToCntCfg(flags)
30
31 from TileConditions.TileInfoLoaderConfig import TileInfoLoaderCfg
32 infoLoaderAcc = TileInfoLoaderCfg(flags)
33 infoLoader = infoLoaderAcc.getPrimary()
34 acc.merge( infoLoaderAcc )
35
36 infoLoaderProperties = infoLoader._properties.items()
37
38 if 'TileNoise' in infoLoaderProperties:
39 tileNoise = infoLoaderProperties['TileNoise']
40 else:
41 tileNoise = infoLoader._descriptors['TileNoise'].default
42
43 if 'TileCoherNoise' in infoLoaderProperties:
44 tileCoherNoise = infoLoaderProperties['TileCoherNoise']
45 else:
46 tileCoherNoise = infoLoader._descriptors['TileCoherNoise'].default
47
48 from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
49 acc.merge(TileCablingSvcCfg(flags))
50
51 from TileConditions.TileSampleNoiseConfig import TileSampleNoiseCondAlgCfg
52 acc.merge( TileSampleNoiseCondAlgCfg(flags) )
53
54 from TileConditions.TileEMScaleConfig import TileEMScaleCondAlgCfg
55 acc.merge( TileEMScaleCondAlgCfg(flags) )
56
57 from TileConditions.TileSamplingFractionConfig import TileSamplingFractionCondAlgCfg
58 acc.merge( TileSamplingFractionCondAlgCfg(flags) )
59
60 if kwargs['RndmEvtOverlay']:
61 tileNoise = False
62 tileCoherNoise = False
63
64 kwargs['InputTileDigitContainer'] = f'{flags.Overlay.BkgPrefix}TileDigitsCnt'
65 kwargs['TileDQstatus'] = 'TileDQstatus'
66
67 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
68 acc.merge(SGInputLoaderCfg(flags, [f'TileDigitsContainer#{kwargs["InputTileDigitContainer"]}']))
69
70 from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
71 acc.merge(TileDQstatusAlgCfg(flags))
72
73 if tileNoise or tileCoherNoise or kwargs['RndmEvtOverlay']:
74 if 'RndmSvc' not in kwargs:
75 from RngComps.RngCompsConfig import AthRNGSvcCfg
76 kwargs['RndmSvc'] = acc.getPrimaryAndMerge( AthRNGSvcCfg(flags) )
77 else:
78 kwargs['RndmSvc'] = None
79
80 if kwargs['UseCoolPulseShapes']:
81 from TileConditions.TilePulseShapeConfig import TilePulseShapeCondAlgCfg
82 acc.merge( TilePulseShapeCondAlgCfg(flags) )
83
84 if kwargs['MaskBadChannels'] or kwargs['RndmEvtOverlay']:
85 from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
86 acc.merge( TileBadChannelsCondAlgCfg(flags) )
87
88 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
89 kwargs.setdefault('TileDigitsContainer', flags.Overlay.BkgPrefix + 'TileDigitsCnt')
90 else:
91 kwargs.setdefault('TileDigitsContainer', 'TileDigitsCnt')
92
93 kwargs.setdefault('DoHSTruthReconstruction', flags.Digitization.EnableCaloHSTruthRecoInputs)
94 if kwargs['DoHSTruthReconstruction']:
95 kwargs.setdefault('TileHitContainer_DigiHSTruth', 'TileHitCnt_DigiHSTruth')
96 kwargs.setdefault('TileDigitsContainer_DigiHSTruth', 'TileDigitsCnt_DigiHSTruth')
97 else:
98 kwargs.setdefault('TileHitContainer_DigiHSTruth', '')
99 kwargs.setdefault('TileDigitsContainer_DigiHSTruth', '')
100
101
102 kwargs.setdefault('IntegerDigits', flags.Common.ProductionStep != ProductionStep.PileUpPresampling)
103
104 TileDigitsMaker=CompFactory.TileDigitsMaker
105 digitsMaker = TileDigitsMaker(**kwargs)
106
107 acc.addEventAlgo(digitsMaker, primary = True)
108
109 return acc
110
111def TileDigitsMakerOutputCfg(flags, **kwargs):
112 """Return component accumulator with configured Tile digits maker algorithm and Output Stream
113
114 Arguments:
115 flags -- Athena configuration flags
116 Keyword arguments:
117 name -- name of TileDigitsMaker algorithm. Defaults to TileDigitsMaker.
118 UseCoolPulseShapes -- flag to use pulse shape from database. Defaults to True.
119 RndmEvtOverlay -- flag to add PileUp or noise by overlaying random events.
120 True if Common.ProductionStep equals to ProductionStep.Overlay.
121 MaskBadChannels -- flag to mask channels tagged bad. Defaults to False.
122 """
123
124 acc = TileDigitsMakerCfg(flags, **kwargs)
125 tileDigitsMaker = acc.getPrimary()
126
127 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
128 if hasattr(tileDigitsMaker, 'TileDigitsContainer'):
129 tileDigitsContainer = tileDigitsMaker.TileDigitsContainer
130 else:
131 tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileDigitsContainer')
132 else:
133 if hasattr(tileDigitsMaker, 'TileFilteredContainer'):
134 tileDigitsContainer = tileDigitsMaker.TileFilteredContainer
135 else:
136 tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileFilteredContainer')
137
138 tileDigitsContainer = str(tileDigitsContainer).split('+').pop()
139 if flags.Digitization.AddCaloDigi:
140 outputItemList = ['TileDigitsContainer#*']
141 else:
142 outputItemList = ['TileDigitsContainer#' + tileDigitsContainer]
143
144 if flags.Output.doWriteRDO:
145 if flags.Digitization.EnableTruth:
146 outputItemList += ["CaloCalibrationHitContainer#*"]
147 from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
148 acc.merge(TruthDigitizationOutputCfg(flags))
149 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
150 acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) )
151
152 return acc
153
154
155if __name__ == "__main__":
156
157 from AthenaConfiguration.AllConfigFlags import initConfigFlags
158 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultTestFiles
159 from AthenaCommon.Logging import log
160 from AthenaCommon.Constants import DEBUG
161
162 # Test setup
163 log.setLevel(DEBUG)
164
165 flags = initConfigFlags()
166 flags.Input.Files = defaultTestFiles.HITS_RUN2
167 flags.Tile.RunType = TileRunType.PHY
168 flags.Output.RDOFileName = 'myRDO-TileDigitsMaker.pool.root'
169 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_MC
170 flags.Digitization.PileUp = False
171 flags.Exec.MaxEvents = 3
172
173 flags.fillFromArgs()
174
175 flags.lock()
176 flags.dump()
177
178 # Construct our accumulator to run
179 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
180 acc = MainServicesCfg(flags)
181
182 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
183 acc.merge(PoolReadCfg(flags))
184
185 if 'EventInfo' not in flags.Input.Collections:
186 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
187 acc.merge(EventInfoCnvAlgCfg(flags,
188 inputKey='McEventInfo',
189 outputKey='EventInfo'))
190
191 acc.merge( TileDigitsMakerOutputCfg(flags) )
192
193 acc.printConfig(withDetails = True, summariseProps = True)
194 acc.store( open('TileDigitsMaker.pkl','wb') )
195
196 sc = acc.run()
197 # Success should be 0
198 import sys
199 sys.exit(not sc.isSuccess())
200
This algorithm performs digitization in TileCal, obtaining TileDigits from TileHits.
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
TileDigitsMakerCfg(flags, **kwargs)
TileDigitsMakerOutputCfg(flags, **kwargs)