ATLAS Offline Software
Loading...
Searching...
No Matches
CTP.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaCommon.Logging import logging
4log = logging.getLogger(__name__)
5
6from ..Config.MonitorDef import MonitorDef
7from ..Config.CTPInputConfig import CTPInputConfig
8from .BunchGroupSet import BunchGroupSet
9from .MonCounters import MenuMonCountersCollection
10
11class CTP:
12
13 def __init__(self, run=3):
14 assert(run in [3,4]), "CTP configuration only defined for Run3 and Run4"
15 self.run = run
16 if self.run == 3:
17 self.inputConnectors = CTPInputConfig.cablingLayout()
18 else:
19 self.inputConnectors = CTPInputConfig.cablingLayoutRun4()
20 self.random = Random( names = ['Random0', 'Random1', 'Random2', 'Random3'], cuts = [1, 1, 1, 1] )
22 self.counters = MenuMonCountersCollection() # monitoring counters in the menu
23
24 # Customisations via flags
25
26 def setBunchGroupSetName(self, name):
27 self.bunchGroupSet.name = name
28 return self.bunchGroupSet
29
30 def setupMonitoring(self, menuName, menuItems, menuThresholds, connectors, menuFullName):
31 if self.run == 4:
32 return
33
34
37
38 # add the CTPMon counters (selection defined in L1/Config/MonitorDef.py)
39 for counter in MonitorDef.ctpmonCounters( menuThresholds, connectors ):
40 self.counters.addCounter( counter )
41
42 # add the CTPIN counters (selection defined in L1/Config/MonitorDef.py)
43 for counter in MonitorDef.ctpinCounters( menuThresholds, connectors, self.inputConnectors["ctpin"] ):
44 self.counters.addCounter( counter )
45
46 # mark the L1 Items that they should be monitored
47 MonitorDef.applyItemCounter(menuName, menuItems, menuFullName)
48
49 def checkConnectorAvailability(self, availableConnectors, menuInputFile: str):
50 inputConnectorList = []
51 inputConnectorList += self.inputConnectors.get("optical", {}).values()
52 inputConnectorList += self.inputConnectors.get("electrical", {}).values()
53 inputConnectorList += self.inputConnectors.get("ctpin", {}).get("slot7", {}).values()
54 inputConnectorList += self.inputConnectors.get("ctpin", {}).get("slot8", {}).values()
55 inputConnectorList += self.inputConnectors.get("ctpin", {}).get("slot9", {}).values()
56 for connName in inputConnectorList:
57 if connName != '' and connName not in availableConnectors:
58 msg = (
59 f"Connector '{connName}' requested in L1/Config/CTPInputConfig.py not defined as menu input. "
60 f"Please add it to L1/Menu/Menu_{menuInputFile}.py"
61 )
62 log.error(msg)
63 raise RuntimeError(msg)
64
65 def json(self):
66 confObj = {
67 "inputs": self.inputConnectors,
68 "monitoring": self.counters.json()
69 }
70 return confObj
71
72
73
74class Random(object):
75 def __init__(self, names, cuts):
76 self.names = names
77 self.cuts = cuts
78
nlohmann::json json
setupMonitoring(self, menuName, menuItems, menuThresholds, connectors, menuFullName)
Definition CTP.py:30
checkConnectorAvailability(self, availableConnectors, str menuInputFile)
Definition CTP.py:49
__init__(self, run=3)
Definition CTP.py:13
setBunchGroupSetName(self, name)
Definition CTP.py:26
__init__(self, names, cuts)
Definition CTP.py:75
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132