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