def test_gridcenter(u1): gridcenter = np.array([10, 10, 10]) xdim = 190 ydim = 200 zdim = 210 ag = u1.select_atoms('name OD1', updating=True) serial = serial_density.DensityAnalysis(ag, gridcenter=gridcenter, xdim=xdim, ydim=ydim, zdim=zdim).run() parallel = DensityAnalysis(u1.atoms, atomselection='name OD1', updating=True, gridcenter=gridcenter, xdim=xdim, ydim=ydim, zdim=zdim) core_number = 4 parallel.run(n_blocks=core_number, n_jobs=core_number) assert_almost_equal(serial.density.grid, parallel.density.grid) assert_almost_equal(parallel._gridcenter, gridcenter) assert len(parallel.density.edges[0]) == xdim + 1 assert len(parallel.density.edges[1]) == ydim + 1 assert len(parallel.density.edges[2]) == zdim + 1
def test_userdefn_boxshape(self, universe): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=1.0, xdim=8.0, ydim=12.0, zdim=17.0, gridcenter=self.gridcenters['static_defined']).run() assert D.density.grid.shape == (8, 12, 17)
def test_ValueError_userdefn_xdim_type(self, universe): # Test xdim != int or float with pytest.raises(ValueError, match="xdim, ydim, and zdim must be numbers"): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=self.delta, xdim="MDAnalysis", ydim=10.0, zdim=10.0, gridcenter=self.gridcenters['static_defined']).run(step=5)
def test_ValueError_userdefn_gridcenter_type(self, universe): # Test gridcenter includes non-numeric strings with pytest.raises(ValueError, match="Non-number values assigned to gridcenter"): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=self.delta, xdim=10.0, ydim=10.0, zdim=10.0, gridcenter=self.gridcenters['error2']).run(step=5)
def test_ValueError_userdefn_gridcenter_shape(self, universe): # Test len(gridcenter) != 3 with pytest.raises(ValueError, match="gridcenter must be a 3D coordinate"): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=self.delta, xdim=10.0, ydim=10.0, zdim=10.0, gridcenter=self.gridcenters['error1']).run(step=5)
def test_warn_userdefn_smallgrid(self, universe): regex = ("Atom selection does not fit grid --- " "you may want to define a larger box") with pytest.warns(UserWarning, match=regex): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=self.delta, xdim=1.0, ydim=2.0, zdim=2.0, padding=0.0, gridcenter=self.gridcenters['static_defined']).run(step=5)
def test_warn_userdefn_padding(self, universe): regex = ("Box padding \(currently set at 1\.0\) is not used " "in user defined grids\.") with pytest.warns(UserWarning, match=regex): D = density.DensityAnalysis( universe.select_atoms(self.selections['static']), delta=self.delta, xdim=100.0, ydim=100.0, zdim=100.0, padding=1.0, gridcenter=self.gridcenters['static_defined']).run(step=5)
def test_density_values(u1, n_blocks, stop, step): parallel = DensityAnalysis(u1.atoms, atomselection='name OD1', updating=True) parallel.run(n_blocks=n_blocks, n_jobs=n_blocks, start=0, stop=stop, step=step) ag = u1.select_atoms('name OD1', updating=True) serial = serial_density.DensityAnalysis(ag).run(start=0, stop=stop, step=step) assert np.sum(serial.density.grid) == np.sum(parallel.density.grid) assert_almost_equal(serial.density.grid, parallel.density.grid, decimal=16)
def check_DensityAnalysis(self, ag, ref_meandensity, tmpdir, runargs=None, **kwargs): runargs = runargs if runargs else {} with tmpdir.as_cwd(): D = density.DensityAnalysis(ag, delta=self.delta, **kwargs).run(**runargs) assert_almost_equal(D.density.grid.mean(), ref_meandensity, err_msg="mean density does not match") D.density.export(self.outfile) D2 = density.Density(self.outfile) assert_almost_equal( D.density.grid, D2.grid, decimal=self.precision, err_msg="DX export failed: different grid sizes")