Exemplo n.º 1
0
 def _metric_dist(self):
     if self.metric == 'periodic':
         if not 'cell_lengths' in self.metric_args:
             raise ValueError('periodic metric require cell_lengths arg')
         periodic = self.metric_args['cell_lengths']
         return lambda a, b, periodic=np.array(periodic): periodic_distance(np.array(a), np.array(b), periodic)
     else:
         raise ValueError('metric %s unsupported.' % self.metric)
Exemplo n.º 2
0
 def _metric_dist(self):
     if self.metric == 'periodic':
         if not 'cell_lengths' in self.metric_args:
             raise ValueError('periodic metric require cell_lengths arg')
         periodic = self.metric_args['cell_lengths']
         return lambda a, b, periodic=np.array(periodic): periodic_distance(
             np.array(a), np.array(b), periodic)
     else:
         raise ValueError('metric %s unsupported.' % self.metric)
Exemplo n.º 3
0
def test_find():
    K = 100
    tree = CoverTree(metric='periodic',
                     metric_args={'cell_lengths': [10, 10, 10]})
    positions = np.random.uniform(0, 10, (K, 3))
    tree.insert_many(positions)
    check_invariant(tree)

    i = 0
    for p in np.random.uniform(0, 10, (K * 10, 3)):
        ct, dist = tree.find(p)
        bf = periodic_distance(p, positions, np.array([10, 10, 10])).min()
        dr = dist - bf
        if dr >= 1e-10:
            real = np.argmin(periodic_distance(p, positions, np.array([10, 10, 10])))
            print 'CoverTree', dist, ct, 'BruteForce', bf, positions[real
                                                                     ], real

        assert dr <= 1e-10
Exemplo n.º 4
0
def test_find():
    K = 100
    tree = CoverTree(metric='periodic',
                     metric_args={'cell_lengths': [10, 10, 10]})
    positions = np.random.uniform(0, 10, (K, 3))
    tree.insert_many(positions)
    check_invariant(tree)

    i = 0
    for p in np.random.uniform(0, 10, (K * 10, 3)):
        ct, dist = tree.find(p)
        bf = periodic_distance(p, positions, np.array([10, 10, 10])).min()
        dr = dist - bf
        if dr >= 1e-10:
            real = np.argmin(
                periodic_distance(p, positions, np.array([10, 10, 10])))
            print 'CoverTree', dist, ct, 'BruteForce', bf, positions[
                real], real

        assert dr <= 1e-10
Exemplo n.º 5
0
def test_random_box():
    na = Molecule([Atom("Na", [0.0, 0.0, 0.0])])
    cl = Molecule([Atom("Cl", [0.0, 0.0, 0.0])])
    water = Molecule([Atom("O", [0.0, 0.0, 0.0]), Atom("H", [0.0, 0.1, 0.0]), Atom("H", [0.1, 0.0, 0.0])])

    box = random_box([na, cl, water], total=200, proportions=[0.1, 0.1, 0.8], size=[3, 3, 3])

    from chemlab.utils.pbc import periodic_distance

    for a, b in [("O", "Na"), ("O", "Cl"), ("Na", "Cl")]:
        asys = box.sub(atom_type=a)
        bsys = box.sub(atom_type=b)

        D = periodic_distance(asys.r_array[None, :], bsys.r_array[:, None], np.array([3, 3, 3]))
        ok_(D.min() > vdw_radius(a) + vdw_radius(b))
Exemplo n.º 6
0
def test_query_ball():
    #tree = CoverTree(distance=lambda a, b: periodic_distance(np.array(a), np.array(b), np.array([10, 10, 10])))
    tree = CoverTree(metric='periodic',
                     metric_args={'cell_lengths': [10, 10, 10]})
    np.random.seed(42)
    random.seed(42)
    positions = np.random.uniform(0, 5, (5000, 3))
    np.set_printoptions(precision=2)
    for p in positions:
        # print 'inserting', p
        node = tree.insert(p)

    ref = (periodic_distance([1.0, 1.0, 1.0], positions,
                             np.array([10, 10, 10])) < 3.0).nonzero()[0]
    res, dist = tree.query_ball([1, 1, 1], 3.0)

    #tree.check_invariant()
    #print ref, res
    eq_(len(ref), len(res))
Exemplo n.º 7
0
def test_query_ball():
    #tree = CoverTree(distance=lambda a, b: periodic_distance(np.array(a), np.array(b), np.array([10, 10, 10])))
    tree = CoverTree(metric='periodic',
                     metric_args={'cell_lengths': [10, 10, 10]})
    np.random.seed(42)
    random.seed(42)
    positions = np.random.uniform(0, 5, (5000, 3))
    np.set_printoptions(precision=2)
    for p in positions:
        # print 'inserting', p
        node = tree.insert(p)

    ref = (periodic_distance([1.0, 1.0, 1.0], positions, np.array(
        [10, 10, 10])) < 3.0).nonzero()[0]
    res, dist = tree.query_ball([1, 1, 1], 3.0)

    #tree.check_invariant()
    #print ref, res
    eq_(len(ref), len(res))