ATLAS Offline Software
Loading...
Searching...
No Matches
ScanHistFile.py
Go to the documentation of this file.
1#!/bin/env python
2
3# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4#copied from DQPostProcessi.py and modified
5# Sami Kama
6import sys
7def _dolsrwrapper(fname):
8 import ROOT
9 rf = ROOT.TFile.Open(fname, 'READ')
10 if not rf or not rf.IsOpen():
11 print(' %s is empty or not accessible' % fname)
12 return 3
13 if rf.TestBit(ROOT.TFile.kRecovered):
14 print(" %s is recovered. It means it was corrupt" % fname)
15 return 7
16 cleancache = ROOT.gROOT.MustClean(); ROOT.gROOT.SetMustClean(False)
17 RV=_dolsr(rf)
18 print("dolsr returned %s "%(RV))
19 rf.Close()
20 ROOT.gROOT.SetMustClean(cleancache)
21 return RV
22def _dolsr(dir):
23 import ROOT
24 resultdir = dir.Get('Results'); statusobj = None
25 if resultdir:
26 statusobj = resultdir.Get('Status')
27 if statusobj:
28 l = statusobj.GetListOfKeys()
29 l[0].GetName()
30 keys = dir.GetListOfKeys()
31 for key in keys:
32 name = key.GetName()
33 #print "Reading key named %s"%name
34 keyClass=ROOT.TClass.GetClass(key.GetClassName())
35 if keyClass.InheritsFrom('TDirectory'):
36 dirobj = key.ReadObj()
37 resultdir = dirobj.Get('Results'); statusobj = None
38 if resultdir:
39 statusobj = resultdir.Get('Status')
40 # is a check? is a summary? or recurse?
41 if name[-1] == '_' and resultdir:
42 hist = dir.Get(name[:-1])
43 subkeys = resultdir.GetListOfKeys()
44 for subkey in subkeys:
45 ressub = subkey.GetName()
46 if ressub not in ('Status', 'Reference', 'ResultObject') and ROOT.TClass.GetClass(subkey.GetClassName()).InheritsFrom('TDirectory'):
47 subObj=subkey.ReadObj()
48 l = subObj.GetListOfKeys()
49 l[0].GetName()
50 # status flag
51 l = statusobj.GetListOfKeys()
52 l[0].GetName()
53
54 else:
55 _dolsr(dirobj)
56 del dirobj
57 elif keyClass.InheritsFrom("TTree"):
58 currObj=key.ReadObj()
59 if currObj is None:
60 print("WARNING TTree Object \"%s\" in file:directory \"%s\" is corrupt "\
61 "keylen=%s numbytes=%s objlen=%s fseekkey=%s"%(name,dir.GetPath(),key.GetKeylen(),
62 key.GetNbytes(),key.GetObjlen(),key.GetSeekKey()))
63 return 9
64 else:
65 nentries=currObj.GetEntriesFast()
66 #print "Scanning tree Object \"%s\" in file:directory \"%s\" is corrupt "\
67 #"keylen=%s numbytes=%s objlen=%s fseekkey=%s "%(name,dir.GetPath(),key.GetKeylen(),
68 # key.GetNbytes(),key.GetObjlen(),key.GetSeekKey()),
69 #print "Scanning tree %s"%name,
70 for j in range(nentries):
71 ientry=currObj.LoadTree(j)
72 if ientry<0:
73 break
74 nb=currObj.GetEntry(j)
75 if nb<=0:
76 continue
77 #print " Done"
78 currObj.Delete()
79 del currObj
80 else:
81 currObj=key.ReadObj()
82 if currObj is None:
83 print("WARNING Object \"%s\" in file:directory \"%s\" is corrupt "\
84 "keylen=%s numbytes=%s objlen=%s fseekkey=%s"%(name,dir.GetPath(),key.GetKeylen(),
85 key.GetNbytes(),key.GetObjlen(),key.GetSeekKey()))
86 return 5
87 currObj.Delete()
88 del currObj
89 return 0
90def scanFiles(globstr='testOutFile*'):
91 RV=_dolsrwrapper(globstr)
92 return RV
93if __name__ == "__main__" :
94 if len(sys.argv)<2:
96 else:
97 RV=scanFiles("%s"%(sys.argv[1]))
98 sys.exit(RV)
void print(char *figname, TCanvas *c1)
scanFiles(globstr='testOutFile *')
_dolsrwrapper(fname)