def fft_test(self, data, f, phi, size, order=gemmi.AxisOrder.XYZ): if numpy is None: return self.assertTrue(data.data_fits_into(size)) grid_full = data.get_f_phi_on_grid(f, phi, size, half_l=False, order=order) self.assertEqual(grid_full.axis_order, order) array_full = numpy.array(grid_full, copy=False) map1 = gemmi.transform_f_phi_grid_to_map(grid_full) self.assertEqual(map1.axis_order, order) map2 = numpy.fft.ifftn(array_full.conj()) map2 = numpy.real(map2) * (map2.size / grid_full.unit_cell.volume) compare_maps(self, map1, map2, atol=6e-7) map3 = data.transform_f_phi_to_map(f, phi, size, order=order) compare_maps(self, map1, map3, atol=6e-7) grid2 = gemmi.transform_map_to_f_phi(map1, half_l=False) self.assertFalse(grid2.half_l) self.assertEqual(grid2.axis_order, order) compare_maps(self, grid2, array_full, atol=1e-4) if grid2.axis_order != gemmi.AxisOrder.ZYX: compare_asu_data(self, grid2.prepare_asu_data(), data, f, phi) grid_half = data.get_f_phi_on_grid(f, phi, size, half_l=True, order=order) if order == gemmi.AxisOrder.ZYX: # half_l+ZYX not supported yet return grid3 = gemmi.transform_map_to_f_phi(map1, half_l=True) self.assertTrue(grid3.half_l) self.assertEqual(grid3.axis_order, order) compare_maps(self, grid3, grid_half, atol=1e-4) compare_asu_data(self, grid3.prepare_asu_data(), data, f, phi)
def asu_data_test(self, grid): asu = grid.prepare_asu_data() d = asu.make_d_array() asu2 = gemmi.ComplexAsuData(asu.unit_cell, asu.spacegroup, asu.miller_array[d > 2.5], asu.value_array[d > 2.5]) ngrid = asu2.transform_f_phi_to_map(sample_rate=1.5) hkl_grid = asu2.get_f_phi_on_grid([ngrid.nu, ngrid.nv, ngrid.nw]) alt_ngrid = gemmi.transform_f_phi_grid_to_map(hkl_grid) compare_maps(self, ngrid, alt_ngrid, atol=1e-6)
def fft_test(self, data, f, phi, size): if numpy is None: return grid_full = data.get_f_phi_on_grid(f, phi, size, half_l=False) array_full = numpy.array(grid_full, copy=False) map1 = gemmi.transform_f_phi_grid_to_map(grid_full) map2 = numpy.fft.ifftn(array_full.conj()) map2 = numpy.real(map2) * (map2.size / grid_full.unit_cell.volume) compare_maps(self, map1, map2, atol=6e-7) map3 = data.transform_f_phi_to_map(f, phi, size) compare_maps(self, map1, map3, atol=6e-7) grid2 = gemmi.transform_map_to_f_phi(map1, half_l=False) compare_maps(self, grid2, array_full, atol=1e-4) grid_half = data.get_f_phi_on_grid(f, phi, size, half_l=True) grid3 = gemmi.transform_map_to_f_phi(map1, half_l=True) compare_maps(self, grid3, grid_half, atol=1e-4)