ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/GPetrucc/scripts/getPrescales.py
Revision: 1.1
Committed: Fri May 21 09:25:22 2010 UTC (14 years, 11 months ago) by gpetrucc
Content type: text/x-python
Branch: MAIN
CVS Tags: HEAD
Log Message:
Improve luminosity tools

File Contents

# User Rev Content
1 gpetrucc 1.1 #!/usr/bin/env python
2     from sys import stderr, exit
3    
4     from optparse import OptionParser
5     parser = OptionParser(usage="usage: %prog [options] Trigger_Path")
6     parser.add_option("--firstRun", dest="firstRun", help="first run", type="int", metavar="RUN", default="1")
7     parser.add_option("--lastRun", dest="lastRun", help="last run", type="int", metavar="RUN", default="9999999")
8     parser.add_option("--groupName", dest="groupName", help="select runs of name like NAME", metavar="NAME", default="Collisions%")
9     parser.add_option("--rrurl", dest="rrurl", help="run registry xmlrpc url", metavar="URL", default="http://pccmsdqm04.cern.ch/runregistry/xmlrpc")
10     parser.add_option("--jsonOut", dest="jsonOut", help="dump prescales in JSON format on FILE", metavar="FILE")
11     (options, args) = parser.parse_args()
12     if len(args) != 1:
13     parser.print_usage()
14     exit(2)
15     path = args[0]
16    
17    
18     edmCfgFromDB = "edmConfigFromDB --orcoff --nopsets --noes --nopaths --nooutput --services PrescaleService ";
19     ## my $pyPrintTable = "echo 'for X in process.PrescaleService.prescaleTable: print \"\%s \%s\" % (X.pathName.value(), X.prescales[0])'";
20     def getPrescalesFromKey(key):
21     stderr.write("\t%s ...\n" % key);
22     # Get CFG
23     from subprocess import Popen, PIPE
24     cfg = Popen((edmCfgFromDB+" --configName "+key).split(), stdout=PIPE).communicate()[0]
25     # Evaluate, in its own namespace
26     ns = dict()
27     exec cfg.replace("\r\n","\n") in ns
28     # Parse results
29     psMap = {}
30     for X in ns["process"].PrescaleService.prescaleTable:
31     psMap[X.pathName.value()] = X.prescales[0]
32     return psMap
33    
34     def queryRR():
35     stderr.write("Querying run registry for range [%d, %d], group name like %s ...\n" % (options.firstRun, options.lastRun, options.groupName))
36     import xmlrpclib
37     import xml.dom.minidom
38     server = xmlrpclib.ServerProxy(options.rrurl)
39     run_data = server.DataExporter.export('RUN', 'GLOBAL', 'xml_datasets', "{runNumber} >= %d AND {runNumber} <= %d AND {groupName} like '%s' AND {datasetName} = '/Global/Online/ALL'" % (options.firstRun, options.lastRun, options.groupName))
40     ret = {}
41     xml_data = xml.dom.minidom.parseString(run_data)
42     xml_runs = xml_data.documentElement.getElementsByTagName("RUN_DATASET")
43     for xml_run in xml_runs:
44     ret[xml_run.getElementsByTagName("RUN_NUMBER")[0].firstChild.nodeValue] = xml_run.getElementsByTagName("RUN_HLTKEY")[0].firstChild.nodeValue
45     return ret
46    
47     runKeys = queryRR()
48     prescaleTable = {}
49     runs = runKeys.keys(); runs.sort()
50     stderr.write("Querying ConfDB for prescales for path %s...\n" % (path));
51     jsout = {}
52     for run in runs:
53     key = runKeys[run]
54     if not prescaleTable.has_key(key):
55     prescaleTable[key] = getPrescalesFromKey(key)
56     psfactor = 1
57     if prescaleTable[key].has_key(path): psfactor = prescaleTable[key][path]
58     print "%s\t%s" % (run, psfactor)
59     jsout[run] = psfactor
60    
61     if options.jsonOut:
62     stderr.write("Exporting to JSON file %s...\n" % (options.jsonOut))
63     import json
64     jsonFile = open(options.jsonOut, "w")
65     jsonFile.write(json.dumps(jsout))
66     jsonFile.close()
67