ATLAS Offline Software
TileDigitsMakerConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 """Define method to construct configured Tile digits maker algorithm"""
4 
5 from TileSimAlgs.TileHitVecToCntConfig import TileHitVecToCntCfg
6 from AthenaConfiguration.ComponentFactory import CompFactory
7 from AthenaConfiguration.Enums import ProductionStep
8 from TileConfiguration.TileConfigFlags import TileRunType
9 
10 def 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  if flags.Overlay.DataOverlay:
65  from TileByteStream.TileByteStreamConfig import TileRawDataReadingCfg
66  acc.merge( TileRawDataReadingCfg(flags, readMuRcv=False) )
67 
68  from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
69  acc.merge(TileDQstatusAlgCfg(flags))
70 
71  kwargs['InputTileDigitContainer'] = f'{flags.Overlay.BkgPrefix}TileDigitsCnt'
72  kwargs['TileDQstatus'] = 'TileDQstatus'
73 
74  if not flags.Overlay.DataOverlay:
75  from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
76  acc.merge(SGInputLoaderCfg(flags, [f'TileDigitsContainer#{kwargs["InputTileDigitContainer"]}']))
77 
78  if tileNoise or tileCoherNoise or kwargs['RndmEvtOverlay']:
79  if 'RndmSvc' not in kwargs:
80  from RngComps.RngCompsConfig import AthRNGSvcCfg
81  kwargs['RndmSvc'] = acc.getPrimaryAndMerge( AthRNGSvcCfg(flags) ).name
82  else:
83  kwargs['RndmSvc'] = None
84 
85  if kwargs['UseCoolPulseShapes']:
86  from TileConditions.TilePulseShapeConfig import TilePulseShapeCondAlgCfg
87  acc.merge( TilePulseShapeCondAlgCfg(flags) )
88 
89  if kwargs['MaskBadChannels'] or kwargs['RndmEvtOverlay']:
90  from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
91  acc.merge( TileBadChannelsCondAlgCfg(flags) )
92 
93  if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
94  kwargs.setdefault('TileDigitsContainer', flags.Overlay.BkgPrefix + 'TileDigitsCnt')
95  else:
96  kwargs.setdefault('TileDigitsContainer', 'TileDigitsCnt')
97 
98  kwargs.setdefault('DoHSTruthReconstruction', flags.Digitization.EnableCaloHSTruthRecoInputs)
99  if kwargs['DoHSTruthReconstruction']:
100  kwargs.setdefault('TileHitContainer_DigiHSTruth', 'TileHitCnt_DigiHSTruth')
101  kwargs.setdefault('TileDigitsContainer_DigiHSTruth', 'TileDigitsCnt_DigiHSTruth')
102  else:
103  kwargs.setdefault('TileHitContainer_DigiHSTruth', '')
104  kwargs.setdefault('TileDigitsContainer_DigiHSTruth', '')
105 
106 
107  kwargs.setdefault('IntegerDigits', flags.Common.ProductionStep != ProductionStep.PileUpPresampling)
108 
109  TileDigitsMaker=CompFactory.TileDigitsMaker
110  digitsMaker = TileDigitsMaker(**kwargs)
111 
112  acc.addEventAlgo(digitsMaker, primary = True)
113 
114  return acc
115 
116 def TileDigitsMakerOutputCfg(flags, **kwargs):
117  """Return component accumulator with configured Tile digits maker algorithm and Output Stream
118 
119  Arguments:
120  flags -- Athena configuration flags
121  Keyword arguments:
122  name -- name of TileDigitsMaker algorithm. Defaults to TileDigitsMaker.
123  UseCoolPulseShapes -- flag to use pulse shape from database. Defaults to True.
124  RndmEvtOverlay -- flag to add PileUp or noise by overlaying random events.
125  True if Common.ProductionStep equals to ProductionStep.Overlay.
126  MaskBadChannels -- flag to mask channels tagged bad. Defaults to False.
127  """
128 
129  acc = TileDigitsMakerCfg(flags, **kwargs)
130  tileDigitsMaker = acc.getPrimary()
131 
132  if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
133  if hasattr(tileDigitsMaker, 'TileDigitsContainer'):
134  tileDigitsContainer = tileDigitsMaker.TileDigitsContainer
135  else:
136  tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileDigitsContainer')
137  else:
138  if hasattr(tileDigitsMaker, 'TileFilteredContainer'):
139  tileDigitsContainer = tileDigitsMaker.TileFilteredContainer
140  else:
141  tileDigitsContainer = tileDigitsMaker.getDefaultProperty('TileFilteredContainer')
142 
143  tileDigitsContainer = str(tileDigitsContainer).split('+').pop()
144  if flags.Digitization.AddCaloDigi:
145  outputItemList = ['TileDigitsContainer#*']
146  else:
147  outputItemList = ['TileDigitsContainer#' + tileDigitsContainer]
148 
149  if flags.Output.doWriteRDO:
150  if flags.Digitization.EnableTruth:
151  outputItemList += ["CaloCalibrationHitContainer#*"]
152  from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
153  acc.merge(TruthDigitizationOutputCfg(flags))
154  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
155  acc.merge( OutputStreamCfg(flags, streamName = 'RDO', ItemList = outputItemList) )
156 
157  return acc
158 
159 
160 if __name__ == "__main__":
161 
162  from AthenaConfiguration.AllConfigFlags import initConfigFlags
163  from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultTestFiles
164  from AthenaCommon.Logging import log
165  from AthenaCommon.Constants import DEBUG
166 
167  # Test setup
168  log.setLevel(DEBUG)
169 
170  flags = initConfigFlags()
171  flags.Input.Files = defaultTestFiles.HITS_RUN2
172  flags.Tile.RunType = TileRunType.PHY
173  flags.Output.RDOFileName = 'myRDO-TileDigitsMaker.pool.root'
174  flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_MC
175  flags.Digitization.PileUp = False
176  flags.Exec.MaxEvents = 3
177 
178  flags.fillFromArgs()
179 
180  flags.lock()
181  flags.dump()
182 
183  # Construct our accumulator to run
184  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
185  acc = MainServicesCfg(flags)
186 
187  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
188  acc.merge(PoolReadCfg(flags))
189 
190  if 'EventInfo' not in flags.Input.Collections:
191  from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
192  acc.merge(EventInfoCnvAlgCfg(flags,
193  inputKey='McEventInfo',
194  outputKey='EventInfo'))
195 
196  acc.merge( TileDigitsMakerOutputCfg(flags) )
197 
198  acc.printConfig(withDetails = True, summariseProps = True)
199  acc.store( open('TileDigitsMaker.pkl','wb') )
200 
201  sc = acc.run()
202  # Success should be 0
203  import sys
204  sys.exit(not sc.isSuccess())
205 
TileDigitsMaker
This algorithm performs digitization in TileCal, obtaining TileDigits from TileHits.
Definition: TileDigitsMaker.h:76
python.TilePulseShapeConfig.TilePulseShapeCondAlgCfg
def TilePulseShapeCondAlgCfg(flags, **kwargs)
Definition: TilePulseShapeConfig.py:9
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:12
python.TruthDigitizationOutputConfig.TruthDigitizationOutputCfg
def TruthDigitizationOutputCfg(flags)
Definition: TruthDigitizationOutputConfig.py:9
python.TileSamplingFractionConfig.TileSamplingFractionCondAlgCfg
def TileSamplingFractionCondAlgCfg(flags, **kwargs)
Definition: TileSamplingFractionConfig.py:9
TileDigitsMakerConfig.TileDigitsMakerCfg
def TileDigitsMakerCfg(flags, **kwargs)
Definition: TileDigitsMakerConfig.py:10
python.TileInfoLoaderConfig.TileInfoLoaderCfg
def TileInfoLoaderCfg(flags, **kwargs)
Definition: TileInfoLoaderConfig.py:12
TileDQstatusConfig.TileDQstatusAlgCfg
def TileDQstatusAlgCfg(flags, **kwargs)
Definition: TileDQstatusConfig.py:31
SGInputLoaderConfig.SGInputLoaderCfg
def SGInputLoaderCfg(flags, Load=None, **kwargs)
Definition: SGInputLoaderConfig.py:7
python.TileBadChannelsConfig.TileBadChannelsCondAlgCfg
def TileBadChannelsCondAlgCfg(flags, **kwargs)
Definition: TileBadChannelsConfig.py:10
TileHitVecToCntConfig.TileHitVecToCntCfg
def TileHitVecToCntCfg(flags, **kwargs)
Definition: TileHitVecToCntConfig.py:106
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
Constants
some useful constants -------------------------------------------------—
TileDigitsMakerConfig.TileDigitsMakerOutputCfg
def TileDigitsMakerOutputCfg(flags, **kwargs)
Definition: TileDigitsMakerConfig.py:116
python.TileEMScaleConfig.TileEMScaleCondAlgCfg
def TileEMScaleCondAlgCfg(flags, **kwargs)
Definition: TileEMScaleConfig.py:10
Trk::open
@ open
Definition: BinningType.h:40
python.TileSampleNoiseConfig.TileSampleNoiseCondAlgCfg
def TileSampleNoiseCondAlgCfg(flags, **kwargs)
Definition: TileSampleNoiseConfig.py:8
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
TileByteStreamConfig.TileRawDataReadingCfg
def TileRawDataReadingCfg(flags, readDigits=True, readRawChannel=True, readMuRcv=None, readMuRcvDigits=False, readMuRcvRawCh=False, readBeamElem=None, readLaserObj=None, readDigitsFlx=False, readL2=False, stateless=False, **kwargs)
Definition: TileByteStreamConfig.py:87
str
Definition: BTagTrackIpAccessor.cxx:11
python.xAODEventInfoCnvConfig.EventInfoCnvAlgCfg
def EventInfoCnvAlgCfg(flags, name="EventInfoCnvAlg", inputKey="McEventInfo", outputKey="EventInfo", disableBeamSpot=False, **kwargs)
Definition: xAODEventInfoCnvConfig.py:11
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
python.TileCablingSvcConfig.TileCablingSvcCfg
def TileCablingSvcCfg(flags)
Definition: TileCablingSvcConfig.py:11
RngCompsConfig.AthRNGSvcCfg
def AthRNGSvcCfg(flags, name="AthRNGSvc")
Definition: RngCompsConfig.py:51