4 The CTP monitors three different types of signals. In the XML file
5 they are listed in the section <TriggerCounterList>
9 Almost each input threshold is monitored with one counter per
10 multiplicity it can have. E.g. there are 7 counters for the EM10VH
11 threshold: "1EM10VH" ... "7EM10VH"
13 Due to limitations of the CTPIN monitoring LUT (there are only 4 LUT
14 per CTPIN connector and a LUT has 8 bit input) only 2 3-bit thresholds
15 can be monitored per LUT, so max 8 3-bit thresholds per
16 connector. Hence JET thresholds 8 and 9 can not be monitored.
21 This allows to monitor any combination of conditions built in the same
22 way as L1 Items. However, since we can also monitor L1 Items directly
23 (see 3)), there is little need for this type of monitoring. We use it to monitor simple conditions
28 For each of these type 64 L1Items can be monitored independently
29 Please take note that the bunch mask is not applied for the per-bunch monitoring, thus one item per threshold is sufficient
33 from AthenaCommon.Logging
import logging
34 log = logging.getLogger(__name__)
36 from ..Base.MonCounters
import CtpinCounter, CtpmonCounter
50 for slotConnectors
in ctpinConfig.values():
51 for connName
in slotConnectors.values():
53 connectedCables += [ connName ]
56 for ctpinCableName
in connectedCables:
57 conn = connectors[ctpinCableName]
58 for i, tl
in enumerate(conn.triggerLines):
59 if ctpinCableName ==
"JET1" and i==8:
61 for mult
in range(1, 2**tl.nbits):
62 counters += [
CtpinCounter(threshold=tl.name, multiplicity = mult) ]
78 'AFP_NSA',
'AFP_NSC',
'AFP_FSA',
'AFP_FSC',
'AFP_FSA_TOF_T0',
'AFP_FSC_TOF_T0',
79 'AFP_FSA_TOF_T1',
'AFP_FSC_TOF_T1',
'AFP_FSA_TOF_T2',
'AFP_FSC_TOF_T2',
'AFP_FSA_TOF_T3',
'AFP_FSC_TOF_T3',
80 'MBTS_A0',
'MBTS_A1',
'MBTS_A2',
'MBTS_A3',
'MBTS_A4',
'MBTS_A5',
'MBTS_A6',
'MBTS_A7',
81 'MBTS_A8',
'MBTS_A9',
'MBTS_A10',
'MBTS_A11',
'MBTS_A12',
'MBTS_A13',
'MBTS_A14',
'MBTS_A15',
82 'MBTS_C0',
'MBTS_C1',
'MBTS_C2',
'MBTS_C3',
'MBTS_C4',
'MBTS_C5',
'MBTS_C6',
'MBTS_C7',
83 'MBTS_C8',
'MBTS_C9',
'MBTS_C10',
'MBTS_C11',
'MBTS_C12',
'MBTS_C13',
'MBTS_C14',
'MBTS_C15',
84 'BMA0',
'BMA1',
'BMA2',
'BMA3',
88 for thrName
in cThr[mult]:
98 this functions marks the items that should be monitored by setting the corresponding monitoring flags
99 e.g. to "LF:000|HF:111" for high frequency monitoring of TBP, TAP, and TAV.
106 monItems = { 1 :[], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [] }
107 monItemsHF = { 1 :[], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [] }
111 if 'HI' not in menuName:
112 monItems[TBP|TAP|TAV] = [
114 "L1_MU10BO",
"L1_MU10BOM",
"L1_MU12BOM",
"L1_MU14FCH",
115 "L1_MU3V",
"L1_MU4BOM",
"L1_MU5VF",
"L1_MU8VFC",
116 "L1_2MU3V",
"L1_2MU3VF",
"L1_2MU5VF",
117 "L1_MU5VF_2MU3V",
"L1_MU8VF_2MU5VF",
118 "L1_3MU3V",
"L1_MU5VF_3MU3VF",
"L1_4MU3V",
121 "L1_TAU8",
"L1_TAU20IM",
126 "L1_eEM5",
"L1_eEM9",
"L1_eEM12L",
127 "L1_eEM18L",
"L1_eEM18M",
"L1_eEM24L",
128 "L1_eEM26",
"L1_eEM26L",
"L1_eEM26M",
"L1_eEM26T",
130 "L1_2eEM18M",
"L1_2eEM24L",
131 "L1_eEM24L_3eEM12L",
"L1_eEM40L_2eEM18L",
132 "L1_eTAU20M",
"L1_eTAU30",
133 "L1_eTAU60",
"L1_eTAU80",
"L1_eTAU140",
134 "L1_jTAU20",
"L1_jTAU30",
"L1_jTAU30M",
135 "L1_cTAU20M",
"L1_cTAU35M",
136 "L1_cTAU30M_2cTAU20M",
137 "L1_jJ30",
"L1_jJ40",
"L1_jJ50",
138 "L1_jJ60",
"L1_jJ90",
"L1_jJ125",
139 "L1_jJ160",
"L1_jJ500",
140 "L1_jJ40p30ETA49",
"L1_jJ50p30ETA49",
141 "L1_jJ60p30ETA49",
"L1_jJ90p30ETA49",
"L1_jJ125p30ETA49",
142 "L1_3jJ90",
"L1_4jJ40",
"L1_4jJ50",
143 "L1_3jJ70p0ETA23",
"L1_4jJ40p0ETA25",
"L1_5jJ40p0ETA25",
144 "L1_jJ140_3jJ60",
"L1_jJ85p0ETA21_3jJ40p0ETA25",
145 "L1_jXE60",
"L1_jXE70",
"L1_jXE80",
"L1_jXE90",
"L1_jXE100",
146 "L1_jXE110",
"L1_jXE120",
"L1_jXE500",
149 "L1_jTEC200",
"L1_jTEFWD100",
"L1_jTEFWDA100",
"L1_jTEFWDC100",
150 "L1_gJ20p0ETA25",
"L1_gJ20p25ETA49",
"L1_gJ20p0ETA25_EMPTY",
"L1_gJ50p0ETA25",
151 "L1_gJ100p0ETA25",
"L1_gJ400p0ETA25",
152 "L1_gLJ80p0ETA25",
"L1_gLJ100p0ETA25",
"L1_gLJ140p0ETA25",
"L1_gLJ160p0ETA25",
154 "L1_gXENC70",
"L1_gXENC100",
155 "L1_gXEJWOJ60",
"L1_gXEJWOJ70",
"L1_gXEJWOJ80",
"L1_gXEJWOJ100",
"L1_gXEJWOJ110",
"L1_gXEJWOJ120",
"L1_gXEJWOJ500",
159 "L1_2eEM10L_MU8F",
"L1_MU3V_jJ40",
162 "L1_LLPDPHI-jXE40-jJ40",
163 "L1_BPH-0DR3-eEM9jJ40_MU5VF",
"L1_BPH-0M9-eEM9-eEM7_MU5VF",
"L1_BPH-0DR3-eEM9jJ40_2MU3V",
164 "L1_BPH-0M9-eEM9-eEM7",
"L1_BPH-0M10-3MU3V",
"L1_BPH-0M10-3MU3VF",
165 "L1_JPSI-1M5-eEM9",
"L1_JPSI-1M5-eEM15",
166 "L1_BTAG-MU3VjJ40",
"L1_BTAG-MU5VFjJ80",
167 "L1_cTAU30M_2cTAU20M_DR-eTAU30MeTAU20M",
169 "L1_DY-BOX-2MU3VF",
"L1_DY-BOX-MU5VFMU3V",
170 "L1_LAR-ZEE-eEM",
"L1_LFV-MU5VF",
171 "L1_10DR-MU14FCH-MU5VF_EMPTY",
"L1_DPHI-M70-2eEM12M",
175 "L1_HT190-jJ40s5pETA21",
"L1_jMJJ-500-NFF",
176 "L1_LLP-RO-eEM",
"L1_LLP-NOMATCH-eEM",
178 "L1_ZAFB-25DPHI-eEM18M",
180 "L1_LFV-eEM10L-MU8VF",
"L1_LFV-eEM15L-MU5VF",
183 if 'MC' not in menuName:
184 monItems[TBP|TAP|TAV] += [
187 "L1_LUCID_A",
"L1_LUCID_C",
188 "L1_CALREQ1",
"L1_CALREQ2",
191 "L1_BPTX0_BGRP12",
"L1_BPTX1_BGRP12",
195 "L1_BCM_2A_FIRSTINTRAIN",
"L1_BCM_2C_FIRSTINTRAIN",
197 "L1_AFP_A_AND_C_TOF_T0T1",
198 "L1_AFP_FSA_BGRP12",
"L1_AFP_FSC_BGRP12",
199 "L1_AFP_FSA_TOF_T0_BGRP12",
"L1_AFP_FSA_TOF_T1_BGRP12",
"L1_AFP_FSA_TOF_T2_BGRP12",
"L1_AFP_FSA_TOF_T3_BGRP12",
200 "L1_AFP_FSC_TOF_T0_BGRP12",
"L1_AFP_FSC_TOF_T1_BGRP12",
"L1_AFP_FSC_TOF_T2_BGRP12",
"L1_AFP_FSC_TOF_T3_BGRP12",
201 "L1_AFP_A_OR_C_EMPTY",
202 "L1_AFP_NSA_BGRP12",
"L1_AFP_NSC_BGRP12",
203 "L1_AFP_A",
"L1_AFP_C",
"L1_AFP_A_AND_C",
204 "L1_MBTS_A",
"L1_MBTS_C",
205 "L1_MBTS_1",
"L1_MBTS_1_1",
"L1_MBTS_2",
206 "L1_MBTS_1_A",
"L1_MBTS_1_C",
"L1_MBTS_4_A",
"L1_MBTS_4_C",
208 "L1_AFP_A_AND_C_TOF_jJ50",
210 "L1_AFP_A_AND_C_TOF_T0T1_jJ90",
214 "L1_MU3VF",
"L1_MU8F",
"L1_MU8FC",
"L1_MU8VF",
215 "L1_MU3VC",
"L1_MU3EOF",
"L1_MU4BO",
216 "L1_MU8FH",
"L1_MU8EOF",
217 "L1_MU9VF",
"L1_MU9VFC",
218 "L1_MU12FCH",
"L1_MU14FCHR",
"L1_MU14EOF",
219 "L1_MU15VFCH",
"L1_MU15VFCHR",
220 "L1_MU18VFCH",
"L1_MU20VFC",
221 "L1_2MU8F",
"L1_2MU8VF",
222 "L1_2MU14FCH_OVERLAY",
224 "L1_jJ55",
"L1_jJ80",
"L1_jJ140",
"L1_jJ180",
225 "L1_jJ30p0ETA25",
"L1_jJ40p0ETA25",
226 "L1_jJ70p0ETA23",
"L1_jJ55p0ETA23",
227 "L1_jJ80p0ETA25",
"L1_jJ85p0ETA21",
229 "L1_jEM20",
"L1_jEM20M",
231 "L1_eEM7",
"L1_eEM10L",
"L1_eEM15",
232 "L1_eEM18",
"L1_eEM22M",
"L1_eEM24VM",
235 "L1_eTAU20L",
"L1_eTAU35",
"L1_eTAU40HM",
239 monItems[TBP|TAP|TAV] = [
244 "L1_AFP_A_OR_C",
"L1_AFP_A_AND_C",
246 "L1_AFP_A_AND_C_J12",
247 "L1_AFP_A_AND_C_TOF_J20",
248 "L1_AFP_A_AND_C_TOF_J30",
249 "L1_AFP_A_AND_C_TOF_J50",
250 "L1_AFP_A_AND_C_TOF_J75",
251 "L1_AFP_A_AND_C_TOF_T0T1_J20",
252 "L1_AFP_A_AND_C_TOF_T0T1_J30",
253 "L1_AFP_A_AND_C_TOF_T0T1_J50",
254 "L1_AFP_A_AND_C_TOF_T0T1_J75",
255 "L1_AFP_A_AND_C_TOF_T0T1_jJ125",
256 "L1_AFP_A_AND_C_TOF_T0T1_jJ50",
257 "L1_AFP_A_AND_C_TOF_T0T1_jJ60",
258 "L1_AFP_A_AND_C_TOF_T0T1_jJ90",
259 "L1_AFP_A_AND_C_TOF_jJ125",
260 "L1_AFP_A_AND_C_TOF_jJ50",
261 "L1_AFP_A_AND_C_TOF_jJ60",
262 "L1_AFP_A_AND_C_TOF_jJ90",
263 "L1_AFP_A_AND_C_jJ20",
264 "L1_AFP_A_AND_C_jJ30",
266 "L1_AFP_A_OR_C_jJ20",
267 "L1_AFP_A_OR_C_jJ30",
270 "L1_ZDC_BIT0",
"L1_ZDC_BIT1",
"L1_ZDC_BIT2",
271 "L1_ZDC_COMB0",
"L1_ZDC_COMB1",
"L1_ZDC_COMB2",
"L1_ZDC_COMB3",
272 "L1_ZDC_COMB4",
"L1_ZDC_COMB5",
"L1_ZDC_COMB6",
"L1_ZDC_COMB7",
273 "L1_VZDC_A_VZDC_C",
"L1_1ZDC_A_VZDC_C",
"L1_VZDC_A_1ZDC_C",
274 "L1_1ZDC_A_1ZDC_C",
"L1_5ZDC_A_VZDC_C",
"L1_VZDC_A_5ZDC_C",
275 "L1_ZDC_1XOR5",
"L1_5ZDC_A_5ZDC_C",
277 "L1_ZDC_A",
"L1_ZDC_C",
"L1_ZDC_A_C",
278 "L1_ZDC_A_EMPTY",
"L1_ZDC_A_UNPAIRED_NONISO",
279 "L1_ZDC_C_EMPTY",
"L1_ZDC_C_UNPAIRED_NONISO",
280 "L1_ZDC_A_C_EMPTY",
"L1_ZDC_A_C_UNPAIRED_NONISO",
281 "L1_ZDC_XOR",
"L1_ZDC_C_VZDC_A",
"L1_ZDC_A_VZDC_C",
284 "L1_ZDC_A_AND_C_EMPTY",
"L1_ZDC_A_AND_C_UNPAIRED_NONISO",
285 "L1_ZDC_E1_AND_E1",
"L1_ZDC_E2_AND_E2",
"L1_ZDC_E2_AND_E3",
"L1_ZDC_E3_AND_E3",
286 "L1_ZDC_E1_AND_E2ORE3",
287 "L1_ZDC_OR",
"L1_ZDC_OR_EMPTY",
"L1_ZDC_OR_UNPAIRED_NONISO",
288 "L1_ZDC_XOR_E1_E3",
"L1_ZDC_XOR_E2",
292 "L1_MBTS_2_2",
"L1_MBTS_3_3",
"L1_MBTS_4_4",
296 "L1_MU3V",
"L1_MU5VF",
297 "L1_MU8F",
"L1_MU8VF",
300 "L1_MU3V_FIRSTEMPTY",
302 "L1_2MU3V",
"L1_2MU5VF",
304 "L1_2MU14FCH_OVERLAY",
306 "L1_MU5VF_AFP_A_OR_C",
309 "L1_eEM5",
"L1_eEM9",
"L1_eEM12",
"L1_eEM15",
310 "L1_eEM18",
"L1_eEM18L",
311 "L1_eEM26",
"L1_eEM26M",
314 "L1_jJ20",
"L1_jJ30",
"L1_jJ40",
"L1_jJ50",
315 "L1_jJ55",
"L1_jJ60",
"L1_jJ90",
317 "L1_jJ40p30ETA49",
"L1_jJ50p30ETA49",
"L1_jJ60p30ETA49",
320 "L1_gLJ80p0ETA25",
"L1_gXEJWOJ100",
324 "L1_eEM9_AFP_A_AND_C",
328 if 'MC' not in menuName:
329 monItems[TBP|TAP|TAV] += [
331 "L1_CALREQ0",
"L1_CALREQ1",
"L1_CALREQ2",
332 "L1_BPTX0_BGRP12",
"L1_BPTX1_BGRP12",
338 "L1_AFP_A",
"L1_AFP_C",
341 "L1_AFP_FSA_TOF_T0_BGRP12",
342 "L1_AFP_FSA_TOF_T1_BGRP12",
343 "L1_AFP_FSA_TOF_T2_BGRP12",
344 "L1_AFP_FSA_TOF_T3_BGRP12",
346 "L1_AFP_FSC_TOF_T0_BGRP12",
347 "L1_AFP_FSC_TOF_T1_BGRP12",
348 "L1_AFP_FSC_TOF_T2_BGRP12",
349 "L1_AFP_FSC_TOF_T3_BGRP12",
353 "L1_AFP_A_AND_C_MBTS_2",
354 "L1_AFP_A_AND_C_TOF_T0T1",
355 "L1_AFP_A_OR_C_FIRSTEMPTY",
356 "L1_AFP_A_OR_C_EMPTY",
357 "L1_AFP_A_OR_C_MBTS_2",
358 "L1_AFP_A_OR_C_UNPAIRED_ISO",
359 "L1_AFP_A_OR_C_UNPAIRED_NONISO",
362 "L1_BCM_2A_FIRSTINTRAIN",
"L1_BCM_2C_FIRSTINTRAIN",
364 "L1_LUCID_A",
"L1_LUCID_C",
368 "L1_MBTS_1",
"L1_MBTS_2",
"L1_MBTS_1_1",
369 "L1_MBTS_1_EMPTY",
"L1_MBTS_1_UNPAIRED_ISO",
370 "L1_MBTS_2_EMPTY",
"L1_MBTS_2_UNPAIRED_ISO",
371 "L1_MBTS_1_1_EMPTY",
"L1_MBTS_1_1_UNPAIRED_ISO",
376 monItems[TBP|TAP|TAV] += topo3_monitems
379 monItemsHF[TBP|TAP|TAV] = [
381 "L1_MBTS_1",
"L1_MBTS_2",
"L1_MBTS_1_1",
382 "L1_BCM_Wide",
"L1_BCM_2A_FIRSTINTRAIN",
"L1_BCM_2C_FIRSTINTRAIN"
389 counts_LF_items = { TBP :
set(), TAP :
set(), TAV :
set() }
390 counts_HF_items = { TBP :
set(), TAP :
set(), TAV :
set() }
395 counts_LF_items[TBP].
update( monItems[k] )
396 counts_HF_items[TBP].
update( monItemsHF[k] )
399 counts_LF_items[TAP].
update( monItems[k] )
400 counts_HF_items[TAP].
update( monItemsHF[k] )
403 counts_LF_items[TAV].
update( monItems[k] )
404 counts_HF_items[TAV].
update( monItemsHF[k] )
406 counts_LF = dict( map(
lambda x : (x[0],len(x[1])), counts_LF_items.items() ) )
407 counts_HF = dict( map(
lambda x : (x[0],len(x[1])), counts_HF_items.items() ) )
409 lutsLF =
int( (
max(counts_LF.values())-1) / 8) + 1
410 lutsHF =
int( (
max(counts_HF.values())-1) / 8) + 1
413 if lutsLF + lutsHF > maxLUTs:
414 log.error(
"too many monitoring items are defined:")
415 log.error(
" low frequency TBP: %i",counts_LF[TBP])
416 log.error(
" TAP: %i",counts_LF[TAP])
417 log.error(
" TAV: %i",counts_LF[TAV])
418 log.error(
" required LUTs: %i",lutsLF)
419 log.error(
" high frequency TBP: %i",counts_HF[TBP])
420 log.error(
" TAP: %i",counts_HF[TAP])
421 log.error(
" TAV: %i",counts_HF[TAV])
422 log.error(
" required LUTs: %i",lutsHF)
423 log.error(
" this menu requires %i monitoring LUTs while only %i are available", (lutsLF + lutsHF), maxLUTs)
424 raise RuntimeError(
"Reduce the number of monitored items")
426 if 'AllCTPIn' not in menuName:
427 MonitorDef.checkForNonExistingMonItems(items, monItems)
433 for k,l
in monItems.items():
436 item.addMonitor(k, MonitorDef.LOW_FREQ)
439 for k,l
in monItemsHF.items():
442 item.addMonitor(k, MonitorDef.HIGH_FREQ)
448 allItemNames = [item.name
for item
in items]
451 allMonitorItems =
set()
453 allMonitorItems.update(monItems[i])
456 nonExistingMonItems = []
458 for monItem
in allMonitorItems:
459 if monItem
not in allItemNames:
460 nonExistingMonItems += [monItem]
462 if len(nonExistingMonItems)>0:
463 raise RuntimeError(
"These monitoring items are not part of the menu: %s" %
','.
join(nonExistingMonItems))