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' if not flags.Overlay.IgnoreBkgInputs else ""
65 kwargs['TileDQstatus'] = 'TileDQstatus'
66
67 if kwargs['InputTileDigitContainer']:
68 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
69 acc.merge(SGInputLoaderCfg(flags, [f'TileDigitsContainer#{kwargs["InputTileDigitContainer"]}']))
70
71 from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
72 acc.merge(TileDQstatusAlgCfg(flags))
73
74 if tileNoise or tileCoherNoise or kwargs['RndmEvtOverlay']:
75 if 'RndmSvc' not in kwargs:
76 from RngComps.RngCompsConfig import AthRNGSvcCfg
77 kwargs['RndmSvc'] = acc.getPrimaryAndMerge( AthRNGSvcCfg(flags) )
78 else:
79 kwargs['RndmSvc'] = None
80
81 if kwargs['UseCoolPulseShapes']:
82 from TileConditions.TilePulseShapeConfig import TilePulseShapeCondAlgCfg
83 acc.merge( TilePulseShapeCondAlgCfg(flags) )
84
85 if kwargs['MaskBadChannels'] or kwargs['RndmEvtOverlay']:
86 from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
87 acc.merge( TileBadChannelsCondAlgCfg(flags) )
88
89 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
90 kwargs.setdefault('TileDigitsContainer', flags.Overlay.BkgPrefix + 'TileDigitsCnt')
91 else:
92 kwargs.setdefault('TileDigitsContainer', 'TileDigitsCnt')
93
94 kwargs.setdefault('DoHSTruthReconstruction', flags.Digitization.EnableCaloHSTruthRecoInputs)
95 if kwargs['DoHSTruthReconstruction']:
96 kwargs.setdefault('TileHitContainer_DigiHSTruth', 'TileHitCnt_DigiHSTruth')
97 kwargs.setdefault('TileDigitsContainer_DigiHSTruth', 'TileDigitsCnt_DigiHSTruth')
98 else:
99 kwargs.setdefault('TileHitContainer_DigiHSTruth', '')
100 kwargs.setdefault('TileDigitsContainer_DigiHSTruth', '')
101
102
103 kwargs.setdefault('IntegerDigits', flags.Common.ProductionStep != ProductionStep.PileUpPresampling)
104
105 TileDigitsMaker=CompFactory.TileDigitsMaker
106 digitsMaker = TileDigitsMaker(**kwargs)
107
108 acc.addEventAlgo(digitsMaker, primary = True)
109
110 return acc
111
112def TileDigitsMakerOutputCfg(flags, **kwargs):
113 """Return component accumulator with configured Tile digits maker algorithm and Output Stream
114
115 Arguments:
116 flags -- Athena configuration flags
117 Keyword arguments:
118 name -- name of TileDigitsMaker algorithm. Defaults to TileDigitsMaker.
119 UseCoolPulseShapes -- flag to use pulse shape from database. Defaults to True.
120 RndmEvtOverlay -- flag to add PileUp or noise by overlaying random events.
121 True if Common.ProductionStep equals to ProductionStep.Overlay.
122 MaskBadChannels -- flag to mask channels tagged bad. Defaults to False.
123 """
124
125 acc = TileDigitsMakerCfg(flags, **kwargs)
126 tileDigitsMaker = acc.getPrimary()
127
128 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
129 if hasattr(tileDigitsMaker, 'TileDigitsContainer'):
130 tileDigitsContainer = tileDigitsMaker.TileDigitsContainer
131 else:
132 tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileDigitsContainer')
133 else:
134 if hasattr(tileDigitsMaker, 'TileFilteredContainer'):
135 tileDigitsContainer = tileDigitsMaker.TileFilteredContainer
136 else:
137 tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileFilteredContainer')
138
139 tileDigitsContainer = str(tileDigitsContainer).split('+').pop()
140 if flags.Digitization.AddCaloDigi:
141 outputItemList = ['TileDigitsContainer#*']
142 else:
143 outputItemList = ['TileDigitsContainer#' + tileDigitsContainer]
144
145 if flags.Output.doWriteRDO:
146 if flags.Digitization.EnableTruth:
147 outputItemList += ["CaloCalibrationHitContainer#*"]
148 from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
149 acc.merge(TruthDigitizationOutputCfg(flags))
150 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
151 acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) )
152
153 return acc
154
155
156if __name__ == "__main__":
157
158 from AthenaConfiguration.AllConfigFlags import initConfigFlags
159 from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultTestFiles
160 from AthenaCommon.Logging import log
161 from AthenaCommon.Constants import DEBUG
162
163 # Test setup
164 log.setLevel(DEBUG)
165
166 flags = initConfigFlags()
167 flags.Input.Files = defaultTestFiles.HITS_RUN2
168 flags.Tile.RunType = TileRunType.PHY
169 flags.Output.RDOFileName = 'myRDO-TileDigitsMaker.pool.root'
170 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_MC
171 flags.Digitization.PileUp = False
172 flags.Exec.MaxEvents = 3
173
174 flags.fillFromArgs()
175
176 flags.lock()
177 flags.dump()
178
179 # Construct our accumulator to run
180 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
181 acc = MainServicesCfg(flags)
182
183 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
184 acc.merge(PoolReadCfg(flags))
185
186 if 'EventInfo' not in flags.Input.Collections:
187 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
188 acc.merge(EventInfoCnvAlgCfg(flags,
189 inputKey='McEventInfo',
190 outputKey='EventInfo'))
191
192 acc.merge( TileDigitsMakerOutputCfg(flags) )
193
194 acc.printConfig(withDetails = True, summariseProps = True)
195 acc.store( open('TileDigitsMaker.pkl','wb') )
196
197 sc = acc.run()
198 # Success should be 0
199 import sys
200 sys.exit(not sc.isSuccess())
201
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)