import iotbx.pdb
from cctbx import maptbx
import iotbx.mrcfile
from scitbx.array_family import flex
from cctbx import miller
  
def run():
  pdb_inp = iotbx.pdb.input(file_name = "1yjp.pdb")
  ph = pdb_inp.construct_hierarchy()
  xrs = ph.extract_xray_structure(crystal_symmetry = pdb_inp.crystal_symmetry())
  f_calc = xrs.structure_factors(d_min=2.5).f_calc()
  if(0):
    fft_map = f_calc.fft_map(resolution_factor=1./4)
    fft_map.apply_sigma_scaling()
  else:
    crystal_gridding = maptbx.crystal_gridding(
      unit_cell        = f_calc.unit_cell(),
      space_group_info = f_calc.crystal_symmetry().space_group_info(),
      step             = 0.5,
      symmetry_flags   = maptbx.use_space_group_symmetry)
    fft_map = miller.fft_map(
      crystal_gridding     = crystal_gridding,
      fourier_coefficients = f_calc)
  map_data = fft_map.real_map_unpadded()
  iotbx.mrcfile.write_ccp4_map(
    file_name   = "some.map",
    unit_cell   = xrs.unit_cell(),
    space_group = xrs.space_group(),
    map_data    = map_data,
    labels      = flex.std_string([""]))

if (__name__ == "__main__"):
  run()
