ATLAS Offline Software
Loading...
Searching...
No Matches
TileRODMonitorAlgorithm Namespace Reference

Functions

 TileRODMonitoringConfig (flags, **kwargs)

Detailed Description

@file TileRODMonitorAlgorithm.py
@brief Python configuration of TileRODMonitorAlgorithm algorithm for the Run III

Function Documentation

◆ TileRODMonitoringConfig()

TileRODMonitorAlgorithm.TileRODMonitoringConfig ( flags,
** kwargs )
Function to configure TileRODMonitorAlgorithm algorithm in the monitoring system.

Definition at line 9 of file TileRODMonitorAlgorithm.py.

9def TileRODMonitoringConfig(flags, **kwargs):
10 ''' Function to configure TileRODMonitorAlgorithm algorithm in the monitoring system.'''
11
12 # Define one top-level monitoring algorithm. The new configuration
13 # framework uses a component accumulator.
14 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
15 result = ComponentAccumulator()
16
17 from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
18 result.merge( TileDQstatusAlgCfg(flags) )
19
20 from TileGeoModel.TileGMConfig import TileGMCfg
21 result.merge(TileGMCfg(flags))
22
23 from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
24 result.merge( TileCablingSvcCfg(flags) )
25
26 from TileConditions.TileBadChannelsConfig import TileBadChannelsCondAlgCfg
27 result.merge( TileBadChannelsCondAlgCfg(flags, **kwargs) )
28
29 kwargs.setdefault('CheckDCS', flags.Tile.useDCS)
30 if kwargs['CheckDCS']:
31 from TileConditions.TileDCSConfig import TileDCSCondAlgCfg
32 result.merge( TileDCSCondAlgCfg(flags) )
33
34 from AthenaConfiguration.ComponentFactory import CompFactory
35
36 kwargs.setdefault('fillRODFragmentSizeHistograms', True)
37 fillRODFragmentSizeHistograms = kwargs['fillRODFragmentSizeHistograms']
38 if fillRODFragmentSizeHistograms:
39 result.addService(CompFactory.ROBDataProviderSvc())
40
41 # The following class will make a sequence, configure algorithms, and link
42 # them to GenericMonitoringTools
43 from AthenaMonitoring import AthMonitorCfgHelper
44 helper = AthMonitorCfgHelper(flags,'TileRODMonitoring')
45
46 # Adding an TileRODMonitorAlgorithm algorithm to the helper
47 tileRODMonAlg = helper.addAlgorithm(CompFactory.TileRODMonitorAlgorithm, 'TileRODMonAlg')
48
49 # L1Trigger Type Bits:
50 # bit0_RNDM, bit1_ZeroBias, bit2_L1Cal, bit3_Muon,
51 # bit4_RPC, bit5_FTK, bit6_CTP, bit7_Calib, AnyPhysTrig
52 kwargs.setdefault('fillHistogramsForL1Triggers', ['AnyPhysTrig', 'bit7_Calib'])
53 l1Triggers = kwargs['fillHistogramsForL1Triggers']
54
55 kwargs.setdefault('EnergyThreshold', 300.)
56 energyThreshold = kwargs['EnergyThreshold']
57
58 kwargs.setdefault('TileRawChannelContainer', flags.Tile.RawChannelContainer)
59 kwargs.setdefault('NumberOfROBFragmets', 32)
60 nROBs = kwargs['NumberOfROBFragmets']
61
62 for k, v in kwargs.items():
63 setattr(tileRODMonAlg, k, v)
64
65 run = str(flags.Input.RunNumbers[0])
66
67 # Configure histogram with TileRODMonAlg algorithm execution time
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)
72
73
74 from TileMonitoring.TileMonitoringCfgHelper import addTile1DHistogramsArray
75
76 # Configure histograms with relative difference between Tile DSP and offline energies
77 titleEnergyDiff = 'Relative difference between E_{DSP} and E_{OFFLINE}'
78 titleEnergyDiff += ';(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
79 addTile1DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspEnergyDiff',
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)
83
84 # Configure histograms with difference between Tile DSP and offline times
85 titleTimeDiff = 'Difference between t_{DSP} and t_{OFFLINE}'
86 titleTimeDiff += ';t_{DSP}- t_{OFFLINE} [ns]'
87 addTile1DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspTimeDiff',
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)
91
92 # Configure histograms with difference between Tile DSP and offline times vs offline time
93 titleTimeDiffVsTime = 'Difference between t_{DSP} and t_{OFFLINE}'
94 titleTimeDiffVsTime += ';t_{OFFLINE} [ns];t_{DSP}- t_{OFFLINE} [ns]'
95 addTile1DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspTimeDiffVsTime',
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)
99
100 # Configure histograms with difference between Tile DSP and offline times vs offline energy
101 titleTimeDiffVsEnergy = 'Difference between t_{DSP} and t_{OFFLINE}'
102 titleTimeDiffVsEnergy += ';E_{OFFLINE} [MeV];t_{DSP}- t_{OFFLINE}'
103 addTile1DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspTimeDiffVsEnergy',
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)
107
108
109 from TileMonitoring.TileMonitoringCfgHelper import addTile2DHistogramsArray
110
111 # Configure histograms with relative difference between Tile DSP and offline energies vs offline time
112 titleEnergyDiffVsTime = 'Relative difference between E_{DSP} and E_{OFFLINE}'
113 titleEnergyDiffVsTime += ';t_{DSP} [ns];(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
114 addTile2DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspEnergyDiffVsTime',
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)
120
121 # Configure histograms with relative difference between Tile DSP and offline energies vs offline energy
122 titleEnergyDiffVsEnergy = 'Relative difference between E_{DSP} and E_{OFFLINE}'
123 titleEnergyDiffVsEnergy += ';E_{OFFLINE} [MeV];(E_{DSP}- E_{OFFLINE})/E_{OFFLINE}'
124 addTile2DHistogramsArray(helper, tileRODMonAlg, name = 'TileDspEnergyDiffVsEnergy',
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)
130
131
132 from TileMonitoring.TileMonitoringCfgHelper import addTileModuleChannelMapsArray
133
134 # Configure histograms with everagy Tile channel time per partition
135 titleChanTime = ('Tile DSP Channel Time (t_{DSP}) [ns], E_{ch} > %s MeV' % energyThreshold)
136 addTileModuleChannelMapsArray(helper, tileRODMonAlg, name = 'TileDspChannelTime', type = 'TProfile2D',
137 value = 'time', title = titleChanTime, path = 'Tile/ROD',
138 run = run, triggers = l1Triggers, separator = '_')
139
140
141 if fillRODFragmentSizeHistograms:
142 # Configure histogram with all Tile ROD fragments size vs luminosity block
143 titleAllRodFragSize = 'All Tile ROD fragments size vs luminosity block;LumiBlock;# words'
144 addTile1DHistogramsArray(helper, tileRODMonAlg, name = 'TileRodFragmentSizeLB',
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')
150
151 from TileCalibBlobObjs.Classes import TileCalibUtils as Tile
152 from TileMonitoring.TileMonitoringCfgHelper import getPartitionName
153
154 # Configure histogram with Tile ROD fragment size vs fragment number and partition
155 titleRodFragSize = 'Tile ROD fragment size [word]; Fragment;'
156 partitionLabels = [getPartitionName(ros) for ros in range(1, Tile.MAX_ROS)]
157 addTile2DHistogramsArray(helper, tileRODMonAlg, name = 'TileRodFragmentMapSize',
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)
163
164
165 accumalator = helper.result()
166 result.merge(accumalator)
167 return result
168