def get_flag_array(arrays, flag_name=None, log_out=sys.stdout): flag_array = None if flag_name is None: flags = filter(lambda x: is_rfree_array(x, x.info()), arrays) if len(flags) == 0: print >> log_out, " No R free flags like column found." return None, None elif len(flags) > 1: print >> log_out, " More than one column which looks like R free flag:" for f in flags: print >> log_out, " ", f.info().label_string() return None, None else: flag_name = flags[0].info().label_string() flag_array = flags[0] print >> log_out, " Guessing R free flag:", flag_name else: flags = filter(lambda x: flag_name == x.info().label_string(), arrays) if len(flags) == 0: print >> log_out, " Specified flag name not found:", flag return None, None else: print >> log_out, " Use specified flag:", flag flag_array = flags[0] return flag_array, flag_name
def guess_flag_name_and_value(mtzin, name=None, val=None): arrays = iotbx.mtz.object(mtzin).as_miller_arrays() if name is None: flags = filter(lambda x: is_rfree_array(x, x.info()), arrays) name = flags[0].info().label_string() flag_array = flags[0] else: flags = filter(lambda x: name==x.info().label_string(), arrays) flag_array = flags[0] if val is None: flag_scores = get_r_free_flags_scores(miller_arrays=[flag_array], test_flag_value=val) val = flag_scores.test_flag_values[0] return name, val
def guess_flag_name_and_value(mtzin, name=None, val=None): arrays = iotbx.mtz.object(mtzin).as_miller_arrays() if name is None: flags = filter(lambda x: is_rfree_array(x, x.info()), arrays) name = flags[0].info().label_string() flag_array = flags[0] else: flags = filter(lambda x: name == x.info().label_string(), arrays) flag_array = flags[0] if val is None: flag_scores = get_r_free_flags_scores(miller_arrays=[flag_array], test_flag_value=val) val = flag_scores.test_flag_values[0] return name, val
def get_flag(arrays, flag_name=None, flag_value=None): flag_array = None # Get flag array if flag_name is None: flags = filter(lambda x: is_rfree_array(x, x.info()), arrays) if len(flags) == 0: print " No R free flags like column found." return None elif len(flags) > 1: print " More than one column which looks like R free flag:" for f in flags: print " ", f.info().label_string() return None else: flag_name = flags[0].info().label_string() flag_array = flags[0] print "# Guessing R free flag:", flag_name else: flags = filter(lambda x: flag_name==x.info().label_string(), arrays) if len(flags) == 0: print " Specified flag name not found:", flag quit() else: print "# Use specified flag:", flag flag_array = flags[0] # Get flag number if flag_value is None: flag_scores = get_r_free_flags_scores(miller_arrays=[flag_array], test_flag_value=flag_value) flag_value = flag_scores.test_flag_values[0] print "# Guessing flag number:", flag_value else: print "# Specified flag number:", flag_value return flag_array.customized_copy(data=flag_array.data() == flag_value)
def run(mtz, mtz_out, mtz_ref, flag_name=None, flag_value=None): ref_arrays = iotbx.mtz.object(mtz_ref).as_miller_arrays() print "Opening reference:", mtz_ref # Get flag array flag_array = None if flag_name is None: flags = filter(lambda x: is_rfree_array(x, x.info()), ref_arrays) if len(flags) == 0: print " No R free flags like column found." quit() elif len(flags) > 1: print " More than one column which looks like R free flag:" for f in flags: print " ", f.info().label_string() quit() else: flag_name = flags[0].info().label_string() flag_array = flags[0] print " Guessing R free flag:", flag_name else: flags = filter(lambda x: flag_name==x.info().label_string(), ref_arrays) if len(flags) == 0: print " Specified flag name not found:", flag quit() else: print " Use specified flag:", flag flag_array = flags[0] # Get flag number if flag_value is None: flag_scores = get_r_free_flags_scores(miller_arrays=[flag_array], test_flag_value=flag_value) flag_value = flag_scores.test_flag_values[0] print " Guessing flag number:", flag_value else: print " Specified flag number:", flag_value print " d_max, d_min=", get_best_resolution([flag_array], flag_array.crystal_symmetry()) print " Symm:", flag_array.space_group().info(), flag_array.unit_cell() print # Open mtz miller_arrays = iotbx.mtz.object(mtz).as_miller_arrays() print "Opening", mtz if flag_name in [arr.info().label_string() for arr in miller_arrays]: print "Error: The column %s already exists in the mtz file: %s" % (flag_name, mtz) quit() print " Using information from", miller_arrays[0].info().label_string() input_symm = crystal.symmetry( unit_cell=miller_arrays[0].unit_cell(), space_group_info=miller_arrays[0].space_group().info(), assert_is_compatible_unit_cell=False, force_compatible_unit_cell=False) d_max, d_min = get_best_resolution(miller_arrays, input_symm) print " d_max, d_min=", d_max, d_min print " Symm:", input_symm.space_group_info(), input_symm.unit_cell() print # Extend flag complete_set = make_joined_set(miller_arrays).complete_set() r_free_flags = r_free_utils.extend_flags( r_free_flags=flag_array.customized_copy(crystal_symmetry=input_symm), test_flag_value=flag_value, array_label=flag_name, complete_set=complete_set, accumulation_callback=None, preserve_input_values=True, d_max=d_max, d_min=d_min, log=sys.stdout).common_set(complete_set) #resolution_filter(d_min=d_min-0.01) print print r_free_flags.customized_copy(data=r_free_flags.data()==flag_value).show_r_free_flags_info() # Write mtz file #mtz_dataset = create_mtz_dataset(miller_arrays) #mtz_dataset.add_miller_array(miller_array=r_free_flags, column_root_label=flag_name) #mtz_object = mtz_dataset.mtz_object() mtz_object = iotbx.mtz.object(mtz).add_crystal("crystal", "project", r_free_flags.unit_cell()). \ add_dataset(name="dataset", wavelength=0). \ add_miller_array(miller_array=r_free_flags, column_root_label=flag_name).mtz_object() #mtz_object.add_history("copy and extend test flag from "+mtz_ref) #mtz_object.show_summary(out=sys.stdout, prefix=" ") mtz_object.write(file_name=mtz_out) print print "Writing:", mtz_out print
def run(args=(), params=None, out=None): if (out is None): out = sys.stdout validate_params(params) from iotbx import reflection_file_editor from iotbx import reflection_file_utils from iotbx import file_reader data_in = file_reader.any_file(params.import_data.data_file, force_type="hkl") data_in.check_file_type("hkl") miller_arrays = data_in.file_server.miller_arrays new_arrays = [] labels = ["H","K","L"] warnings = [] have_r_free = False for array in miller_arrays : if (reflection_file_editor.is_rfree_array(array, array.info())): have_r_free = True if (params.import_data.flags_file is not None): raise Sorry("The data file (%s) already contains R-free flags." % params.import_data.data_file) if (array.is_xray_reconstructed_amplitude_array()): if ("F(+)" in labels): labels.extend(["F_rec(+)", "SIGF_rec(+)", "F_rec(-)", "SIGF_rec(-)"]) else : labels.extend(["F(+)", "SIGF(+)", "F(-)", "SIGF(-)"]) else : labels.extend(array.info().labels) array = array.map_to_asu() if (not array.is_unique_set_under_symmetry()): array = array.merge_equivalents().array() new_arrays.append(array) complete_set = reflection_file_utils.make_joined_set( new_arrays).complete_set() if (not have_r_free): if (params.import_data.flags_file is not None): flags_in = file_reader.any_file(params.import_data.flags_file, force_type="hkl") flags_in.check_file_type("hkl") flags_and_values = flags_in.file_server.get_r_free_flags( file_name=flags_in.file_name, label=None, test_flag_value=None, disable_suitability_test=False, parameter_scope=None, return_all_valid_arrays=True) if (len(flags_and_values) == 0): raise Sorry("No R-free flags were found in the file %s." % params.import_data.flags_file) elif (len(flags_and_values) > 1): raise Sorry(("Multiple valid sets of R-free flags were found in the "+ "file %s. Please use the reflection file editor to select a "+ "single set of flags.") % params.import_data.flags_file) old_flags, test_flag_value = flags_and_values[0] labels.extend(old_flags.info().labels) old_flags = old_flags.map_to_asu().merge_equivalents().array() old_flags = old_flags.customized_copy( data=old_flags.data()==test_flag_value) missing_set = complete_set.lone_set(old_flags) n_missing = missing_set.indices().size() fraction_free = old_flags.data().count(True) / old_flags.data().size() if (n_missing != 0): (n_bins, n_free, sse, accu) = reflection_file_editor.get_r_free_stats( miller_array=old_flags, test_flag_value=True) min_bins = int(old_flags.indices().size() * 0.005) if (n_bins < (n_free / 100)) or (sse > 0.005) or (n_bins < min_bins): if (not params.import_data.ignore_shells): raise Sorry(("The R-free flags in %s appear to have been "+ "assigned in thin resolution shells. PHENIX is unable to "+ "properly extend flags created in this manner. If you "+ "prefer to ignore this check and want to create new flags using "+ "random assignment, or if you think this message is in error, "+ "you can use the reflection file editor instead. "+ "(To view the distribution of R-free flags, click the "+ "toolbar button \"Other tools\" and select \"Inspect R-free "+ "flags\".)") % params.import_data.flags_file) else : print >> out, "WARNING: ignoring thin shells" if (n_missing <= 20) : # XXX hack from scitbx.array_family import flex missing_flags = missing_set.array(data=flex.bool(n_missing, False)) else : missing_flags = missing_set.generate_r_free_flags( fraction_free=fraction_free, max_free=None, use_lattice_symmetry=True) new_flags = old_flags.concatenate(other=missing_flags) else : new_flags = old_flags new_arrays.append(new_flags) mtz_out = new_arrays[0].as_mtz_dataset( column_root_label="A") for i, array in enumerate(new_arrays[1:]): mtz_out.add_miller_array( miller_array=array, column_root_label="%s" % string.uppercase[i+1]) mtz_obj = mtz_out.mtz_object() for i, column in enumerate(mtz_obj.columns()): column.set_label(labels[i]) if (params.import_data.output_file is None): base,ext = os.path.splitext(params.import_data.data_file) params.import_data.output_file = base + "_flags.mtz" mtz_obj.write(file_name=params.import_data.output_file) print >> out, "Data and flags written to %s" % params.import_data.output_file return params.import_data.output_file
def run (args=(), params=None, out=None) : if (out is None) : out = sys.stdout validate_params(params) from iotbx import reflection_file_editor from iotbx import reflection_file_utils from iotbx import file_reader data_in = file_reader.any_file(params.import_data.data_file, force_type="hkl") data_in.check_file_type("hkl") miller_arrays = data_in.file_server.miller_arrays new_arrays = [] labels = ["H","K","L"] warnings = [] have_r_free = False for array in miller_arrays : if (reflection_file_editor.is_rfree_array(array, array.info())) : have_r_free = True if (params.import_data.flags_file is not None) : raise Sorry("The data file (%s) already contains R-free flags." % params.import_data.data_file) if (array.is_xray_reconstructed_amplitude_array()) : if ("F(+)" in labels) : labels.extend(["F_rec(+)", "SIGF_rec(+)", "F_rec(-)", "SIGF_rec(-)"]) else : labels.extend(["F(+)", "SIGF(+)", "F(-)", "SIGF(-)"]) else : labels.extend(array.info().labels) array = array.map_to_asu() if (not array.is_unique_set_under_symmetry()) : array = array.merge_equivalents().array() new_arrays.append(array) complete_set = reflection_file_utils.make_joined_set( new_arrays).complete_set() if (not have_r_free) : if (params.import_data.flags_file is not None) : flags_in = file_reader.any_file(params.import_data.flags_file, force_type="hkl") flags_in.check_file_type("hkl") flags_and_values = flags_in.file_server.get_r_free_flags( file_name=flags_in.file_name, label=None, test_flag_value=None, disable_suitability_test=False, parameter_scope=None, return_all_valid_arrays=True) if (len(flags_and_values) == 0) : raise Sorry("No R-free flags were found in the file %s." % params.import_data.flags_file) elif (len(flags_and_values) > 1) : raise Sorry(("Multiple valid sets of R-free flags were found in the "+ "file %s. Please use the reflection file editor to select a "+ "single set of flags.") % params.import_data.flags_file) old_flags, test_flag_value = flags_and_values[0] labels.extend(old_flags.info().labels) old_flags = old_flags.map_to_asu().merge_equivalents().array() old_flags = old_flags.customized_copy( data=old_flags.data()==test_flag_value) missing_set = complete_set.lone_set(old_flags) n_missing = missing_set.indices().size() fraction_free = old_flags.data().count(True) / old_flags.data().size() if (n_missing != 0) : (n_bins, n_free, sse, accu) = reflection_file_editor.get_r_free_stats( miller_array=old_flags, test_flag_value=True) min_bins = int(old_flags.indices().size() * 0.005) if (n_bins < (n_free / 100)) or (sse > 0.005) or (n_bins < min_bins) : if (not params.import_data.ignore_shells) : raise Sorry(("The R-free flags in %s appear to have been "+ "assigned in thin resolution shells. PHENIX is unable to "+ "properly extend flags created in this manner. If you "+ "prefer to ignore this check and want to create new flags using "+ "random assignment, or if you think this message is in error, "+ "you can use the reflection file editor instead. "+ "(To view the distribution of R-free flags, click the "+ "toolbar button \"Other tools\" and select \"Inspect R-free "+ "flags\".)") % params.import_data.flags_file) else : print >> out, "WARNING: ignoring thin shells" if (n_missing <= 20) : # XXX hack from scitbx.array_family import flex missing_flags = missing_set.array(data=flex.bool(n_missing, False)) else : missing_flags = missing_set.generate_r_free_flags( fraction_free=fraction_free, max_free=None, use_lattice_symmetry=True) new_flags = old_flags.concatenate(other=missing_flags) else : new_flags = old_flags new_arrays.append(new_flags) mtz_out = new_arrays[0].as_mtz_dataset( column_root_label="A") for i, array in enumerate(new_arrays[1:]) : mtz_out.add_miller_array( miller_array=array, column_root_label="%s" % string.uppercase[i+1]) mtz_obj = mtz_out.mtz_object() for i, column in enumerate(mtz_obj.columns()) : column.set_label(labels[i]) if (params.import_data.output_file is None) : base,ext = os.path.splitext(params.import_data.data_file) params.import_data.output_file = base + "_flags.mtz" mtz_obj.write(file_name=params.import_data.output_file) print >> out, "Data and flags written to %s" % params.import_data.output_file return params.import_data.output_file
print "Provide pdb and mtz" quit() arrays = iotbx.mtz.object(mtzfile).as_miller_arrays() col_free = [] col_target = [] col_ph = [] wavelengths = [] for array in arrays: wavelengths.append(array.info().wavelength) labs = tuple(array.info().labels) if is_rfree_array(array, array.info()): flag_scores = get_r_free_flags_scores(miller_arrays=[array], test_flag_value=None) flag_value = flag_scores.test_flag_values[0] col_free.append(("FREE="+array.info().label_string(), flag_value)) elif array.is_xray_intensity_array(): if "(+)" in array.info().label_string(): #array.anomalous_flag(): col_target.append("I+=%s SIGI+=%s I-=%s SIGI-=%s" % tuple(array.info().labels)) else: if len(labs) < 2: col_target.append("IP=%s" % labs) else: col_target.append("IP=%s SIGIP=%s" % labs) elif array.is_xray_amplitude_array(): if array.sigmas() is None: