ó
¢™xTc           @   s  d  d l  m Z d  d l m Z d  d l m Z d  d l Z d e f d „  ƒ  YZ d d d	 d
 d d g Z d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d „ Z d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d Z d S(   iÿÿÿÿ(   t   division(   t   slots_getstate_setstate(   t   format_valueNt   entityc           B   sÝ   e  Z d  Z d d d d g Z d Z g  Z d „  Z e d „  ƒ Z d d	 „ Z	 d
 „  Z
 d d „ Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s8  
  Base class for all validation results.  This includes a boolean outlier flag,
  the information used to zoom in the Phenix GUI (optional, but strongly
  recommended), and some kind of numerical score (also optional, but strongly
  recommended - although some analyses may require multiple distinct scores).
  t   atom_selectiont   xyzt   outliert   scores   %sc         K   sf   x/ | j  ƒ  D]! } | |  j k s t | ƒ ‚ q Wx- |  j D]" } t |  | | j | d  ƒ ƒ q< Wd  S(   N(   t   keyst	   __slots__t   AssertionErrort   setattrt   gett   None(   t   selft   kwdst   name(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __init__   s    c           C   s   t  ƒ  ‚ d S(   s/   
    Format for header in result listings.
    N(   t   NotImplementedError(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   header   s    R   c         C   s   t  |  j |  j d | ƒS(   Nt   replace_none_with(   R   t   score_formatR   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   format_score$   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt
   is_outlier(   s    t    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   t   prefix(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt	   as_string+   s    c         C   s
   |  j  ƒ  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __str__.   s    c         C   s   t  ƒ  ‚ d S(   s“   
    Returns a formatted (probably fixed-width) string describing the molecular
    entity being validation, independent of the analysis type.
    N(   R   (   R   t   ignore_altloc(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   id_str1   s    c         C   s   |  j  ƒ  j ƒ  S(   N(   R   t   __hash__(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR   8   s    c         C   s   t  ƒ  ‚ d S(   sN   
    Optional; returns old format used by some tools in mmtbx.validation.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_list;   s    c         C   s   t  ƒ  ‚ d S(   sL   
    Returns a list of formatted table cells for display by MolProbity.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_table_row_molprobityA   s    c         C   s   t  ƒ  ‚ d S(   sH   
    Returns a list of formatted table cells for display by Phenix.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_table_row_phenixG   s    c         C   s   t  ƒ  ‚ d S(   s>   
    Returns a kinemage string for displaying an outlier.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_kinemageM   s    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt
   format_oldS   s    c         C   s   t  ƒ  ‚ d S(   sâ   
    Compare two validation results to determine whether they correspond to the
    same molecular entity and analysis type.  This is intended to be used for
    analysis of a structure before-and-after refinement (etc.).
    N(   R   (   R   t   other(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __eq__V   s    c         C   s   t  |  j | j ƒ S(   N(   t   cmpR   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __cmp__^   s    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   is_single_residue_objecta   s    c         C   s   d S(   sE   
    Returns PDB atom selection string for the atom(s) involved.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_selection_stringd   s    c         C   s   |  j  ƒ  |  j g S(   s]   
    Returns data needed to zoom/recenter the graphics programs from the Phenix
    GUI.
    (   R)   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt	   zoom_infoj   s    N(   t   __name__t
   __module__t   __doc__R	   R   t   molprobity_table_labelsR   t   staticmethodR   R   R   R   R   R   R   R   R   R    R!   R"   R#   R%   R'   R(   R)   R*   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR      s2   														t   chain_idt   resseqt   icodet   resnamet   altloct   segidt   residuec           B   s»   e  Z d  Z e j e d g Z d „  Z d „  Z e d „ Z	 d „  Z
 e d „  ƒ Z e d „ Z d „  Z e d	 „ Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   sÉ   
  Base class for validation information about a single residue, which depending
  on context could mean either any one of the residue_group, atom_group, or
  residue objects from the PDB hierarchy.
  t	   occupancyc         C   s.   x' t  D] } t |  | t | | ƒ ƒ q Wd  S(   N(   t   __residue_attr__R   t   getattr(   R   R$   t   attr(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   _copy_constructor�   s    c         C   s?   x8 |  j  D]- } t |  | ƒ d  k	 s
 | d k s
 t ‚ q
 Wd  S(   NR5   (   R8   R9   R   R
   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   assert_all_attributes_defined…   s    c         C   sx   d |  j  |  j |  j f } | s6 | d |  j 7} n
 | d 7} | d |  j 7} |  j d  k	 rt | d |  j 7} n  | S(   Ns	   %2s%4s%1ss   %1st    s   %3ss    segid='%4s'(   R0   R1   R2   R4   R3   R5   R   (   R   R   t   base(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR   ‰   s    
c         C   s,   d d l  m } | j t |  j ƒ |  j ƒ S(   Niÿÿÿÿ(   t	   hybrid_36(   t	   iotbx.pdbR?   t
   hy36decodet   lenR1   (   R   R?   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   resseq_as_int”   s    c         C   s   d |  j  |  j f S(   Ns   %4s%1s(   R1   R2   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   resid˜   s    c         C   s   |  j  d | ƒ S(   NR   (   R   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt
   residue_idœ   s    c         C   s    d |  j  |  j |  j f j ƒ  S(   Ns   %s%s%s(   R0   R1   R2   t   strip(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt	   simple_idŸ   s    c         C   sS   t  | d ƒ r1 |  j d | ƒ | j d | ƒ k S|  j d | ƒ | j d | ƒ k S(   NRE   R   (   t   hasattrRE   R   (   R   R$   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   is_same_residue£   s
    c         C   sF   |  j  | j  k oE |  j | j k oE |  j | j k oE |  j | j k S(   N(   R0   R1   R2   R5   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   is_same_residue_groupª   s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %1s%3s%2s%4s%1s(   R4   R3   R0   R1   R2   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   atom_group_id_str°   s    c         C   s   d |  j  |  j |  j f S(   Ns	   %2s%4s%1s(   R0   R1   R2   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   residue_group_id_str´   s    c         C   s@   t  |  ƒ t  | ƒ k s* t t  | ƒ ƒ ‚ |  j ƒ  | j ƒ  k S(   N(   t   typeR
   R   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR%   ·   s    *c         C   s   t  S(   N(   t   True(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR(   »   s    c         C   s    d |  j  |  j |  j |  j f S(   Ns:   (chain '%s' and resid '%s' and resname %s and altloc '%s')(   R0   RD   R3   R4   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   atom_selection_string¾   s    c         C   sp   | d  k r | j ƒ  } n  | j |  j ƒ  ƒ } t | ƒ d k sH t ‚ | j ƒ  j | ƒ j ƒ  j	 ƒ  |  _
 d  S(   Ni    (   R   t   atom_selection_cachet	   selectionRO   RB   R
   t   atomst   selectt   extract_xyzt   meanR   (   R   t   pdb_hierarchyRP   t   sel(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   set_coordinates_from_hierarchyÂ   s
    N(   R+   R,   R-   R   R	   R8   R;   R<   t   FalseR   RC   t   propertyRD   RE   RG   RI   RJ   RK   RL   R%   R(   RO   R   RX   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR6   z   s"   										RR   c           B   sZ   e  Z d  Z d g Z e j e Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   s€   
  Base class for validation results involving a specific set of atoms, such
  as covalent geometry restraints, clashes, etc.
  t
   atoms_infoc         C   s   t  |  j ƒ S(   N(   RB   R[   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   n_atomsÔ   s    c         C   sF   t  |  ƒ t  | ƒ k s* t t  | ƒ ƒ ‚ t |  j ƒ t | j ƒ k S(   N(   RM   R
   t   sortedR[   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR%   ×   s    *c         C   s   t  S(   N(   RY   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR(   Û   s    c         C   sc   d } xV |  j  D]K } | j j ƒ  d k r | d k rC | j } q[ | j | k s[ t ‚ q q W| S(   NR   (   R[   R4   RF   R
   (   R   t   consensus_altloct   atom(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt
   get_altlocÞ   s    c         C   s   g  |  j  D] } | j ^ q
 S(   N(   R[   R   (   R   t   a(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt
   sites_cartè   s    c         C   s;   | d  k r t Sx$ |  j D] } | j | k r t Sq Wt S(   N(   R   RN   R[   R0   RY   (   R   R0   Ra   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   is_in_chainë   s    (   R+   R,   R-   t   __atoms_attr__R   R	   R\   R%   R(   R`   Rb   Rc   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRR   Ê   s   					
	t	   atom_basec           B   si   e  Z d  Z d d d d d d g Z e e Z d „  Z d „  Z d	 „  Z e	 d
 „ Z
 d „  Z d „  Z RS(   s«   
  Container for metadata for a single atom, in the context of validation
  results involving multiple atoms.  Intended to be used as-is inside various
  atoms classes.
  R   t   elementR   t   symopR7   t   b_isoc         K   s-  | j  d d  ƒ } | d  k	 r( | d =n  x/ | j ƒ  D]! } | |  j k s5 t | ƒ ‚ q5 Wx- |  j D]" } t |  | | j  | d  ƒ ƒ qd W| d  k	 r)| j ƒ  } | j |  _ | j |  _ | j	 |  _	 | j
 |  _
 | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ n  d  S(   Nt   pdb_atom(   R   R   R   R	   R
   R   t   fetch_labelsR0   R1   R2   R3   R4   R5   R   R   t   occR7   t   bRh   Rf   (   R   R   Ri   R   t   labels(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR     s(    
 c         C   s   t  |  j ƒ  | j ƒ  ƒ S(   N(   R&   R   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR'     s    c         C   s7   t  | t ƒ s! t t | ƒ ƒ ‚ |  j ƒ  | j ƒ  k S(   N(   t
   isinstanceRe   R
   RM   R   (   R   R$   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR%     s    !c         C   s�   d |  j  |  j |  j f } | s6 | d |  j 7} n
 | d 7} | d |  j |  j f 7} |  j d  k	 r} | d |  j 7} n  | S(   Ns	   %2s%4s%1ss   %1sR=   s   %3s %4ss    segid='%4s'(   R0   R1   R2   R4   R3   R   R5   R   (   R   R   R>   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR   !  s    
c         C   s   d |  j  |  j |  j f S(   Ns	   %2s%4s%1s(   R0   R1   R2   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRL   ,  s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %1s%3s%2s%4s%1s(   R4   R3   R0   R1   R2   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRK   /  s    (   R+   R,   R-   t   __atom_attr__R8   t   __atom_slots__R   R'   R%   RY   R   RL   RK   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRe   ó   s   	
				t	   atom_infoc           B   s   e  Z d  Z e j d g Z RS(   s«   
  Container for metadata for a single atom, in the context of validation
  results involving multiple atoms.  Intended to be used as-is inside various
  atoms classes.
  Rg   (   R+   R,   R-   Re   Rp   R	   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRq   3  s   c   
      C   s¼   g  } x¯ t  | ƒ D]¡ \ } } |  | } | j ƒ  } | rG | j } n	 | j } t d | j d | j d | d | j d | j d | j	 d | j
 d | j d	 | j ƒ 	}	 | j |	 ƒ q W| S(
   NR   Rf   R0   R1   R2   R3   R4   R7   R   (   t	   enumerateRj   R5   R0   Rq   R   Rf   R1   R2   R3   R4   Rk   R   t   append(
   t	   pdb_atomst
   iselectiont   use_segids_in_place_of_chainidst   proxy_atomst   nt   i_seqR_   Rm   R0   t   info(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   get_atoms_info;  s&    
								R_   c           B   s'   e  Z d  Z e j e j Z d „  Z RS(   s¿   
  Base class for validation results for a single atom.  This is distinct from
  the atom_info class above, which is used to track individual atoms within
  a multi-atom validation result.
  c         C   s   t  S(   N(   RN   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR(   [  s    (   R+   R,   R-   R   R	   Re   Rp   R(   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR_   S  s   t
   validationc           B   s  e  Z d  Z d d d d g Z d Z d Z g  Z g  Z d „  Z	 d „  Z
 e d „  ƒ Z d „  Z d	 „  Z d
 „  Z d „  Z e j e d „ Z e j d d „ Z e j d e e d „ Z e d „ Z d „  Z d „  Z e e d „ Z d d d „ Z d d d „ Z RS(   s  
  Container for a set of results from a single analysis (rotamers, clashes,
  etc.).  This is responsible for the console display of these results and
  associated statistics.  Individual modules will subclass this and override
  the unimplemented methods.
  t
   n_outlierst   n_totalt   resultst   _cachec         C   s(   d |  _  d |  _ g  |  _ d  |  _ d  S(   Ni    (   R}   R~   R   R   R€   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR   k  s    			c         C   sH   |  j  d k rD t |  j ƒ |  j  } | d k s7 t ‚ |  j | f Sd S(   Ni    g      ð?g        (   i    g        (   R~   t   floatR}   R
   (   R   t   fraction(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   get_outliers_count_and_fractionq  s
    c         C   s   |  j  ƒ  \ } } | d S(   Ng      Y@(   Rƒ   (   R   R}   t   frac_outliers(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   percent_outliersx  s    c         C   s#   t  |  d ƒ r |  j St ƒ  ‚ d S(   s
  
    Return a flex.size_t object containing the i_seqs of atoms flagged as
    outliers (either individually or as part of an atom_group).  This needs
    to be implemented in the underlying classes unless they include a
    pre-built _outlier_i_seqs attribute.
    t   _outlier_i_seqsN(   RH   R†   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   outlier_selection}  s    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   get_outliers_goalˆ  s    c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   get_result_class‹  s    c         C   s   d S(   NR   (    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt	   coot_todoŽ  s    c         C   si   | r+ |  j  d k	 s t ‚ | |  j  IJn  x! |  j D] } | | j ƒ  IJq5 W| re |  j | ƒ n  d S(   sj   
    For backwards compatibility with output formats of older utilities
    (phenix.ramalyze et al.).
    N(   t   output_headerR   R
   R   R#   t   show_summary(   R   t   outt   verboset   result(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   show_old_output‘  s    R   c         C   s   t  ƒ  ‚ d  S(   N(   R   (   R   R�   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyRŒ   ž  s    s     c         C   sz   t  |  j ƒ d k r` | | |  j ƒ  j ƒ  IJx. |  j | ƒ D] } | | t | ƒ IJq? Wn  |  j d | d | ƒ d  S(   Ni    R�   R   (   RB   R   R‰   R   t   iter_resultst   strRŒ   (   R   R�   R   t   outliers_onlyRŽ   R�   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   show¡  s
    c         c   s3   x, |  j  D]! } | s# | j ƒ  r
 | Vq
 q
 Wd  S(   N(   R   R   (   R   R“   R�   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR‘   ©  s    c         C   s   d  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR"   ®  s    c         C   s   t  ƒ  ‚ d S(   sE   
    Return results in a format suitable for unpickling in Coot.
    N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_coot_data±  s    c         C   s–   g  } x‰ |  j  | ƒ D]x } g  } | r7 | j ƒ  } n  | j ƒ  } t | ƒ t |  j ƒ k or t |  j ƒ k n s} t ‚ | j | | ƒ q W| S(   s7   
    Format results for display in the Phenix GUI.
    (   R‘   R*   R!   RB   t   gui_list_headerst   gui_formatsR
   Rs   (   R   R“   t   include_zoomt   tableR�   t   extrat   row(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   as_gui_table_data·  s    :c         C   sü   | | g j  d  ƒ d k s! t ‚ | d  k	 rx t | d ƒ rK | j ƒ  } qx t | d ƒ ri | j ƒ  } qx t | ƒ } n  |  j d  k rÌ i  |  _ x9 t |  j	 ƒ D]% \ } } | j ƒ  } | |  j | <q  Wn  |  j j
 | d  ƒ } | d  k	 rø |  j	 | Sd  S(   Ni   RL   R   (   t   countR   R
   RH   RL   R   R’   R€   Rr   R   R   (   R   R$   t   residue_id_strt   i_resR�   t   result_id_str(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   find_residueÅ  s     !	c         C   sü   | | g j  d ƒ d k s! t ‚ | d k	 rx t | d ƒ rK | j ƒ  } qx t | d ƒ ri | j ƒ  } qx t | ƒ } n  |  j d k rÌ i  |  _ x9 t |  j	 ƒ D]% \ } } | j ƒ  } | |  j | <q  Wn  |  j j
 | d ƒ } | d k	 rø |  j	 | Sd S(   sP   
    Attempt to locate a result corresponding to a given atom_group object.
    i   t   atom_group_group_id_strR   N(   R�   R   R
   RH   R¢   R   R’   R€   Rr   R   R   (   R   R$   RK   RŸ   R�   R    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   find_atom_groupØ  s     !	N(   R+   R,   R-   R	   R   t   program_descriptionR‹   R–   R—   R   Rƒ   RZ   R…   R‡   Rˆ   R‰   RŠ   t   syst   stdoutRY   R�   RŒ   RN   R”   R‘   R"   R•   Rœ   R¡   R£   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR|   _  s.   								t   dummy_validationc           B   s    e  Z d  Z d „  Z d „  Z RS(   sœ   
  Placeholder for cases where values may be undefined because of molecule type
  (e.g. all-RNA structures) but we want to substitute None automatically.
  c         C   s   d  S(   N(   R   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __getattr__ó  s    c         C   s   t  S(   N(   RY   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   __nonzero__ö  s    (   R+   R,   R-   R¨   R©   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyR§   î  s   	sØ   
  model = None
      .type = path
      .help = "Model file (PDB or mmCIF)"

  outliers_only = False
    .type = bool
    .help = "Only display outliers"

  verbose = True
    .type = bool
    .help = '''Verbose'''
(   t
   __future__R    t   libtbxR   t   libtbx.str_utilsR   R¥   R   R8   R6   RR   Re   Rq   RY   R{   R_   R|   t   objectR§   t   molprobity_cmdline_phil_str(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/__init__.pyt   <module>   s&   k	P)@	�