5 @file TileRODMonitorAlgorithm.py
6 @brief Python configuration of TileRODMonitorAlgorithm algorithm for the Run III
10 ''' Function to configure TileRODMonitorAlgorithm algorithm in the monitoring system.'''
14 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
17 from TileRecUtils.TileDQstatusConfig
import TileDQstatusAlgCfg
20 from TileGeoModel.TileGMConfig
import TileGMCfg
23 from TileConditions.TileCablingSvcConfig
import TileCablingSvcCfg
26 from TileConditions.TileBadChannelsConfig
import TileBadChannelsCondAlgCfg
29 kwargs.setdefault(
'CheckDCS', flags.Tile.useDCS)
30 if kwargs[
'CheckDCS']:
31 from TileConditions.TileDCSConfig
import TileDCSCondAlgCfg
34 from AthenaConfiguration.ComponentFactory
import CompFactory
36 kwargs.setdefault(
'fillRODFragmentSizeHistograms',
True)
37 fillRODFragmentSizeHistograms = kwargs[
'fillRODFragmentSizeHistograms']
38 if fillRODFragmentSizeHistograms:
39 result.addService(CompFactory.ROBDataProviderSvc())
43 from AthenaMonitoring
import AthMonitorCfgHelper
44 helper = AthMonitorCfgHelper(flags,
'TileRODMonitoring')
47 tileRODMonAlg = helper.addAlgorithm(CompFactory.TileRODMonitorAlgorithm,
'TileRODMonAlg')
52 kwargs.setdefault(
'fillHistogramsForL1Triggers', [
'AnyPhysTrig',
'bit7_Calib'])
53 l1Triggers = kwargs[
'fillHistogramsForL1Triggers']
55 kwargs.setdefault(
'EnergyThreshold', 300.)
56 energyThreshold = kwargs[
'EnergyThreshold']
58 kwargs.setdefault(
'TileRawChannelContainer', flags.Tile.RawChannelContainer)
59 kwargs.setdefault(
'NumberOfROBFragmets', 32)
60 nROBs = kwargs[
'NumberOfROBFragmets']
62 for k, v
in kwargs.items():
63 setattr(tileRODMonAlg, k, v)
65 run =
str(flags.Input.RunNumbers[0])
68 executeTimeGroup = helper.addGroup(tileRODMonAlg,
'TileRODMonExecuteTime',
'Tile/')
69 executeTimeGroup.defineHistogram(
'TIME_execute', path =
'ROD', type=
'TH1F',
70 title =
'Time for execute TileRODMonAlg algorithm;time [#ms]',
71 xbins = 100, xmin = 0, xmax = 100000)
74 from TileMonitoring.TileMonitoringCfgHelper
import addTile1DHistogramsArray
77 titleEnergyDiff =
'Relative difference between E_{DSP} and E_{OFFLINE}'
78 titleEnergyDiff +=
';(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
80 xvalue =
'energyDiff', title = titleEnergyDiff, path =
'Tile/ROD',
81 xbins = 41, xmin = -0.205, xmax = 0.205, type =
'TH1D', run = run,
82 triggers = l1Triggers, perPartition =
True)
85 titleTimeDiff =
'Difference between t_{DSP} and t_{OFFLINE}'
86 titleTimeDiff +=
';t_{DSP}- t_{OFFLINE} [ns]'
88 xvalue =
'timeDiff', title = titleTimeDiff, path =
'Tile/ROD',
89 xbins = 101, xmin = -50.5, xmax = 50.5, type =
'TH1D', run = run,
90 triggers = l1Triggers, perPartition =
True)
93 titleTimeDiffVsTime =
'Difference between t_{DSP} and t_{OFFLINE}'
94 titleTimeDiffVsTime +=
';t_{OFFLINE} [ns];t_{DSP}- t_{OFFLINE} [ns]'
96 xvalue =
'time', value =
'timeDiff', title = titleTimeDiffVsTime,
97 path =
'Tile/ROD', xbins = 51, xmin = -25.5, xmax = 25.5,
98 type =
'TProfile', run = run, triggers = l1Triggers, perPartition =
True)
101 titleTimeDiffVsEnergy =
'Difference between t_{DSP} and t_{OFFLINE}'
102 titleTimeDiffVsEnergy +=
';E_{OFFLINE} [MeV];t_{DSP}- t_{OFFLINE}'
104 xvalue =
'energy', value =
'timeDiff', title = titleTimeDiffVsEnergy,
105 path =
'Tile/ROD', xbins = 75, xmin = energyThreshold, xmax = 15000.,
106 type =
'TProfile', run = run, triggers = l1Triggers, perPartition =
True)
109 from TileMonitoring.TileMonitoringCfgHelper
import addTile2DHistogramsArray
112 titleEnergyDiffVsTime =
'Relative difference between E_{DSP} and E_{OFFLINE}'
113 titleEnergyDiffVsTime +=
';t_{DSP} [ns];(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
115 xvalue =
'time', yvalue =
'energyDiff',
116 title = titleEnergyDiffVsTime, path =
'Tile/ROD',
117 xbins = 51, xmin = -25.5, xmax = 25.5,
118 ybins = 30, ymin = -0.35, ymax = 0.1,
119 type =
'TH2D', run = run, triggers = l1Triggers, perPartition =
True)
122 titleEnergyDiffVsEnergy =
'Relative difference between E_{DSP} and E_{OFFLINE}'
123 titleEnergyDiffVsEnergy +=
';E_{OFFLINE} [MeV];(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
125 xvalue =
'energy', yvalue =
'energyDiff',
126 title = titleEnergyDiffVsEnergy, path =
'Tile/ROD',
127 xbins = 75, xmin = energyThreshold, xmax = 15000.,
128 ybins = 82, ymin = -0.205, ymax = 0.205,
129 type =
'TH2D', run = run, triggers = l1Triggers, perPartition =
True)
132 from TileMonitoring.TileMonitoringCfgHelper
import addTileModuleChannelMapsArray
135 titleChanTime = (
'Tile DSP Channel Time (t_{DSP}) [ns], E_{ch} > %s MeV' % energyThreshold)
137 value =
'time', title = titleChanTime, path =
'Tile/ROD',
138 run = run, triggers = l1Triggers, separator =
'_')
141 if fillRODFragmentSizeHistograms:
143 titleAllRodFragSize =
'All Tile ROD fragments size vs luminosity block;LumiBlock;# words'
145 xvalue =
'lumiBlock', value =
'allRodFragsSize',
146 title = titleAllRodFragSize, path =
'Tile/ROD',
147 xbins = 1000, xmin = -0.5, xmax = 999.5,
148 type =
'TProfile', run = run, triggers = l1Triggers,
149 perPartition =
False, opt =
'kAddBinsDynamically', merge =
'merge')
151 from TileCalibBlobObjs.Classes
import TileCalibUtils
as Tile
152 from TileMonitoring.TileMonitoringCfgHelper
import getPartitionName
155 titleRodFragSize =
'Tile ROD fragment size [word]; Fragment;'
158 xvalue =
'fragment', yvalue =
'partition', value =
'rodFragSize',
159 title = titleRodFragSize, path =
'Tile/ROD',
160 xbins = nROBs, xmin = -0.5, xmax = nROBs - 0.5,
161 ybins = Tile.MAX_ROS - 1, ymin = 0.5, ymax = Tile.MAX_ROS - 0.5,
162 type =
'TProfile2D', run = run, triggers = l1Triggers, ylabels = partitionLabels)
165 accumalator = helper.result()
166 result.merge(accumalator)
169 if __name__==
'__main__':
172 from AthenaCommon.Logging
import log
177 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
178 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
180 flags.Input.Files = defaultTestFiles.RAW_RUN2
181 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
182 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
183 flags.Output.HISTFileName =
'TileRODMonitorOutput.root'
184 flags.DQ.useTrigger =
False
185 flags.DQ.enableLumiAccess =
False
186 flags.Tile.doOptATLAS =
True
187 flags.Exec.MaxEvents = 3
192 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
195 from TileByteStream.TileByteStreamConfig
import TileRawDataReadingCfg
198 from TileRecUtils.TileRawChannelMakerConfig
import TileRawChannelMakerCfg
203 cfg.printConfig(withDetails =
True, summariseProps =
True)
206 cfg.store(
open(
'TileRODMonitorAlgorithm.pkl',
'wb') )
212 sys.exit(
not sc.isSuccess())