Esempio n. 1
0
    def from_coordinates(cls, coordinates, labels):
        """Initialize a similarity descriptor

           Arguments:
             coordinates  --  a Nx3 numpy array
             labels  --  a list with integer labels used to identify atoms of
                         the same type
        """
        from molmod.ext import molecules_distance_matrix
        distance_matrix = molecules_distance_matrix(coordinates)
        return cls(distance_matrix, labels)
Esempio n. 2
0
    def from_coordinates(cls, coordinates, labels):
        """Initialize a similarity descriptor

           Arguments:
             coordinates  --  a Nx3 numpy array
             labels  --  a list with integer labels used to identify atoms of
                         the same type
        """
        from molmod.ext import molecules_distance_matrix
        distance_matrix = molecules_distance_matrix(coordinates)
        return cls(distance_matrix, labels)
Esempio n. 3
0
    def get_random_ff(self):
        N = 6

        mask = numpy.zeros((N, N), bool)
        for i in xrange(N):
            for j in xrange(i):
                mask[i, j] = True

        from molmod.ext import molecules_distance_matrix
        while True:
            unit_cell = UnitCell(
                numpy.random.uniform(0, 3, (3, 3)),
                numpy.random.randint(0, 2, 3).astype(bool),
            )
            fractional = numpy.random.uniform(0, 1, (N, 3))
            coordinates = unit_cell.to_cartesian(fractional)
            if numpy.random.randint(0, 2):
                unit_cell = None
                dm = molecules_distance_matrix(coordinates)
            else:
                dm = molecules_distance_matrix(coordinates, unit_cell.matrix,
                                               unit_cell.reciprocal)
            if dm[mask].min() > 1.0:
                break

        edges = set([])
        while len(edges) < 2 * N:
            v1 = numpy.random.randint(N)
            while True:
                v2 = numpy.random.randint(N)
                if v2 != v1:
                    break
            edges.add(frozenset([v1, v2]))
        edges = tuple(edges)
        numbers = numpy.random.randint(6, 10, N)
        graph = MolecularGraph(edges, numbers)
        ff = ToyFF(graph, unit_cell)

        return ff, coordinates, dm, mask, unit_cell
Esempio n. 4
0
    def get_random_ff(self):
        N = 6

        mask = numpy.zeros((N,N), bool)
        for i in xrange(N):
            for j in xrange(i):
                mask[i,j] = True

        from molmod.ext import molecules_distance_matrix
        while True:
            unit_cell = UnitCell(
                numpy.random.uniform(0,3,(3,3)),
                numpy.random.randint(0,2,3).astype(bool),
            )
            fractional = numpy.random.uniform(0,1,(N,3))
            coordinates = unit_cell.to_cartesian(fractional)
            if numpy.random.randint(0,2):
                unit_cell = None
                dm = molecules_distance_matrix(coordinates)
            else:
                dm = molecules_distance_matrix(coordinates, unit_cell.matrix, unit_cell.reciprocal)
            if dm[mask].min() > 1.0:
                break


        edges = set([])
        while len(edges) < 2*N:
            v1 = numpy.random.randint(N)
            while True:
                v2 = numpy.random.randint(N)
                if v2 != v1:
                    break
            edges.add(frozenset([v1,v2]))
        edges = tuple(edges)
        numbers = numpy.random.randint(6, 10, N)
        graph = MolecularGraph(edges, numbers)
        ff = ToyFF(graph, unit_cell)

        return ff, coordinates, dm, mask, unit_cell
Esempio n. 5
0
 def test_distance_matrix_periodic(self):
     for i in range(1000):
         N = 6
         unit_cell = get_random_uc(1.0, np.random.randint(0, 4))
         fractional = np.random.uniform(0,1,(N,3))
         coordinates = unit_cell.to_cartesian(fractional)
         from molmod.ext import molecules_distance_matrix
         dm = molecules_distance_matrix(coordinates, unit_cell.matrix,
                                        unit_cell.reciprocal)
         for i in range(N):
             for j in range(i,N):
                 delta = coordinates[j]-coordinates[i]
                 delta = unit_cell.shortest_vector(delta)
                 distance = np.linalg.norm(delta)
                 self.assertAlmostEqual(dm[i,j], distance)
Esempio n. 6
0
 def test_distance_matrix_periodic(self):
     for i in xrange(1000):
         N = 6
         unit_cell = UnitCell(
             numpy.random.uniform(0,1,(3,3)),
             numpy.random.randint(0,2,3).astype(bool),
         )
         fractional = numpy.random.uniform(0,1,(N,3))
         coordinates = unit_cell.to_cartesian(fractional)
         from molmod.ext import molecules_distance_matrix
         dm = molecules_distance_matrix(coordinates, unit_cell.matrix,
                                        unit_cell.reciprocal)
         for i in xrange(N):
             for j in xrange(i,N):
                 delta = coordinates[j]-coordinates[i]
                 delta = unit_cell.shortest_vector(delta)
                 distance = numpy.linalg.norm(delta)
                 self.assertAlmostEqual(dm[i,j], distance)
Esempio n. 7
0
 def test_distance_matrix_periodic(self):
     for i in xrange(1000):
         N = 6
         unit_cell = UnitCell(
             numpy.random.uniform(0, 1, (3, 3)),
             numpy.random.randint(0, 2, 3).astype(bool),
         )
         fractional = numpy.random.uniform(0, 1, (N, 3))
         coordinates = unit_cell.to_cartesian(fractional)
         from molmod.ext import molecules_distance_matrix
         dm = molecules_distance_matrix(coordinates, unit_cell.matrix,
                                        unit_cell.reciprocal)
         for i in xrange(N):
             for j in xrange(i, N):
                 delta = coordinates[j] - coordinates[i]
                 delta = unit_cell.shortest_vector(delta)
                 distance = numpy.linalg.norm(delta)
                 self.assertAlmostEqual(dm[i, j], distance)
Esempio n. 8
0
 def distance_matrix(self):
     """the matrix with all atom pair distances"""
     from molmod.ext import molecules_distance_matrix
     return molecules_distance_matrix(self.coordinates)
Esempio n. 9
0
 def distance_matrix(self):
     """the matrix with all atom pair distances"""
     from molmod.ext import molecules_distance_matrix
     return molecules_distance_matrix(self.coordinates)
Esempio n. 10
0
 def distance_matrix(self):
     from molmod.ext import molecules_distance_matrix
     return molecules_distance_matrix(self.coordinates)
Esempio n. 11
0
 def distance_matrix(self):
     from molmod.ext import molecules_distance_matrix
     return molecules_distance_matrix(self.coordinates)