13def local2Global(n):
14 Info={}
15 nav = ROOT.gGeoManager.GetCurrentNavigator()
16 nav.cd(n)
17 Info['node'] = nav.GetCurrentNode()
18 Info['path'] = n
19 tmp = Info['node'].GetVolume().GetShape()
20 Info['material'] = Info['node'].GetVolume().GetMaterial().GetName()
21 if options.moreInfo:
22 x = ROOT.gGeoManager.GetVerboseLevel()
23 ROOT.gGeoManager.SetVerboseLevel(0)
24 Info['weight']=Info['node'].GetVolume().Weight()
25 Info['cubicmeter']=Info['node'].GetVolume().Capacity()/1000000.
26 ROOT.gGeoManager.SetVerboseLevel(x)
27 o = [tmp.GetOrigin()[0],tmp.GetOrigin()[1],tmp.GetOrigin()[2]]
28 Info['locorign'] = o
29 local = array('d',o)
30 globOrigin = array('d',[0,0,0])
31 nav.LocalToMaster(local,globOrigin)
32 Info['origin'] = globOrigin
33 shifts = [ [-tmp.GetDX()+o[0],o[1],o[2]],
34 [tmp.GetDX()+o[0],o[1],o[2]],
35 [o[0],-tmp.GetDY()+o[1],o[2]],
36 [o[0],tmp.GetDY()+o[1],o[2]],
37 [o[0],o[1],-tmp.GetDZ()+o[2]],[o[0],o[1],tmp.GetDZ()+o[2]]
38 ]
39 shifted = []
40 for s in shifts:
41 local = array('d',s)
42 glob = array('d',[0,0,0])
43 nav.LocalToMaster(local,glob)
44 shifted.append([glob[0],glob[1],glob[2]])
45 Info['boundingbox']={}
46 for j in range(3):
47 jmin = 1E30
48 jmax = -1E30
49 for s in shifted:
50 if s[j]<jmin: jmin = s[j]
51 if s[j]>jmax: jmax = s[j]
52 Info['boundingbox'][j]=[jmin,jmax]
53 return Info
54