Exemplo n.º 1
0
def map_coefficients_from_fmodel(
      params,
      fmodel = None,
      map_calculation_server = None,
      post_processing_callback=None,
      pdb_hierarchy=None):
  assert [fmodel, map_calculation_server].count(None) == 1
  from mmtbx import map_tools
  import mmtbx
  from cctbx import miller
  mnm = mmtbx.map_names(map_name_string = params.map_type)
  if(mnm.k==0 and abs(mnm.n)==1):
    # FIXME Fcalc maps require that fmodel is not None!
    if (fmodel is None) :
      fmodel = map_calculation_server.fmodel
    return compute_f_calc(fmodel, params)
  if(fmodel is not None and
     fmodel.is_twin_fmodel_manager() and
     mnm.phaser_sad_llg):
    return None
  if(fmodel is not None):
    e_map_obj = fmodel.electron_density_map()
    xrs = fmodel.xray_structure
  else:
    e_map_obj = map_calculation_server
    xrs = map_calculation_server.fmodel.xray_structure
  coeffs = None
  coeffs = e_map_obj.map_coefficients(
    map_type           = params.map_type,
    acentrics_scale    = params.acentrics_scale,
    centrics_pre_scale = params.centrics_pre_scale,
    fill_missing       = params.fill_missing_f_obs,
    isotropize         = params.isotropize,
    exclude_free_r_reflections=params.exclude_free_r_reflections,
    ncs_average=getattr(params, "ncs_average", False),
    post_processing_callback=post_processing_callback,
    pdb_hierarchy=pdb_hierarchy,
    merge_anomalous=True)
  if (coeffs is None) : return None
  if(params.sharpening):
    from mmtbx import map_tools
    coeffs, b_sharp = map_tools.sharp_map(
      sites_frac = xrs.sites_frac(),
      map_coeffs = coeffs,
      b_sharp    = params.sharpening_b_factor)
  # XXX need to figure out why this happens
  if (coeffs is None) :
    raise RuntimeError(("Map coefficient generation failed (map_type=%s, "
      "sharpening=%s, isotropize=%s, anomalous=%s.") %
        (params.map_type, params.sharpening, params.isotropize,
         fmodel.f_obs().anomalous_flag()))
  if(coeffs.anomalous_flag()) :
    coeffs = coeffs.average_bijvoet_mates()
  return coeffs
def run (args, out=sys.stdout) :
  master_params = master_phil()
  usage_string = """\
mmtbx.compute_map_coefficients model.pdb data.mtz map_type=MAP_TYPE [options]

Utility to compute a single set of map coefficients with minimal input.
"""
  import mmtbx.command_line
  from mmtbx import map_tools
  import iotbx.mtz
  cmdline = mmtbx.command_line.load_model_and_data(
    args=args,
    master_phil=master_params,
    process_pdb_file=False,
    prefer_anomalous=True,
    usage_string=usage_string,
    set_wavelength_from_model_header=True,
    set_inelastic_form_factors="sasaki",
    out=out)
  fmodel = cmdline.fmodel
  xray_structure = fmodel.xray_structure
  params = cmdline.params
  map_coeffs = fmodel.map_coefficients(
    map_type=params.map_type,
    exclude_free_r_reflections=params.exclude_free_r_reflections,
    fill_missing=params.fill_missing_f_obs)
  if (params.b_sharp is not None) :
    if (params.b_sharp is Auto) :
      params.b_sharp = - map_coeffs.d_min() * 10
    map_coeffs = map_tools.sharp_map(
      sites_frac=None,
      map_coeffs=map_coeffs,
      b_sharp=b_sharp)
  dec = iotbx.mtz.label_decorator(phases_prefix="PH")
  mtz_dataset = map_coeffs.as_mtz_dataset(
    column_root_label=map_type_labels[params.map_type],
    label_decorator=dec)
  if (params.output_file is Auto) :
    pdb_file = os.path.basename(params.input.pdb.file_name[0])
    params.output_file = os.path.splitext(pdb_file)[0] + "_%s.mtz" % \
      params.map_type
  mtz_dataset.mtz_object().write(params.output_file)
  print >> out, "Wrote %s" % params.output_file
def run(args, out=sys.stdout):
  master_params = master_phil()
  usage_string = """\
mmtbx.compute_map_coefficients model.pdb data.mtz map_type=MAP_TYPE [options]

Utility to compute a single set of map coefficients with minimal input.
"""
  import mmtbx.command_line
  from mmtbx import map_tools
  import iotbx.mtz
  cmdline = mmtbx.command_line.load_model_and_data(
    args=args,
    master_phil=master_params,
    process_pdb_file=False,
    prefer_anomalous=True,
    usage_string=usage_string,
    set_wavelength_from_model_header=True,
    set_inelastic_form_factors="sasaki",
    out=out)
  fmodel = cmdline.fmodel
  xray_structure = fmodel.xray_structure
  params = cmdline.params
  map_coeffs = fmodel.map_coefficients(
    map_type=params.map_type,
    exclude_free_r_reflections=params.exclude_free_r_reflections,
    fill_missing=params.fill_missing_f_obs)
  if (params.b_sharp is not None):
    if (params.b_sharp is Auto):
      params.b_sharp = - map_coeffs.d_min() * 10
    map_coeffs = map_tools.sharp_map(
      sites_frac=None,
      map_coeffs=map_coeffs,
      b_sharp=b_sharp)
  dec = iotbx.mtz.label_decorator(phases_prefix="PH")
  mtz_dataset = map_coeffs.as_mtz_dataset(
    column_root_label=map_type_labels[params.map_type],
    label_decorator=dec)
  if (params.output_file is Auto):
    pdb_file = os.path.basename(params.input.pdb.file_name[0])
    params.output_file = os.path.splitext(pdb_file)[0] + "_%s.mtz" % \
      params.map_type
  mtz_dataset.mtz_object().write(params.output_file)
  print("Wrote %s" % params.output_file, file=out)