11 from __future__
import print_function
13 from GaudiPython
import AppMgr, gbl
14 from ROOT
import TFile, TBufferFile, TBuffer
15 from multiprocessing
import Process, Queue
16 from Configurables
import LHCbApp
29 tf = TFile(fname,
'REC')
41 ApplicationMgr(OutputLevel=ERROR, AppName=
'File Check - Serial vs Parallel')
49 pf = TFile(pname,
'REC')
50 sf = TFile(sname,
'REC')
52 pfks = pf.GetListOfKeys()
53 sfks = sf.GetListOfKeys()
54 pfkeys = list([pfk.GetName()
for pfk
in pfks])
56 sfkeys = list([sfk.GetName()
for sfk
in sfks])
62 if k.startswith(event):
64 elif k.startswith(
'##'):
72 if k.startswith(event):
74 elif k.startswith(
'##'):
82 print(
'Meta Data differs')
87 print(
'Event data differs')
95 print(
'Extra Data in parallel file : ', pExtra)
97 print(
'Extra Data in serial file : ', sExtra)
99 print(
'Files will have different sizes')
107 nkeys = len(d.keys())
111 if vals.count(v) > 1:
112 print(
'Dictionary cannot be switched, values not unique')
114 print(
'Dict has keys/values : %i/%i' % (nkeys, nvals))
117 for k, entry
in pairs:
131 print(
'Dictionary %s : ' % (name))
132 for k
in iter(d.keys()):
133 print(
'\t', k,
'\t', d[k])
137 def Reader(readerType, filename, qacross, qToEngine):
154 header =
'/Event/Rec/Header' 164 eNumber = int(evt[header].evtNumber())
170 if readerType == SER:
177 elif readerType == PAR:
179 for serOrder
in iter(qacross.get,
None):
181 lsks = len(serOrder.keys())
182 lpks = len(order.keys())
183 print(
'Events in Files (serial/parallel) : %i / %i' % (lsks, lpks))
187 for i
in iter(serOrder.keys()):
188 if readerType == PAR:
189 i = order[serOrder[i]]
191 a.runSelectedEvents(fname, i)
196 [(l, (evt[l].__class__.__name__, evt[l].
__repr__()))
for l
in lst])
199 print(
'%s Reader Finished' % (readerType))
215 if pitem == sitem ==
None:
216 print(
'Termination Signals received ok')
219 print(
'pitem != sitem : ', pitem, sitem)
222 print(
'pitem != sitem : ', pitem, sitem)
226 print(
'Comparison Engine Finished')
228 print(
'Total Events Checked : %i' % (len(results)))
229 print(
'Perfect Matches : %i' % (sum(results)))
230 print(
'Errors : %i' % (len(results) - sum(results)))
243 ref =
'DataObject at 0x' 244 if a[:16] == b[:16] == ref:
259 if len(sks) == len(pks):
270 extras = list(set(pks) - set(sks))
272 if p[e][0] ==
'DataObject':
275 print(
'Extra Other thing found!', e, p[e][0])
290 if s[key][0] == p[key][0]:
295 if s[key][1] == p[key][1]:
311 print(
"Checking File Records")
313 parFSR = GetFSRdicts(par)
314 serFSR = GetFSRdicts(ser)
316 diff1 = set(parFSR[
"TimeSpanFSR"].
iteritems()) - \
318 diff2 = set(parFSR[
"EventCountFSR"].
iteritems()) - \
321 print(
"\nDifferent entries in TimeSpanFSR: \t" + \
322 str(len(diff1)) +
"\nDifferent entries in EventCountFSR:\t" + str(len(diff2)))
324 for k
in [
"LumiFSRBeamCrossing",
"LumiFSRBeam2",
"LumiFSRNoBeam"]:
325 diff3 = set(parFSR[k][
"key"]) - set(serFSR[k][
"key"])
326 diff4 = set(parFSR[k][
"incr"]) - set(serFSR[k][
"incr"])
327 diff5 = set(parFSR[k][
"integral"]) - set(serFSR[k][
"integral"])
328 print(
"Different entries in " + str(k) +
": \tkey: " +
329 str(len(diff3)) +
" increment: " + str(len(diff4)) +
330 " integral: " + str(len(diff5)))
340 for r
in lumi.runNumbers():
343 for f
in lumi.fileIDs():
346 sa = s.split(
"info (key/incr/integral) : ")[-1]
347 sa = sa.split(
'/')[:-1]
353 k, i, t = rec.split()
356 integral.append(int(t))
358 return (runs, files, key, incr, integral)
368 "LumiFSRBeamCrossing": {
395 options =
"from LumiAlgs.LumiFsrReaderConf import LumiFsrReaderConf as LumiFsrReader; LumiFsrReader().OutputLevel = INFO; LumiFsrReader().inputFiles = ['%s'] ;" % filename
396 options +=
"LumiFsrReader().Persistency='ROOT'; LumiFsrReader().EvtMax = 1; from Configurables import LHCbApp; LHCbApp().Persistency='ROOT'; from Configurables import CondDB, DDDBConf;" 397 options +=
" CondDB().UseLatestTags=['%s']; DDDBConf(DataType='%s');" % (
402 fsr = app.filerecordsvc()
404 lst = fsr.getHistoNames()
409 ob = fsr.retrieveObject(l)
413 assert ob.numberOfObjects() == 1
414 k = ob.containedObject(0)
415 runs, files, keys, increment, integral =
LumiFSR(k)
417 FSR[l[l.rfind(
'/') + 1:]][
'runs'] = runs
418 FSR[l[l.rfind(
'/') + 1:]][
'files'] = files
419 FSR[l[l.rfind(
'/') + 1:]][
'key'] = keys
420 FSR[l[l.rfind(
'/') + 1:]][
'incr'] = increment
421 FSR[l[l.rfind(
'/') + 1:]][
'integral'] = integral
423 if "TimeSpanFSR" in l:
425 FSR[
"TimeSpanFSR"][
'earliest'] = ob.containedObject(
427 FSR[
"TimeSpanFSR"][
'latest'] = ob.containedObject(0).latest()
429 if "EventCountFSR" in l:
431 FSR[
"EventCountFSR"][
'input'] = ob.input()
432 FSR[
"EventCountFSR"][
'output'] = ob.output()
433 FSR[
"EventCountFSR"][
'statusFlag'] = ob.statusFlag()
446 print(
"Comparing File Records")
448 diff1 = set(parFSR[
"TimeSpanFSR"].
iteritems()) - \
450 diff2 = set(parFSR[
"EventCountFSR"].
iteritems()) - \
453 print(
"\nDifferent entries in TimeSpanFSR: \t" + \
454 str(len(diff1)) +
"\nDifferent entries in EventCountFSR:\t" + str(len(diff2)))
456 for k
in [
"LumiFSRBeamCrossing",
"LumiFSRBeam2",
"LumiFSRNoBeam"]:
457 diff3 = set(parFSR[k][
'key']) - set(serFSR[k][
'key'])
458 diff4 = set(parFSR[k][
'incr']) - set(serFSR[k][
'incr'])
459 diff5 = set(parFSR[k][
'integral']) - set(serFSR[k][
"integral"])
460 print(
"Different entries in " + str(k) +
": \tkey: " +
461 str(len(diff3)) +
" increment: " + str(len(diff4)) +
462 " integral: " + str(len(diff5)))
464 print(
"\nParallel: \n" + str(parFSR))
465 print(
"\nSerial: \n" + str(serFSR))
468 if __name__ ==
'__main__':
474 'Please supply two arguments : > python loadFile <parallelFile> <serialFile>' 478 par =
'PFN:' + args[0]
479 ser =
'PFN:' + args[1]
480 print(
'Parallel File to be analysed : %s' % (par))
481 print(
'Serial File to be analysed : %s' % (ser))
490 par = Process(target=Reader, args=(PAR, par, qacross, pout))
491 ser = Process(target=Reader, args=(SER, ser, qacross, sout))
492 com = Process(target=ComparisonEngine, args=(pout, sout))
499 print(
"Check File Records")
507 sp = Process(target=GetFSRdict, args=(ser, sout))
508 pp = Process(target=GetFSRdict, args=(par, pout))
509 cp = Process(target=CompareFSR, args=(pout, sout))
def printDict(d, name='unspecified')
def CheckFileRecords(par, ser)
def CompareFSR(pout, sout)
def ComparisonEngine(pQueue, sQueue)
A small to stream Data I/O.
def importOptions(optsfile)
def CompareTrees(pname, sname)
HistogramPersistencySvc class implementation definition.
def checkForAddressDifference(a, b)
def GetFSRdict(filename, queue)
The Application Manager class.
Definition of class EventSelector.
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
def Reader(readerType, filename, qacross, qToEngine)