Example #1
0
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
Example #2
0
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
Example #3
0
 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
Example #4
0
 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
Example #5
0
 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
Example #6
0
 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
Example #7
0
 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
Example #8
0
 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))
Example #9
0
 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))