ATLAS Offline Software
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 
5 from TileSimAlgs.TileHitVecToCntConfig import TileHitVecToCntCfg
6 from AthenaConfiguration.ComponentFactory import CompFactory
7 from AthenaConfiguration.Enums import ProductionStep
8 
9 def 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)).name
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 
126 if __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())
TileMuonReceiverConfig.TilePulseForTileMuonReceiverOutputCfg
def TilePulseForTileMuonReceiverOutputCfg(flags, **kwargs)
Definition: TileMuonReceiverConfig.py:93
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.TileSamplingFractionConfig.TileSamplingFractionCondAlgCfg
def TileSamplingFractionCondAlgCfg(flags, **kwargs)
Definition: TileSamplingFractionConfig.py:9
TilePulseForTileMuonReceiver
Definition: TilePulseForTileMuonReceiver.h:80
TileMuonReceiverConfig.TilePulseForTileMuonReceiverCfg
def TilePulseForTileMuonReceiverCfg(flags, **kwargs)
Definition: TileMuonReceiverConfig.py:9
python.TileInfoLoaderConfig.TileInfoLoaderCfg
def TileInfoLoaderCfg(flags, **kwargs)
Definition: TileInfoLoaderConfig.py:12
python.TileBadChannelsConfig.TileBadChannelsCondAlgCfg
def TileBadChannelsCondAlgCfg(flags, **kwargs)
Definition: TileBadChannelsConfig.py:10
TileRawChannelBuilderMFConfig.TileRawChannelBuilderMFCfg
def TileRawChannelBuilderMFCfg(flags, **kwargs)
Definition: TileRawChannelBuilderMFConfig.py:9
TileHitVecToCntConfig.TileHitVecToCntCfg
def TileHitVecToCntCfg(flags, **kwargs)
Definition: TileHitVecToCntConfig.py:105
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
Constants
some useful constants -------------------------------------------------—
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
python.TilePulseShapeConfig.TileCondToolMuRcvPulseShapeCfg
def TileCondToolMuRcvPulseShapeCfg(flags, **kwargs)
Definition: TilePulseShapeConfig.py:115
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.TileOFCConfig.TileCondToolOfcCfg
def TileCondToolOfcCfg(flags, **kwargs)
Definition: TileOFCConfig.py:98
python.TileCablingSvcConfig.TileCablingSvcCfg
def TileCablingSvcCfg(flags)
Definition: TileCablingSvcConfig.py:11
RngCompsConfig.AthRNGSvcCfg
def AthRNGSvcCfg(flags, name="AthRNGSvc")
Definition: RngCompsConfig.py:51