Ejemplo n.º 1
0
def myVertex(t1, t2, PosDir):
    # closest distance between two tracks
    # d = |pq . u x v|/|u x v|
    a = ROOT.TVector3(PosDir[t1]['position'](0), PosDir[t1]['position'](1),
                      PosDir[t1]['position'](2))
    u = ROOT.TVector3(PosDir[t1]['direction'](0), PosDir[t1]['direction'](1),
                      PosDir[t1]['direction'](2))
    c = ROOT.TVector3(PosDir[t2]['position'](0), PosDir[t2]['position'](1),
                      PosDir[t2]['position'](2))
    v = ROOT.TVector3(PosDir[t2]['direction'](0), PosDir[t2]['direction'](1),
                      PosDir[t2]['direction'](2))
    pq = a - c
    uCrossv = u.Cross(v)
    dist = pq.Dot(uCrossv) / (uCrossv.Mag() + 1E-8)
    # u.a - u.c + s*|u|**2 - u.v*t    = 0
    # v.a - v.c + s*v.u    - t*|v|**2 = 0
    E = u.Dot(a) - u.Dot(c)
    F = v.Dot(a) - v.Dot(c)
    A, B = u.Mag2(), -u.Dot(v)
    C, D = u.Dot(v), -v.Mag2()
    t = -(C * E - A * F) / (B * C - A * D)
    X = c.x() + v.x() * t
    Y = c.y() + v.y() * t
    Z = c.z() + v.z() * t
    # sT = ROOT.gROOT.FindAnything('cbmsim')
    #print 'test2 ',X,Y,Z,dist
    #print 'truth',sTree.MCTrack[2].GetStartX(),sTree.MCTrack[2].GetStartY(),sTree.MCTrack[2].GetStartZ()
    return X, Y, Z, abs(dist)
Ejemplo n.º 2
0
def myVertex(t1, t2, PosDir):
    # closest distance between two tracks
    # d = |pq . u x v|/|u x v|
    # print(' ')
    # print('myvertex',PosDir)
    # print(np.shape(PosDir))
    # print(PosDir[0])
    # print(PosDir[0][0])
    a = ROOT.TVector3(PosDir[0][0](0), PosDir[0][0](1), PosDir[0][0](2))
    u = ROOT.TVector3(PosDir[0][1](0), PosDir[0][1](1), PosDir[0][1](2))
    c = ROOT.TVector3(PosDir[1][0](0), PosDir[1][0](1), PosDir[1][0](2))
    v = ROOT.TVector3(PosDir[1][1](0), PosDir[1][1](1), PosDir[1][1](2))
    pq = a - c
    uCrossv = u.Cross(v)
    dist = pq.Dot(uCrossv) / (uCrossv.Mag() + 1E-8)
    # u.a - u.c + s*|u|**2 - u.v*t    = 0
    # v.a - v.c + s*v.u    - t*|v|**2 = 0
    E = u.Dot(a) - u.Dot(c)
    F = v.Dot(a) - v.Dot(c)
    A, B = u.Mag2(), -u.Dot(v)
    C, D = u.Dot(v), -v.Mag2()
    t = -(C * E - A * F) / (B * C - A * D)
    X = c.x() + v.x() * t
    Y = c.y() + v.y() * t
    Z = c.z() + v.z() * t
    return X, Y, Z, abs(dist)
Ejemplo n.º 3
0
def docaLine(a,b,c,d):
   u = b-a
   v = d-c
   n = u.Cross(v)
   ac = a-c
   if n.Mag()==0:
       dist = ROOT.TMath.Sqrt(ac.Mag2()+3*(ac.Dot(u))**2/u.Mag2())
   else:
       dist = n.Dot(ac)/n.Mag()
   return dist