12 ''' Function to configure TileDQFragMonitorAlgorithm algorithm in the monitoring system.'''
14 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
17 from DetDescrCnvSvc.DetDescrCnvSvcConfig
import DetDescrCnvSvcCfg
20 from TileConditions.TileCablingSvcConfig
import TileCablingSvcCfg
23 from TileRecUtils.TileDQstatusConfig
import TileDQstatusAlgCfg
26 from TileConditions.TileInfoLoaderConfig
import TileInfoLoaderCfg
29 from TileConditions.TileEMScaleConfig
import TileEMScaleCondAlgCfg
32 from TileConditions.TileBadChannelsConfig
import TileBadChannelsCondAlgCfg
35 kwargs.setdefault(
'CheckDCS', flags.Tile.useDCS)
36 if kwargs[
'CheckDCS']:
37 from TileConditions.TileDCSConfig
import TileDCSCondAlgCfg
40 rawChannelContainer = flags.Tile.RawChannelContainer
42 from AthenaConfiguration.Enums
import Format
43 if flags.Input.Format
is Format.POOL:
44 kwargs.setdefault(
'TileDigitsContainer',
'TileDigitsFlt')
45 if rawChannelContainer
not in flags.Input.Collections:
46 rawChannelContainer =
''
48 kwargs.setdefault(
'TileRawChannelContainer', rawChannelContainer)
51 kwargs.setdefault(
'MinEnergyChan', -5.0 * GeV)
52 kwargs.setdefault(
'MinEnergyGap', -10.0 * GeV)
54 runNumber = flags.Input.RunNumbers[0]
59 from AthenaMonitoring
import AthMonitorCfgHelper
60 helper = AthMonitorCfgHelper(flags,
'TileDQFragMonAlgCfg')
62 from AthenaConfiguration.ComponentFactory
import CompFactory
63 tileDQFragMonAlg = helper.addAlgorithm(CompFactory.TileDQFragMonitorAlgorithm,
'TileDQFragMonAlg')
65 for k, v
in kwargs.items():
66 setattr(tileDQFragMonAlg, k, v)
69 executeTimeGroup = helper.addGroup(tileDQFragMonAlg,
'TileDQFragMonExecuteTime',
'Tile/')
70 executeTimeGroup.defineHistogram(
'TIME_execute', path =
'DMUErrors', type=
'TH1F',
71 title =
'Time for execute TileDQFragMonAlg algorithm;time [#mus]',
72 xbins = 300, xmin = 0, xmax = 300000)
75 errorStateGroup = helper.addGroup(tileDQFragMonAlg,
'TileEventsWithErrEventInfoLB',
'Tile/DMUErrors')
76 errorStateGroup.defineHistogram(
'lumiBlock;TileEventsWithErrEventInfo', path =
'BadDrawers', type=
'TH1F',
77 title =
'Run ' + run +
': # events with Tile error state in EventInfo;LumiBlock;# events with error',
78 xbins = 1000, xmin = -0.5, xmax = 999.5, opt =
'kAddBinsDynamically', merge =
'merge')
81 consecutiveBadGroup = helper.addGroup(tileDQFragMonAlg,
'TileConsecutiveBadModules',
'Tile/DMUErrors')
82 consecutiveBadGroup.defineHistogram(
'TileConsecutiveBad', path =
'BadDrawers', type=
'TH1F',
83 title =
'Run ' + run +
': Max # Tile consecutive bad modules;# consecutive bad modules;N',
84 xbins = 17, xmin = -0.5, xmax = 16.5)
87 consecutiveBadLBGroup = helper.addGroup(tileDQFragMonAlg,
'TileConsecutiveBadModulesLB',
'Tile/DMUErrors')
88 consecutiveBadLBGroup.defineHistogram(
'lumiBlock,TileConsecutiveBad;TileConsecutiveBadLB', path =
'BadDrawers', type=
'TH2F',
89 title =
'Run ' + run +
': Max # Tile consecutive bad modules;LumiBlock;# consecutive bad modules',
90 xbins = 1000, xmin = -0.5, xmax = 999.5, ybins = 17, ymin = -0.5, ymax = 16.5,
91 opt =
'kAddBinsDynamically', merge =
'merge')
94 from TileMonitoring.TileMonitoringCfgHelper
import getPartitionName
95 from TileCalibBlobObjs.Classes
import TileCalibUtils
as Tile
98 moduleLabels = [
str(module)
for module
in range(1, Tile.MAX_DRAWER + 1)]
101 mismatchedLVL1Group = helper.addGroup(tileDQFragMonAlg,
'TileMismatchedL1TriggerType',
'Tile/')
102 mismatchedLVL1Group.defineHistogram(
'module,ROS;TileMismatchedL1TriggerType', path =
'DMUErrors',
103 title =
'Run ' + run +
': Tile mismatched L1 Trigger Type;Module;Partition',
104 type =
'TH2F', xlabels = moduleLabels, ylabels = partitionLabels,
105 xbins = Tile.MAX_DRAWER, xmin = -0.5, xmax = Tile.MAX_DRAWER - 0.5,
106 ybins = Tile.MAX_ROS - 1, ymin = 1.0, ymax = Tile.MAX_ROS)
109 noAllDigitsGroup = helper.addGroup(tileDQFragMonAlg,
'TileNoAllDigits',
'Tile/')
110 noAllDigitsGroup.defineHistogram(
'module,ROS;TileNoalldigits', path =
'DMUErrors', type =
'TH2F',
111 title =
'Run ' + run +
': No All Tile digits in event with Trigger Type = 0x82;Module;Partition',
112 xlabels = moduleLabels, ylabels = partitionLabels,
113 xbins = Tile.MAX_DRAWER, xmin = -0.5, xmax = Tile.MAX_DRAWER - 0.5,
114 ybins = Tile.MAX_ROS - 1, ymin = 1.0, ymax = Tile.MAX_ROS)
117 globalCRCGroup = helper.addGroup(tileDQFragMonAlg,
'TileBadGlobalCRC',
'Tile/')
118 globalCRCGroup.defineHistogram(
'module,ROS;TileBadGlobalCRC', path =
'DMUErrors', type =
'TH2F',
119 title =
'Run ' + run +
': Global CRC errors;Module;Partition',
120 xlabels = moduleLabels, ylabels = partitionLabels,
121 xbins = Tile.MAX_DRAWER, xmin = -0.5, xmax = Tile.MAX_DRAWER - 0.5,
122 ybins = Tile.MAX_ROS - 1, ymin = 1.0, ymax = Tile.MAX_ROS)
126 dmuLabels = [
str(dmu)
for dmu
in range(0, maxDMUs)]
128 dmuErrorLabels = [
'OK',
'HEADER_FORM',
'HEADER_PAR',
'MEMO_PAR',
'FE_CRC',
'ROD_CRC',
'BCID']
129 dmuErrorLabels += [
'SAMPLE_FORM',
'SAMPLE_PAR',
'DOUBLE_STB',
'SINGLE_STB',
'GLOBAL_CRC']
130 dmuErrorLabels += [
'DUMMY_FRAG',
'NO_RECO_FRAG',
'MASKED',
'ALL_M_BAD_DCS',
'ANY_CH_BAD_HV']
132 dmuErrorLabels += [
'0 -> 1023',
'Zeros',
'Two 1023 + ped',
'Jump 2 levels',
'Single Up + ped']
133 dmuErrorLabels += [
'Single Dn + ped',
'Single Up + sig',
'Single Dn + sig',
'Ped > 200 LG']
134 dmuErrorLabels += [
'Single Dn LG_s0',
'Single Dn LG_s6',
'Up LG_s0_s6 or Gap',
'Dn LG_s0_s6 or Gap']
135 dmuErrorLabels += [
'Bad quality',
'Big negative ene']
137 maxErrors = len(dmuErrorLabels)
139 errorsArray = helper.addArray([
int(Tile.MAX_ROS - 1),
int(Tile.MAX_DRAWER)],
140 tileDQFragMonAlg,
'TileDigiErrors', topPath =
'Tile/')
141 for postfix, tool
in errorsArray.Tools.items():
142 ros, module = [
int(x)
for x
in postfix.split(
'_')[1:]]
144 moduleName = Tile.getDrawerString(ros + 1, module)
145 title =
'Run ' + run +
': ' + moduleName +
' Channel and DMU Header Errors;DMU'
146 name =
'DMU,Error;TileDigiErrors' + moduleName
148 tool.defineHistogram(name, title = title, type =
'TH2F', path =
'DMUErrors',
149 xlabels = dmuLabels, ylabels = dmuErrorLabels,
150 xbins = maxDMUs, xmin = 0.0, xmax = maxDMUs,
151 ybins = maxErrors, ymin = 0.0, ymax = maxErrors)
156 errorsVsLBArray = helper.addArray([
int(Tile.MAX_ROS - 1),
int(Tile.MAX_DRAWER)],
157 tileDQFragMonAlg,
'FracTileDigiErrors', topPath =
'Tile/')
158 for postfix, tool
in errorsVsLBArray.Tools.items():
159 ros, module = [
int(x)
for x
in postfix.split(
'_')[1:]]
161 moduleName = Tile.getDrawerString(ros + 1, module)
162 title =
'Run ' + run +
': ' + moduleName +
' (#total_events - #ok_events)/(#total_events)'
163 title +=
';LumiBlock;Fraction of Digital errors'
164 name =
'lumiBlock,fractionOfBadDMUs;FracTileDigiErrors' + moduleName
166 tool.defineHistogram(name, title = title, path =
'DMUErrors', type =
'TProfile',
167 xbins = 1000, xmin = -0.5, xmax = 999.5, opt =
'kAddBinsDynamically', merge =
'merge')
171 from TileMonitoring.TileMonitoringCfgHelper
import addTileModuleChannelMapsArray
175 name =
'TileBadChannelsJumpMap', title =
'# Jump errors',
180 name =
'TileBadChannelsJumpNotMaskMap', title =
'# Not masked Jump errors',
186 name =
'TileBadPulseQualityMap', run = run,
187 title =
'Bad pulse shape or #chi^{2} from Optimal Filtering algirithm')
191 name =
'TileBadChannelsNegMap', title =
'# Negative amplitude',
196 name =
'TileBadChannelsNegNotMaskMap', run = run,
197 title =
'# Not masked negative amplitude')
201 negEneMapTitle = f
"# Negative energy below {kwargs['MinEnergyChan']/GeV} ({kwargs['MinEnergyGap']/GeV} for E cels) GeV"
203 name =
'TileNegativeEnergyMap', run = run, title = negEneMapTitle)
205 accumalator = helper.result()
206 result.merge(accumalator)