示例#1
0
    def test_incongruent_ensemble_count(self):
        ens = ensemble.EnsembleFilter(congruent=False)
        ppot = {
            (0, 0): potential.LennardJonesType(epsilon=1),
            (1, 1): potential.LennardJonesType(epsilon=0.5),
            (0, 1): potential.LennardJonesType(epsilon=0.25)}
        distance = 3.0

        # Allow all of them through since only 64 total
        count = 100 # > 12+52
        generator = ens.filter(['p1', 'p2'], (1,2), 3, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=None)
        self.assertEqual(len([b for a,b in enumerate(generator)]), 12+52)

        # Allow only best 10 through
        count = 10
        generator = ens.filter(['p1', 'p2'], (1,2), 3, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=None)
        self.assertEqual(len([b for a,b in enumerate(generator)]), count)
示例#2
0
    def test_congruent_ensemble_count(self):
        ens = ensemble.EnsembleFilter(congruent=True)
        ppot = {
            (0, 0): potential.LennardJonesType(epsilon=1),
            (1, 1): potential.LennardJonesType(epsilon=0.5),
            (0, 1): potential.LennardJonesType(epsilon=0.25)}
        distance = 3.0

        # Allow all of them through
        count = 2000 # > 1596 which there are for p1 with Ng = 4
        generator = ens.filter(['p1'], (1,2), 4, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=None)
        self.assertEqual(len([b for a,b in enumerate(generator)]), 1596)

        # Allow some of them through
        count = 100 # > 1596 which there are for p1 with Ng = 4
        generator = ens.filter(['p1'], (1,2), 4, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=None)
        self.assertEqual(len([b for a,b in enumerate(generator)]), count)
示例#3
0
    def test_energyhistogramcallback(self):
        ens = ensemble.EnsembleFilter(congruent=False)
        ppot = {
            (0, 0): potential.LennardJonesType(epsilon=1),
            (1, 1): potential.LennardJonesType(epsilon=0.5),
            (0, 1): potential.LennardJonesType(epsilon=0.25)}
        distance = 3.0

        # Sort all the energies if we allow all to go through
        count = 10

        cback = ensemble.EnergyHistogramCallback(count=count)

        generator = ens.filter(['p1', 'p2'], (1,2), 3, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=cback)

        dummy = [b for a,b in enumerate(generator)]
        self.assertEqual(len(cback.below_threshold), count)
        self.assertEqual(len(cback.above_threshold), 64-count)
        self.assertTrue(all(cback.below_threshold[i] <= cback.below_threshold[i+1] for i in range(len(cback.below_threshold)-1)))
示例#4
0
    def test_incongruent_ensemble_values_fraction(self):
        ens = ensemble.EnsembleFilter(congruent=False)
        ppot = {
            (0, 0): potential.LennardJonesType(epsilon=1),
            (1, 1): potential.LennardJonesType(epsilon=0.5),
            (0, 1): potential.LennardJonesType(epsilon=0.25)}
        distance = 3.0

        # Sort top fraction of energies
        count = 10

        energies = [None, None]
        def filter_callback(filter_energies):
            energies[0] = filter_energies[:count]
            energies[1] = filter_energies[count:]

        generator = ens.filter(['p1', 'p2'], (1,2), 3, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=filter_callback)

        dummy = [b for a,b in enumerate(generator)]
        self.assertEqual(len(energies[0]), count)
        self.assertEqual(len(energies[1]), 64-count)
        self.assertTrue(all(energies[0][i] <= energies[0][i+1] for i in range(len(energies[0])-1)))
示例#5
0
    def test_congruent_ensemble_values_all(self):
        ens = ensemble.EnsembleFilter(congruent=True)
        ppot = {
            (0, 0): potential.LennardJonesType(epsilon=1),
            (1, 1): potential.LennardJonesType(epsilon=0.5),
            (0, 1): potential.LennardJonesType(epsilon=0.25)}
        distance = 3.0

        # Sort all the energies if we allow all to go through
        count = 2000

        energies = [None, None]
        def filter_callback(filter_energies):
            energies[0] = filter_energies[:count]
            energies[1] = filter_energies[count:]

        generator = ens.filter(['p1'], (1,2), 4, ppot, distance, count,
            angles=(numpy.pi/2.0,), length_ratios=(1.0,), cores=_CORES, radii=(0.5,0.5), callback=filter_callback)

        dummy = [b for a,b in enumerate(generator)]
        self.assertEqual(len(energies[0]), 1596)
        self.assertEqual(len(energies[1]), 0)
        self.assertTrue(all(energies[0][i] <= energies[0][i+1] for i in range(len(energies[0])-1)))