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))
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)
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)