ATLAS Offline Software
PprMonitorAlgorithm.py
Go to the documentation of this file.
1 #
2 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 #
4 
5 def PprMonitoringConfig(inputFlags):
6  '''Function to configure LVL1 Ppr algorithm in the monitoring system.'''
7 
8  import math
9  # get the component factory - used for getting the algorithms
10  from AthenaConfiguration.ComponentFactory import CompFactory
11  from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12  result = ComponentAccumulator()
13 
14  # make the athena monitoring helper
15  from AthenaMonitoring import AthMonitorCfgHelper
16  helper = AthMonitorCfgHelper(inputFlags,'PprMonitoringCfg')
17 
18  # get any algorithms
19  PprMonAlg = helper.addAlgorithm(CompFactory.PprMonitorAlgorithm,'PprMonAlg')
20 
21  # add any steering
22  groupName = 'PprMonitor' # the monitoring group name is also used for the package name
23  PprMonAlg.PackageName = groupName
24 
25  # Steering properties
26  threshADC = 50
27  PprMonAlg.TT_ADC_HitMap_Thresh = threshADC # ADC cut for hit maps
28 
29  sliceNo = 15
30  PprMonAlg.SliceNo = sliceNo # Max number of timeslices in the readout
31 
32  threshVec = [0, 1, 3, 5, 10, 20, 30, 50] # LUT thresholds
33  PprMonAlg.LUTHitMap_ThreshVec = threshVec
34 
35  # Environment
36  isOnline = inputFlags.Trigger.Online.isPartition
37 
38  # Histogram paths
39  mainDir = 'L1Calo'
40  trigPath = 'PPM/'
41 
42  # add monitoring algorithm to group, with group name and main directory
43  groupLUTCP = helper.addGroup(PprMonAlg, 'groupLUTCP', mainDir)
44  groupLUTCP_EM = helper.addGroup(PprMonAlg, 'groupLUTCP_EM', mainDir)
45  groupLUTCP_HAD = helper.addGroup(PprMonAlg, 'groupLUTCP_HAD', mainDir)
46  groupLUTJEP = helper.addGroup(PprMonAlg, 'groupLUTJEP', mainDir)
47  groupLUTJEP_EM = helper.addGroup(PprMonAlg, 'groupLUTJEP_EM', mainDir)
48  groupLUTJEP_HAD = helper.addGroup(PprMonAlg, 'groupLUTJEP_HAD', mainDir)
49  groupADC_EM = helper.addGroup(PprMonAlg, 'groupADC_EM', mainDir)
50  groupADC_HAD = helper.addGroup(PprMonAlg, 'groupADC_HAD', mainDir)
51  groupTimeslice_EM = helper.addGroup(PprMonAlg, 'groupTimeslice_EM', mainDir)
52  groupTimeslice_HAD = helper.addGroup(PprMonAlg, 'groupTimeslice_HAD', mainDir)
53  groupTimeslice = helper.addGroup(PprMonAlg, 'groupTimeslice', mainDir)
54  groupErrors_EM = helper.addGroup(PprMonAlg, 'groupErrors_EM', mainDir)
55  groupErrors_HAD = helper.addGroup(PprMonAlg, 'groupErrors_HAD', mainDir)
56 
57  # Trigger tower plots: eta-phi granularity
58  etabins = [-4.9,-4.475,-4.050,-3.625,-3.2,-3.1,-2.9,
59  -2.7,-2.5,-2.4,-2.3,-2.2,-2.1,-2.0,-1.9,
60  -1.8,-1.7,-1.6,-1.5,-1.4,-1.3,-1.2,-1.1,
61  -1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,
62  -0.2,-0.1,0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,
63  0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,
64  1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.7,2.9,
65  3.1,3.2,3.625,4.050,4.475,4.9]
66 
67  etabins_HAD_1D = [-4.9,-4.050,-3.2,-3.1,-2.9,
68  -2.7,-2.5,-2.4,-2.3,-2.2,-2.1,-2.0,-1.9,
69  -1.8,-1.7,-1.6,-1.5,-1.4,-1.3,-1.2,-1.1,
70  -1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,
71  -0.2,-0.1,0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,
72  0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,
73  1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.7,2.9,
74  3.1,3.2,4.050,4.9]
75 
76  phibins = 64
77  phimin = 0
78  phimax_2d = 64
79  phimax_1d = 2.*math.pi
80  maxEnergyRange = 256
81  bcn = 3564 # Max number of bunches
82 
83 
84 
87  histPath = trigPath+'/LUT-CP/Distributions'
88 
89  # LUT per BCN (Both EM & HAD together)
90  groupLUTCP.defineHistogram('BCID;ppm_1d_tt_lutcp_LutPerBCN',
91  title='Number of LUT-CP > 5 GeV/2 per BC; Bunch crossing; # of LUT above limit',
92  type='TH1F', path=histPath, xbins=bcn, xmin=0, xmax=bcn,
93  cutmask='mask_cpET_5')
94 
95  # EM distributions
96  groupLUTCP_EM.defineHistogram('eta_TT;ppm_em_1d_tt_lutcp_Eta',
97  title='EM LUT-CP: Distribution of peak in #eta; #eta',
98  type='TH1F', path=histPath, xbins=etabins,
99  cutmask='mask_cpET_0')
100 
101  groupLUTCP_EM.defineHistogram('phiTT_1D;ppm_em_1d_tt_lutcp_Phi',
102  title='EM LUT-CP: Distribution of peak in #phi; #phi',
103  type='TH1F', path=histPath, xbins=phibins, xmin=phimin, xmax=phimax_1d)
104 
105  groupLUTCP_EM.defineHistogram('cpET_TT;ppm_em_1d_tt_lutcp_Et',
106  title='EM LUT-CP: Distribution of peak; EM LUT peak [GeV/2]',
107  type='TH1F', path=histPath, xbins=maxEnergyRange-1, xmin=1, xmax=maxEnergyRange,
108  cutmask='mask_cpET_0')
109 
110  # HAD distributions
111  groupLUTCP_HAD.defineHistogram('eta_TT;ppm_had_1d_tt_lutcp_Eta',
112  title='HAD LUT-CP: Distribution of peak in #eta; #eta',
113  type='TH1F', path=histPath, xbins=etabins_HAD_1D,
114  cutmask='mask_cpET_0')
115 
116  groupLUTCP_HAD.defineHistogram('phiTT_1D;ppm_had_1d_tt_lutcp_Phi',
117  title='HAD LUT-CP: Distribution of peak in #phi; #phi',
118  type='TH1F', path=histPath, xbins=phibins, xmin=phimin, xmax=phimax_1d)
119 
120  groupLUTCP_HAD.defineHistogram('cpET_TT;ppm_had_1d_tt_lutcp_Et',
121  title='HAD LUT-CP: Distribution of peak; HAD LUT peak [GeV/2]',
122  type='TH1F', path=histPath, xbins=maxEnergyRange-1, xmin=1, xmax=maxEnergyRange,
123  cutmask='mask_cpET_0')
124 
125  # Eta-phi maps
126  histPath = trigPath+'/LUT-CP/EtaPhiMaps'
127 
128  groupLUTCP_EM.defineHistogram('etaTT_2D,phiTT_2D,cpET_TT_2D;ppm_em_2d_etaPhi_tt_lutcp_AverageEt',
129  title='EM Average LUT-CP Et for Et > 5 GeV/2',
130  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
131 
132  groupLUTCP_HAD.defineHistogram('etaTT_2D,phiTT_2D,cpET_TT_2D;ppm_had_2d_etaPhi_tt_lutcp_AverageEt',
133  title='HAD Average LUT-CP Et for Et > 5 GeV/2',
134  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
135 
136  # Eta-phi maps per threshold (low stat).
137  # Offline: fill on a per-LB basis and then merge into low-stat plots
138  # Online: refresh every 10 LB
139 
140  layers = ['EM', 'HAD']
141  iThresh = list(range(0, len(threshVec)))
142 
143  for layer in layers:
144  for i in iThresh:
145  groupLUTCP_LB = helper.addGroup(PprMonAlg, 'groupLUTCP_{0}_{1}_LB'.format(layer, threshVec[i]), mainDir)
146  groupLUTCP_LB.defineHistogram('etaTT_2D,phiTT_2D;ppm_{0}_2d_etaPhi_tt_lutcp_Threshold0{1}'.format(layer.lower(), i),
147  title='#eta - #phi map of {0} LUT-CP > {1} GeV/2'.format(layer, threshVec[i]),
148  type='TH2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d,
149  opt='kAlwaysCreate',
150  duration='' if isOnline else 'lb')
151 
152 
153 
156  histPath = trigPath+'/LUT-JEP/Distributions'
157 
158  # LUT per BCN
159  groupLUTJEP.defineHistogram('BCID;ppm_1d_tt_lutjep_LutPerBCN',
160  title='Number of LUT-JEP > 5 GeV per BC; Bunch crossing; # of LUT above limit',
161  type='TH1F', path=histPath, xbins=bcn, xmin=0, xmax=bcn,
162  cutmask='mask_jepET_5')
163 
164  # EM distributions
165  groupLUTJEP_EM.defineHistogram('eta_TT;ppm_em_1d_tt_lutjep_Eta',
166  title='EM LUT-JEP: Distribution of peak in #eta',
167  type='TH1F', path=histPath, xbins=etabins,
168  cutmask='mask_jepET_0')
169 
170  groupLUTJEP_EM.defineHistogram('phiTT_1D;ppm_em_1d_tt_lutjep_Phi',
171  title='EM LUT-JEP: Distribution of peak in #phi; #phi',
172  type='TH1F', path=histPath, xbins=phibins, xmin=phimin, xmax=phimax_1d)
173 
174  groupLUTJEP_EM.defineHistogram('jepET_TT;ppm_em_1d_tt_lutjep_Et',
175  title='EM LUT-JEP: Distribution of peak; EM LUT peak [GeV]',
176  type='TH1F', path=histPath, xbins=maxEnergyRange-1, xmin=1, xmax=maxEnergyRange,
177  cutmask='mask_jepET_0')
178 
179  # HAD distributions
180  groupLUTJEP_HAD.defineHistogram('eta_TT;ppm_had_1d_tt_lutjep_Eta',
181  title='HAD LUT-JEP: Distribution of peak in #eta',
182  type='TH1F', path=histPath, xbins=etabins_HAD_1D,
183  cutmask='mask_jepET_0')
184 
185  groupLUTJEP_HAD.defineHistogram('phiTT_1D;ppm_had_1d_tt_lutjep_Phi',
186  title='HAD LUT-JEP: Distribution of peak in #phi; #phi',
187  type='TH1F', path=histPath, xbins=phibins, xmin=phimin, xmax=phimax_1d)
188 
189  groupLUTJEP_HAD.defineHistogram('jepET_TT;ppm_had_1d_tt_lutjep_Et',
190  title='HAD LUT-JEP: Distribution of peak; HAD LUT peak [GeV]',
191  type='TH1F', path=histPath, xbins=maxEnergyRange-1, xmin=1, xmax=maxEnergyRange,
192  cutmask='mask_jepET_0')
193 
194  # Eta-phi maps
195  histPath = trigPath+'/LUT-JEP/EtaPhiMaps'
196 
197  groupLUTJEP_EM.defineHistogram('etaTT_2D,phiTT_2D,jepET_TT_2D;ppm_em_2d_etaPhi_tt_lutjep_AverageEt',
198  title='EM Average LUT-JEP Et for Et > 5 GeV',
199  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
200 
201  groupLUTJEP_HAD.defineHistogram('etaTT_2D,phiTT_2D,jepET_TT_2D;ppm_had_2d_etaPhi_tt_lutjep_AverageEt',
202  title='HAD Average LUT-JEP Et for Et > 5 GeV',
203  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
204 
205  for layer in layers:
206  for i in iThresh:
207  groupLUTJEP_LB = helper.addGroup(PprMonAlg, 'groupLUTJEP_{0}_{1}_LB'.format(layer, threshVec[i]), mainDir)
208  groupLUTJEP_LB.defineHistogram('etaTT_2D,phiTT_2D;ppm_{0}_2d_etaPhi_tt_lutjep_Threshold0{1}'.format(layer.lower(), i),
209  title='#eta - #phi map of {0} LUT-JEP > {1} GeV'.format(layer, threshVec[i]),
210  type='TH2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d,
211  opt='kAlwaysCreate',
212  duration='' if isOnline else 'lb')
213 
214 
215 
218  histPath = trigPath+'/ADC/EtaPhiMaps'
219 
220  # EM tower maps
221  groupADC_EM.defineHistogram('etaTT_2D,phiTT_2D;ppm_em_2d_etaPhi_tt_adc_HitMap',
222  title='#eta - #phi map of EM FADC > {0} for triggered timeslice; Tower #eta; Tower #phi'.format(threshADC),
223  type='TH2F', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
224 
225  groupADC_EM.defineHistogram('etaTT_2D,phiTT_2D,adcTT;ppm_em_2d_etaPhi_tt_adc_ProfileHitMap',
226  title='#eta - #phi profile map of EM FADC > {0} for triggered timeslice; Tower #eta; Tower #phi'.format(threshADC),
227  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
228 
229  # HAD tower maps
230  groupADC_HAD.defineHistogram('etaTT_2D,phiTT_2D;ppm_had_2d_etaPhi_tt_adc_HitMap',
231  title='#eta - #phi map of HAD FADC > {0} for triggered timeslice; Tower #eta; Tower #phi'.format(threshADC),
232  type='TH2F', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
233 
234  groupADC_HAD.defineHistogram('etaTT_2D,phiTT_2D,adcTT;ppm_had_2d_etaPhi_tt_adc_ProfileHitMap',
235  title='#eta - #phi profile map of HAD FADC > {0} for triggered timeslice; Tower #eta; Tower #phi'.format(threshADC),
236  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
237 
238  # Triggered time-slice
239  histPath = trigPath+'/ADC/Timeslices'
240 
241  groupTimeslice_EM.defineHistogram('adcPeak;ppm_em_1d_tt_adc_TriggeredSlice',
242  title='Number of the EM triggered slice; # Slice',
243  type='TH1F', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
244 
245  groupTimeslice_HAD.defineHistogram('adcPeak;ppm_had_1d_tt_adc_TriggeredSlice',
246  title='Number of the HAD triggered slice; # Slice',
247  type='TH1F', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
248 
249  groupTimeslice_EM.defineHistogram('maxADC;ppm_em_1d_tt_adc_MaxTimeslice',
250  title='EM distribution of maximum timeslice; slice',
251  type='TH1D', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
252 
253  groupTimeslice_HAD.defineHistogram('maxADC;ppm_had_1d_tt_adc_MaxTimeslice',
254  title='HAD distribution of maximum timeslice; slice',
255  type='TH1D', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
256 
257  groupTimeslice_EM.defineHistogram('etaTT_2D,phiTT_2D,maxADCPlus1;ppm_em_2d_etaPhi_tt_adc_MaxTimeslice',
258  title='Average maximum timeslice for EM signal (TS:1-15); Tower #eta; Tower #phi',
259  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
260 
261  groupTimeslice_HAD.defineHistogram('etaTT_2D,phiTT_2D,maxADCPlus1;ppm_had_2d_etaPhi_tt_adc_MaxTimeslice',
262  title='Average maximum timeslice for HAD signal (TS:1-15); Tower #eta; Tower #phi',
263  type='TProfile2D', path=histPath, xbins=etabins, ybins=phibins, ymin=phimin, ymax=phimax_2d)
264 
265  # Bits of BCID logic word
266  bcidBitsLabels = ['none (40 MHz)', 'satBC only', 'peakF only', 'satBC & peakF', 'sat80BC & peakF', 'sat80BC & sat40BC', 'sat80BC only']
267  groupTimeslice.defineHistogram('bcidBits,adcBCID;ppm_2d_tt_adc_BcidBits',
268  title='PPM: PeakADC Vs. Bits of BCID Logic Word',
269  type='TH2I', path=histPath, xbins=7, xmin=0, xmax=7, xlabels=bcidBitsLabels, ybins=1024, ymin=0, ymax=1024)
270 
271  # High/low threshold pass cases (Sat80 BCID)
272  sat80Labels = ['no saturated ADC', 'none/none', 'none/low', 'none/high', 'low/low', 'low/high', 'high/high', 'else']
273  groupTimeslice.defineHistogram('sat80Word;ppm_1d_tt_adc_HLCase',
274  title= 'PPM: Sat80 thresholds passed by ADC[n-2.5] / ADC[n-1.5]',
275  type='TH1I', path=histPath, xbins=8, xmin=0, xmax=8, xlabels=sat80Labels)
276 
277  # Signal shape profiles
278  partitionsEM = ['LArFCAL1C', 'LArEMECC', 'LArOverlapC', 'LArEMBC', 'LArEMBA', 'LArOverlapA', 'LArEMECA', 'LArFCAL1A']
279  partitionsHAD = [ 'LArFCAL23C', 'LArHECC', 'TileEBC', 'TileLBC', 'TileLBA', 'TileEBA', 'LArHECA', 'LArFCAL23A']
280 
281  signalsEM = helper.addArray([partitionsEM], PprMonAlg, 'groupTimeslice_EM', topPath=mainDir)
282  signalsEM.defineHistogram('slice,wADC;ppm_em_1d_tt_adc_SignalProfile{0}',
283  title='Signal Shape Profile for {0}; Timeslice',
284  type='TProfile', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
285 
286  signalsHAD = helper.addArray([partitionsHAD], PprMonAlg, 'groupTimeslice_HAD', topPath=mainDir)
287  signalsHAD.defineHistogram('slice,wADC;ppm_had_1d_tt_adc_SignalProfile{0}',
288  title='Signal Shape Profile for {0}; Timeslice',
289  type='TProfile', path=histPath, xbins=sliceNo, xmin=0, xmax=sliceNo)
290 
291 
294 
295  # Note: use opt='kAlwaysCreate' for error plots so that empty plots will still be published, for sanity checks
296 
297  histPath = trigPath+'Errors'
298 
299  # Pedestal correction over-/underflows (EM)
300  groupErrors_EM.defineHistogram('etaTT;ppm_em_1d_pedOverflow_Eta',
301  title='EM : Overflow of pedestal correction;#eta',
302  type='TH1F', path=histPath, xbins=etabins,
303  cutmask='mask_PedCorrOverflow',
304  opt='kAlwaysCreate')
305 
306  groupErrors_EM.defineHistogram('etaTT;ppm_em_1d_pedUnderflow_Eta',
307  title='EM : Underflow of pedestal correction;#eta',
308  type='TH1F', path=histPath, xbins=etabins,
309  cutmask='mask_PedCorrUnderflow',
310  opt='kAlwaysCreate')
311 
312  # Pedestal correction over-/underflows (HAD)
313  groupErrors_HAD.defineHistogram('etaTT;ppm_had_1d_pedOverflow_Eta',
314  title='HAD : Overflow of pedestal correction;#eta',
315  type='TH1F', path=histPath, xbins=etabins_HAD_1D,
316  cutmask='mask_PedCorrOverflow',
317  opt='kAlwaysCreate')
318 
319  groupErrors_HAD.defineHistogram('etaTT;ppm_had_1d_pedUnderflow_Eta',
320  title='HAD : Underflow of pedestal correction;#eta',
321  type='TH1F', path=histPath, xbins=etabins_HAD_1D,
322  cutmask='mask_PedCorrUnderflow',
323  opt='kAlwaysCreate')
324 
325  globalError_xlabels = [
326  "ChannelDisabled",
327  "MCMAbsent",
328  "Timeout",
329  "ASICFull",
330  "EventMismatch",
331  "BunchMismatch",
332  "FIFOCorrupt",
333  "PinParity",
334  ]
335 
336  globalError_xlabels_link = [
337  "GLinkParity",
338  "GLinkProtocol",
339  "BCNMismatch",
340  "FIFOOverflow",
341  "ModuleError",
342  " ",
343  "GLinkDown",
344  "GLinkTimeout",
345  ]
346 
347 
348 
349  group_Error_1DSummary= helper.addGroup(PprMonAlg, 'group1DErrorSummary', mainDir)
350  group_Error_1DSummary.defineHistogram('bit_2D;ppm_1d_ErrorSummary', title='Summary of SubStatus Errors', type='TH1F', path=histPath,xbins=8,xmin=0, xmax=8, xlabels=globalError_xlabels_link,opt='kAlwaysCreate')
351 
352 
353  group_Error_ASICErrorEventNumbers= helper.addGroup(PprMonAlg, 'groupASICErrorEventNumbers', mainDir)
354  group_Error_ASICErrorEventNumbers.defineHistogram('eventMonitor,bit_2D;ppm_2d_ASICErrorEventNumbers', title='ASIC Error Field Event Numbers;Events with Error/Mismatch;;', type='TH2I', path=histPath,xbins=10,xmin=0, xmax=10, ybins=8, ymin=0, ymax=8, ylabels=globalError_xlabels,opt='kAlwaysCreate')
355 
356 
357  group_Error_ErrorEventNumbers= helper.addGroup(PprMonAlg, 'groupErrorEventNumbers', mainDir)
358  group_Error_ErrorEventNumbers.defineHistogram('eventMonitor,bit_2D;ppm_2d_ErrorEventNumbers', title='SubStatus Error Event Numbers;Events with Error/Mismatch;;', type='TH2I', path=histPath,xbins=10,xmin=0, xmax=10, ybins=8, ymin=0, ymax=8, ylabels=globalError_xlabels_link,opt='kAlwaysCreate')
359 
360 
361  group_Error_ErrorField03= helper.addGroup(PprMonAlg, 'groupErrorField03', mainDir)
362  group_Error_ErrorField03.defineHistogram('bit_2D,y_2D;ppm_2d_ErrorField03', title='Errors from TT SubStatus Word (crates 0-3)', type='TH2I', path=histPath,xbins=8,xmin=0, xmax=8, ybins=64, ymin=0, ymax=64, xlabels=globalError_xlabels, ylabels=BinErrors('cr0cr1cr2cr3'),opt='kAlwaysCreate')
363 
364  group_Error_ErrorField47= helper.addGroup(PprMonAlg, 'groupErrorField47', mainDir)
365  group_Error_ErrorField47.defineHistogram('bit_2D,y_2D;ppm_2d_ErrorField47', title='Errors from TT SubStatus Word (crates 4-7)', type='TH2I', path=histPath,xbins=8,xmin=0, xmax=8, ybins=64, ymin=0, ymax=64, xlabels=globalError_xlabels, ylabels=BinErrors('cr4cr5cr6cr7'),opt='kAlwaysCreate')
366 
367 
368  group_Error_Status03= helper.addGroup(PprMonAlg, 'groupStatus03', mainDir)
369  group_Error_Status03.defineHistogram('bit_2D,y_2D;ppm_2d_Status03', title='Errors from TT SubStatus Word (crates 0-3)', type='TH2I', path=histPath,xbins=8,xmin=0, xmax=8, ybins=64, ymin=0, ymax=64, xlabels=globalError_xlabels_link, ylabels=BinErrors('cr0cr1cr2cr3'),opt='kAlwaysCreate')
370 
371 
372  group_Error_Status47= helper.addGroup(PprMonAlg, 'groupStatus47', mainDir)
373  group_Error_Status47.defineHistogram('bit_2D,y_2D;ppm_2d_Status47', title='Errors from TT SubStatus Word (crates 4-7)', type='TH2I', path=histPath,xbins=8,xmin=0, xmax=8, ybins=64, ymin=0, ymax=64, xlabels=globalError_xlabels_link, ylabels=BinErrors('cr4cr5cr6cr7'),opt='kAlwaysCreate')
374 
375 
376 
377 
378  # Finish up
379 
380  acc = helper.result()
381  result.merge(acc)
382  return result
383 
384 
385 
386 def BinErrors(crs):
387 
388  cr0 = crs.split("cr")[1]
389  cr1 = crs.split("cr")[2]
390  cr2= crs.split("cr")[3]
391  cr3= crs.split("cr")[4]
392 
393  yErrorLabels = []
394  for i in range(0, 16,2):
395  yErrorLabels.append(str(cr0)+'/'+str(i))
396  for i in range(0, 16,2):
397  yErrorLabels.append(str(cr1)+'/'+str(i))
398  for i in range(0, 16,2):
399  yErrorLabels.append(str(cr2)+'/'+str(i))
400  for i in range(0, 16,2):
401  yErrorLabels.append(str(cr3)+'/'+str(i))
402 
403  return yErrorLabels
404 
405 
406 if __name__=='__main__':
407  # set input file and config options
408 
409  from AthenaConfiguration.AllConfigFlags import initConfigFlags
410 
411  flags = initConfigFlags()
412  flags.Exec.MaxEvents = 1
413 
414  flags.Input.Files = ["/eos/atlas/atlastier0/rucio/data22_13p6TeV/express_express/00423433/data22_13p6TeV.00423433.express_express.recon.ESD.x653/data22_13p6TeV.00423433.express_express.recon.ESD.x653._lb0015._SFO-ALL._0001.2"]
415  flags.Output.HISTFileName = 'ExampleMonitorOutput_LVL1.root'
416 
417  flags.lock()
418 
419  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
420  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
421  cfg = MainServicesCfg(flags)
422  cfg.merge(PoolReadCfg(flags))
423 
424 
425  PprMonitorCfg = PprMonitoringConfig(flags)
426  cfg.merge(PprMonitorCfg)
427 
428  # message level for algorithm
429  PprMonitorCfg.getEventAlgo('PprMonAlg').OutputLevel = 1 # 1/2 INFO/DEBUG
430  # options - print all details of algorithms, very short summary
431  cfg.printConfig(withDetails=True, summariseProps = True)
432  import sys
433  sys.exit(cfg.run().isFailure())
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
vtune_athena.format
format
Definition: vtune_athena.py:14
PprMonitorAlgorithm.BinErrors
def BinErrors(crs)
Definition: PprMonitorAlgorithm.py:386
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
PprMonitorAlgorithm.PprMonitoringConfig
def PprMonitoringConfig(inputFlags)
Definition: PprMonitorAlgorithm.py:5
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
str
Definition: BTagTrackIpAccessor.cxx:11
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69