3 """Define method to construct configured Tile pulse for muon receiver algorithm"""
5 from TileSimAlgs.TileHitVecToCntConfig
import TileHitVecToCntCfg
6 from AthenaConfiguration.ComponentFactory
import CompFactory
7 from AthenaConfiguration.Enums
import ProductionStep
10 """Return component accumulator with configured Tile muon receiver algorithm
13 flags -- Athena configuration flags
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')
27 from TileConditions.TileInfoLoaderConfig
import TileInfoLoaderCfg
29 infoLoader = acc.getService(
'TileInfoLoader')
30 pedestal = infoLoader._descriptors[
'MuRcvPed'].default
32 from TileConditions.TileCablingSvcConfig
import TileCablingSvcCfg
35 from TileConditions.TileSamplingFractionConfig
import TileSamplingFractionCondAlgCfg
38 if 'RndmSvc' not in kwargs:
39 from RngComps.RngCompsConfig
import AthRNGSvcCfg
40 kwargs[
'RndmSvc'] = acc.getPrimaryAndMerge(
AthRNGSvcCfg(flags)).name
42 if kwargs[
'UseCoolNoise']
or kwargs[
'UseCoolPedestal']:
43 from TileConditions.TileSampleNoiseConfig
import TileSampleNoiseCondAlgCfg
46 from TileConditions.TileEMScaleConfig
import TileEMScaleCondAlgCfg
49 if kwargs[
'MaskBadChannels']:
50 from TileConditions.TileBadChannelsConfig
import TileBadChannelsCondAlgCfg
53 if kwargs[
'UseCoolPulseShapes']:
54 from TileConditions.TilePulseShapeConfig
import TilePulseShapeCondAlgCfg
55 acc.merge(
TilePulseShapeCondAlgCfg(flags, Source=
'FILE', TilePulseShape=kwargs[
'TilePulseShape'], PulseType=
'MURCV') )
57 if 'TileRawChannelBuilderMF' not in kwargs:
58 from TileConditions.TilePulseShapeConfig
import TileCondToolMuRcvPulseShapeCfg
61 from TileConditions.TileOFCConfig
import TileCondToolOfcCfg
63 OptFilterDeltaCorrelation =
True,
64 TileCondToolPulseShape = pulseShapeTool) )
67 from TileRecUtils.TileRawChannelBuilderMFConfig
import TileRawChannelBuilderMFCfg
70 DefaultPedestal = pedestal,
71 TileCondToolOfcOnFly = ofcTool,
72 TileCondToolOfc = ofcTool,
73 TileRawChannelContainer =
"") )
74 kwargs[
'TileRawChannelBuilderMF'] = rawChanBuilder
77 kwargs.setdefault(
'IntegerDigits', flags.Common.ProductionStep != ProductionStep.PileUpPresampling)
79 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
80 kwargs.setdefault(
'MuonReceiverDigitsContainer', flags.Overlay.BkgPrefix +
'MuRcvDigitsCnt')
82 kwargs.setdefault(
'MuonReceiverDigitsContainer',
'MuRcvDigitsCnt')
84 if flags.Common.isOverlay
and flags.Concurrency.NumThreads > 0:
85 kwargs.setdefault(
'Cardinality', flags.Concurrency.NumThreads)
87 TilePulseForTileMuonReceiver=CompFactory.TilePulseForTileMuonReceiver
94 """Return component accumulator with configured Tile muon receiver algorithm and Output stream
97 flags -- Athena configuration flags
101 tilePulseForMuRcv = acc.getPrimary()
103 if hasattr(tilePulseForMuRcv,
'MuonReceiverDigitsContainer'):
104 muRcvDigitsCnt = tilePulseForMuRcv.MuonReceiverDigitsContainer
106 muRcvDigitsCnt = tilePulseForMuRcv.getDefaultProperty(
'MuonReceiverDigitsContainer')
107 muRcvDigitsCnt =
str(muRcvDigitsCnt).
split(
'+').pop()
108 outputItemList = [
'TileDigitsContainer#' + muRcvDigitsCnt]
110 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
111 if hasattr(tilePulseForMuRcv,
'MuonReceiverRawChannelContainer'):
112 muRcvRawChCnt = tilePulseForMuRcv.MuonReceiverRawChannelContainer
114 muRcvRawChCnt = tilePulseForMuRcv.getDefaultProperty(
'MuonReceiverRawChannelContainer')
115 muRcvRawChCnt =
str(muRcvRawChCnt).
split(
'+').pop()
116 outputItemList += [
'TileRawChannelContainer#' + muRcvRawChCnt]
118 if flags.Output.doWriteRDO:
119 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
120 acc.merge(
OutputStreamCfg(flags, streamName =
'RDO', ItemList = outputItemList) )
126 if __name__ ==
"__main__":
128 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
129 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultTestFiles
130 from AthenaCommon.Logging
import log
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
147 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
150 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
153 if 'EventInfo' not in flags.Input.Collections:
154 from xAODEventInfoCnv.xAODEventInfoCnvConfig
import EventInfoCnvAlgCfg
156 inputKey=
'McEventInfo',
157 outputKey=
'EventInfo'))
161 acc.printConfig(withDetails =
True, summariseProps =
True)
163 acc.store(
open(
'TileMuonReceiver.pkl',
'wb') )
168 sys.exit(
not sc.isSuccess())