def _get_sorted(O, unit_cell, sites_cart, pdb_atoms, by_value="residual", use_segids_in_place_of_chainids=False): assert by_value in ["residual", "delta"] if (O.size() == 0): return [] import cctbx.geometry_restraints from scitbx.array_family import flex deltas = flex.abs(O.deltas(sites_cart=sites_cart)) residuals = O.residuals(sites_cart=sites_cart) if (by_value == "residual"): data_to_sort = residuals elif (by_value == "delta"): data_to_sort = deltas i_proxies_sorted = flex.sort_permutation(data=data_to_sort, reverse=True) sorted_table = [] for i_proxy in i_proxies_sorted: proxy = O[i_proxy] sigma = cctbx.geometry_restraints.weight_as_sigma(proxy.weight) score = sqrt(residuals[i_proxy]) / sigma proxy_atoms = get_atoms_info( pdb_atoms, iselection=proxy.i_seqs, use_segids_in_place_of_chainids=use_segids_in_place_of_chainids) sorted_table.append((proxy, proxy_atoms)) return sorted_table
def _get_sorted (O, unit_cell, sites_cart, pdb_atoms, by_value="residual", use_segids_in_place_of_chainids=False) : assert by_value in ["residual", "delta"] if (O.size() == 0): return [] import cctbx.geometry_restraints from scitbx.array_family import flex deltas = flex.abs(O.deltas(sites_cart=sites_cart)) residuals = O.residuals(sites_cart=sites_cart) if (by_value == "residual"): data_to_sort = residuals elif (by_value == "delta"): data_to_sort = deltas i_proxies_sorted = flex.sort_permutation(data=data_to_sort, reverse=True) sorted_table = [] for i_proxy in i_proxies_sorted: proxy = O[i_proxy] sigma = cctbx.geometry_restraints.weight_as_sigma(proxy.weight) score = sqrt(residuals[i_proxy]) / sigma proxy_atoms = get_atoms_info(pdb_atoms, iselection=proxy.i_seqs, use_segids_in_place_of_chainids=use_segids_in_place_of_chainids) sorted_table.append((proxy, proxy_atoms)) return sorted_table
def get_outliers(self, proxies, unit_cell, sites_cart, pdb_atoms, sigma_cutoff, outliers_only=True, use_segids_in_place_of_chainids=False): import cctbx.geometry_restraints from scitbx.array_family import flex site_labels = flex.bool(sites_cart.size(), True).iselection() sorted_table, n_not_shown = proxies.get_sorted(by_value="residual", sites_cart=sites_cart, site_labels=site_labels, unit_cell=unit_cell) if (sorted_table is None): return [] outliers = [] for restraint_info in sorted_table: (plane_atoms, rms_delta, residual) = restraint_info i_seqs = [a[0] for a in plane_atoms] deviation = max([a[1] / a[2] for a in plane_atoms]) plane_atoms_ = get_atoms_info(pdb_atoms, iselection=i_seqs) outlier = planarity(atoms_info=plane_atoms_, rms_deltas=rms_delta, residual=residual, delta_max=max([a[1] for a in plane_atoms]), score=deviation, outlier=True, xyz=get_mean_xyz(plane_atoms_)) if (outlier.score > sigma_cutoff): outliers.append(outlier) elif (not outliers_only): outlier.outlier = False outliers.append(outlier) return outliers
def get_outliers (self, proxies, unit_cell, sites_cart, pdb_atoms, sigma_cutoff, outliers_only=True, use_segids_in_place_of_chainids=False) : import cctbx.geometry_restraints from scitbx.array_family import flex site_labels = flex.bool(sites_cart.size(), True).iselection() sorted_table, n_not_shown = proxies.get_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels, unit_cell=unit_cell) if (sorted_table is None) : return [] outliers = [] for restraint_info in sorted_table : (plane_atoms, rms_delta, residual) = restraint_info i_seqs = [ a[0] for a in plane_atoms ] deviation = max([ a[1] / a[2] for a in plane_atoms ]) plane_atoms_ = get_atoms_info(pdb_atoms, iselection=i_seqs) outlier = planarity( atoms_info=plane_atoms_, rms_deltas=rms_delta, residual=residual, delta_max=max([ a[1] for a in plane_atoms ]), score=deviation, outlier=True, xyz=get_mean_xyz(plane_atoms_)) if (outlier.score > sigma_cutoff) : outliers.append(outlier) elif (not outliers_only) : outlier.outlier=False outliers.append(outlier) return outliers
def get_outliers (self, proxies, unit_cell, sites_cart, pdb_atoms, sigma_cutoff, outliers_only=True, use_segids_in_place_of_chainids=False) : from scitbx.array_family import flex site_labels = flex.bool(sites_cart.size(), True).iselection() sorted_table, not_shown = proxies.get_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels) # this can happen for C-alpha-only models, etc. if (sorted_table is None) : return [] outliers = [] for restraint_info in sorted_table : (i_seqs, ideal, model, slack, delta, sigma, weight, residual, sym_op_j, rt_mx) = restraint_info bond_atoms = get_atoms_info(pdb_atoms, iselection=i_seqs, use_segids_in_place_of_chainids=use_segids_in_place_of_chainids) outlier = bond( atoms_info=bond_atoms, target=ideal, model=model, sigma=sigma, slack=slack, delta=delta, residual=residual, symop=sym_op_j, outlier=True, xyz=get_mean_xyz(bond_atoms)) if (outlier.score > sigma_cutoff) : outliers.append(outlier) elif (not outliers_only) : outlier.outlier=False outliers.append(outlier) return outliers
def get_outliers(self, proxies, unit_cell, sites_cart, pdb_atoms, sigma_cutoff, outliers_only=True, use_segids_in_place_of_chainids=False): from scitbx.array_family import flex from cctbx.geometry_restraints.linking_class import linking_class origin_ids = linking_class() site_labels = flex.bool(sites_cart.size(), True).iselection() sorted_table, not_shown = proxies.get_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels, origin_id=origin_ids.get_origin_id('covalent geometry')) # this can happen for C-alpha-only models, etc. if (sorted_table is None): return [] outliers = [] for restraint_info in sorted_table: (i_seq, j_seq, i_seqs, ideal, model, slack, delta, sigma, weight, residual, sym_op_j, rt_mx) = restraint_info bond_atoms = get_atoms_info( pdb_atoms, iselection=i_seqs, use_segids_in_place_of_chainids=use_segids_in_place_of_chainids ) if sym_op_j: import scitbx m3 = rt_mx.r().as_double() m3 = scitbx.matrix.sqr(m3) t = rt_mx.t().as_double() t = scitbx.matrix.col((t[0], t[1], t[2])) xyz = unit_cell.fractionalize( flex.vec3_double([bond_atoms[1].xyz])) new_xyz = unit_cell.orthogonalize(m3.elems * xyz + t) bond_atoms[1].xyz = new_xyz[0] outlier = bond(atoms_info=bond_atoms, target=ideal, model=model, sigma=sigma, slack=slack, delta=delta, residual=residual, symop=sym_op_j, outlier=True, xyz=get_mean_xyz(bond_atoms)) if (outlier.score > sigma_cutoff): outliers.append(outlier) elif (not outliers_only): outlier.outlier = False outliers.append(outlier) return outliers
def get_outliers (self, proxies, unit_cell, sites_cart, pdb_atoms, sigma_cutoff, outliers_only=True, use_segids_in_place_of_chainids=False) : from scitbx.array_family import flex site_labels = flex.bool(sites_cart.size(), True).iselection() sorted_table, not_shown = proxies.get_sorted( by_value="residual", sites_cart=sites_cart, site_labels=site_labels) # this can happen for C-alpha-only models, etc. if (sorted_table is None) : return [] outliers = [] for restraint_info in sorted_table : (i_seqs, ideal, model, slack, delta, sigma, weight, residual, sym_op_j, rt_mx) = restraint_info bond_atoms = get_atoms_info(pdb_atoms, iselection=i_seqs, use_segids_in_place_of_chainids=use_segids_in_place_of_chainids) if sym_op_j: import scitbx m3 = rt_mx.r().as_double() m3 = scitbx.matrix.sqr(m3) t = rt_mx.t().as_double() t = scitbx.matrix.col((t[0],t[1],t[2])) xyz = unit_cell.fractionalize(flex.vec3_double([bond_atoms[1].xyz])) new_xyz = unit_cell.orthogonalize(m3.elems*xyz+t) bond_atoms[1].xyz = new_xyz[0] outlier = bond( atoms_info=bond_atoms, target=ideal, model=model, sigma=sigma, slack=slack, delta=delta, residual=residual, symop=sym_op_j, outlier=True, xyz=get_mean_xyz(bond_atoms)) if (outlier.score > sigma_cutoff) : outliers.append(outlier) elif (not outliers_only) : outlier.outlier=False outliers.append(outlier) return outliers
def __init__(self, pdb_hierarchy, pdb_atoms, geometry_restraints_manager, outliers_only=True): rna_geometry.__init__(self) cutoff = 4 sites_cart = pdb_atoms.extract_xyz() flags = geometry_restraints.flags.flags(default=True) i_seq_name_hash = utils.build_name_hash(pdb_hierarchy=pdb_hierarchy) for proxy in geometry_restraints_manager.angle_proxies: restraint = geometry_restraints.angle(sites_cart=sites_cart, proxy=proxy) atom1 = pdb_atoms[proxy.i_seqs[0]].name atom2 = pdb_atoms[proxy.i_seqs[1]].name atom3 = pdb_atoms[proxy.i_seqs[2]].name labels = pdb_atoms[proxy.i_seqs[0]].fetch_labels() if (atom1.strip() not in rna_backbone_atoms or atom2.strip() not in rna_backbone_atoms or atom3.strip() not in rna_backbone_atoms): continue self.n_total += 1 sigma = sqrt(1 / restraint.weight) num_sigmas = restraint.delta / sigma is_outlier = (abs(num_sigmas) >= cutoff) if (is_outlier or not outliers_only): self.n_outliers += 1 self.results.append( rna_angle(chain_id=labels.chain_id, resseq=labels.resseq, icode=labels.icode, altloc=labels.altloc, resname=labels.resname, atoms_info=validation.get_atoms_info( pdb_atoms, proxy.i_seqs), sigma=sigma, score=num_sigmas, delta=restraint.delta, outlier=is_outlier))
def __init__ (self, pdb_hierarchy, pdb_atoms, geometry_restraints_manager, outliers_only=True) : rna_geometry.__init__(self) cutoff = 4 sites_cart = pdb_atoms.extract_xyz() flags = geometry_restraints.flags.flags(default=True) pair_proxies = geometry_restraints_manager.pair_proxies( flags=flags, sites_cart=sites_cart) bond_proxies = pair_proxies.bond_proxies for proxy in bond_proxies.simple: restraint = geometry_restraints.bond( sites_cart=sites_cart, proxy=proxy) atom1 = pdb_atoms[proxy.i_seqs[0]].name atom2 = pdb_atoms[proxy.i_seqs[1]].name labels = pdb_atoms[proxy.i_seqs[0]].fetch_labels() if (atom1.strip() not in rna_backbone_atoms or atom2.strip() not in rna_backbone_atoms) : continue self.n_total += 1 sigma = sqrt(1 / restraint.weight) num_sigmas = restraint.delta / sigma is_outlier = (abs(num_sigmas) >= cutoff) if (is_outlier or not outliers_only): self.n_outliers += 1 self.results.append(rna_bond( chain_id=labels.chain_id, resseq=labels.resseq, icode=labels.icode, altloc=labels.altloc, resname=labels.resname, atoms_info=validation.get_atoms_info(pdb_atoms, proxy.i_seqs), sigma=sigma, score=num_sigmas, delta=restraint.delta, outlier=is_outlier))