ATLAS Offline Software
Classes | Functions | Variables
python.utils.AtlRunQueryTriggerUtils Namespace Reference

Classes

class  TriggerChain
 

Functions

def isTriggerRun2 (run_number=None, smk=None, isRun2=None)
 
def triggerDBAlias (run_number=None, smk=None, lhcRun=None)
 
def FindFile (filename, pathlist, access)
 
def _getFileLocalOrPath (filename, pathenv)
 
def _getConnectionServicesForAlias (alias)
 
def _readAuthentication ()
 
def _getConnectionParameters (connection)
 
def interpretConnection (connection, debug=False, resolveAlias=True)
 
def _get_sqlite_cursor (filename)
 
def _get_oracle_cursor (tns, user, passwd="")
 
def _get_mysql_cursor (host, db, user, passwd="")
 
def getTriggerDBCursorForAlias (dbAlias)
 
def getTriggerDBCursor (run_number=None, smk=None, lhcRun=None)
 
def getUsedTables (output, condition, schemaname, tables)
 
def executeQuery (cursor, output, condition, schemaname, tables, bindvars=())
 
def getL1PskNames (psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
 
def getHLTPskNames (psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
 
def getSmkNames (smks, dbAlias)
 
def getHLTMenu (smk)
 
def getL1Menu (smk)
 
def getL1Prescales (l1prescalekey, run_number)
 
def getHLTPrescales (hltprescalekey, run_number)
 
def getRandom (smk, lhcRun)
 

Variables

dictionary __cursor_schema = {}
 
 log = logging.getLogger( __name__ )
 
 authDict = None
 

Function Documentation

◆ _get_mysql_cursor()

def python.utils.AtlRunQueryTriggerUtils._get_mysql_cursor (   host,
  db,
  user,
  passwd = "" 
)
private

Definition at line 343 of file AtlRunQueryTriggerUtils.py.

343 def _get_mysql_cursor (host, db, user, passwd=""):
344  if passwd=="":
345  from getpass import getpass
346  passwd = getpass("[MySQL] `%s' database password for %s@%s: " % (db, user, host))
347  try:
348  from MySQLdb import connect
349  except ImportError:
350  raise RuntimeError ("ERROR: Can't import MySQLdb")
351  connection = connect(host=host, user=user, passwd=passwd, db=db, connect_timeout=10)
352  return connection.cursor()
353 
354 

◆ _get_oracle_cursor()

def python.utils.AtlRunQueryTriggerUtils._get_oracle_cursor (   tns,
  user,
  passwd = "" 
)
private

Definition at line 331 of file AtlRunQueryTriggerUtils.py.

331 def _get_oracle_cursor (tns, user, passwd=""):
332  if passwd=="":
333  from getpass import getpass
334  passwd = getpass("[Oracle] database password for %s@%s: " % (user, tns))
335  try:
336  from cx_Oracle import connect
337  except ImportError:
338  raise RuntimeError ("ERROR: Can't import cx_Oracle?")
339  connection = connect (user, passwd, tns, threaded=True)
340  return connection.cursor()
341 
342 

◆ _get_sqlite_cursor()

def python.utils.AtlRunQueryTriggerUtils._get_sqlite_cursor (   filename)
private

Definition at line 322 of file AtlRunQueryTriggerUtils.py.

322 def _get_sqlite_cursor (filename):
323  try:
324  import sqlite3
325  except ImportError:
326  raise RuntimeError ("ERROR: Can't import sqlite3?")
327  os.lstat(filename)
328  connection = sqlite3.connect(filename)
329  return connection.cursor()
330 

◆ _getConnectionParameters()

def python.utils.AtlRunQueryTriggerUtils._getConnectionParameters (   connection)
private

Definition at line 170 of file AtlRunQueryTriggerUtils.py.

170 def _getConnectionParameters(connection):
171  log = logging.getLogger( "TrigConfigSvcUtils.py" )
172  connection = str(connection)
173  connectionParameters = {}
174 
175  if connection.startswith("sqlite_file:"):
176  filename = connection[connection.find(':')+1:]
177  connectionParameters["techno"] = "sqlite"
178  connectionParameters["filename"] = filename if os.path.exists(filename) else None
179 
180  elif connection.startswith("oracle://"):
181  if connection.count(';') == 2:
182  pattern = "(.*)://(.*)/(.*);username=(.*);password=(.*)"
183  m = re.match(pattern,connection)
184  #print ('Groups ', m)
185  if not m:
186  log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern))
187  (techno, server, schema, user, passwd) = m.groups()
188  #print ((techno, server, schema, user, passwd))
189  else:
190  global authDict
191  if not authDict:
192  authDict = _readAuthentication()
193  pattern = "oracle://(.*)/(.*)"
194  m = re.match(pattern,connection)
195  if not m:
196  log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern))
197  (server, schema) = m.groups()
198  (user,passwd) = authDict[connection]
199  #info from auth file also unicode
200  connectionParameters["techno"] = 'oracle'
201  connectionParameters["server"] = str(server)
202  connectionParameters["schema"] = str(schema)
203  connectionParameters["user" ] = str(user)
204  connectionParameters["passwd"] = str(passwd)
205 
206  elif connection.startswith("mysql://"):
207  pattern = "mysql://(.*);dbname=(.*);user=(.*);passwd=(.*);"
208  m = re.match(pattern,connection)
209  if not m:
210  log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern) )
211  (server, dbname, user, passwd) = m.groups()
212  connectionParameters["techno"] = 'mysql'
213  connectionParameters["server"] = server
214  connectionParameters["dbname"] = dbname
215  connectionParameters["user" ] = user
216  connectionParameters["passwd"] = passwd
217 
218  elif connection.startswith("frontier://"):
219  pattern = r"frontier://ATLF/\‍(\‍)/(.*)"
220  m = re.match(pattern,connection)
221  if not m:
222  log.fatal("connection string '%s' doesn't match the pattern '%s'?" % (connection,pattern) )
223  (schema, ) = m.groups()
224  connectionParameters["techno"] = 'frontier'
225  connectionParameters["schema"] = schema
226 
227  return connectionParameters
228 

◆ _getConnectionServicesForAlias()

def python.utils.AtlRunQueryTriggerUtils._getConnectionServicesForAlias (   alias)
private

Definition at line 122 of file AtlRunQueryTriggerUtils.py.

123  log = logging.getLogger( "TrigConfigSvcUtils.py" )
124 
125  connectionServices = None # list of services
126 
127  dblookupfilename = _getFileLocalOrPath('dblookup.xml','CORAL_DBLOOKUP_PATH')
128  if dblookupfilename is None:
129  return None
130 
131  doc = minidom.parse(dblookupfilename)
132  for ls in doc.getElementsByTagName('logicalservice'):
133  if ls.attributes['name'].value != alias:
134  continue
135  connectionServices = [str(s.attributes['name'].value) for s in ls.getElementsByTagName('service')]
136  doc.unlink()
137 
138  log.info( "For alias '%s' found list of connections %r", alias, connectionServices )
139  if connectionServices is None:
140  print("ERROR: Trigger connection alias '%s' is not defined in %s" % (alias,dblookupfilename))
141  return connectionServices
142 
143 

◆ _getFileLocalOrPath()

def python.utils.AtlRunQueryTriggerUtils._getFileLocalOrPath (   filename,
  pathenv 
)
private
looks for filename in local directory and then in all paths specified in environment variable 'pathenv'
returns path/filename if existing, otherwise None

Definition at line 104 of file AtlRunQueryTriggerUtils.py.

104 def _getFileLocalOrPath(filename, pathenv):
105  """looks for filename in local directory and then in all paths specified in environment variable 'pathenv'
106  returns path/filename if existing, otherwise None
107  """
108  log = logging.getLogger( "TrigConfigSvcUtils.py" )
109  if os.path.exists(filename):
110  log.info( "Using local file %s", filename)
111  return filename
112 
113  pathlist = os.getenv(pathenv,'').split(os.pathsep)
114  resolvedfilename = FindFile(filename, pathlist, os.R_OK)
115  if resolvedfilename:
116  return resolvedfilename
117 
118  log.fatal("No file %s found locally nor in %s" % (filename, os.getenv('CORAL_DBLOOKUP_PATH')) )
119  return None
120 
121 

◆ _readAuthentication()

def python.utils.AtlRunQueryTriggerUtils._readAuthentication ( )
private
read authentication.xml, first from local directory, then from all paths specified in CORAL_AUTH_PATH
returns dictionary d with d[connection] -> (user,pw)

Definition at line 144 of file AtlRunQueryTriggerUtils.py.

144 def _readAuthentication():
145  """ read authentication.xml, first from local directory, then from all paths specified in CORAL_AUTH_PATH
146  returns dictionary d with d[connection] -> (user,pw)
147  """
148 
149  authDict = {}
150  dbauthfilename = _getFileLocalOrPath('authentication.xml','CORAL_AUTH_PATH')
151  if dbauthfilename is None:
152  return authDict
153 
154  doc = minidom.parse(dbauthfilename)
155  for cn in doc.getElementsByTagName('connection'):
156  user = ""
157  pw = ""
158  svc = cn.attributes['name'].value
159  for p in cn.getElementsByTagName('parameter'):
160  if p.attributes['name'].value == 'user':
161  user = p.attributes['value'].value
162  elif p.attributes['name'].value == 'password':
163  pw = p.attributes['value'].value
164  authDict[svc] = (user,pw)
165  doc.unlink()
166  return authDict
167 

◆ executeQuery()

def python.utils.AtlRunQueryTriggerUtils.executeQuery (   cursor,
  output,
  condition,
  schemaname,
  tables,
  bindvars = () 
)

Definition at line 403 of file AtlRunQueryTriggerUtils.py.

403 def executeQuery(cursor, output, condition, schemaname, tables, bindvars=()):
404  query = 'select distinct %s from %s where %s' % (
405  ', '.join(output),
406  ', '.join(getUsedTables(output, condition, schemaname, tables)),
407  ' and '.join(condition)
408  )
409  if len(bindvars)==0:
410  cursor.execute(str(query))
411  else:
412  cursor.execute(str(query),bindvars)
413 
414  return cursor.fetchall()
415 
416 

◆ FindFile()

def python.utils.AtlRunQueryTriggerUtils.FindFile (   filename,
  pathlist,
  access 
)
Find <filename> with rights <access> through <pathlist>.

Definition at line 85 of file AtlRunQueryTriggerUtils.py.

85 def FindFile( filename, pathlist, access ):
86  """Find <filename> with rights <access> through <pathlist>."""
87 
88  # special case for those filenames that already contain a path
89  if os.path.dirname( filename ):
90  if os.access( filename, access ):
91  return filename
92 
93  # test the file name in all possible paths until first found
94  for path in pathlist:
95  f = os.path.join( path, filename )
96  if os.access( f, access ):
97  return f
98 
99  # no such accessible file avalailable
100  return None
101 
102 
103 

◆ getHLTMenu()

def python.utils.AtlRunQueryTriggerUtils.getHLTMenu (   smk)

Definition at line 487 of file AtlRunQueryTriggerUtils.py.

487 def getHLTMenu(smk):
488  if smk is None or smk==0:
489  return [],[]
490 
491  if isTriggerRun2(smk):
492  output = ['TC.HTC_NAME', 'TC.HTC_CHAIN_COUNTER', 'TC.HTC_LOWER_CHAIN_NAME' ]
493  else:
494  output = ['TC.HTC_NAME', 'TC.HTC_CHAIN_COUNTER', 'TC.HTC_LOWER_CHAIN_NAME', 'TC.HTC_L2_OR_EF' ]
495 
496  tables = {
497  'SM' : 'SUPER_MASTER_TABLE',
498  'HM' : 'HLT_MASTER_TABLE',
499  'M2C' : 'HLT_TM_TO_TC',
500  'TC' : 'HLT_TRIGGER_CHAIN'
501  }
502  condition = [
503  'SM.SMT_ID = :smk',
504  'SM.SMT_HLT_MASTER_TABLE_ID = HM.HMT_ID',
505  'HM.HMT_TRIGGER_MENU_ID = M2C.HTM2TC_TRIGGER_MENU_ID',
506  'M2C.HTM2TC_TRIGGER_CHAIN_ID = TC.HTC_ID'
507  ]
508  bindvars = { "smk": smk }
509 
510  cursor,schema = getTriggerDBCursor(smk)
511  res = executeQuery( cursor, output, condition, schema, tables, bindvars)
512 
513  l2chains = []
514  efchains = []
515 
516  for r in res:
517  if len(r)==4 and r[3]=='L2':
518  l2chains += [TriggerChain(r[0],r[1],r[2], level=2)]
519  else:
520  efchains += [TriggerChain(r[0],r[1],r[2], level=3)]
521 
522  return l2chains, efchains
523 
524 
525 
526 

◆ getHLTPrescales()

def python.utils.AtlRunQueryTriggerUtils.getHLTPrescales (   hltprescalekey,
  run_number 
)

Definition at line 575 of file AtlRunQueryTriggerUtils.py.

575 def getHLTPrescales(hltprescalekey, run_number):
576 
577  l2ps = {}
578  efps = {}
579 
580  if isTriggerRun2( run_number = run_number ):
581  return l2ps,efps
582 
583  tables = {
584  'H' : 'HLT_PRESCALE_SET',
585  'P' : 'HLT_PRESCALE'
586  }
587  output = [
588  'P.HPR_L2_OR_EF',
589  'P.HPR_CHAIN_COUNTER',
590  'P.HPR_PRESCALE',
591  'P.HPR_PASS_THROUGH_RATE'
592  ]
593  condition = [
594  "P.HPR_PRESCALE_SET_ID = :psk",
595  "P.HPR_L2_OR_EF not like 'express'"
596  ]
597  bindvars = { "psk": hltprescalekey }
598 
599  cursor,schema = getTriggerDBCursor(isRun2 = True)
600  res = executeQuery(cursor, output, condition, schema, tables, bindvars)
601 
602  for r in res:
603  if r[0]=='L2':
604  l2ps[r[1]] = ( float(r[2]), float(r[3]) )
605  elif (r[0]=='EF' or r[0]=='HLT' or r[0]=='HL'):
606  efps[r[1]] = ( float(r[2]), float(r[3]) )
607 
608  return l2ps, efps
609 
610 

◆ getHLTPskNames()

def python.utils.AtlRunQueryTriggerUtils.getHLTPskNames (   psk,
  dbAlias = None,
  run_number = None,
  smk = None,
  lhcRun = None 
)

Definition at line 441 of file AtlRunQueryTriggerUtils.py.

441 def getHLTPskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
442  if not isinstance(psk, Iterable):
443  psk = [psk]
444 
445  keyslist = ','.join([str(k) for k in psk if k])
446  if keyslist=="":
447  return {}
448 
449  tables = { 'L' : 'HLT_PRESCALE_SET' }
450  output = ['L.HPS_ID', 'L.HPS_NAME']
451  condition = [ "L.HPS_ID in (%s)" % keyslist ]
452 
453  if dbAlias is not None:
454  cursor, schema = getTriggerDBCursorForAlias(dbAlias)
455  else:
456  cursor,schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
457 
458  res = executeQuery( cursor, output, condition, schema, tables)
459 
460  return dict(res)
461 
462 

◆ getL1Menu()

def python.utils.AtlRunQueryTriggerUtils.getL1Menu (   smk)

Definition at line 527 of file AtlRunQueryTriggerUtils.py.

527 def getL1Menu(smk):
528  if smk is None or smk==0:
529  return []
530  output = [
531  'TI.L1TI_NAME',
532  'TI.L1TI_CTP_ID'
533  ]
534  tables = {
535  'SM' : 'SUPER_MASTER_TABLE',
536  'M' : 'L1_MASTER_TABLE',
537  'M2I' : 'L1_TM_TO_TI',
538  'TI' : 'L1_TRIGGER_ITEM'
539  }
540  condition = [
541  "SM.SMT_ID = :smk",
542  'SM.SMT_L1_MASTER_TABLE_ID = M.L1MT_ID',
543  'M.L1MT_TRIGGER_MENU_ID = M2I.L1TM2TI_TRIGGER_MENU_ID',
544  'M2I.L1TM2TI_TRIGGER_ITEM_ID = TI.L1TI_ID'
545  ]
546  bindvars = { "smk": smk }
547 
548  cursor,schema = getTriggerDBCursor(smk = smk)
549  res = executeQuery( cursor, output, condition, schema, tables, bindvars)
550 
551  maxNumberItems = 512 if isTriggerRun2(smk=smk) else 256
552  items = maxNumberItems*[None]
553 
554  for r in res:
555  items[r[1]] = TriggerChain(r[0],r[1])
556  return items
557 
558 
559 

◆ getL1Prescales()

def python.utils.AtlRunQueryTriggerUtils.getL1Prescales (   l1prescalekey,
  run_number 
)

Definition at line 560 of file AtlRunQueryTriggerUtils.py.

560 def getL1Prescales(l1prescalekey, run_number):
561 
562  maxNumberItems = 512 if isTriggerRun2( run_number = run_number ) else 256
563 
564  tables = { 'L' : 'L1_PRESCALE_SET' }
565  output = ['L.L1PS_VAL%i' % i for i in range( 1, maxNumberItems + 1)]
566  condition = [ "L.L1PS_ID = :psk" ]
567  bindvars = { "psk": l1prescalekey }
568 
569  cursor,schema = getTriggerDBCursor( run_number = run_number )
570  res = executeQuery(cursor, output, condition, schema, tables, bindvars)
571 
572  return res[0][0:maxNumberItems]
573 
574 

◆ getL1PskNames()

def python.utils.AtlRunQueryTriggerUtils.getL1PskNames (   psk,
  dbAlias = None,
  run_number = None,
  smk = None,
  lhcRun = None 
)

Definition at line 417 of file AtlRunQueryTriggerUtils.py.

417 def getL1PskNames(psk, dbAlias = None, run_number = None , smk = None , lhcRun = None ):
418  if not isinstance(psk, Iterable):
419  psk = [psk]
420 
421  keyslist = ','.join([str(k) for k in psk if k])
422 
423  if keyslist=="":
424  return {}
425 
426  tables = { 'L' : 'L1_PRESCALE_SET' }
427  output = [ 'L.L1PS_ID', 'L.L1PS_NAME' ]
428  condition = [ "L.L1PS_ID in (%s)" % keyslist ]
429 
430  if dbAlias is not None:
431  cursor, schema = getTriggerDBCursorForAlias(dbAlias)
432  else:
433  cursor, schema = getTriggerDBCursor(run_number = run_number, smk = smk, lhcRun = lhcRun )
434 
435  res = executeQuery(cursor, output, condition, schema, tables)
436 
437  return dict(res)
438 
439 
440 

◆ getRandom()

def python.utils.AtlRunQueryTriggerUtils.getRandom (   smk,
  lhcRun 
)

Definition at line 611 of file AtlRunQueryTriggerUtils.py.

611 def getRandom(smk, lhcRun):
612  # does not work for Run 3
613  if lhcRun >= 3:
614  return (1,1,1,1)
615 
616  if smk=='n.a.':
617  return ('n.a.','n.a.')
618 
619  tables = {
620  'S' : 'SUPER_MASTER_TABLE',
621  'M' : 'L1_MASTER_TABLE',
622  'R' : 'L1_RANDOM'
623  }
624  if lhcRun == 2:
625  output = [ 'R.L1R_CUT0', 'R.L1R_CUT1', 'R.L1R_CUT2', 'R.L1R_CUT3' ]
626  else:
627  output = [ 'R.L1R_RATE1', 'R.L1R_RATE2' ]
628 
629  condition = [ "S.SMT_ID=:smk", "S.SMT_L1_MASTER_TABLE_ID=M.L1MT_ID", "M.L1MT_RANDOM_ID=R.L1R_ID" ]
630 
631  bindvars = { "smk": smk }
632 
633  cursor,schema = getTriggerDBCursorForAlias(dbAlias = triggerDBAlias(lhcRun=lhcRun))
634  res = executeQuery(cursor, output, condition, schema, tables, bindvars)
635  if len(res) > 0:
636  return res[0]
637  else:
638  return [0,0,0,0]
639 
640 

◆ getSmkNames()

def python.utils.AtlRunQueryTriggerUtils.getSmkNames (   smks,
  dbAlias 
)
takes a single SMK or a list of SMKs
returns a map from SMK to (name,version,comment)

Definition at line 463 of file AtlRunQueryTriggerUtils.py.

463 def getSmkNames( smks, dbAlias ):
464  """
465  takes a single SMK or a list of SMKs
466  returns a map from SMK to (name,version,comment)
467  """
468  if not isinstance(smks, Iterable):
469  smks = [smks]
470 
471  keyslist = ','.join([str(k) for k in smks if k])
472  if keyslist=="":
473  return {}
474 
475  tables = { 'S' : 'SUPER_MASTER_TABLE' }
476  output = ['S.SMT_ID', 'S.SMT_NAME', 'S.SMT_VERSION', 'S.SMT_COMMENT']
477  condition = [ "S.SMT_ID in (%s)" % keyslist ]
478 
479  cursor, schema = getTriggerDBCursorForAlias(dbAlias)
480  res = executeQuery( cursor, output, condition, schema, tables)
481 
482  return dict([ (r[0],(r[1],r[2],r[3])) for r in res])
483 
484 
485 
486 

◆ getTriggerDBCursor()

def python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursor (   run_number = None,
  smk = None,
  lhcRun = None 
)

Definition at line 385 of file AtlRunQueryTriggerUtils.py.

385 def getTriggerDBCursor(run_number = None, smk = None, lhcRun = None):
386 
387  dbAlias = triggerDBAlias(run_number = run_number, smk = smk, lhcRun = lhcRun)
388  return getTriggerDBCursorForAlias(dbAlias)
389 
390 

◆ getTriggerDBCursorForAlias()

def python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursorForAlias (   dbAlias)

Definition at line 355 of file AtlRunQueryTriggerUtils.py.

355 def getTriggerDBCursorForAlias(dbAlias):
356 
357  if dbAlias in __cursor_schema:
358  return __cursor_schema[dbAlias] # return the correct cursor and schema name
359 
360  connectionParameters = interpretConnection(dbAlias)
361  technology = connectionParameters["techno"]
362 
363  if technology == 'sqlite':
364  cursor = _get_sqlite_cursor(connectionParameters["filename"])
365  schema = ''
366 
367  elif technology == 'oracle':
368  cursor = _get_oracle_cursor(connectionParameters["server"], connectionParameters["user"], connectionParameters["passwd"])
369  schema = connectionParameters["schema"].rstrip('.') + '.'
370 
371  elif technology == 'frontier':
372  from TrigConfigSvc.TrigConfFrontier import getFrontierCursor
373  cursor = getFrontierCursor(connectionParameters["url"], connectionParameters["schema"], logging.getLogger("TrigConfigSvcUtils.py").level)
374  schema = connectionParameters["schema"].rstrip('.') + '.'
375 
376  elif technology == 'mysql':
377  cursor = _get_mysql_cursor(connectionParameters["server"], connectionParameters["dbname"], connectionParameters["user"], connectionParameters["passwd"]),''
378  schema = ''
379 
380  __cursor_schema[dbAlias] = (cursor,schema)
381 
382  return __cursor_schema[dbAlias] # return the correct cursor and schema name
383 
384 

◆ getUsedTables()

def python.utils.AtlRunQueryTriggerUtils.getUsedTables (   output,
  condition,
  schemaname,
  tables 
)

Definition at line 391 of file AtlRunQueryTriggerUtils.py.

391 def getUsedTables(output, condition, schemaname, tables):
392  schemaname = schemaname.rstrip('.')+'.'
393  usedtables = set()
394  for o in output:
395  usedtables.add(o.split('.')[0])
396  for c in condition:
397  for p in c.split():
398  if '.' in p and '\'' not in p:
399  usedtables.add(p.split('.')[0])
400  return ["%s%s %s" % (schemaname,tables[t],t) for t in usedtables]
401 
402 

◆ interpretConnection()

def python.utils.AtlRunQueryTriggerUtils.interpretConnection (   connection,
  debug = False,
  resolveAlias = True 
)

Definition at line 229 of file AtlRunQueryTriggerUtils.py.

229 def interpretConnection(connection, debug=False, resolveAlias=True):
230  # connection needs to be of the following format (this is also the order of checking)
231  # <ALIAS> -- any string without a colon ':' will be checked for in the dblookup.xml file
232  # sqlite_file:filename.db -- an sqlite file, no authentication needed, will be opened in read-only mode
233  # oracle://ATLR/ATLAS_CONF_TRIGGER_V2 -- a service description without user and password, requires lookup in authentication.xml
234  # oracle://ATLR/ATLAS_CONF_TRIGGER_V2;username=ATLAS_CONF_TRIGGER_V2_R;password=<...> -- a service description with user and password
235 
236  log.info("Specified connection string '%s'", connection)
237 
238  # not needed any longer
239  # connection = connection.lstrip("dblookup://")
240  # connection = connection.lstrip("dblookup:")
241  # connection = connection.rstrip(";")
242  #print (connection)
243 
244  # what to return
245  connectionParameters = {}
246  connection = str(connection)
247 
248  # connection explicitly specified (no DB alias)
249  if ':' in connection:
250  connectionParameters = _getConnectionParameters( connection )
251  return connectionParameters
252 
253  # connection is a DB alias
254  connectionParameters["alias"] = connection
255  if not resolveAlias:
256  return connectionParameters
257 
258  connectionServices = _getConnectionServicesForAlias( connection ) # alias resolution via dblookup
259  if connectionServices is None:
260  return connectionParameters
261 
262  # If ${TRIGGER_USE_FRONTIER} is True then we remove sqlite files
263  if os.getenv('TRIGGER_USE_FRONTIER',False):
264  connectionServices = filter(lambda conn: not conn.startswith("sqlite_file"), connectionServices)
265  if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
266  log.fatal("Inconsistent setup: environment variable ATLAS_TRIGGERDB_FORCESQLITE is defined and use of Frontier is requested" )
267 
268  # SQLite
269  sqliteconnections = [conn for conn in connectionServices if conn.startswith("sqlite_file")]
270  if len(sqliteconnections)>0:
271  for conn in sqliteconnections:
272  connectionParameters = _getConnectionParameters( conn )
273  if connectionParameters["filename"] is not None:
274  break # stop at the first sqlite file that exists
275  if connectionParameters["filename"] is not None:
276  log.info("Using sqlite connection %s", connectionParameters)
277  return connectionParameters
278  else:
279  if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
280  log.fatal("environment ATLAS_TRIGGERDB_FORCESQLITE is defined but non of the sqlite files defined in dblookup.xml exists" )
281  else:
282  if 'ATLAS_TRIGGERDB_FORCESQLITE' in os.environ:
283  log.fatal("environment ATLAS_TRIGGERDB_FORCESQLITE is defined but no sqlite connection defined in dblookup.xml" )
284 
285  from CoolConvUtilities.AtlCoolLib import replicaList
286  serverlist=['ATLAS_CONFIG' if s=='ATLAS_COOLPROD' else s for s in replicaList()] # replicaList is for COOL, I need ATLAS_CONFIG instead of ATLAS_COOLPROD
287  log.info("Trying these servers in order %r", serverlist)
288  for server in serverlist:
289  log.info("Trying server %s", server)
290 
291  if server=='ATLF':
292  if not os.getenv('TRIGGER_USE_FRONTIER',False):
293  continue
294  frontierconnections = [conn for conn in connectionServices if conn.startswith("frontier")]
295  if len(frontierconnections) == 0:
296  log.debug("FroNTier connection not defined for alias %s in dblookup", connection )
297  continue
298  log.info("Environment FRONTIER_SERVER: %s", os.getenv('FRONTIER_SERVER','not defined'))
299  frontierServer = os.getenv('FRONTIER_SERVER',None)
300  if not frontierServer:
301  log.debug("No environment variable FRONTIER_SERVER" )
302  continue
303  connectionParameters = _getConnectionParameters( frontierconnections[0] )
304  connectionParameters['url'] = frontierServer
305  log.info("Using frontier connection %s", frontierconnections[0])
306  #connstr='frontier://ATLF/%s;schema=%s;dbname=TRIGCONF' % (connectionParameters['url'],connectionParameters["schema"])
307  break
308  elif server=='atlas_dd':
309  continue
310  else:
311  oracleconnections = [conn for conn in connectionServices if conn.startswith("oracle://%s/" % server)]
312  if len(oracleconnections) == 0:
313  log.debug("Oracle connection not defined for server %s in dblookup", server )
314  continue
315  connectionParameters = _getConnectionParameters( oracleconnections[0] )
316  log.info("Using oracle connection %s", oracleconnections[0])
317  break
318 
319  return connectionParameters
320 
321 

◆ isTriggerRun2()

def python.utils.AtlRunQueryTriggerUtils.isTriggerRun2 (   run_number = None,
  smk = None,
  isRun2 = None 
)

Definition at line 20 of file AtlRunQueryTriggerUtils.py.

20 def isTriggerRun2(run_number = None , smk = None , isRun2 = None ):
21  if run_number is None and smk is None and isRun2 is None:
22  raise RuntimeError("Cannot determine if trigger db is run 1 or 2")
23 
24  if smk is not None :
25  return smk >= 2000 and smk<3000
26  elif run_number is not None :
27  return run_number > 249000
28  else:
29  return isRun2
30 
31 

◆ triggerDBAlias()

def python.utils.AtlRunQueryTriggerUtils.triggerDBAlias (   run_number = None,
  smk = None,
  lhcRun = None 
)

Definition at line 32 of file AtlRunQueryTriggerUtils.py.

32 def triggerDBAlias(run_number = None , smk = None, lhcRun = None ):
33  if run_number is None and smk is None and lhcRun is None:
34  raise RuntimeError("Cannot determine the triggerDBAlias as no info is given")
35 
36  # lhcRun given
37  if lhcRun==1 or lhcRun==2:
38  return f"TRIGGERDB_RUN{lhcRun}"
39  if lhcRun==3:
40  return "TRIGGERDBDEV1_I8" if (smk is not None and smk<3000) else "TRIGGERDB_RUN3"
41 
42  # smk given
43  if smk is not None:
44  if smk<2000:
45  return "TRIGGERDB_RUN1"
46  elif smk<3000:
47  # note that this causes problems for the runs taken during the LS2 Pilot beam test
48  return "TRIGGERDB_RUN2"
49  else:
50  return "TRIGGERDB_RUN3"
51 
52  # run number given (should not be used, as the run should know the lhcRun)
53  # see AtlRunQueryRun.py
54  if run_number > 405800:
55  return "TRIGGERDB_RUN3"
56  if run_number > 378000:
57  return "TRIGGERDBDEV1_I8"
58  elif run_number > 249000:
59  return "TRIGGERDB_RUN2"
60  else:
61  return "TRIGGERDB_RUN1"
62 
63 
64 

Variable Documentation

◆ __cursor_schema

dictionary python.utils.AtlRunQueryTriggerUtils.__cursor_schema = {}
private

Definition at line 17 of file AtlRunQueryTriggerUtils.py.

◆ authDict

python.utils.AtlRunQueryTriggerUtils.authDict = None

Definition at line 168 of file AtlRunQueryTriggerUtils.py.

◆ log

python.utils.AtlRunQueryTriggerUtils.log = logging.getLogger( __name__ )

Definition at line 67 of file AtlRunQueryTriggerUtils.py.

python.utils.AtlRunQueryTriggerUtils.getL1Menu
def getL1Menu(smk)
Definition: AtlRunQueryTriggerUtils.py:527
python.AtlCoolLib.replicaList
def replicaList()
Definition: AtlCoolLib.py:188
python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursor
def getTriggerDBCursor(run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:385
fillPileUpNoiseLumi.connect
string connect
Definition: fillPileUpNoiseLumi.py:70
python.TrigConfFrontier.getFrontierCursor
def getFrontierCursor(urls, schema, loglevel=logging.INFO)
Definition: TrigConfFrontier.py:33
python.utils.AtlRunQueryTriggerUtils.FindFile
def FindFile(filename, pathlist, access)
Definition: AtlRunQueryTriggerUtils.py:85
python.utils.AtlRunQueryTriggerUtils.getSmkNames
def getSmkNames(smks, dbAlias)
Definition: AtlRunQueryTriggerUtils.py:463
python.utils.AtlRunQueryTriggerUtils._getConnectionParameters
def _getConnectionParameters(connection)
Definition: AtlRunQueryTriggerUtils.py:170
python.utils.AtlRunQueryTriggerUtils.interpretConnection
def interpretConnection(connection, debug=False, resolveAlias=True)
Definition: AtlRunQueryTriggerUtils.py:229
python.utils.AtlRunQueryTriggerUtils.getHLTPskNames
def getHLTPskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:441
python.utils.AtlRunQueryTriggerUtils.triggerDBAlias
def triggerDBAlias(run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:32
covarianceTool.filter
filter
Definition: covarianceTool.py:514
python.utils.AtlRunQueryTriggerUtils.getHLTPrescales
def getHLTPrescales(hltprescalekey, run_number)
Definition: AtlRunQueryTriggerUtils.py:575
python.utils.AtlRunQueryTriggerUtils._getConnectionServicesForAlias
def _getConnectionServicesForAlias(alias)
Definition: AtlRunQueryTriggerUtils.py:122
python.utils.AtlRunQueryTriggerUtils.executeQuery
def executeQuery(cursor, output, condition, schemaname, tables, bindvars=())
Definition: AtlRunQueryTriggerUtils.py:403
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.utils.AtlRunQueryTriggerUtils._getFileLocalOrPath
def _getFileLocalOrPath(filename, pathenv)
Definition: AtlRunQueryTriggerUtils.py:104
python.utils.AtlRunQueryTriggerUtils._get_mysql_cursor
def _get_mysql_cursor(host, db, user, passwd="")
Definition: AtlRunQueryTriggerUtils.py:343
python.utils.AtlRunQueryTriggerUtils.getRandom
def getRandom(smk, lhcRun)
Definition: AtlRunQueryTriggerUtils.py:611
python.utils.AtlRunQueryTriggerUtils.getUsedTables
def getUsedTables(output, condition, schemaname, tables)
Definition: AtlRunQueryTriggerUtils.py:391
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
python.utils.AtlRunQueryTriggerUtils._get_sqlite_cursor
def _get_sqlite_cursor(filename)
Definition: AtlRunQueryTriggerUtils.py:322
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.utils.AtlRunQueryTriggerUtils.getTriggerDBCursorForAlias
def getTriggerDBCursorForAlias(dbAlias)
Definition: AtlRunQueryTriggerUtils.py:355
python.utils.AtlRunQueryTriggerUtils._get_oracle_cursor
def _get_oracle_cursor(tns, user, passwd="")
Definition: AtlRunQueryTriggerUtils.py:331
python.utils.AtlRunQueryTriggerUtils.isTriggerRun2
def isTriggerRun2(run_number=None, smk=None, isRun2=None)
Definition: AtlRunQueryTriggerUtils.py:20
python.utils.AtlRunQueryTriggerUtils.getL1PskNames
def getL1PskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:417
python.utils.AtlRunQueryTriggerUtils.getL1Prescales
def getL1Prescales(l1prescalekey, run_number)
Definition: AtlRunQueryTriggerUtils.py:560
str
Definition: BTagTrackIpAccessor.cxx:11
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
python.utils.AtlRunQueryTriggerUtils.getHLTMenu
def getHLTMenu(smk)
Definition: AtlRunQueryTriggerUtils.py:487
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65
python.utils.AtlRunQueryTriggerUtils._readAuthentication
def _readAuthentication()
Definition: AtlRunQueryTriggerUtils.py:144