ATLAS Offline Software
Loading...
Searching...
No Matches
AtlRunQueryTriggerUtils.py
Go to the documentation of this file.
1#!/bin/env python
2
3# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4#
5# ----------------------------------------------------------------
6# Script : AtlRunQueryTriggerUtils.py
7# Project: AtlRunQuery
8# Purpose: Trigger Utility functions for AtlRunQuery
9# Authors: Andreas Hoecker (CERN), Joerg Stelzer (DESY)
10# Created: Oct 27, 2010
11# ----------------------------------------------------------------
12
13
14from collections.abc import Iterable
15
16
17__cursor_schema = {} # cache for cursor and schema by alias
18
19# returns True if run is RUN 2 (2015-2018)
20def 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
32def 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
65from xml.dom import minidom
66import os, re, logging
67log = logging.getLogger( __name__ )
68
70 def __init__(self, name, counter, lowername="", lowercounter=-1, forshow=False, forselect=False, level=0):
71 self.name = name
72 self.counter = counter
73 self.lowername = "" if lowername=="~" else lowername
74 self.lowercounter = lowercounter
75 self.forshow = forshow
76 self.forselect = forselect
77 self.multiseeded = (self.lowername=="") or (',' in self.lowername)
78 self.level = level
79 self.lower = None
80
81 def __repr__(self):
82 return "TC:"+self.name
83
84
85def 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
104def _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
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
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
168authDict = None
169
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
229def 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
322def _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
331def _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
343def _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
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
385def 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
391def 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
403def 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
417def 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
441def 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
463def 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
487def 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
527def 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
560def 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
575def 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
611def 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
641if __name__=="__main__":
642 #print (getL1PskNames([2517, 2518, 2284, 2536]))
643
644 #print (getHLTPskNames([2517, 2530, 2537, 2491]))
645
646 #print (getSmkNames([931, 932, 933]))
647
648 #print (getL1Menu(931))
649
650 #print (getHLTMenu(931))
651
652 #print (getL1Prescales(2517))
653
654 #print (getHLTPrescales(2530))
655
656 print (getRandom(1038))
void print(char *figname, TCanvas *c1)
__init__(self, name, counter, lowername="", lowercounter=-1, forshow=False, forselect=False, level=0)
STL class.
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
getL1PskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
getTriggerDBCursor(run_number=None, smk=None, lhcRun=None)
triggerDBAlias(run_number=None, smk=None, lhcRun=None)
getUsedTables(output, condition, schemaname, tables)
executeQuery(cursor, output, condition, schemaname, tables, bindvars=())
interpretConnection(connection, debug=False, resolveAlias=True)
getHLTPskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
isTriggerRun2(run_number=None, smk=None, isRun2=None)