def exercise_automation_wrappers () :
  from iotbx.reflection_file_utils import process_raw_data, \
    change_space_group, load_f_obs_and_r_free
  from cctbx import sgtbx
  from libtbx.test_utils import approx_equal
  mtz_file = "tmp_iotbx_reflection_file_utils.mtz"
  crystal_symmetry = crystal.symmetry(
    unit_cell=(10,11,12,90,95,90),
    space_group_symbol="P 2")
  miller_set = miller.build_set(
    crystal_symmetry=crystal_symmetry,
    anomalous_flag=True,
    d_min=1.5)
  n_obs = miller_set.indices().size()
  i_obs = miller_set.array(
    data=flex.random_double(size=n_obs)).set_observation_type_xray_intensity()
  i_obs = i_obs.customized_copy(sigmas=flex.sqrt(i_obs.data()))
  r_free_flags = miller_set.generate_r_free_flags()
  r_free_flags_partial = r_free_flags.select(flex.random_bool(n_obs, 0.9))
  out = StringIO()
  processed = process_raw_data(
    obs=i_obs,
    r_free_flags=None,
    test_flag_value=None,
    log=out)
  assert ("""WARNING: R-free flags not supplied.""" in out.getvalue())
  assert (processed.data_labels() == "F(+),SIGF(+),F(-),SIGF(-)")
  assert (processed.phase_labels() is None)
  assert (processed.flags_are_new())
  out2 = StringIO()
  processed2 = process_raw_data(
    obs=i_obs,
    r_free_flags=r_free_flags_partial,
    test_flag_value=True,
    log=out2)
  assert ("""WARNING: R-free flags are incomplete""" in out2.getvalue())
  assert (not processed2.flags_are_new())
  assert (processed.n_obs() == processed2.n_obs())
  processed.write_mtz_file(mtz_file, title="tst_iotbx", wavelength=0.9792)
  f_obs, r_free = load_f_obs_and_r_free(mtz_file)
  change_space_group(mtz_file, sgtbx.space_group_info("P21"))
  f_obs_new, r_free_new = load_f_obs_and_r_free(mtz_file)
  assert (f_obs_new.size() == f_obs.size() - 4)
  f_obs_new, r_free_new = load_f_obs_and_r_free(mtz_file,
    anomalous_flag=True)
  assert (str(f_obs_new.space_group_info()) == "P 1 21 1")
  assert (approx_equal(f_obs_new.info().wavelength, 0.9792))
def exercise_automation_wrappers():
  from iotbx.reflection_file_utils import process_raw_data, \
    change_space_group, load_f_obs_and_r_free
  from cctbx import sgtbx
  from libtbx.test_utils import approx_equal
  mtz_file = "tmp_iotbx_reflection_file_utils.mtz"
  crystal_symmetry = crystal.symmetry(
    unit_cell=(10,11,12,90,95,90),
    space_group_symbol="P 2")
  miller_set = miller.build_set(
    crystal_symmetry=crystal_symmetry,
    anomalous_flag=True,
    d_min=1.5)
  n_obs = miller_set.indices().size()
  i_obs = miller_set.array(
    data=flex.random_double(size=n_obs)).set_observation_type_xray_intensity()
  i_obs = i_obs.customized_copy(sigmas=flex.sqrt(i_obs.data()))
  r_free_flags = miller_set.generate_r_free_flags()
  r_free_flags_partial = r_free_flags.select(flex.random_bool(n_obs, 0.9))
  out = StringIO()
  processed = process_raw_data(
    obs=i_obs,
    r_free_flags=None,
    test_flag_value=None,
    log=out)
  assert ("""WARNING: R-free flags not supplied.""" in out.getvalue())
  assert (processed.data_labels() == "F(+),SIGF(+),F(-),SIGF(-)")
  assert (processed.phase_labels() is None)
  assert (processed.flags_are_new())
  out2 = StringIO()
  processed2 = process_raw_data(
    obs=i_obs,
    r_free_flags=r_free_flags_partial,
    test_flag_value=True,
    log=out2)
  assert ("""WARNING: R-free flags are incomplete""" in out2.getvalue())
  assert (not processed2.flags_are_new())
  assert (processed.n_obs() == processed2.n_obs())
  processed.write_mtz_file(mtz_file, title="tst_iotbx", wavelength=0.9792)
  f_obs, r_free = load_f_obs_and_r_free(mtz_file)
  change_space_group(mtz_file, sgtbx.space_group_info("P21"))
  f_obs_new, r_free_new = load_f_obs_and_r_free(mtz_file)
  assert (f_obs_new.size() == f_obs.size() - 4)
  f_obs_new, r_free_new = load_f_obs_and_r_free(mtz_file,
    anomalous_flag=True)
  assert (str(f_obs_new.space_group_info()) == "P 1 21 1")
  assert (approx_equal(f_obs_new.info().wavelength, 0.9792))
Ejemplo n.º 3
0
def find_data_arrays(mtz_file,
                     log=None,
                     merge_anomalous=False,
                     preferred_labels=None,
                     crystal_symmetry=None):
    """
  Guess an appropriate data array to use for refinement, plus optional
  Hendrickson-Lattman coefficients and R-free flags if present.
  """
    from iotbx import reflection_file_utils
    from iotbx.file_reader import any_file
    if (log is None): log = sys.stdout
    phases = data = flags = flag_value = None
    hkl_in = any_file(mtz_file, force_type="hkl")
    hkl_server = hkl_in.file_server
    # always use anomalous data if available!  also, prefer amplitudes over
    # intensities if possible, as they may already be on an absolute scale
    data_arrays = hkl_server.get_xray_data(file_name=None,
                                           labels=None,
                                           ignore_all_zeros=False,
                                           parameter_scope="",
                                           return_all_valid_arrays=True,
                                           minimum_score=4,
                                           prefer_amplitudes=True,
                                           prefer_anomalous=True)
    if (len(data_arrays) == 0):
        raise Sorry("No data arrays found in %s." % mtz_file)
    data = data_arrays[0]
    if (preferred_labels is not None):
        for array in data_arrays:
            array_labels = array.info().label_string()
            if (array_label == preferred_labels):
                data = array
                break
        else:
            raise Sorry("Can't find label string '%s'!" % preferred_labels)
    else:
        print("Defaulting to using %s" % data.info().label_string(), file=log)
    hl_arrays = hkl_server.get_experimental_phases(
        file_name=None,
        labels=None,
        ignore_all_zeros=True,
        parameter_scope="",
        return_all_valid_arrays=True,
        minimum_score=1)
    if (len(hl_arrays) > 0):
        phases = hl_arrays[0]
    flags_and_values = hkl_server.get_r_free_flags(
        file_name=None,
        label=None,
        test_flag_value=None,
        disable_suitability_test=False,
        parameter_scope="",
        return_all_valid_arrays=True,
        minimum_score=1)
    if (len(flags_and_values) > 0):
        flags, flag_value = flags_and_values[0]
    if (crystal_symmetry is not None):
        data = data.customized_copy(crystal_symmetry=crystal_symmetry)
        if (flags is not None):
            flags = flags.customized_copy(crystal_symmetry=crystal_symmetry)
        if (phases is not None):
            phases = phases.customized_copy(crystal_symmetry=crystal_symmetry)
    return reflection_file_utils.process_raw_data(
        obs=data,
        r_free_flags=flags,
        test_flag_value=flag_value,
        phases=phases,
        log=log,
        merge_anomalous=merge_anomalous)
Ejemplo n.º 4
0
def find_data_arrays (mtz_file, log=None, merge_anomalous=False,
    preferred_labels=None, crystal_symmetry=None) :
  """
  Guess an appropriate data array to use for refinement, plus optional
  Hendrickson-Lattman coefficients and R-free flags if present.
  """
  from iotbx import reflection_file_utils
  from iotbx.file_reader import any_file
  if (log is None) : log = sys.stdout
  phases = data = flags = flag_value = None
  hkl_in = any_file(mtz_file, force_type="hkl")
  hkl_server = hkl_in.file_server
  # always use anomalous data if available!  also, prefer amplitudes over
  # intensities if possible, as they may already be on an absolute scale
  data_arrays = hkl_server.get_xray_data(
    file_name               = None,
    labels                  = None,
    ignore_all_zeros        = False,
    parameter_scope         = "",
    return_all_valid_arrays = True,
    minimum_score           = 4,
    prefer_amplitudes       = True,
    prefer_anomalous        = True)
  if (len(data_arrays) == 0) :
    raise Sorry("No data arrays found in %s." % mtz_file)
  data = data_arrays[0]
  if (preferred_labels is not None) :
    for array in data_arrays :
      array_labels = array.info().label_string()
      if (array_label== preferred_labels) :
        data = array
        break
    else :
      raise Sorry("Can't find label string '%s'!" % preferred_labels)
  else :
    print >> log, "Defaulting to using %s" % data.info().label_string()
  hl_arrays = hkl_server.get_experimental_phases(
    file_name               = None,
    labels                  = None,
    ignore_all_zeros        = True,
    parameter_scope         = "",
    return_all_valid_arrays = True,
    minimum_score           = 1)
  if (len(hl_arrays) > 0) :
    phases = hl_arrays[0]
  flags_and_values = hkl_server.get_r_free_flags(
    file_name=None,
    label=None,
    test_flag_value=None,
    disable_suitability_test=False,
    parameter_scope="",
    return_all_valid_arrays=True,
    minimum_score=1)
  if (len(flags_and_values) > 0) :
    flags, flag_value = flags_and_values[0]
  if (crystal_symmetry is not None) :
    data = data.customized_copy(crystal_symmetry=crystal_symmetry)
    if (flags is not None) :
      flags = flags.customized_copy(crystal_symmetry=crystal_symmetry)
    if (phases is not None) :
      phases = phases.customized_copy(crystal_symmetry=crystal_symmetry)
  return reflection_file_utils.process_raw_data(
    obs=data,
    r_free_flags=flags,
    test_flag_value=flag_value,
    phases=phases,
    log=log,
    merge_anomalous=merge_anomalous)