7 Compare beamspot DQ defects between various databases and tags
9 __author__ =
'Carl Gwilliam'
11 __usage__ =
'''%prog [options] [database1] [database2]
13 Database can be either connection string or db file:
15 e.g COOLOFL_INDET/CONDBR2 (default)
20 dqCompare.py --rl 190236 ~atlidbs/jobs/data11_7TeV.00190236.express_express/DB_BEAMSPOT.x155_c779/data11_7TeV.00190236.express_express-DB_BEAMSPOT.x155_c779.AveBeamSpot-beamspot.db/BEAMSPOT
24 from DQUtils
import fetch_iovs, process_iovs
25 from DQUtils.sugar
import IOVSet,RANGEIOV_VAL,RunLumiType
27 from optparse
import OptionParser
28 parser = OptionParser(usage=__usage__, version=__version__)
29 parser.add_option(
'-f',
'--folder', dest=
'folder', default=
'/Indet/Beampos', help=
'Folder name (default: /Indet/Beampos)')
30 parser.add_option(
'',
'--tag1', dest=
'tag1', default=
'nominal', help=
'Tag to compare (default: nominal)')
31 parser.add_option(
'',
'--tag2', dest=
'tag2', default=
'IndetBeampos-ES1-UPD2-03', help=
'Tag to compare to (default: IndetBeampos-ES1-UPD2-03)')
32 parser.add_option(
'',
'--rl', dest=
'runMin', type=
'int', default=
None, help=
'Start run number (default: None)')
33 parser.add_option(
'',
'--ru', dest=
'runMax', type=
'int', default=
None, help=
'Start run number (default: None)')
34 parser.add_option(
'',
'--statusonly', dest=
'statusonly', action=
'store_true', default=
False, help=
'only show runs with differences in status (default: False)')
35 parser.add_option(
'-s',
'--summary', dest=
'summary', action=
'store_true', default=
False, help=
'only show summary of runs with differences (default: False)')
36 parser.add_option(
'',
'--span', dest=
'span', action=
'store_true', default=
False, help=
'Allows IoVs spanning run boundaries (default: False)')
37 (options,args) = parser.parse_args()
39 db1 = args[0]
if len(args)==1
else 'COOLOFL_INDET/CONDBR2'
40 db2 = args[1]
if len(args)==2
else 'COOLOFL_INDET/CONDBR2'
43 f1 =
"%s::%s" % (db1, options.folder)
44 f2 =
"%s::%s" % (db2, options.folder)
48 print (
" * ", f1, options.tag1)
49 print (
" * ", f2, options.tag2)
52 if options.runMin
is not None:
54 if options.runMax
is not None:
55 runs = options.runMin, options.runMax
57 tag1iovs =
fetch_iovs(f1, runs=runs, tag=options.tag1)
58 tag2iovs =
fetch_iovs(f2, runs=runs, tag=options.tag2)
68 for since, until, (t1, t2)
in process_iovs(tag1iovs, tag2iovs):
71 if not options.span
and since.run != until.run:
continue
80 if (t1.status == 0
or t2.status == 0)
and (t1.status != t2.status):
81 if options.statusonly
and not options.summary:
82 print (since, until, t1.status, t2.status)
86 if not options.statusonly:
87 for i, field
in enumerate(t1._fields):
94 if not options.summary:
95 print (since, until, field, t1[i], t2[i])
96 affected_runs.add(since.run)
99 if not options.statusonly:
100 print (
"Runs with differences (%s):" % len(affected_runs),
", ".
join(map(str,
sorted(affected_runs))))
102 print (
"Runs with different status (and one non-zero):",
", ".
join(map(str,
sorted(ar2))))
104 if __name__ ==
"__main__":