4This module provides ROOT IO interface for MCScore data 
   11from array import array 
   13from Geant4.hepunit import * 
   17# ================================================================== 
   19# ================================================================== 
   20__all__ = [ 'MCScoreROOTIO', 'loop_tree' ] 
   23# ================================================================== 
   30  "ROOT IO interface for MCScore" 
   38    self.
vtree = ROOT.TTree(
'vertex',   
'mc vertex')
 
   39    self.
ptree = ROOT.TTree(
'particle', 
'mc particle')
 
   42    self.
a_x = array(
'd', [0.]); self.
vtree.Branch(
'x', self.
a_x, 
'x/d')
 
   43    self.
a_y = array(
'd', [0.]); self.
vtree.Branch(
'y', self.
a_y, 
'y/d')
 
   44    self.
a_z = array(
'd', [0.]); self.
vtree.Branch(
'z', self.
a_z, 
'z/d')
 
   54    self.
ptree.Branch(
'Z',  self.
a_Z,  
'Z[np]/I')
 
   57    self.
ptree.Branch(
'A',  self.
a_A,  
'A[np]/i')
 
   60    self.
ptree.Branch(
'kE', self.
a_ke, 
'kE[np]/d')
 
   63    self.
ptree.Branch(
'px', self.
a_px, 
'px[np]/d')
 
   66    self.
ptree.Branch(
'py', self.
a_py, 
'py[np]/d')
 
   69    self.
ptree.Branch(
'pz', self.
a_pz, 
'pz[np]/d')
 
   73    "fill vertex information to ROOT tree" 
   75    def push_pname(i0, pname): 
 
   81    self.
a_x[0] = vertex.x
 
   82    self.
a_y[0] = vertex.y
 
   83    self.
a_z[0] = vertex.z
 
   88      *** buffer overflow in  
   93    self.a_np[0] = vertex.nparticle 
   94    for ip 
in range(vertex.nparticle):
 
   95      particle = vertex.particle_list[ip]
 
   96      push_pname(idx_namelist, particle.name)
 
   97      idx_namelist += (len(particle.name)+1)
 
   98      self.
a_Z[ip] = particle.Z
 
   99      self.
a_A[ip] = particle.A
 
  100      self.
a_ke[ip] = particle.kineticE
 
  101      self.
a_px[ip] = particle.px
 
  102      self.
a_py[ip] = particle.py
 
  103      self.
a_pz[ip] = particle.pz
 
  114  loop ROOT tree in a ROOT file.
 
  115    * analyze_vertex: user function : analyze_vertex(MCVertex)
 
  117  avtree = tfile.Get("vertex")
 
  118  aptree = tfile.Get(
"particle")
 
  121  n_vertex = avtree.GetEntries()
 
  122  for ivtx 
in xrange(n_vertex):
 
  123    avtree.GetEntry(ivtx)
 
  124    aptree.GetEntry(ivtx)
 
  127    vertex = MCScore.MCVertex(avtree.x, avtree.y, avtree.z)    
 
  131    namelist = aptree.namelist
 
  132    pname = namelist.split()
 
  133    for ip 
in xrange(nsec):
 
  134      particle = MCScore.MCParticle(pname[ip], aptree.Z[ip], aptree.A[ip],
 
  135                                    aptree.kE[ip], aptree.px[ip],
 
  136                                    aptree.py[ip], aptree.pz[ip])
 
  137      vertex.append_particle(particle)
 
  139    analyze_vertex(vertex)
 
  148  g = ROOT.TFile(
"reaction.root", 
'recreate')
 
  153  f = open(
"reaction.dat")
 
  157    vertex = MCScore.read_next_vertex(f)
 
  162    rootio.fill_tree(vertex)
 
  175  def my_analysis(vertex):
 
  178  f = ROOT.TFile(
"reaction.root", 
'read')  
 
  180  print "*** # of vertex= ", nv
 
  186if __name__ == 
"__main__":
 
def __init__(self, bsize=250)
def fill_tree(self, vertex)
def loop_tree(tfile, analyze_vertex)