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
Error occurred while calculating annotation data.
Log Message:
Improve luminosity tools

File Contents

# Content
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