5 from TileConfiguration.TileConfigFlags
import TileRunType
8 @file TileRawChannelTimeMonitorAlgorithm.py
9 @brief Python configuration of TileRawChannelTimeMonitorAlgorithm algorithm for the Run III
13 ''' Function to configure TileRawChannelTimeMonitorAlgorithm algorithm in the monitoring system.'''
17 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
20 from TileRecUtils.TileDQstatusConfig
import TileDQstatusAlgCfg
23 from TileGeoModel.TileGMConfig
import TileGMCfg
26 from TileConditions.TileCablingSvcConfig
import TileCablingSvcCfg
29 from TileConditions.TileBadChannelsConfig
import TileBadChannelsCondAlgCfg
32 from TileConditions.TileEMScaleConfig
import TileEMScaleCondAlgCfg
35 kwargs.setdefault(
'CheckDCS', flags.Tile.useDCS)
36 if kwargs[
'CheckDCS']:
37 from TileConditions.TileDCSConfig
import TileDCSCondAlgCfg
40 kwargs.setdefault(
'TriggerChain',
'')
41 kwargs.setdefault(
'TriggerTypes', [0x34])
44 partitionPairs = [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]
45 kwargs.setdefault(
'PartitionTimeDiffferncePairs', partitionPairs)
47 runType = flags.Tile.RunType
48 partitionTimeCorrections = [0, 0, 0, 0]
49 if flags.Input.RunNumbers[0] > 400000:
50 if runType
is TileRunType.GAPLAS:
51 partitionTimeCorrections = [-28.65, -45.2, 25.24, 24.94]
52 elif runType
is TileRunType.GAPCIS:
53 partitionTimeCorrections = [0, 0, 0, 0]
55 partitionTimeCorrections = [-15.18, -15.37, 47.65, 47.42]
57 kwargs.setdefault(
'PartitionTimeCorrections', partitionTimeCorrections)
61 from AthenaMonitoring
import AthMonitorCfgHelper
62 helper = AthMonitorCfgHelper(flags,
'TileRawChannelTimeMonitoring')
65 from AthenaConfiguration.ComponentFactory
import CompFactory
66 TileRawChannelTimeMonitorAlgorithm = CompFactory.TileRawChannelTimeMonitorAlgorithm
67 tileRawChanTimeMonAlg = helper.addAlgorithm(TileRawChannelTimeMonitorAlgorithm,
'TileRawChanTimeMonAlg')
69 for k, v
in kwargs.items():
70 setattr(tileRawChanTimeMonAlg, k, v)
72 run =
str(flags.Input.RunNumbers[0])
73 eventsType =
'CIS' if runType.getCommonType()
is TileRunType.CIS
else 'Laser'
76 executeTimeGroup = helper.addGroup(tileRawChanTimeMonAlg,
'TileRawChanTimeMonExecuteTime',
'Tile/')
77 executeTimeGroup.defineHistogram(
'TIME_execute', path =
'RawChannelTime', type=
'TH1F',
78 title =
'Time for execute TileRawChanTimeMonAlg algorithm;time [#mus]',
79 xbins = 100, xmin = 0, xmax = 100000)
82 from TileMonitoring.TileMonitoringCfgHelper
import addTileModuleChannelMapsArray, getPartitionName
86 title = f
'Tile average time with {eventsType} (partition average time is subracted)',
87 path =
'Tile/RawChannelTime/Summary',
88 type =
'TProfile2D', value =
'time', run = run)
92 title = f
'Tile average uncorrected time with {eventsType}',
93 path =
'Tile/RawChannelTime/Summary',
94 type =
'TProfile2D', value =
'time', run = run)
98 title = f
'Tile average amplitude [pC] with {eventsType}',
99 path =
'Tile/RawChannelTime/Summary',
100 type =
'TProfile2D', value =
'amplitude', run = run)
102 from TileMonitoring.TileMonitoringCfgHelper
import addTile2DHistogramsArray
105 partitionAverageTimeTitle = {}
106 partitionAverageTimeTitleTemplate = f
'Tile average time with {eventsType} corrected by %+0.0f [ns] vs LumiBlock;LumiBlock;t [ns]'
107 for ros
in range(1,5):
108 partitionAverageTimeTitle[
getPartitionName(ros)] = partitionAverageTimeTitleTemplate % (-partitionTimeCorrections[ros - 1])
110 xvalue =
'lumiBlock', yvalue =
'time', type=
'TH2D',
111 title = partitionAverageTimeTitle, opt =
'kAddBinsDynamically', merge =
'merge',
112 path =
'Tile/RawChannelTime/Summary', run = run, perPartition =
True,
113 xbins = 3000, xmin = -0.5, xmax = 2999.5, ybins = 149, ymin = -74.5, ymax = 74.5)
117 partitionPairs = kwargs[
'PartitionTimeDiffferncePairs']
118 partTimeDiffVsLBArray = helper.addArray([len(partitionPairs)], tileRawChanTimeMonAlg,
119 'TileAverageTimeDifferenceLB', topPath =
'Tile/RawChannelTime')
120 for postfix, tool
in partTimeDiffVsLBArray.Tools.items():
121 pairIdx =
int(postfix.split(
'_').pop())
122 partitionName1, partitionName2 = [
getPartitionName(ros + 1)
for ros
in partitionPairs[pairIdx]]
123 ros1, ros2 = partitionPairs[pairIdx]
124 partitionTimeCorrection1 = partitionTimeCorrections[ros1]
125 partitionTimeCorrection2 = partitionTimeCorrections[ros2]
127 title = f
'Run {run}: Average time with {eventsType} between {partitionName1} and {partitionName2}'
128 title +=
' corrected by %+0.0f [ns]' % (partitionTimeCorrection1 - partitionTimeCorrection2)
129 title +=
' vs luminosity block;LumiBlock;t [ns]'
130 name =
'lumiBlock,time;TileAverageTimeDifferenceLB_%s-%s' % (partitionName1, partitionName2)
132 tool.defineHistogram(name, title = title, path =
'Summary', type =
'TProfile',
133 xbins = 1000, xmin = -0.5, xmax = 999.5, opt =
'kAddBinsDynamically', merge =
'merge')
136 from TileCalibBlobObjs.Classes
import TileCalibUtils
as Tile
140 digiTimeVsLBArray = helper.addArray([
int(Tile.MAX_ROS - 1),
int(Tile.MAX_DRAWER), maxDigitizer],
141 tileRawChanTimeMonAlg,
'TileDigitizerTimeLB', topPath =
'Tile/RawChannelTime')
142 for postfix, tool
in digiTimeVsLBArray.Tools.items():
143 ros, module, digitizer = [
int(x)
for x
in postfix.split(
'_')[1:]]
146 moduleName = Tile.getDrawerString(ros + 1, module)
147 title =
'Run ' + run +
' ' + moduleName +
' Digitizer ' +
str(digitizer)
148 title +=
': Time vs luminosity block (partition average time is subracted);LumiBlock;t [ns]'
149 name =
'lumiBlock,time;TileDigitizerTimeLB_' + moduleName +
'_DIGI_' +
str(digitizer)
152 tool.defineHistogram(name, title = title, path = path, type =
'TProfile',
153 xbins = 1000, xmin = -0.5, xmax = 999.5, opt =
'kAddBinsDynamically', merge =
'merge')
155 accumalator = helper.result()
156 result.merge(accumalator)
159 if __name__==
'__main__':
162 from AthenaCommon.Logging
import log
167 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
168 from AthenaConfiguration.TestDefaults
import defaultConditionsTags, defaultGeometryTags
170 inputDirectory =
'/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TileByteStream/TileByteStream-02-00-00'
171 inputFile =
'data18_tilecomm.00363899.calibration_tile.daq.RAW._lb0000._TileREB-ROS._0005-200ev.data'
172 flags.Input.Files = [inputDirectory +
'/' + inputFile]
173 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
174 flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
175 flags.Output.HISTFileName =
'TileRawChannelTimeMonitorOutput.root'
176 flags.DQ.useTrigger =
False
177 flags.DQ.enableLumiAccess =
False
179 flags.Tile.RunType = TileRunType.GAPLAS
180 flags.Tile.doFit =
True
181 flags.Tile.correctTime =
True
182 flags.Tile.doOverflowFit =
False
183 flags.Tile.BestPhaseFromCOOL =
True
184 flags.Tile.NoiseFilter = 1
185 flags.Exec.MaxEvents = 3
191 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
194 from TileByteStream.TileByteStreamConfig
import TileRawDataReadingCfg
197 from TileRecUtils.TileRawChannelMakerConfig
import TileRawChannelMakerCfg
202 cfg.printConfig(withDetails =
True, summariseProps =
True)
205 cfg.store(
open(
'TileRawChannelTimeMonitorAlgorithm.pkl',
'wb') )
211 sys.exit(
not sc.isSuccess())