ATLAS Offline Software
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
6 import sys
7 def _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
22 def _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
90 def scanFiles(globstr='testOutFile*'):
91  RV=_dolsrwrapper(globstr)
92  return RV
93 if __name__ == "__main__" :
94  if len(sys.argv)<2:
95  RV=scanFiles()
96  else:
97  RV=scanFiles("%s"%(sys.argv[1]))
98  sys.exit(RV)
ScanHistFile.scanFiles
def scanFiles(globstr='testOutFile *')
Definition: ScanHistFile.py:90
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
ScanHistFile._dolsr
def _dolsr(dir)
Definition: ScanHistFile.py:22
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
ScanHistFile._dolsrwrapper
def _dolsrwrapper(fname)
Definition: ScanHistFile.py:7