00001
00002
00003
00004 import os
00005 import gaudimodule as gaudi
00006
00007
00008 def init(loc) :
00009
00010
00011 g=gaudi.AppMgr()
00012
00013
00014 g.DLLs += [ "DetDescChecks" ]
00015
00016 g.HistogramPersistency = "ROOT"
00017 g.config()
00018
00019 hsvc = g.service('HistogramPersistencySvc')
00020 hsvc.OutputFile = "test.root"
00021
00022
00023 g.DLLs += [ "RootHistCnv" ]
00024 g.ExtSvc += [ "XmlCnvSvc" , "XmlParserSvc" ]
00025 g.EvtSel = "NONE"
00026
00027 det = g.service('DetectorPersistencySvc')
00028 det.CnvServices = ["XmlCnvSvc"]
00029
00030 det = g.service('XmlCnvSvc')
00031 det.AllowGenericConversion = True
00032
00033 det = g.service('DetectorDataSvc')
00034 det.UsePersistency = True
00035 det.DetDbRootName = "dd"
00036 det.DetStorageType = 7
00037 det.DetDbLocation = loc
00038
00039
00040
00041 def run( volume , event = 1 ) :
00042 g = gaudi.AppMgr()
00043 g.TopAlg = ["VolumeCheckAlg/Check"]
00044
00045 alg = g.algorithm('Check')
00046 alg.Shots3D = 10000
00047 alg.ShotsXY = 100000
00048 alg.ShotsYZ = 10000
00049 alg.ShotsZX = 10000
00050 alg.Volume = volume
00051 g.run( event )
00052
00053 def _dir_ ( self , node = None , level = -1 ) :
00054 """
00055 The simple tool to perform the inspection fo Data Store
00056
00057 Usage:
00058
00059 evtSvc = gaudi.evtSvc()
00060 evtSvc.dir('MC')
00061 data = evtSvc['Rec/Calo']
00062 evtSvc.dir( data)
00063
00064 """
00065 if 0 == level : return gaudi.SUCCESS ;
00066 if str is type(node) : node = self.retrieveObject( node )
00067 elif not node : return self.dir('', level )
00068 if not node : return gaudi.FAILURE
00069 if hasattr ( node , 'registry' ) : node = node.registry()
00070 if hasattr ( node , 'identifier' ) :
00071 obj = node.object ()
00072 if not obj :
00073 obj = self.retrieveObject( node.identifier() )
00074 print node.identifier()
00075 else :
00076 if hasattr( obj , 'size' ) :
00077 size = obj.size()
00078 if 0 == size : print "%s (empty) %s" % ( node.identifier() , type( obj ) )
00079 elif hasattr ( obj , 'containedObjects' ) :
00080 c = obj.containedObjects()[0]
00081 print "%s container of %d %s objects " % ( node.identifier() , obj.size() , type(c))
00082 else :
00083 print "%s %s " % ( node.identifier() , type( node.object()) )
00084 else :
00085 print "%s %s " % ( node.identifier() , type( node.object()) )
00086 else : print "The node has no 'identifier'"
00087
00088 for l in self.leaves( node ) :
00089 if l : self.dir( l , level - 1 )
00090 return gaudi.SUCCESS
00091
00092 def _get_( self , node = None , cut = lambda x : True ) :
00093 if str is type(node) : node = self.retrieveObject( node )
00094 elif not node : return _get_( self , '' , cut )
00095 if not node : return []
00096 if hasattr ( node , 'registry' ) : node = node.registry()
00097 result = []
00098 if hasattr ( node , 'identifier' ) :
00099 obj = node.object()
00100 if cut( obj ) : result += [ obj ]
00101 for l in self.leaves ( node ) :
00102 if l : result += _get_( self , l , cut )
00103 return result
00104
00105 gaudi.iDataSvc.dir = _dir_
00106 gaudi.iDataSvc.DIR = _get_
00107
00108
00109 if "__main__" == __name__ :
00110 import sys
00111
00112 try:
00113 loc = sys.argv[1]
00114 except:
00115 import os
00116 loc=os.getenv("XMLDETDESCROOT") + "/DDDB/dayabay.xml"
00117 print "Using default XML file:\n",loc
00118
00119 try:
00120 vol = sys.argv[2]
00121 except:
00122 vol='/dd/Geometry/lvSimpleBox'
00123 print "using default volume:\n",vol
00124
00125 init(loc)
00126 run (vol)
00127
00128
00129
00130
00131