ó
¢™xTc           @   sˆ   d  d l  m Z d  d l m Z m Z m Z d  d l m Z d  d l m Z d  d l	 Z	 d e f d „  ƒ  YZ
 d e f d	 „  ƒ  YZ d S(
   iÿÿÿÿ(   t   division(   t   atomt	   atom_infot
   validation(   t   experimental(   t   format_valueNt   waterc           B   sv   e  Z d  Z e j e j d d d d g Z e d „  ƒ Z e	 d „  ƒ Z
 d „  Z d e d	 „ Z d
 „  Z d „  Z RS(   s\   
  Container for information about a water atom, including electron density
  properties.
  t   anomt   nearest_contactt   nearest_atomt   n_hbondsc         C   s   |  j  S(   N(   t   score(   t   self(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   cc   s    c           C   s   d d	 S(
   Ns#   %-20s  %6s  %4s  %6s  %6s  %6s  %5sR   t   b_isot   occs   2Fo-Fcs   Fo-Fct   Anomt   CC(   s   atoms   b_isoR   s   2Fo-Fcs   Fo-FcR   s   CC(    (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   header   s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %2s%4s%1s%1s %-4s(   t   chain_idt   resseqt   icodet   altloct   name(   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   id_str   s    t    c         C   sh   d } | r! |  j  ƒ  r! d } n  d |  j ƒ  |  j |  j |  j |  j t d |  j d d ƒ|  j | f S(   NR   s    ***s.   %-20s  %6.2f  %4.2f  %6.2f  %6.2f  %s  %5.3f%ss   %6.2ft   replace_none_withs   ---(	   t   is_heavy_atomR   R   t	   occupancyt   two_fofct   fofcR   R   R   (   R   t   prefixt   highlight_if_heavyt   flag(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt	   as_string"   s    	!c         C   s:   |  j  d k  p9 |  j d k  p9 |  j d k  p9 |  j d k  S(   Ngš™™™™™é?g      Àg      à?g      ð?(   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   is_bad_water*   s    -c         C   s+   |  j  d k p* |  j d k p* |  j d k S(   Ng      @i    (   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyR   .   s    (   t   __name__t
   __module__t   __doc__R   t	   __slots__R   t   __real_space_attr__t   propertyR   t   staticmethodR   R   t   FalseR"   R#   R   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyR      s   
		t   watersc           B   s`   e  Z d  Z e j d d g Z d „  Z d e d „ Z e j	 d d „ Z
 e j	 d e d „ Z RS(	   sa   
  Assess the properties of solvent atoms, including local environment and
  electron density.
  t   n_badt   n_heavyc         C   s   t  S(   N(   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   get_result_class9   s    g      @c   (      C   s„  t  j |  ƒ d d l m } d d l m } d d l m } d |  _ d |  _	 | j
 ƒ  }	 |	 j ƒ  j d ƒ sw t ‚ | j ƒ  }
 | j d | ƒ } | j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } | j d ƒ } | d |	 d	 | d
 | d | ƒ } g  } xFt |	 ƒ D]8\ } } | | r2| j | d ƒ j ƒ  } |  j d 7_ | | } d  } } xÿ | j ƒ  D]ñ \ } } |	 | } | | } | j j  ƒ  j! ƒ  d k rÑq�n  x­ | D]¥ }  | j" | j | |  d ƒ ƒ }! |! | }" | j ƒ  j# |" ƒ }# | | j$ ƒ }$ | |# ƒ }% t% |$ |% ƒ }& | d  k s_|& | k  rØ|& } t& d | d |! ƒ } qØqØWq�Wt' d | d | j( | | ƒ d | | d | d | d | j) | d | j* | d | j+ | d | j, | d d  ƒ 
}' |' j- ƒ  rt. |' _/ |  j d 7_ n' |' j0 ƒ  rEt. |' _/ |  j	 d 7_	 n  |' j/ sT| rj|  j1 j2 |' ƒ qjq2q2Wt3 |  j1 ƒ |  _4 d  S(   Niÿÿÿÿ(   t"   extract_map_stats_for_single_atoms(   t   adptbx(   t   coli    t   distance_cutoffs   resname HOH and name Ot	   pdb_atomst   xray_structuret   fmodelt	   selectioni   t   Ht   Dt   pdb_atomt   symopR   R   R   R	   R   R   R   R   R
   (   R8   R9   (5   R   t   __init__t   mmtbx.real_space_correlationR0   t   cctbxR1   t   scitbx.matrixR2   R-   R.   t   atomst   extract_i_seqt   all_eqt   AssertionErrort	   unit_cellt   pair_asu_tablet   asu_mappingst   tablet   extract_u_iso_or_u_equivt
   scattererst   extract_occupanciest
   sites_cartt
   sites_fract   atom_selection_cacheR7   t	   enumeratet	   get_rt_mxt   inverset   n_totalt   Nonet   itemst   elementt   uppert   stript   multiplyt   orthogonalizet   xyzt   absR   R   t   u_as_bt   two_fofc_ccst   two_fofc_valuest   fofc_valuest   anom_valuesR#   t   Truet   outlierR   t   resultst   appendt   lent
   n_outliers((   R   t   pdb_hierarchyR5   R6   R3   t   collect_allR0   R1   R2   R4   RD   RE   RF   t	   asu_tablet   u_isost   occupanciesRK   RL   t	   sel_cachet	   water_selt	   map_statsR,   t   i_seqR   t   rt_mx_i_invt   asu_dictR	   R   t   j_seqt   j_sym_groupst   atom_jt   site_jt   j_sym_groupt   rt_mxt   site_jit   site_ji_cartt   vec_it   vec_jit   dxyzt   w(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyR<   ;   s†    					





 
			s     c         C   s…   |  j  d k r) | d | |  j  f IJn  |  j d k rR | d | |  j f IJn  |  j  d k r� |  j d k r� | d | IJn  d  S(   Ni    s   %sPoorly ordered waters:  %4ds   %sMislabeled waters:      %4ds   %sAll waters okay.(   R-   R.   (   R   t   outR   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   show_summary‚   s    c         C   s(  t  |  j ƒ d k r|  j d k r� | | d IJ| | |  j ƒ  j ƒ  IJx4 |  j D]) } | j ƒ  rV | | t | ƒ IJqV qV W| d IJn  |  j d k r| | d IJ| | |  j ƒ  j ƒ  IJx4 |  j D]) } | j ƒ  rÑ | | t | ƒ IJqÑ qÑ W| d IJqn  |  j	 d | d | ƒ d  S(   Ni    s   Waters in poor density:R   s   Possibly mislabeled atoms:R}   R   (
   Rd   Rb   R-   R/   R   R#   t   strR.   R   R~   (   R   R}   R   t   verboset   result(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   showŠ   s     (   R$   R%   R&   R   R'   R/   R`   R<   t   syst   stdoutR~   R‚   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyR,   1   s   	F(   t
   __future__R    t   mmtbx.validationR   R   R   R   t   libtbx.str_utilsR   Rƒ   R   R,   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/waters.pyt   <module>   s   )