def test_n_particles_observable(self): fname = os.path.join(self.dir, "test_observables_n_particles.h5") context = Context() box_size = [10., 10., 10.] context.kbt = 2 context.pbc = [True, True, True] context.box_size = box_size context.particle_types.add("A", .2) context.particle_types.add("B", .2) simulation = Simulation("SingleCPU", context) simulation.add_particle("A", common.Vec(-2.5, 0, 0)) simulation.add_particle("B", common.Vec(0, 0, 0)) n_time_steps = 50 callback_n_particles_a_b = [] callback_n_particles_all = [] def callback_ab(value): callback_n_particles_a_b.append(value) simulation.add_particle("A", common.Vec(-1, -1, -1)) def callback_all(hist): callback_n_particles_all.append(hist) simulation.add_particle("A", common.Vec(-1, -1, -1)) simulation.add_particle("B", common.Vec(-1, -1, -1)) handle_a_b_particles = simulation.register_observable_n_particles( 1, ["A", "B"], callback_ab) handle_all = simulation.register_observable_n_particles( 1, [], callback_all) with closing(io.File.create(fname)) as f: handle_a_b_particles.enable_write_to_file(f, u"n_a_b_particles", int(3)) handle_all.enable_write_to_file(f, u"n_particles", int(5)) simulation.run(n_time_steps, 0.02) handle_all.flush() handle_a_b_particles.flush() with h5py.File(fname, "r") as f2: n_a_b_particles = f2["readdy/observables/n_a_b_particles/data"][:] n_particles = f2["readdy/observables/n_particles/data"][:] time_series = f2["readdy/observables/n_a_b_particles/time"] np.testing.assert_equal(time_series, np.array(range(0, n_time_steps + 1))) for t in range(n_time_steps): np.testing.assert_equal(n_a_b_particles[t][0], callback_n_particles_a_b[t][0]) np.testing.assert_equal(n_a_b_particles[t][1], callback_n_particles_a_b[t][1]) np.testing.assert_equal(n_particles[t][0], callback_n_particles_all[t][0])
def test_radial_distribution_observable(self): fname = os.path.join(self.dir, "test_observables_radial_distribution.h5") context = Context() context.kbt = 2 context.pbc = [True, True, True] box_size = [10., 10., 10.] context.box_size = box_size context.particle_types.add("A", .2) context.particle_types.add("B", .2) context.potentials.add_harmonic_repulsion("A", "B", 10, 2.) simulation = Simulation("SingleCPU", context) simulation.add_particle("A", common.Vec(-2.5, 0, 0)) simulation.add_particle("B", common.Vec(0, 0, 0)) bin_borders = np.arange(0, 5, .01) density = 1. / (box_size[0] * box_size[1] * box_size[2]) n_time_steps = 50 callback_centers = [] callback_rdf = [] def rdf_callback(pair): callback_centers.append(pair[0]) callback_rdf.append(pair[1]) handle = simulation.register_observable_radial_distribution( 1, bin_borders, ["A"], ["B"], density, rdf_callback) with closing(io.File.create(fname)) as f: handle.enable_write_to_file(f, u"radial_distribution", int(3)) simulation.run(n_time_steps, 0.02) handle.flush() with h5py.File(fname, "r") as f2: bin_centers = f2[ "readdy/observables/radial_distribution/bin_centers"][:] distribution = f2[ "readdy/observables/radial_distribution/distribution"][:] for t in range(n_time_steps): np.testing.assert_equal(bin_centers, np.array(callback_centers[t])) np.testing.assert_equal(distribution[t], np.array(callback_rdf[t]))
def test_histogram_along_axis_observable(self): fname = os.path.join(self.dir, "test_observables_hist_along_axis.h5") context = Context() context.kbt = 2 context.pbc = [True, True, True] box_size = [10., 10., 10.] context.box_size = box_size context.particle_types.add("A", .2) context.particle_types.add("B", .2) context.potentials.add_harmonic_repulsion("A", "B", 10, 2.) simulation = Simulation("SingleCPU", context) simulation.add_particle("A", common.Vec(-2.5, 0, 0)) simulation.add_particle("B", common.Vec(0, 0, 0)) bin_borders = np.arange(0, 5, .01) n_time_steps = 50 callback_hist = [] def hist_callback(hist): callback_hist.append(hist) handle = simulation.register_observable_histogram_along_axis( 2, bin_borders, 0, ["A", "B"], hist_callback) with closing(io.File.create(fname)) as f: handle.enable_write_to_file(f, u"hist_along_x_axis", int(3)) simulation.run(n_time_steps, 0.02) handle.flush() with h5py.File(fname, "r") as f2: histogram = f2["readdy/observables/hist_along_x_axis/data"][:] time_series = f2["readdy/observables/hist_along_x_axis/time"] np.testing.assert_equal(time_series, np.array(range(0, n_time_steps + 1))[::2]) for t in range(n_time_steps // 2): np.testing.assert_equal(histogram[t], np.array(callback_hist[t]))