Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TileDCSDataInfo.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 # Author: nils.gollub@cern.ch
3 
4 from __future__ import print_function
5 
6 import os
7 
9  """
10  Keeps a list of drawer, variable <---> folder, channel
11  associations and provides information about the available
12  variables and their datatypes.
13  """
14 
15  LVPS_AI = ("/TILE/DCS/", "AI")
16  LVPS_STATES = ("/TILE/DCS/", "STATES")
17  VARS_HV = ("/TILE/DCS/", "HV")
18  VARS_HVSET = ("/TILE/DCS/", "HVSET")
19  VARS_DAQ = ("/DAQdummy/","/DAQdummy")
20  type_float = ('f','/F')
21  type_int = ('i','/I')
22 
23  vars_LVPS_STATES = {"FORDAQ_MB" : [ LVPS_STATES, type_int],
24  "FORDAQ_HV" : [ LVPS_STATES, type_int],
25  "FORDAQ_MBHV" : [ LVPS_STATES, type_int]}
26 
27  vars_LVPS_AI = {"15VMB_OUTPUT_I" : [ LVPS_AI, type_float],
28  "M5VMB_TEMP2" : [ LVPS_AI, type_float],
29  "M5VMB_SENSES" : [ LVPS_AI, type_float],
30  "M5VMB_OUTPUT_V" : [ LVPS_AI, type_float],
31  "M5VMB_OUTPUT_I" : [ LVPS_AI, type_float],
32  "M5VMB_INPUT_V" : [ LVPS_AI, type_float],
33  "15VHV_INPUT_V" : [ LVPS_AI, type_float],
34  "M15VHV_TEMP3" : [ LVPS_AI, type_float],
35  "M15VHV_TEMP2" : [ LVPS_AI, type_float],
36  "15VHV_OUTPUT_I" : [ LVPS_AI, type_float],
37  "M15VHV_OUTPUT_V" : [ LVPS_AI, type_float],
38  "M15VHV_OUTPUT_I" : [ LVPS_AI, type_float],
39  "M15VHV_INPUT_V" : [ LVPS_AI, type_float],
40  "15VHV_OUTPUT_V" : [ LVPS_AI, type_float],
41  "EXT_TEMP2" : [ LVPS_AI, type_float],
42  "15VMB_TEMP3" : [ LVPS_AI, type_float],
43  "3VDIG_INPUT_V" : [ LVPS_AI, type_float],
44  "3VDIG_OUTPUT_I" : [ LVPS_AI, type_float],
45  "3VDIG_OUTPUT_V" : [ LVPS_AI, type_float],
46  "3VDIG_SENSES" : [ LVPS_AI, type_float],
47  "15VMB_TEMP2" : [ LVPS_AI, type_float],
48  "3VDIG_TEMP2" : [ LVPS_AI, type_float],
49  "3VDIG_TEMP3" : [ LVPS_AI, type_float],
50  "15VMB_SENSES" : [ LVPS_AI, type_float],
51  "5VDIG_INPUT_V" : [ LVPS_AI, type_float],
52  "5VDIG_OUTPUT_I" : [ LVPS_AI, type_float],
53  "5VDIG_OUTPUT_V" : [ LVPS_AI, type_float],
54  "5VDIG_SENSES" : [ LVPS_AI, type_float],
55  "15VMB_OUTPUT_V" : [ LVPS_AI, type_float],
56  "5VDIG_TEMP2" : [ LVPS_AI, type_float],
57  "5VDIG_TEMP3" : [ LVPS_AI, type_float],
58  "M5VMB_TEMP3" : [ LVPS_AI, type_float],
59  "5VHV_INPUT_V" : [ LVPS_AI, type_float],
60  "5VHV_OUTPUT_I" : [ LVPS_AI, type_float],
61  "5VHV_OUTPUT_V" : [ LVPS_AI, type_float],
62  "15VMB_INPUT_V" : [ LVPS_AI, type_float],
63 
64  "5VHV_TEMP2" : [ LVPS_AI, type_float],
65  "5VHV_TEMP3" : [ LVPS_AI, type_float],
66  "15VHV_TEMP3" : [ LVPS_AI, type_float],
67  "5VMB_INPUT_V" : [ LVPS_AI, type_float],
68  "5VMB_OUTPUT_I" : [ LVPS_AI, type_float],
69  "5VMB_OUTPUT_V" : [ LVPS_AI, type_float],
70  "5VMB_SENSES" : [ LVPS_AI, type_float],
71  "15VHV_TEMP2" : [ LVPS_AI, type_float],
72  "5VMB_TEMP2" : [ LVPS_AI, type_float],
73  "5VMB_TEMP3" : [ LVPS_AI, type_float],
74  "EXT_TEMP1" : [ LVPS_AI, type_float]}
75 
76  vars_HV = {}
77  for i in range(48):
78  i = str(i+1)
79  vars_HV["hvOut"+i] = [ VARS_HV, type_float ]
80  for i in range(4):
81  i = str(i+1)
82  vars_HV["hvIn"+i] = [ VARS_HV, type_float ]
83  for i in range(7):
84  i = str(i+1)
85  vars_HV["volt"+i] = [ VARS_HV, type_float ]
86  vars_HV["temp"+i] = [ VARS_HV, type_float ]
87 
88  vars_HVSET = {}
89  for i in range(48):
90  i = str(i+1)
91  vars_HVSET["Set.hvOut"+i] = [ VARS_HVSET, type_float ]
92  for i in range(4):
93  i = str(i+1)
94  vars_HVSET["Set.hvIn"+i] = [ VARS_HVSET, type_float ]
95  for i in range(7):
96  i = str(i+1)
97  vars_HVSET["Set.volt"+i] = [ VARS_HVSET, type_float ]
98  vars_HVSET["Set.temp"+i] = [ VARS_HVSET, type_float ]
99  #for i in range(2):
100  # i = str(i+1)
101  # vars_HVSET["Set.vFix1"+i] = [ VARS_HVSET, type_float ]
102 
103  vars_DAQ = {}
104  vars_DAQ["STATE"] = [ VARS_DAQ, type_int]
105 
106  systemID = { "LBA" : 88 ,
107  "LBC" : 87 ,
108  "EBA" : 86 ,
109  "EBC" : 89 ,
110  "SCS" : 80 }
111 
112  partitionID = { 0 : "EBA",
113  1 : "LBA",
114  2 : "LBC",
115  3 : "EBC"}
116 
117  def __init__( self, dbstring=None ):
118 
119  self.vars = {}
120  for var, info in list(self.vars_LVPS_AI.items()):
121  self.vars[var] = info
122  for var, info in list(self.vars_LVPS_STATES.items()):
123  self.vars[var] = info
124  for var, info in list(self.vars_HV.items()):
125  self.vars[var] = info
126  for var, info in list(self.vars_HVSET.items()):
127  self.vars[var] = info
128  for var, info in list(self.vars_DAQ.items()):
129  self.vars[var] = info
130 
134 
135  filename=self.find_data_file("cool_channel_id.dat")
136  lines = open(filename,"r").readlines()
137  for line in lines:
138  line = line.strip()
139  folder, drawer, channel, oracleId = line.split()
140 
141  keyFolderDrawer = ( folder , drawer)
142  if keyFolderDrawer in self.folderDrawer_to_channel:
143  raise Exception ("trying to generate key twice: ", keyFolderDrawer)
144  self.folderDrawer_to_channel[ keyFolderDrawer] = int(channel)
145  self.folderDrawer_to_oracleId[keyFolderDrawer] = oracleId
146 
147  keyFolderChannel = ( folder , int(channel))
148  if keyFolderChannel in self.folderChannel_to_drawer:
149  raise Exception ("trying to generate key twice: ", keyFolderChannel)
150  self.folderChannel_to_drawer[keyFolderChannel] = drawer
151 
152  self.dbstring = {"DEFAULT":[],"COOL":[],"ORACLE":[],"TESTBEAM":[]}
153  self.dbstring['DEFAULT'] += [dbstring]*3
154  dbstring = "oracle://ATLAS_COOLPROD;schema=ATLAS_COOLOFL_DCS;dbname=COMP200;"
155  dbstring+= "user=ATLAS_COOL_READER;password=COOLRED4PRO"
156  self.dbstring['COOL'] += [None]
157  self.dbstring['COOL'] += [dbstring]
158  self.dbstring['COOL'] += [dbstring.replace("COMP200","CONDBR2")]
159  self.dbstring['ORACLE'] += [["oracle://localhost/ATONR_PVSSPROD","ATLAS_PVSS_READER","PVSSRED4PRO"]]
160  self.dbstring['ORACLE'] += [["oracle://localhost/ATLAS_PVSSPROD","ATLAS_PVSS_READER","PVSSRED4PRO"]]
161  self.dbstring['ORACLE'] += [["oracle://localhost/ATONR_ADG","ATLAS_PVSS_READER","PVSSRED4PRO"]]
162  self.dbstring['TESTBEAM'] += [["oracle://localhost/INTR","ATLAS_PVSS_READER","PVSSRED4INT"]]*3
163 
164 
165  def get_dbstring(self, key, ind=2):
166  return self.dbstring[key][ind] if key in self.dbstring and len(self.dbstring[key])>ind else None
167 
168  def get_channel(self, folder, drawer):
169 
170  if not self.check_drawer_syntax(drawer):
171  raise Exception ("ERROR: drawer not valid: ", drawer)
172  key = (folder, drawer )
173  if key not in self.folderDrawer_to_channel:
174  print ("get_channel WARNING, can not resolve key: ", key)
175  return None
176  return self.folderDrawer_to_channel[key]
177 
178  def get_drawer(self, folder, channel):
179 
180  key = (folder, channel)
181  if key not in self.folderChannel_to_drawer:
182  print ("get_drawer WARNING, can not resolve key: ", key)
183  return None
184  return self.folderChannel_to_drawer[key]
185 
186 
187  def get_folder_and_channel(self, variable, drawer):
188  """
189  For a given DCS variable and drawer, return the complete COOL
190  folder name and the channel number associated to the drawer
191  """
192  if variable not in self.vars:
193  raise Exception ("Variable not known: ", variable)
194  partition = drawer[0:3]
195 
196  folderDef = self.vars[variable][0]
197  #=== for STATE, we have only one "drawer" per partition
198  if variable=="STATE":
199  drawer = partition+"XX"
200  folder = folderDef[0]+partition+folderDef[1]
201  else:
202  folder = folderDef[0]+folderDef[1]
203  key = (folder, drawer)
204  if key not in self.folderDrawer_to_channel:
205  print ("WARNING, can not resolve key: ", key)
206  return None
207  channel = self.folderDrawer_to_channel[key]
208  return (folder, channel)
209 
210  def get_variable_type(self, variable):
211  """
212  Returns the type of a variable
213  """
214  if variable not in self.vars:
215  raise Exception ("Variable not known: ", variable)
216  return self.vars[variable][1]
217 
218  def get_all_variables(self):
219  return list(self.vars.keys())
220 
221  def check_drawer_syntax(self, drawer):
222  partition = drawer[0:3]
223  drawerNum = int(drawer[3:5])
224  valid = ("LBA" , "LBC", "EBA", "EBC")
225  if partition not in valid:
226  return False
227  if drawerNum<1 or drawerNum>64:
228  return False
229  return True
230 
231  def get_variables_by_folder(self, variables, drawer):
232  """
233  Return a dictionary listing all folders that need to be
234  accessed as keys and all variables associated to the key folder
235  as values.
236  """
237  folderDict = {}
238  for var in variables:
239  if var not in self.vars:
240  print ("Unknown variable, IGNORING IT: ", var)
241  else:
242  folder, channel = self.get_folder_and_channel(var,drawer)
243  if folder not in folderDict:
244  folderDict[folder] = [var]
245  else:
246  folderDict[folder].extend([var])
247  return folderDict
248 
249  def find_data_file(self, fname, pathlist=None, access=os.R_OK):
250  """the python equivalent to the C++ PathResolver for datafiles.
251  """
252 
253  if pathlist is None:
254  pathlist = os.getenv('DATAPATH').split(os.pathsep)
255 
256  for path in pathlist:
257  f = os.path.join( path, fname )
258  if os.access( f, access ):
259  return f
python.TileDCSDataInfo.TileDCSDataInfo.check_drawer_syntax
def check_drawer_syntax(self, drawer)
Definition: TileDCSDataInfo.py:221
python.TileDCSDataInfo.TileDCSDataInfo.get_drawer
def get_drawer(self, folder, channel)
Definition: TileDCSDataInfo.py:178
python.TileDCSDataInfo.TileDCSDataInfo.vars_LVPS_AI
vars_LVPS_AI
Definition: TileDCSDataInfo.py:27
python.TileDCSDataInfo.TileDCSDataInfo.vars
vars
Definition: TileDCSDataInfo.py:119
python.TileDCSDataInfo.TileDCSDataInfo.folderChannel_to_drawer
folderChannel_to_drawer
Definition: TileDCSDataInfo.py:132
python.TileDCSDataInfo.TileDCSDataInfo.get_variable_type
def get_variable_type(self, variable)
Definition: TileDCSDataInfo.py:210
python.TileDCSDataInfo.TileDCSDataInfo.get_all_variables
def get_all_variables(self)
Definition: TileDCSDataInfo.py:218
python.TileDCSDataInfo.TileDCSDataInfo.folderDrawer_to_channel
folderDrawer_to_channel
Definition: TileDCSDataInfo.py:131
python.TileDCSDataInfo.TileDCSDataInfo.get_channel
def get_channel(self, folder, drawer)
Definition: TileDCSDataInfo.py:168
python.TileDCSDataInfo.TileDCSDataInfo.vars_LVPS_STATES
vars_LVPS_STATES
Definition: TileDCSDataInfo.py:23
python.TileDCSDataInfo.TileDCSDataInfo.folderDrawer_to_oracleId
folderDrawer_to_oracleId
Definition: TileDCSDataInfo.py:133
python.TileDCSDataInfo.TileDCSDataInfo.vars_DAQ
vars_DAQ
Definition: TileDCSDataInfo.py:103
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
python.TileDCSDataInfo.TileDCSDataInfo.vars_HVSET
vars_HVSET
Definition: TileDCSDataInfo.py:88
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.TileDCSDataInfo.TileDCSDataInfo
Definition: TileDCSDataInfo.py:8
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:71
python.TileDCSDataInfo.TileDCSDataInfo.__init__
def __init__(self, dbstring=None)
Definition: TileDCSDataInfo.py:117
python.TileDCSDataInfo.TileDCSDataInfo.find_data_file
def find_data_file(self, fname, pathlist=None, access=os.R_OK)
Definition: TileDCSDataInfo.py:249
Trk::open
@ open
Definition: BinningType.h:40
python.TileDCSDataInfo.TileDCSDataInfo.get_variables_by_folder
def get_variables_by_folder(self, variables, drawer)
Definition: TileDCSDataInfo.py:231
ActsTrk::detail::MakeDerivedVariant::extend
constexpr std::variant< Args..., T > extend(const std::variant< Args... > &, const T &)
Definition: MakeDerivedVariant.h:17
python.TileDCSDataInfo.TileDCSDataInfo.get_dbstring
def get_dbstring(self, key, ind=2)
Definition: TileDCSDataInfo.py:165
python.TileDCSDataInfo.TileDCSDataInfo.get_folder_and_channel
def get_folder_and_channel(self, variable, drawer)
Definition: TileDCSDataInfo.py:187
str
Definition: BTagTrackIpAccessor.cxx:11
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
python.TileDCSDataInfo.TileDCSDataInfo.dbstring
dbstring
Definition: TileDCSDataInfo.py:152
python.TileDCSDataInfo.TileDCSDataInfo.vars_HV
vars_HV
Definition: TileDCSDataInfo.py:76
Trk::split
@ split
Definition: LayerMaterialProperties.h:38