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)
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
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
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)
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)
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)
def distance_matrix(self): """the matrix with all atom pair distances""" from molmod.ext import molecules_distance_matrix return molecules_distance_matrix(self.coordinates)
def distance_matrix(self): from molmod.ext import molecules_distance_matrix return molecules_distance_matrix(self.coordinates)