ATLAS Offline Software
Loading...
Searching...
No Matches
dq_defect_virtual_defect_validation.py
Go to the documentation of this file.
1#!/usr/bin/env python
2
3def truncate_iovs_to_runs(iovs, runends):
4 for iov in iovs:
5 if iov.since.run not in runends:
6 print('Missing run', iov.since.run, 'from EOR_Params')
7
8 rv = filter(None, [iov.intersect(runends[iov.since.run])
9 for iov in iovs if iov.since.run in runends])
10 rv = filter(lambda x: not(x.until.lumi-x.since.lumi == 0),
11 rv)
12 return rv
13
15 from DQUtils.db import fetch_iovs
16 from DQUtils.sugar import RunLumi
17 eor_params = fetch_iovs('EOR_Params',
18 with_channel=False, what=[])
19 runends = {}
20 for iov in eor_params:
21 if iov.since.lumi == 0: iov = iov._replace(since=RunLumi(iov.since.run, 1))
22 runends[iov.since.run] = iov
23 return runends
24
25def do_compact(iovs):
26 iovs = sorted(iovs)
27 rv = []
28 pos = 0
29 while pos < len(iovs):
30 tiov = iovs[pos]
31 pos += 1
32 while pos < len(iovs):
33 niov = iovs[pos]
34 if niov.since != tiov.until:
35 break
36 tiov = tiov._replace(until=niov.until)
37 pos += 1
38 rv.append(tiov)
39 return rv
40
41if __name__ == '__main__':
42 import optparse
43
44 parser = optparse.OptionParser()
45 parser.add_option('--defectdb', default='defectstest.db/COMP200',
46 help='Set defect database')
47 parser.add_option('--vfdb', default='LBSUMM',
48 help='Set DQ flag database (connection string format as in DQUtils.db.Databases)')
49
50 opts, args = parser.parse_args()
51
52 # get virtual flag IOVs
53 import VirtualFlags, DQUtils
54 from DQDefects import DefectsDB
55 print('Getting virtual flag information...', end='')
56 vfdb = DQUtils.db.Databases.get_folder(opts.vfdb)
57 vff = VirtualFlags.VirtualFlagFolder(vfdb)
58 mapping = vff.get_flag_name_id_mapping()
59 print('done')
60
61 print('Getting virtual defect information...', end='')
62 ddb = DefectsDB(opts.defectdb, read_only=True)
63 defectids, defectnames, defectdict = ddb.get_virtual_channels()
64 print('done')
65
66 print('Retrieving run ends...', end='')
67 runends = get_runends()
68 print('done')
69
70 for key in mapping:
71 if not isinstance(key, str): continue
72 #if '_' in key: continue
73 if key not in defectdict or key in ['IDPF', 'LCD', 'MET', 'IDBCM', 'TIGB']:
74 print('MISSING:', key)
75 continue
76 print(key, end='')
77 vfiovs = do_compact(vff.browseObjects((152166,0), (167845,0), [key], 'DetStatus-v03-repro05-01', selection=lambda x: x.Code < 3))
78 #print vfiovs
79 d1 = set([((x.since.run, x.since.lumi), (x.until.run, x.until.lumi)) for x in truncate_iovs_to_runs(vfiovs, runends) if x.since.run != 152220])
80 diovs = do_compact(ddb.retrieve((152166,0), (167845,0), [key]))
81 d2 = set([((x.since.run, x.since.lumi), (x.until.run, x.until.lumi)) for x in truncate_iovs_to_runs(diovs, runends) if x.since.run != 152220])
82 print(d1 == d2)
83 if d1 != d2:
84 #print d1
85 d1a = dict([(((x.since.run, x.since.lumi), (x.until.run, x.until.lumi)), x.Comment) for x in truncate_iovs_to_runs(vfiovs, runends)])
86 d2a = dict([(((x.since.run, x.since.lumi), (x.until.run, x.until.lumi)), x.comment) for x in truncate_iovs_to_runs(diovs, runends)])
87
88 print('In VF but not defects:', [(x, d1a[x]) for x in d1-d2])
89 print('In defects but not VF:', [(x, d2a[x]) for x in d2-d1])
90
void print(char *figname, TCanvas *c1)
STL class.