13 ''' Function to configure TileRawChannelMonitorAlgorithm algorithm in the monitoring system.'''
17 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
20 from TileConditions.TileCablingSvcConfig
import TileCablingSvcCfg
22 run3Period = (result.getService(
'TileCablingSvc').CablingType == 6)
24 from TileRecUtils.TileDQstatusConfig
import TileDQstatusAlgCfg
27 from TileGeoModel.TileGMConfig
import TileGMCfg
30 from TileConditions.TileInfoLoaderConfig
import TileInfoLoaderCfg
32 is12bit = (result.getService(
'TileInfoLoader').ADCmax == 4095)
34 from TileConditions.TileEMScaleConfig
import TileEMScaleCondAlgCfg
37 runType = flags.Tile.RunType
39 kwargs.setdefault(
'name',
'TileRawChannelMonAlg')
40 kwargs.setdefault(
'RunType', runType.getIntValue())
42 if 'TileRawChannelContainer' not in kwargs:
43 if flags.Tile.readDigits:
45 rawChannelContainer =
'TileRawChannelOpt2'
46 elif flags.Tile.doFit:
47 rawChannelContainer =
'TileRawChannelFit'
48 elif flags.Tile.doOptATLAS:
49 rawChannelContainer =
'TileRawChannelFixed'
50 elif flags.Tile.doOptOF1:
51 rawChannelContainer =
'TileRawChannelOF1'
54 rawChannelContainer =
'TileRawChannelCnt'
56 kwargs.setdefault(
'TileRawChannelContainer', rawChannelContainer)
58 if overlapHistograms
is None:
59 overlapHistograms = runType
is TileRunType.LAS
61 if 'fillHistogramsForDSP' not in kwargs:
63 fillHistogramsForDSP = runType
not in [TileRunType.CIS, TileRunType.PED]
64 kwargs.setdefault(
'fillHistogramsForDSP', fillHistogramsForDSP)
66 if 'CalibUnit' not in kwargs:
70 calibUnit = 2
if runType
is TileRunType.PHY
else 1
71 kwargs.setdefault(
'CalibUnit', calibUnit)
74 demonstratorFragID = 0x10d
75 if 'FragIDsDemonstrators' not in kwargs:
76 kwargs.setdefault(
'FragIDsDemonstrators', [demonstratorFragID])
78 if 'FragIDsToIgnoreDMUErrors' not in kwargs:
79 kwargs.setdefault(
'FragIDsToIgnoreDMUErrors', [demonstratorFragID])
81 unit = {1:
'[pC]', 2 :
'[Cesium pC], but MBTS [pc]'}.
get(kwargs[
'CalibUnit'],
"")
85 from AthenaMonitoring
import AthMonitorCfgHelper
86 helper = AthMonitorCfgHelper(flags,
'TileRawChannelMonitoring')
89 from AthenaConfiguration.ComponentFactory
import CompFactory
90 tileRawChannelMonAlg = helper.addAlgorithm(CompFactory.TileRawChannelMonitorAlgorithm, kwargs[
'name'])
92 for k, v
in kwargs.items():
93 setattr(tileRawChannelMonAlg, k, v)
95 run =
str(flags.Input.RunNumbers[0])
98 executeTimeGroup = helper.addGroup(tileRawChannelMonAlg,
'TileRawChannelMonExecuteTime',
'Tile/')
99 executeTimeGroup.defineHistogram(
'TIME_execute', path =
'RawChannel', type=
'TH1F',
100 title =
'Time for execute TileRawChannelMonAlg algorithm;time [#mus]',
101 xbins = 200, xmin = 0, xmax = 200000)
104 from TileMonitoring.TileMonitoringCfgHelper
import addTileChannelHistogramsArray
106 if kwargs[
'fillHistogramsForDSP']:
109 title=f
'DSP Amplitude;{unit}', path=
'Tile/RawChannel', type=
'TH1I', run=run,
110 xvalue=
'dsp_amp', xbins=[491,413], xmin=[-50.5,-1.01], xmax=[1049.34,15.51])
114 title=
'DSP Time;[ns]', path=
'Tile/RawChannel', type=
'TH1I',
115 xvalue=
'dsp_time', xbins=101, xmin=-100.5, xmax= 100.5, run=run)
119 title=f
'DSP-OF Amplitude difference;{unit}', path=
'Tile/RawChannel', type=
'TH1I',
120 run=run, xvalue=
'dsp-fit_amp_diff', xbins=404, xmin=-1.01, xmax=1.01)
124 title=
'DSP-OF Time difference;[ns]', path=
'Tile/RawChannel', type=
'TH1I',
125 xvalue=
'dsp-fit_time_diff', xbins=101, xmin=-2.02, xmax=2.02, run=run)
129 title=
'DSP #chi^{2}', path=
'Tile/RawChannel', type=
'TH1I',
130 xvalue=
'dsp_chi2', xbins=16, xmin=-0.5, xmax=15.5, run=run)
133 title=f
'DSP #chi^{2} vs Amplitude;{unit}', path=
'Tile/RawChannel', aliasSuffix=
'chi2_amp',
134 xvalue=
'dsp_amp', xbins=[200,150], xmin=[-45.1,-7.0], xmax=[855.1,12.0],
135 yvalue=
'dsp_chi2', ybins=16, ymin=-0.5, ymax=15.5, run=run)
137 if runType
is not TileRunType.CIS:
140 if runType
is TileRunType.PED:
141 ampXbins = [101, 101]
142 ampXmin = [-10.1, -0.404]
143 ampXmax = [10.1, 0.404]
144 elif runType
is TileRunType.PHY:
148 elif overlapHistograms:
149 lgXbins = [-50.5 + 1.0 * i
for i
in range(0, 50) ]
150 lgXbins += [-1.5 + 0.05 * i
for i
in range(1, 501)]
151 lgXbins += [23.5 + 1.0 * i
for i
in range(1, 1028)]
152 ampXbins = [lgXbins, 500]
153 ampXmin = [lgXbins[0], -1.5]
154 ampXmax = [lgXbins[len(lgXbins) - 1], 23.5]
156 ampXbins = [1101, 826]
157 ampXmin = [-50.5, -1.01]
158 ampXmax = [1050.5, 15.51]
161 title=f
'Amplitude;{unit}', path=
'Tile/RawChannel', type=
'TH1I',
162 xvalue=
'amp', xbins=ampXbins, xmin=ampXmin, xmax=ampXmax, run=run)
166 title=
'Time;[ns]', path=
'Tile/RawChannel', type=
'TH1I',
167 xvalue=
'time', xbins=201, xmin=-100.5, xmax= 100.5, run=run)
171 title=
'Time corrected;[ns]', path=
'Tile/RawChannel', type=
'TH1I',
172 xvalue=
'time_corr', xbins=201, xmin=-100.5, xmax= 100.5, run=run)
176 chargeFactor = 2.
if is12bit
else 1.
177 adcFactor = 4.
if is12bit
else 1.
179 chargeXmin = { 5 : [-0.5, -0.0625 * chargeFactor], 100 : [-4., -0.0625 * chargeFactor]}
180 chargeXmax = { 5 : [50.5, 12.5625 * chargeFactor], 100 : [804., 12.5625 * chargeFactor]}
182 if kwargs[
'CalibUnit'] == 2:
183 ampYmin = { 5 : [-5.3125, -0.391 * adcFactor], 100 : [-25., -0.391 * adcFactor]}
184 ampYmax = { 5 : [60.3125, 16.02 * adcFactor], 100 : [1025., 16.02 * adcFactor]}
186 ampYmin = { 5 : [-5.3125, -25. * adcFactor], 100 : [-25., -25. * adcFactor]}
187 ampYmax = { 5 : [60.3125, 1025. * adcFactor], 100 : [1025., 1025. * adcFactor]}
189 for capacitor
in [5, 100]:
192 title=f
'Amplitude vs Charge for {capacitor} pF;Charge, [pC];Amplitude, {unit}',
193 path=
'Tile/RawChannel',type=
'TH2F', run=run,
194 aliasSuffix=f
'amp_vs_q_{capacitor}', xvalue=
'charge', yvalue=
'amp',
195 xbins=51, xmin=chargeXmin[capacitor], xmax=chargeXmax[capacitor],
196 ybins=160, ymin=ampYmin[capacitor], ymax=ampYmax[capacitor])
200 title=f
'Time vs Injection Time for {capacitor} pF;Injection Time, [ns];Time, [ns]',
201 path=
'Tile/RawChannel', type=
'TH2F', run=run,
202 xvalue=
'inj_time', yvalue=
'time', aliasSuffix=f
'time_vs_time_{capacitor}',
203 xbins=51, xmin=-0.25, xmax=25.25, ybins=160, ymin=-64., ymax=32.)
207 title=f
'Amplitude over charge ratio for {capacitor} pF;{unit}/[pC]', path=
'Tile/RawChannel',
208 type=
'TH1I', xvalue=
'amp_ratio', run=run, aliasSuffix=f
'amp_ratio_{capacitor}',
209 xbins=101, xmin=-0.01, xmax=2.01)
213 title=f
'Time for {capacitor};[ns]', path=
'Tile/RawChannel', type=
'TH1I',
214 xvalue=
'time', xbins=101, xmin=-101, xmax=101, aliasSuffix=f
'time_{capacitor}')
217 accumalator = helper.result()
218 result.merge(accumalator)