def simple(fmodel, pdb_hierarchy, params=None, log=None, show_results=False):
    if (params is None): params = master_params().extract()
    if (log is None): log = sys.stdout

    crystal_gridding = None
    unit_cell = None
    d_min = 1.0
    map_1 = None
    map_2 = None

    # compute map_1 and map_2 if given F_obs (fmodel exists)
    if ((params.map_file_name is None)
            and (params.map_coefficients_file_name is None)
            and (fmodel is not None)):
        e_map_obj = fmodel.electron_density_map()
        coeffs_2 = e_map_obj.map_coefficients(
            map_type=params.map_2.type,
            fill_missing=params.map_2.fill_missing_reflections,
            isotropize=params.map_2.isotropize)
        fft_map_2 = coeffs_2.fft_map(
            resolution_factor=params.resolution_factor)
        crystal_gridding = fft_map_2
        fft_map_2.apply_sigma_scaling()
        map_2 = fft_map_2.real_map_unpadded()

        coeffs_1 = e_map_obj.map_coefficients(
            map_type=params.map_1.type,
            fill_missing=params.map_1.fill_missing_reflections,
            isotropize=params.map_1.isotropize)
        fft_map_1 = miller.fft_map(crystal_gridding=crystal_gridding,
                                   fourier_coefficients=coeffs_1)
        fft_map_1.apply_sigma_scaling()
        map_1 = fft_map_1.real_map_unpadded()

        unit_cell = fmodel.xray_structure.unit_cell()
        d_min = fmodel.f_obs().d_min()

    # or read map coefficents
    elif (params.map_coefficients_file_name is not None):
        map_handle = any_file(params.map_coefficients_file_name)
        crystal_symmetry = get_crystal_symmetry(map_handle)
        unit_cell = crystal_symmetry.unit_cell()
        d_min = get_d_min(map_handle)
        crystal_gridding = maptbx.crystal_gridding(
            crystal_symmetry.unit_cell(),
            d_min=d_min,
            resolution_factor=params.resolution_factor,
            space_group_info=crystal_symmetry.space_group_info())
        coeffs_2 = map_handle.file_server.get_miller_array(
            params.map_coefficients_label)
        fft_map_2 = miller.fft_map(crystal_gridding=crystal_gridding,
                                   fourier_coefficients=coeffs_2)
        fft_map_2.apply_sigma_scaling()
        map_2 = fft_map_2.real_map_unpadded()

    # or read CCP4 map
    else:
        map_handle = any_file(params.map_file_name)
        unit_cell = map_handle.file_object.unit_cell()
        sg_info = space_group_info(map_handle.file_object.space_group_number)
        n_real = map_handle.file_object.unit_cell_grid
        crystal_gridding = maptbx.crystal_gridding(
            unit_cell, space_group_info=sg_info, pre_determined_n_real=n_real)
        map_2 = map_handle.file_object.map_data()

        # check for origin shift
        # modified from phenix.command_line.real_space_refine
        # plan to centralize functionality in another location
        # -------------------------------------------------------------------------
        shift_manager = mmtbx.utils.shift_origin(
            map_data=map_2,
            pdb_hierarchy=pdb_hierarchy,
            crystal_symmetry=map_handle.crystal_symmetry())
        if (shift_manager.shift_cart is not None):
            print("Map origin is not at (0,0,0): shifting the map and model.",
                  file=log)
        pdb_hierarchy = shift_manager.pdb_hierarchy
        map_2 = shift_manager.map_data
        # -------------------------------------------------------------------------

    # compute map_1 (Fc) if given a map (fmodel does not exist)
    if (map_1 is None):
        xray_structure = pdb_hierarchy.extract_xray_structure(
            crystal_symmetry=crystal_gridding.crystal_symmetry())
        fft_map_1 = compute_map_from_model(d_min,
                                           None,
                                           xray_structure,
                                           crystal_gridding=crystal_gridding)
        fft_map_1.apply_sigma_scaling()
        map_1 = fft_map_1.real_map_unpadded()

    # compute cc
    assert ((map_1 is not None) and (map_2 is not None))
    broadcast(m="Map correlation and map values", log=log)
    overall_cc = flex.linear_correlation(x=map_1.as_1d(),
                                         y=map_2.as_1d()).coefficient()
    print("  Overall map cc(%s,%s): %6.4f" %
          (params.map_1.type, params.map_2.type, overall_cc),
          file=log)
    detail, atom_radius = params.detail, params.atom_radius
    detail, atom_radius = set_detail_level_and_radius(detail=detail,
                                                      atom_radius=atom_radius,
                                                      d_min=d_min)
    use_hydrogens = params.use_hydrogens
    if (use_hydrogens is None):
        if (params.scattering_table == "neutron" or d_min <= 1.2):
            use_hydrogens = True
        else:
            use_hydrogens = False
    hydrogen_atom_radius = params.hydrogen_atom_radius
    if (hydrogen_atom_radius is None):
        if (params.scattering_table == "neutron"):
            hydrogen_atom_radius = atom_radius
        else:
            hydrogen_atom_radius = 1
    results = compute(pdb_hierarchy=pdb_hierarchy,
                      unit_cell=unit_cell,
                      fft_n_real=map_1.focus(),
                      fft_m_real=map_1.all(),
                      map_1=map_1,
                      map_2=map_2,
                      detail=detail,
                      atom_radius=atom_radius,
                      use_hydrogens=use_hydrogens,
                      hydrogen_atom_radius=hydrogen_atom_radius)
    if (show_results):
        show(log=log, results=results, params=params, detail=detail)
    return overall_cc, results
def simple(fmodel, pdb_hierarchy, params=None, log=None, show_results=False):
  if(params is None): params = master_params().extract()
  if(log is None): log = sys.stdout

  crystal_gridding = None
  unit_cell = None
  d_min = 1.0
  map_1 = None
  map_2 = None

  # compute map_1 and map_2 if given F_obs (fmodel exists)
  if ( (params.map_file_name is None) and
       (params.map_coefficients_file_name is None) and
       (fmodel is not None) ):
    e_map_obj = fmodel.electron_density_map()
    coeffs_2 = e_map_obj.map_coefficients(
      map_type     = params.map_2.type,
      fill_missing = params.map_2.fill_missing_reflections,
      isotropize   = params.map_2.isotropize)
    fft_map_2 = coeffs_2.fft_map(resolution_factor = params.resolution_factor)
    crystal_gridding = fft_map_2
    fft_map_2.apply_sigma_scaling()
    map_2 = fft_map_2.real_map_unpadded()

    coeffs_1 = e_map_obj.map_coefficients(
      map_type     = params.map_1.type,
      fill_missing = params.map_1.fill_missing_reflections,
      isotropize   = params.map_1.isotropize)
    fft_map_1 = miller.fft_map(crystal_gridding = crystal_gridding,
                               fourier_coefficients = coeffs_1)
    fft_map_1.apply_sigma_scaling()
    map_1 = fft_map_1.real_map_unpadded()

    unit_cell = fmodel.xray_structure.unit_cell()
    d_min = fmodel.f_obs().d_min()

  # or read map coefficents
  elif (params.map_coefficients_file_name is not None):
    map_handle = any_file(params.map_coefficients_file_name)
    crystal_symmetry = get_crystal_symmetry(map_handle)
    unit_cell = crystal_symmetry.unit_cell()
    d_min = get_d_min(map_handle)
    crystal_gridding = maptbx.crystal_gridding(
      crystal_symmetry.unit_cell(), d_min=d_min,
      resolution_factor=params.resolution_factor,
      space_group_info=crystal_symmetry.space_group_info())
    coeffs_2 = map_handle.file_server.get_miller_array(
      params.map_coefficients_label)
    fft_map_2 = miller.fft_map(crystal_gridding=crystal_gridding,
                               fourier_coefficients=coeffs_2)
    fft_map_2.apply_sigma_scaling()
    map_2 = fft_map_2.real_map_unpadded()

  # or read CCP4 map
  else:
    map_handle = any_file(params.map_file_name)
    unit_cell = map_handle.file_object.unit_cell()
    sg_info = space_group_info(map_handle.file_object.space_group_number)
    n_real = map_handle.file_object.unit_cell_grid
    crystal_gridding = maptbx.crystal_gridding(
      unit_cell, space_group_info=sg_info, pre_determined_n_real=n_real)
    map_2 = map_handle.file_object.map_data()

  # compute map_1 (Fc) if given a map (fmodel does not exist)
  if (map_1 is None):
    xray_structure = pdb_hierarchy.extract_xray_structure(
      crystal_symmetry=crystal_gridding.crystal_symmetry())
    fft_map_1 = compute_map_from_model(d_min, None, xray_structure,
                                       crystal_gridding=crystal_gridding)
    fft_map_1.apply_sigma_scaling()
    map_1 = fft_map_1.real_map_unpadded()

  # compute cc
  assert ( (map_1 is not None) and (map_2 is not None) )
  broadcast(m="Map correlation and map values", log=log)
  overall_cc = flex.linear_correlation(x = map_1.as_1d(),
    y = map_2.as_1d()).coefficient()
  print >> log, "  Overall map cc(%s,%s): %6.4f"%(params.map_1.type,
    params.map_2.type, overall_cc)
  detail, atom_radius = params.detail, params.atom_radius
  detail, atom_radius = set_detail_level_and_radius(
    detail=detail, atom_radius=atom_radius, d_min=d_min)
  use_hydrogens = params.use_hydrogens
  if(use_hydrogens is None):
    if(params.scattering_table == "neutron" or d_min <= 1.2):
      use_hydrogens = True
    else:
      use_hydrogens = False
  hydrogen_atom_radius = params.hydrogen_atom_radius
  if(hydrogen_atom_radius is None):
    if(params.scattering_table == "neutron"):
      hydrogen_atom_radius = atom_radius
    else:
      hydrogen_atom_radius = 1
  results = compute(
    pdb_hierarchy        = pdb_hierarchy,
    unit_cell            = unit_cell,
    fft_n_real           = map_1.focus(),
    fft_m_real           = map_1.all(),
    map_1                = map_1,
    map_2                = map_2,
    detail               = detail,
    atom_radius          = atom_radius,
    use_hydrogens        = use_hydrogens,
    hydrogen_atom_radius = hydrogen_atom_radius)
  if(show_results):
    show(log=log, results=results, params=params, detail=detail)
  return results