Ejemplo n.º 1
0
def getClosestBHtree(coords, mpos):
    from bhtree import bhtreelib
    tree = bhtreelib.BHtree(coords, None, 10)
    index = []
    for i in range(len(mpos)):
        pos = mpos[i]
        result = numpy.zeros(len(coords)).astype('i')
        nb = tree.closePoints((pos[0], pos[1], pos[2]), 77.0, result)
        index.append(result[:nb])
    #index = [result[:tree.closePoints((pos[0],pos[1],pos[2]), 77.0, result )] for pos in mpos]
    return index
Ejemplo n.º 2
0
def collide_bhtree(residues, matrix, mesh):
    #object tree
    from bhtree import bhtreelib
    v = helper.ApplyMatrix(mesh.getVertices(), matrix.reshape(4, 4))
    print len(v), v[0], len(coordinates)
    tree = bhtreelib.BHtree(tuple(v), None, 10)
    #lipids positon
    c = []
    at = []
    res = []
    for r in residues:
        for a in r:
            c.append(a.get_coord())
            at.append(a)
            res.append(r)
    closest = tree.closestPointsArray(numpy.array(c).tolist(), 30, 0)
    indices = numpy.nonzero(numpy.greater(closest, 0))
    indices_close = numpy.take(closest, indices)
    #    collide  = False
    return indices_close[0], at, res
Ejemplo n.º 3
0
    def displayClustersBonds(self, clusters, factor=0.7, ev=1.0):
        colors = [getattr(upy_colors, name) for name in upy_colors.cnames]

        centers = []
        radiiG = []
        radiiM = []
        radii = []
        if clusters is None:
            return

        for i, cluster in enumerate(clusters):
            centers.append(cluster.centroid.coords)
            radg = cluster.radiusOfGyration()
            radm = cluster.encapsualtingRadius()
            self.radg = radg  #added by Graham 4/4/11
            self.radm = radm  #added by Graham 4/4/11
            #rad = radg/0.7
            rad = radg + factor * (radm - radg)
            radiiG.append(radg)
            radiiM.append(radm)
            radii.append(rad)

            ptCoords = [x.coords for x in cluster.points]
        # Create a bhtree for the ptCoords using a granility of 10
        bht = bhtreelib.BHtree(centers, radiiM, 10)
        # find all pairs of atoms for which the distance is less than 1.1
        # times the sum of the radii
        print("cutoff ", ev)
        pairs = bht.closePointsPairsInTree(ev)
        bhtreelib.freeBHtree(bht)
        # pairs is list of tuple of atom indices.
        nbc = len(clusters)
        bonds = {}
        for i, pair in enumerate(pairs):
            # 1- Get the atoms corresponding of the indices of the pair
            cl1 = clusters[int(pair[0])]
            cl2 = clusters[int(pair[1])]
            head = cl1.centroid.coords
            tail = cl2.centroid.coords
            rad = cl1.radiusOfGyration() + factor * (
                cl1.encapsualtingRadius() - cl1.radiusOfGyration()
            )  #or diameter ?
            pinstance = self.helper.getObject("BC")
            if pinstance is None:
                pinstance = self.helper.Cylinder("BC",
                                                 radius=1.,
                                                 length=1.,
                                                 res=10,
                                                 pos=[0., 0., 0.],
                                                 parent=None)[0]
            cyl = self.helper.getObject("clbond" + str(i))
            if cyl is None:
                cyl = self.helper.oneCylinder("clbond" + str(i),
                                              head,
                                              tail,
                                              radius=rad,
                                              instance=pinstance,
                                              material=None,
                                              parent=self.CenterSpheres,
                                              color=colors[nbc])
            else:
                self.helper.updateOneCylinder("clbond" + str(i),
                                              head,
                                              tail,
                                              radius=rad,
                                              color=colors[nbc])
            self.clusterCenterCyl["clbond" + str(i)] = [head, tail, rad]
        if len(self.clusterCenterCyl) > len(pairs):
            for j in range(len(pairs), len(self.clusterCenterCyl)):
                #            for cy in self.clusterCenterCyl[len(pair):]:
                #                o=self.clusterCenterCyl[]
                self.helper.deleteObject("clbond" + str(j))
Ejemplo n.º 4
0
 def set_surfPtsBht(self, verts):
     from bhtree import bhtreelib
     self.surfPtsBht = None
     if verts:
         self.surfPtsBht = bhtreelib.BHtree(verts, None, 10)
Ejemplo n.º 5
0
#    node = pud.addSingleSphereRB(r,name=str(i))
#    node.setPos(pos[0],pos[1],pos[2])
#    return node
#nodes =[addSphere(rads[i],grdPos[i],i) for i in range(NPT)  ]
#node = pud.addMultiSphereRB(rads,grdPos)
#print ("time sphere ",time()-t)
#t=time()
#add the mesh
vertices, faces, fn = tetrahedron(10.0)
meshnode = pud.addMeshRB(vertices, faces)
#print ("time mesh",time()-t)
#computeCollisionTest
#t=time()
srfPts = vertices
from panda3d.core import Mat4, Vec3, Point3
bht = bhtreelib.BHtree(tuple(vertices), None, 10)
returnNullIfFail = 0
closest = bht.closestPointsArray(tuple(grdPos), diag, returnNullIfFail)
hit = []
for i in range(NPT):
    start = Point3(grdPos[i][0], grdPos[i][1], grdPos[i][2])
    end = Point3(srfPts[closest[i]][0] * diag, srfPts[closest[i]][1] * diag,
                 srfPts[closest[i]][2] * diag)
    res = pud.world.rayTestAll(start, end)
    if res.hasHits():
        print res.getNumHits()
        hit.append(res)
#meshcontacts = pud.world.contactTest(meshnode.node())
#N=meshcontacts.getNumContacts()
#for ct in meshcontacts.getContacts():
#    m=ct.getManifoldPoint ()
Ejemplo n.º 6
0
 def set_surfPtsBht(self, verts):
     from bhtree import bhtreelib
     self.surfPtsBht = None
     if verts != None and len(verts):
         self.surfPtsBht = bhtreelib.BHtree(verts, None, 10)
     self.nbSurfacePoints = len(verts)