def get_group_symmetry_reference_matched(self, ref_cs): ref_v6 = xtal.v6cell(ref_cs.niggli_cell().unit_cell()) ncdists = [] for i, keys in enumerate(self.groups): v6 = xtal.v6cell( uctbx.unit_cell(self._average_p1_cell(keys)).niggli_cell()) ncdists.append(NCDist(v6, ref_v6)) print "Group %d: NCDist to reference: %f" % (i + 1, ncdists[-1]) return ncdists.index(min(ncdists)) + 1
def run(params): if params.datout is None: params.datout = os.path.basename(params.lstin)+".dat" xac_files = read_path_list(params.lstin) ofs_dat = open(params.datout, "w") ref_v6cell = None if params.ref_cell is not None: ref_v6cell = v6cell(uctbx.unit_cell(params.ref_cell).niggli_cell()) ofs_dat.write("# ref_cell= %s\n" % params.ref_cell) if params.n_residues is not None: ofs_dat.write("# n_residues= %d\n" % params.n_residues) ofs_dat.write("file ioversigma resnatsnr1 wilsonb abdist a b c al be ga\n") ret = easy_mp.pool_map(fixed_func=lambda x: calc_stats(x, params.stats, params.n_residues, ref_v6cell, params.min_peak, params.min_peak_percentile, params.correct_peak), args=xac_files, processes=params.nproc) for stat in ret: getornan = lambda x: stat.get(x, float("nan")) # get or nan ofs_dat.write("%s %.3f %.3f %.3f %.3e"%(stat["filename"], getornan("ioversigma"), getornan("resnatsnr1"), getornan("wilsonb"), getornan("abdist"))) ofs_dat.write(" %.3f %.3f %.3f %.2f %.2f %.2f\n" % stat["cell"]) ofs_dat.close()
def run(params): if params.datout is None: params.datout = os.path.basename(params.lstin) + ".dat" xac_files = read_path_list(params.lstin) ofs_dat = open(params.datout, "w") ref_v6cell = None if params.ref_cell is not None: ref_v6cell = v6cell(uctbx.unit_cell(params.ref_cell).niggli_cell()) ofs_dat.write("# ref_cell= %s\n" % params.ref_cell) if params.n_residues is not None: ofs_dat.write("# n_residues= %d\n" % params.n_residues) ofs_dat.write("file ioversigma resnatsnr1 wilsonb abdist a b c al be ga\n") ret = easy_mp.pool_map(fixed_func=lambda x: calc_stats( x, params.stats, params.n_residues, ref_v6cell, params.min_peak, params .min_peak_percentile, params.correct_peak), args=xac_files, processes=params.nproc) for stat in ret: getornan = lambda x: stat.get(x, float("nan")) # get or nan ofs_dat.write( "%s %.3f %.3f %.3f %.3e" % (stat["filename"], getornan("ioversigma"), getornan("resnatsnr1"), getornan("wilsonb"), getornan("abdist"))) ofs_dat.write(" %.3f %.3f %.3f %.2f %.2f %.2f\n" % stat["cell"]) ofs_dat.close()
def calc_stats(xac_file, stat_choice, n_residues=None, ref_v6cell=None, min_peak=None, min_peak_percentile=None, correct_peak=None): # Open XDS_ASCII if xac_file.endswith(".pkl"): xac = pickle.load(open(xac_file)) else: xac = xds_ascii.XDS_ASCII(xac_file) sel_remove = flex.bool(xac.iobs.size(), False) if min_peak is not None: sel = xac.peak < min_peak sel_remove |= sel elif min_peak_percentile is not None: q = numpy.percentile(xac.peak, min_peak_percentile) print "percentile %.2f %s" % (q, xac) sel = xac.peak < q sel_remove |= sel if correct_peak: sel_remove |= (xac.peak < 1) # remove PEAK==0 xac.remove_selection(sel_remove) if params.correct_peak: xac.iobs *= xac.peak * .01 xac.sigma_iobs *= xac.peak * .01 iobs = xac.i_obs(anomalous_flag=False) iobs = iobs.select(iobs.sigmas()>0).merge_equivalents(use_internal_variance=False).array() stats = dict(filename=xac_file, cell=iobs.unit_cell().parameters()) if iobs.size() == 0: return stats if "ioversigma" in stat_choice or "resnatsnr1" in stat_choice: binner = iobs.setup_binner(auto_binning=True) if "ioversigma" in stat_choice: stats["ioversigma"] = flex.mean(iobs.data()/iobs.sigmas()) if "resnatsnr1" in stat_choice: res = float("nan") for i_bin in binner.range_used(): sel = binner.selection(i_bin) tmp = iobs.select(sel) if tmp.size() == 0: continue sn = flex.mean(tmp.data()/tmp.sigmas()) if sn <= 1: res = binner.bin_d_range(i_bin)[1] break stats["resnatsnr1"] = res if "abdist" in stat_choice: from cctbx.uctbx.determine_unit_cell import NCDist G6a, G6b = ref_v6cell, v6cell(iobs.unit_cell().niggli_cell()) abdist = NCDist(G6a, G6b) stats["abdist"] = abdist if "wilsonb" in stat_choice: iso_scale_and_b = ml_iso_absolute_scaling(iobs, n_residues, 0) stats["wilsonb"] = iso_scale_and_b.b_wilson print stats return stats
def calc_stats(xac_file, stat_choice, n_residues=None, ref_v6cell=None, min_peak=None, min_peak_percentile=None, correct_peak=None): # Open XDS_ASCII if xac_file.endswith(".pkl"): xac = pickle.load(open(xac_file)) else: xac = xds_ascii.XDS_ASCII(xac_file) sel_remove = flex.bool(xac.iobs.size(), False) if min_peak is not None: sel = xac.peak < min_peak sel_remove |= sel elif min_peak_percentile is not None: q = numpy.percentile(xac.peak, min_peak_percentile) print "percentile %.2f %s" % (q, xac) sel = xac.peak < q sel_remove |= sel if correct_peak: sel_remove |= (xac.peak < 1) # remove PEAK==0 xac.remove_selection(sel_remove) if params.correct_peak: xac.iobs *= xac.peak * .01 xac.sigma_iobs *= xac.peak * .01 iobs = xac.i_obs(anomalous_flag=False) iobs = iobs.select(iobs.sigmas() > 0).merge_equivalents( use_internal_variance=False).array() stats = dict(filename=xac_file, cell=iobs.unit_cell().parameters()) if iobs.size() == 0: return stats if "ioversigma" in stat_choice or "resnatsnr1" in stat_choice: binner = iobs.setup_binner(auto_binning=True) if "ioversigma" in stat_choice: stats["ioversigma"] = flex.mean(iobs.data() / iobs.sigmas()) if "resnatsnr1" in stat_choice: res = float("nan") for i_bin in binner.range_used(): sel = binner.selection(i_bin) tmp = iobs.select(sel) if tmp.size() == 0: continue sn = flex.mean(tmp.data() / tmp.sigmas()) if sn <= 1: res = binner.bin_d_range(i_bin)[1] break stats["resnatsnr1"] = res if "abdist" in stat_choice: from cctbx.uctbx.determine_unit_cell import NCDist G6a, G6b = ref_v6cell, v6cell(iobs.unit_cell().niggli_cell()) abdist = NCDist(G6a, G6b) stats["abdist"] = abdist if "wilsonb" in stat_choice: iso_scale_and_b = ml_iso_absolute_scaling(iobs, n_residues, 0) stats["wilsonb"] = iso_scale_and_b.b_wilson print stats return stats