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 main(): config = Config.from_config() m = gemmi.read_ccp4_map(str(config.xmap_in)) print(dir(m)) # m.spacegroup = gemmi.find_spacegroup_by_name('P1') print(m.grid.spacegroup) m.grid.spacegroup = gemmi.find_spacegroup_by_name('P1') print(m.grid.spacegroup) m.setup() print(m.grid.spacegroup) m.grid.spacegroup = gemmi.find_spacegroup_by_name('P1') print(m.grid.spacegroup) sf = gemmi.transform_map_to_f_phi(m.grid, half_l=True) print(sf.spacegroup) # data = sf print(dir(sf)) data = sf.prepare_asu_data(dmin=config.resolution, with_000=True) mtz = gemmi.Mtz(with_base=True) # mtz = gemmi.Mtz() print(dir(mtz)) mtz.spacegroup = sf.spacegroup # mtz.spacegroup = gemmi.find_spacegroup_by_name('P1') # mtz.set_cell_for_all(sf.unit_cell) mtz.cell = sf.unit_cell mtz.add_dataset('unknown') mtz.add_column('FWT', 'F') mtz.add_column('PHWT', 'P') mtz.set_data(data) mtz.write_to_file(str(config.mtz_out))
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)
#!/usr/bin/env python # Convert CCP4 map to map coefficients in MTZ import sys import gemmi RESOLUTION_LIMIT = 1.5 # set 0 for no limit if len(sys.argv) != 3: sys.exit('Usage: map2mtz.py input.ccp4 output.mtz') m = gemmi.read_ccp4_map(sys.argv[1]) m.setup() sf = gemmi.transform_map_to_f_phi(m.grid, half_l=True) data = sf.prepare_asu_data(dmin=RESOLUTION_LIMIT) mtz = gemmi.Mtz(with_base=True) mtz.spacegroup = sf.spacegroup mtz.set_cell_for_all(sf.unit_cell) mtz.add_dataset('unknown') mtz.add_column('FWT', 'F') mtz.add_column('PHWT', 'P') mtz.set_data(data) mtz.write_to_file(sys.argv[2])