ó
Ã™xTc           @   sv  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d S(   iÿÿÿÿ(   t   division(   t   flex(   t   approx_equal(   t   null_outN(   t   geometry_restraints(   t   tools(   t   line_breaker(   t   format_value(   t   count(   t   ramalyze(   t   rotalyze(   t   cbetadev(   t
   clashscore(   t   molprobity_scoret   geometryc           B   s\   e  Z e d  e d „ Z d d e d d „ Z d „  Z d d „ Z d d „ Z d d „ Z	 RS(	   i
   c         C   s  | |  _  | j ƒ  j ƒ  } | j d | d t ƒ } d  |  _ d  |  _ d  |  _ d  |  _	 d  |  _
 d  |  _ d  |  _ | rYt d | d t ƒ |  _ |  j j |  _ |  j j |  _ |  j j |  _	 t d | d t ƒ |  _ |  j j |  _
 t d | d t d t ƒ  ƒ |  _ |  j j ƒ  |  _ t d | ƒ j ƒ  |  _ t d |  j d |  j
 d |  j	 ƒ |  _ n  t | d	 ƒ rt| j } n | } d  |  _ d  |  _ t | d
 ƒ sŸd  S| j ƒ  |  _ | j  ƒ  |  _ | j! |  _" | j# ƒ  |  _$ | j% ƒ  |  _& | j' ƒ  |  _( | j) ƒ  |  _* | j+ ƒ  |  _, | j- ƒ  |  _. | j/ |  _0 | j1 |  _2 | j3 |  _4 | j5 |  _6 x� d d d d d d d g D]p }	 xg d d d g D]V }
 d |	 |
 d f } t7 |  |	 ƒ d  k rºq…n  t8 |  | t7 |  |	 ƒ |
 d ƒ q…WqoWt | d	 ƒ rþ| j } n | } t9 j: d | d | j; ƒ  j< ƒ } t9 j= d | d | j> ƒ } | j? ƒ  } t@ jA d t@ jB | ƒ d | ƒ |  _C t@ jA d t@ jB | ƒ d | ƒ |  _D t@ jA d t@ jB | ƒ d | ƒ |  _E tF | jG | jH | jI | jJ | jK | jL | jM | jN | jO | jP | jQ ƒ stR ‚ ~ ~ d  S(    Nt
   sites_cartt   compute_gradientst   pdb_hierarchyt   outliers_onlyt   outR   t   rota_outt   rama_favR   t   angle_deviationst   bt   at   ct   pt   llt   dt   nt   meani   t   maxi   t   mini    s   %s_%st   sorted_asu_proxiest   proxiest   datat   n_slots(   R   i   (   s   maxi   (   s   mini    (S   t   cdl_restraintst   atomst   extract_xyzt   energies_sitest   Falset   NoneR   t   ramachandran_outlierst   ramachandran_allowedt   ramachandran_favoredt   rotamer_outlierst
   c_beta_devt   mpscoreR	   t   ramalyze_objt   percent_outlierst   percent_allowedt   percent_favoredR
   t   rotalyze_objR   t   TrueR   t   cbetadev_objt   get_outlier_countt   get_clashscoreR   t   hasattrR   R   R   R   t   bond_deviationst   n_angle_proxiest   a_numbert   get_filtered_n_bond_proxiest   b_numbert   chirality_deviationsR   t   dihedral_deviationsR   t   planarity_deviationsR   t   parallelity_deviationsR   t   nonbonded_deviationsR   t   n_chirality_proxiest   c_numbert   n_dihedral_proxiest   d_numbert   n_planarity_proxiest   p_numbert   n_nonbonded_proxiest   n_numbert   getattrt   setattrR   t   bond_deltast   pair_proxiest   bond_proxiest   angle_deltast   angle_proxiest   nonbonded_distancesR   t	   histogramt   abst   bond_deltas_histogramt   angle_deltas_histogramt   nonbonded_distances_histogramR   t   targett   angle_residual_sumt   bond_residual_sumt   chirality_residual_sumt   dihedral_residual_sumt   nonbonded_residual_sumt   planarity_residual_sumt   parallelity_residual_sumt   reference_dihedral_residual_sumt   ncs_dihedral_residual_sumt   generic_restraint_residual_sumt   AssertionError(   t   selfR   t   restraints_managert   molprobity_scorest   n_histogram_slotsR%   R   R(   t   esgt   restraint_typet
   value_typet   namet   rmgRO   RR   RT   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   __init__   s”    														 " )		$$		>t    c         C   sa   | d  k r t j } n  | r' d } n  | |  j d | ƒ IJ| |  j d | ƒ IJ| j ƒ  d  S(   Ns   REMARK   3  t   prefix(   R*   t   syst   stdoutt    format_basic_geometry_statisticst   format_molprobity_scorest   flush(   Rf   R   Rq   t   pdb_depositiont   message(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   showt   s      	c         C   s
   | j  ƒ  S(   N(   t
   capitalize(   Rf   t   s(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   _capitalize{   s    c         C   s-  d } d | } d } |  j  r, | d 7} n  d | | | | f } t |  d d  ƒ r| d | | | | |  j |  j |  j f | | |  j |  j |  j f | | |  j	 |  j
 |  j f | | |  j |  j |  j f | | |  j |  j |  j f | t d |  j d	 ƒ | f 7} n  | s)|  j | ƒ } n  | S(
   Ns   %6.3f %7.3f %6ds   %ss   GEOSTD + MON.LIB.s    + CDL v1.2s   %sRESTRAINTS LIBRARY
%s  %s
%st   b_meansÁ   
%sDEVIATIONS FROM IDEAL VALUES.
%s               RMSD     MAX  COUNT
%s BOND      : %s
%s ANGLE     : %s
%s CHIRALITY : %s
%s PLANARITY : %s
%s DIHEDRAL  : %s
%s MIN NONBONDED DISTANCE : %s
%ss   %-6.3fi    (   R%   RM   R*   R}   t   b_maxR?   t   a_meant   a_maxR=   t   c_meant   c_maxRF   t   p_meant   p_maxRJ   t   d_meant   d_maxRH   t   strR   R|   (   Rf   Rq   t   fmtt   resultt   rl(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRt   ~   s*    
		c         C   sš   d | } |  j  d  k	 r~ d | | |  j | | |  j  d | |  j d | |  j d | t d |  j ƒ j ƒ  d | |  j f } n  | s– |  j	 | ƒ } n  | S(   Ns   %ssÒ   %sMOLPROBITY STATISTICS.
%s ALL-ATOM CLASHSCORE : %-6.2f
%s RAMACHANDRAN PLOT:
%s   OUTLIERS : %-5.2f %s
%s   ALLOWED  : %-5.2f %s
%s   FAVORED  : %-5.2f %s
%s ROTAMER OUTLIERS : %s %s
%s CBETA DEVIATIONS : %-dt   %s   %6.2f(
   R+   R*   R   R,   R-   R‡   R.   t   stripR/   R|   (   Rf   Rq   R‰   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRu   ¡   s    
	c         C   s&  d d  l  } | d  k r- | j j j ƒ  } n  d | d <|  j rS | d c d 7<n  | j j j d d ƒ } | j d |  j |  j	 d d f ƒ | j d |  j
 |  j d d f ƒ | j d |  j |  j d d f ƒ | j d |  j |  j d d f ƒ | j d |  j |  j d d f ƒ | j | ƒ | S(   Niÿÿÿÿs   GeoStd + Monomer Librarys*   _refine.pdbx_stereochemistry_target_valuess    + CDL v1.2t   headers   _refine_ls_restr.types   _refine_ls_restr.numbers   _refine_ls_restr.dev_ideals   _refine_ls_restr.weights(   _refine_ls_restr.pdbx_restraint_functiont   f_bond_dt   ?t	   f_angle_dt   f_chiral_restrt   f_plane_restrt   f_dihedral_angle_d(   s   _refine_ls_restr.types   _refine_ls_restr.numbers   _refine_ls_restr.dev_ideals   _refine_ls_restr.weights(   _refine_ls_restr.pdbx_restraint_function(   t   iotbx.cif.modelR*   t   cift   modelt   blockR%   t   loopt   add_rowR?   R}   R=   R   RF   R�   RJ   Rƒ   RH   R…   t   add_loop(   Rf   t	   cif_blockt   iotbxR˜   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   as_cif_block¹   s&    
	    	"""""N(
   t   __name__t
   __module__R)   Ro   R*   Ry   R|   Rt   Ru   R�   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR      s   \	#t   model_contentc           B   s#   e  Z d  „  Z d d e d „ Z RS(   c         C   sO   | j  j ƒ  j ƒ  |  _ t j | j  j ƒ  j ƒ  ƒ |  _ | j  j ƒ  |  _ d  S(   N(	   t   xray_structuret
   scattererst   sizet   atoms_countR   t   sumt   extract_occupanciest   atoms_occupancy_sumt*   scattering_types_counts_and_occupancy_sums(   Rf   R–   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRo   Ò   s    !Rp   c         C   s¦   | d  k r t j } n  | r' d } n  d } | | d IJ| | d IJx5 |  j D]* } | | | | j | j | j f IJqS W| | | d |  j |  j f IJd  S(   Ns   REMARK   3  s&      %5s               %10d        %8.2fs   MODEL CONTENT.s1    ELEMENT        ATOM RECORD COUNT   OCCUPANCY SUMt   TOTAL(	   R*   Rr   Rs   R¨   t   scattering_typeR   t   occupancy_sumR¤   R§   (   Rf   R   Rq   Rw   Rˆ   t   item(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRy   Ù   s     	N(   Rž   RŸ   Ro   R*   R)   Ry   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR    Ñ   s   	t   adpc           B   s�   e  Z d  d d d „ Z d d „ Z d „  Z d „  Z d d d e d „ Z d „  Z	 d „  Z
 d d d d	 „ Z d
 „  Z d „  Z d d „ Z RS(   i
   c         C   s|  | j  |  _  | |  _ | |  _ | j ƒ  |  _ t j d d } | j ƒ  } | j j ƒ  } | | @} | | @}	 | j }
 | j j	 | ƒ } | j j	 |	 ƒ } | j j	 | ƒ } | j j	 | ƒ } |
 j
 ƒ  } | j
 ƒ  } | j
 ƒ  } | j
 ƒ  } | j
 ƒ  } |  j | | ƒ \ |  _ |  _ |  _ |  j | | ƒ \ |  _ |  _ |  _ |  j | | ƒ \ |  _ |  _ |  _ |  j | | ƒ \ |  _ |  _ |  _ |  j | | ƒ \ |  _ |  _ |  _ | j j ƒ  } |
 j ƒ  j d | ƒ j	 |
 j ƒ  ƒ } | j ƒ  j d | ƒ j	 | j ƒ  ƒ } | j ƒ  j d | ƒ j	 | j ƒ  ƒ } | j ƒ  j d | ƒ j	 | j ƒ  ƒ } | j ƒ  j d | ƒ j	 | j ƒ  ƒ } |
 j ƒ  j t  ƒ |  _! | j ƒ  j t  ƒ |  _" | j ƒ  j t  ƒ |  _# | j ƒ  j t  ƒ |  _$ | j ƒ  j t  ƒ |  _% |
 j& ƒ  j t  ƒ |  _' | j& ƒ  j t  ƒ |  _( | j& ƒ  j t  ƒ |  _) | j& ƒ  j t  ƒ |  _* | j& ƒ  j t  ƒ |  _+ |  j | ƒ \ |  _, |  _- |  _. |  j | ƒ \ |  _/ |  _0 |  _1 |  j | ƒ \ |  _2 |  _3 |  _4 |  j | ƒ \ |  _5 |  _6 |  _7 |  j | ƒ \ |  _8 |  _9 |  _: t; j< d | | d | ƒ |  _= | | |  _> t; j< d | d | ƒ |  _? |
 j ƒ  j t  ƒ |  _@ d  S(   Ni   i   t	   unit_cellR#   R$   (A   t   wilson_bt	   file_namet	   selectiont   rms_b_iso_or_b_equiv_bondedt   matht   pit   solvent_selectionR¡   t   hd_selectiont   selectt   extract_u_iso_or_u_equivt   mmmdt   b_min_at   b_max_at   b_mean_at   b_min_a_noHt   b_max_a_noHt   b_mean_a_noHt   b_min_s_noHt   b_max_s_noHt   b_mean_s_noHt   b_min_m_noHt   b_max_m_noHt   b_mean_m_noHt   b_min_ht   b_max_ht   b_mean_hR®   R¢   t
   anisotropyt   use_u_anisoR   R6   t	   n_aniso_at   n_aniso_a_noHt   n_aniso_s_noHt   n_aniso_m_noHt	   n_aniso_ht	   use_u_isot   n_iso_at   n_iso_a_noHt   n_iso_s_noHt   n_iso_m_noHt   n_iso_ht   a_min_at   a_max_at   a_mean_at   a_min_a_noHt   a_max_a_noHt   a_mean_a_noHt   a_min_s_noHt   a_max_s_noHt   a_mean_s_noHt   a_min_m_noHt   a_max_m_noHt   a_mean_m_noHt   a_min_ht   a_max_ht   a_mean_hR   RU   t   b_a_noH_histogramt   b_a_noHt   a_a_noH_histogramt   _show_anisotropy(   Rf   R–   Ri   R°   R±   t   epsRµ   R¶   t	   m_noH_selt	   s_noH_selt   xs_at   xs_a_noHt   xs_s_noHt   xs_m_noHt   xs_ht   u_at   u_a_noHt   u_s_noHt   u_m_noHt   u_ht   uct   a_at   a_a_noHt   a_s_noHt   a_m_noHt   a_h(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRo   æ   sf    			$$$$$'''''!!!!!c         C   sJ   | d  k	 r | | } n  t j | d  ƒ t j | d  ƒ t j | d  ƒ f S(   N(   R*   R   t   min_defaultt   max_defaultt   mean_default(   Rf   t   valuesRé   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR¹   #  s
     c
      
   C   sé   g  }
 x’ | | | | | | | | g D]r } | d  k rF t | ƒ } nD t | ƒ j d ƒ rt t d | ƒ j ƒ  } n t d | ƒ j ƒ  } |
 j | ƒ q% Wd |	 d } | |
 d |
 d |
 d |
 d	 |
 d
 |
 d |
 d |
 d f S(   Nt   .s   %8.2fs   %6ds#   %-6s %-6s %-8s%-8s%-8s %-6s%-7s%-7st   |i    i   i   i   i   i   i   i   (   R*   R‡   R   RŒ   t   append(   Rf   R   R   R   R   t   et   ft   gt   ht   padR   R¬   Rˆ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   _fmtl)  s    %  c         C   s5  g  } | j  ƒ  } x] t | j ƒ  ƒ D]I \ } } | j  ƒ  | j ƒ  | d }	 | j | | |	 | g ƒ |	 } q% W| t | ƒ d  | t | ƒ d }
 } d | d | d } xc t |
 | ƒ D]R \ } } | | | d | d | d | d | d | d | d | d f IJqÁ W| d | d | d IJd  S(   Ni   i   R  s6      %d:%10.3f -%8.3f:%5d   |   %d:%10.3f -%8.3f:%5d    i    i   sF                               =>continue=>                              (   t   data_mint	   enumeratet   slotst
   slot_widthR  t   lent   zip(   Rf   RU   R   t   pad_lt   pad_rR‰   t   low_cutoff_1t   i_1t   n_1t   high_cutoff_1t   result1t   result2Rˆ   t   r1t   r2(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt
   _histogram3  s    
)JRp   c         C   s?   | r |  j  d | d d ƒ n |  j d | d | d | ƒ d  S(   NR   Rq   s   REMARK   3  t   padded(   t   show_2t   show_1(   Rf   R   Rq   R  Rw   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRy   C  s    c         C   s)  d „  } g  } d g } xQ |  j  |  j |  j |  j |  j |  j |  j |  j g D] } | j | | ƒ ƒ qO Wd g } xQ |  j	 |  j
 |  j |  j |  j |  j |  j |  j g D] } | j | | ƒ ƒ q¬ Wd g } xQ |  j |  j |  j |  j |  j |  j |  j |  j g D] } | j | | ƒ ƒ q	Wd g } xQ |  j |  j |  j |  j |  j |  j |  j |  j  g D] } | j | | ƒ ƒ qfWd g } xQ |  j! |  j" |  j# |  j$ |  j% |  j& |  j' |  j( g D] } | j | | ƒ ƒ qÃW| | | | | g } d „  }	 |	 |  j) ƒ }
 |	 |  j* ƒ } | |
 | f S(   Nc         S   sL   t  |  t ƒ r" t d |  d d ƒSt  |  t ƒ rD t d |  d d ƒSd Sd  S(   Ns   %dt   replace_none_withs   ---s   %.2f(   t
   isinstancet   intR   t   float(   t   value(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   fsK  s
    t   alls   all(noH)t   solvents   macro.t   hydrogenc         S   s}   g  } |  j  ƒ  } xd t |  j ƒ  ƒ D]P \ } } |  j  ƒ  |  j ƒ  | d } | j | d | | f | g ƒ | } q% W| S(   Ni   s   %.3f - %.3f(   R	  R
  R  R  R  (   RU   R‰   R  R  R  R  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   get_binsk  s     
(+   RÑ   RË   Rº   R»   R¼   RÖ   R×   RØ   R  RÒ   RÌ   R½   R¾   R¿   RÙ   RÚ   RÛ   RÓ   RÍ   RÀ   RÁ   RÂ   RÜ   RÝ   RÞ   RÔ   RÎ   RÃ   RÄ   RÅ   Rß   Rà   Rá   RÕ   RÏ   RÆ   RÇ   RÈ   Râ   Rã   Rä   Rå   Rç   (   Rf   R"  t   table1t   row1R!  t   row2t   row3t   row4t   row5R&  t   table2t   table3(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   format_tablesJ  s<    		"				"	c         C   s1   d „  } | |  j  ƒ } | |  j ƒ } | | f S(   Nc         S   s.   |  j  ƒ  } |  j ƒ  |  j ƒ  f } | | f S(   N(   R  R	  t   data_max(   RU   t   yt   y_range(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt
   get_valuesx  s    (   Rå   Rç   (   Rf   R3  t   y1t   y2(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   format_plotsw  s    	c   
      C   sÿ  | d  k r t j } n  d! \ } } | r9 d" } d# } n  |  j d  k	 rr t d |  j ƒ j ƒ  } d | d } n d } | r¡ | d	 d
 t | d ƒ d } n  | d	 d t | d ƒ d } | | | IJ| d | } | | d | d IJ| | d | d IJ| | d | d IJ| | d |  j |  j |  j	 |  j
 |  j |  j |  j |  j |  j | ƒ	 IJ| | d |  j |  j |  j |  j |  j |  j |  j |  j |  j | ƒ	 IJ| | d |  j |  j |  j |  j |  j |  j |  j |  j |  j | ƒ	 IJ| | d |  j |  j  |  j! |  j" |  j# |  j$ |  j% |  j& |  j' | ƒ	 IJ| | d |  j |  j( |  j) |  j* |  j+ |  j, |  j- |  j. |  j/ | ƒ	 IJ| | d d d | d IJd | d | d }	 | | |	 IJ| | d | d | d IJ|  j0 d |  j1 d | d | d | ƒ |  j2 r´| | d | d d d | d IJd | d | d }	 | | |	 IJ| | d | d | d IJ|  j0 d |  j3 d | d | d | ƒ n  | r×| | d d	 d d IJn | | d d	 d  d IJ| j4 ƒ  d  S($   NRp   t    i   i   s   %9.3fs   |-ADP statistics (Wilson B = t   )s   |-ADP statisticst   -iO   R  iH   sF    Atom    | Number of   | Isotropic or equivalent| Anisotropy lmin/max sF    type    |iso    aniso | min     max     mean   | min   max    mean   sF    - - - - |- - - - - - -| - - - - - - - - - - - -| - - - - - - - - - - s    all     : s    all(noH): s    Sol.    : s    Mac.    : s    Hyd.    : s   - i"   s    |sF       Distribution of isotropic (or equivalent) ADP for non-H atoms:    sF    Bin#      value range     #atoms | Bin#      value range     #atoms  RU   R   R  R  sF                        Distribution of anisotropy:                      iM   iF   (   Rp   Rp   s      s       (5   R*   Rr   Rs   R¯   R‡   RŒ   R  R  RÑ   RË   Rº   R»   R¼   RÖ   R×   RØ   RÒ   RÌ   R½   R¾   R¿   RÙ   RÚ   RÛ   RÓ   RÍ   RÀ   RÁ   RÂ   RÜ   RÝ   RÞ   RÔ   RÎ   RÃ   RÄ   RÅ   Rß   Rà   Rá   RÕ   RÏ   RÆ   RÇ   RÈ   Râ   Rã   Rä   R  Rå   Rè   Rç   Rv   (
   Rf   R   R  Rq   R  R  t   bwt   s1t   ppRm   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR  €  sL     	 # KKKKK%	&( c         C   s¥   g  } x€ | | g D]r } | d  k r4 t | ƒ } nD t | ƒ j d ƒ rb t d | ƒ j ƒ  } n t d | ƒ j ƒ  } | j | ƒ q Wd } | | d | d f S(   NR   s   %8.2fs   %7ds    %6s %7si    i   (   R*   R‡   R   RŒ   R  (   Rf   R   R   R   R¬   Rˆ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   _fmtl2¬  s      c         C   sw  |  j  d  k r! t |  j  ƒ } n4 t |  j  ƒ j d ƒ rU t d |  j  ƒ j ƒ  } n  | | d IJ| | d | IJ| | d t d |  j ƒ j ƒ  IJ| | d IJ| | d IJ| | d |  j |  j |  j	 ƒ IJ| | d	 |  j |  j
 |  j ƒ IJ| | d
 |  j |  j |  j ƒ IJ| | d |  j |  j |  j ƒ IJ| | d |  j |  j |  j ƒ IJ| j ƒ  d  S(   NR   s   %8.2fs   ATOMIC DISPLACEMENT PARAMETERS.s    WILSON B : %-ss&    RMS(B_ISO_OR_EQUIVALENT_BONDED) : %-ss    ATOMS          NUMBER OF ATOMSs                     ISO.  ANISO. s     ALL         :s     ALL (NO H)  :s     SOLVENT     :s     NON-SOLVENT :s     HYDROGENS   :(   R¯   R*   R‡   R   RŒ   R   R²   R=  RÑ   RË   RÒ   RÌ   RÓ   RÍ   RÔ   RÎ   RÕ   RÏ   Rv   (   Rf   R   Rq   R¯   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR  ¶  s     $$$$$c         C   sK   d d  l  } | d  k r- | j j j ƒ  } n  |  j | d <|  j | d <| S(   Niÿÿÿÿs   _reflns.B_iso_Wilson_estimates   _refine.B_iso_mean(   R”   R*   R•   R–   R—   R¯   R¼   (   Rf   R›   Rœ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR�   È  s    N(   Rž   RŸ   R*   Ro   R¹   R  R  R)   Ry   R/  R6  R  R=  R  R�   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR­   å   s   <	
		-		,	
	R–   c           B   sn   e  Z e d e d d  „ Z d d d e d „ Z d d „ Z d d „ Z d d „ Z	 d d „ Z
 d d „ Z RS(	   c      	   C   s—   | j  d | d | d | d | ƒ |  _ t | ƒ |  _ t | ƒ |  _ | j |  _ | j |  _ | j ƒ  |  _ | |  _	 | j
 d t ƒ |  _
 | |  _ d  S(   Nt	   ignore_hdRh   R%   t   general_selectiont   sync_with_xray_structure(   t   geometry_statisticsR   R    t   contentR­   t
   tls_groupst   anomalous_scatterer_groupst   extract_ncs_groupst
   ncs_groupst   ncs_managerR   R6   R%   (   Rf   R–   R>  t   use_molprobityRG  R%   R?  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRo   ×  s    		Rp   c      	   C   sS  | d  k r t j } n  | r' d } n  |  j d  k	 rX |  j j d | d | d | ƒ n  | | IJ|  j j d | d | d | d | ƒ |  j d  k	 rË | | IJt j d |  j j	 d |  j j
 d | ƒ n  |  j d  k	 r÷ | | IJ|  j d | ƒ n  |  j d  k	 r#| | IJ|  j d | ƒ n  |  j d  k	 rO| | IJ|  j d | ƒ n  d  S(   Ns   REMARK   3  R   Rq   Rw   R  t   tlsost   selection_strings(   R*   Rr   Rs   R   Ry   R­   RC  R   t   remark_3_tlsRI  RJ  RD  t   show_anomalous_scatterer_groupsRF  t   show_ncs_groupsRG  t   show_torsion_ncs_groups(   Rf   R   Rq   R  Rw   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRy   î  s.      	"





c      	   C   s×  | d  k r t j } n  d } | | d IJ| | d t |  j ƒ IJx‰t |  j ƒ D]x\ } } | | d | d IJ| j j } xGt t	 d ƒ | j j
 | j | j ƒ D]\ } } } }	 | | d | IJt | d d d	 ƒ}
 xM t |
 ƒ D]? \ } } | d k r!| | d
 | IJqô | | d | IJqô Wt | | d d	 ƒ}
 xM t |
 ƒ D]? \ } } | d k r‡| | d | IJqZ| | d | IJqZW| | d t | d ƒ IJ| | d |	 IJq­ WqW Wd  S(   Ns   REMARK   3  s   NCS DETAILS.s    NUMBER OF NCS GROUPS : %-6ds    NCS GROUP : %-6di   s     NCS OPERATOR : %-di    t   widthi"   s      REFERENCE SELECTION: %ss                         : %ss      SELECTION          : %ss      ATOM PAIRS NUMBER  : %-ds      RMSD               : %-10.3f(   R*   Rr   Rs   R  RF  R
  t   groupRJ  R  R   t   selection_pairst   matricest   rmsR   (   Rf   R   t   prt   i_groupt	   ncs_groupRJ  t   i_opt   pairt   mxRS  t   linest   i_linet   line(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRM    s4     		c         C   s¤  d d  l  } | d  k r- | j j j ƒ  } n  | j j j d d' ƒ } | j j j d d( ƒ } | j j j d d) ƒ } | j j j d d* ƒ } | j j j d d+ ƒ } d" } |  j d  k	 rx�t |  j ƒ D]M\ }	 }
 | j |	 d# d$ f ƒ |
 j	 j
 } |
 j } |
 j } t |
 j	 j d" ƒ } xó t | ƒ D]å \ } } | j | d# |	 d# d$ f ƒ | j |	 d# | d# d$ d$ d$ d$ | f ƒ | d" k r.|
 j | d# } | d# 7} | d% g } | j | j ƒ | j | j ƒ | j d$ ƒ | j | ƒ | j d# | d# |	 d# | f ƒ q.q.WqÊ Wn/|  j d  k	 rM|  j j j } xt |  j j ƒ D]÷ \ }	 }
 | j |	 d# d$ f ƒ | |	 j } xÄ t |
 ƒ D]¶ \ } } | | } | j | d# |	 d# d$ f ƒ |  j j | } | j d& ƒ d" j ƒ  d# j ƒ  } xL t | ƒ D]> \ } } | j |	 d# | d# | | d" | | d# | f ƒ q WqŒWqOWn  | j | ƒ | j | ƒ | j | ƒ |  j d  k	 r | j | ƒ | j | ƒ n  | S(,   NiÿÿÿÿR�   s   _struct_ncs_ens.ids   _struct_ncs_ens.detailss   _struct_ncs_dom.ids   _struct_ncs_dom.pdbx_ens_ids   _struct_ncs_dom.detailss   _struct_ncs_dom_lim.pdbx_ens_ids   _struct_ncs_dom_lim.dom_ids$   _struct_ncs_dom_lim.beg_auth_asym_ids#   _struct_ncs_dom_lim.beg_auth_seq_ids$   _struct_ncs_dom_lim.end_auth_asym_ids#   _struct_ncs_dom_lim.end_auth_seq_ids%   _struct_ncs_dom_lim.selection_detailss   _struct_ncs_oper.ids   _struct_ncs_oper.codes   _struct_ncs_oper.matrix[1][1]s   _struct_ncs_oper.matrix[1][2]s   _struct_ncs_oper.matrix[1][3]s   _struct_ncs_oper.matrix[2][1]s   _struct_ncs_oper.matrix[2][2]s   _struct_ncs_oper.matrix[2][3]s   _struct_ncs_oper.matrix[3][1]s   _struct_ncs_oper.matrix[3][2]s   _struct_ncs_oper.matrix[3][3]s   _struct_ncs_oper.vector[1]s   _struct_ncs_oper.vector[2]s   _struct_ncs_oper.vector[3]s   _struct_ncs_oper.detailss   _struct_ncs_ens_gen.dom_id_1s   _struct_ncs_ens_gen.dom_id_2s   _struct_ncs_ens_gen.ens_ids   _struct_ncs_ens_gen.oper_idi    i   R�   t   givent   and(   s   _struct_ncs_ens.ids   _struct_ncs_ens.details(   s   _struct_ncs_dom.ids   _struct_ncs_dom.pdbx_ens_ids   _struct_ncs_dom.details(   s   _struct_ncs_dom_lim.pdbx_ens_ids   _struct_ncs_dom_lim.dom_ids$   _struct_ncs_dom_lim.beg_auth_asym_ids#   _struct_ncs_dom_lim.beg_auth_seq_ids$   _struct_ncs_dom_lim.end_auth_asym_ids#   _struct_ncs_dom_lim.end_auth_seq_ids%   _struct_ncs_dom_lim.selection_details(   s   _struct_ncs_oper.ids   _struct_ncs_oper.codes   _struct_ncs_oper.matrix[1][1]s   _struct_ncs_oper.matrix[1][2]s   _struct_ncs_oper.matrix[1][3]s   _struct_ncs_oper.matrix[2][1]s   _struct_ncs_oper.matrix[2][2]s   _struct_ncs_oper.matrix[2][3]s   _struct_ncs_oper.matrix[3][1]s   _struct_ncs_oper.matrix[3][2]s   _struct_ncs_oper.matrix[3][3]s   _struct_ncs_oper.vector[1]s   _struct_ncs_oper.vector[2]s   _struct_ncs_oper.vector[3]s   _struct_ncs_oper.details(   s   _struct_ncs_ens_gen.dom_id_1s   _struct_ncs_ens_gen.dom_id_2s   _struct_ncs_ens_gen.ens_ids   _struct_ncs_ens_gen.oper_id(   R”   R*   R•   R–   R—   R˜   RF  R
  R™   RP  RJ  RR  RS  R  RQ  t   extendt   rt   tR  RG  t   paramst   restraint_groupR±   t   master_rangest   splitRŒ   Rš   (   Rf   R›   Rœ   t   ncs_ens_loopt   ncs_dom_loopt   ncs_dom_lim_loopt   ncs_oper_loopt   ncs_ens_gen_loopt   oper_idRU  RV  RJ  RR  RS  t
   pair_countt   i_domaint   domain_selectiont   rt_mxt   rowt   restraint_group_paramst
   ncs_domainR±   t   segmentst   asym_idt	   i_segmentt   segment_range(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   ncs_as_cif_block"  s¢     	  	      	              	   			$
/
##c         C   sX  | d  k r t j } n  |  j j j } |  j j d |  j ƒ } |  j j ƒ  j	 ƒ  } |  j j
 d | ƒ d } | | d IJ| | d t | ƒ IJx,t | ƒ D]\ } } d } | | d | d IJ| j }	 x~ |	 D]v }
 t |
 d	 d
 ƒ} xM t | ƒ D]? \ } } | d k r*| | d | IJqý | | d | IJqý W| | |
 7} qØ W| | d | IJ|  j j d  k	 r‘| | d |  j j IJn  |  j j d  k	 r  | | d |  j j IJq  q  W|  j j d  k	 r| | d IJ|  j j j d | d | d d d ƒ n  |  j j d  k	 rT| | d IJ|  j j j d | d | d d d ƒ n  d  S(   NR   R   s   REMARK   3  s   TORSION NCS DETAILS.s    NUMBER OF NCS GROUPS : %-6di    s    NCS GROUP : %-6di   RO  i"   s      SELECTION          : %ss                         : %ss      RESTRAINED TORSIONS: %-ds      BELOW LIMIT RMSD   : %-10.3fs      ALL RESTRAINT RMSD : %-10.3fs'     Histogram of differences under limit:R  Rq   s     t   format_cutoffss   %8.3fs&     Histogram of differences over limit:(   R*   Rr   Rs   RG  Rb  Rc  t"   get_number_of_restraints_per_groupR   R&   R'   t   get_torsion_rmsdR  R
  R±   R   t   torsion_rmsdt   all_torsion_rmsdt   histogram_under_limitRy   t   histogram_over_limit(   Rf   R   t   restraint_groupst   torsion_countsR   RT  RU  RV  R   RJ  R±   RZ  R[  R\  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRN  }  sP     	




c         C   s  | d  k r t j } n  d } | | d IJ| | d t |  j ƒ IJd } xÆ |  j D]» } | d 7} | | d | IJt | j d d ƒ} xM t | ƒ D]? \ } } | d k rÈ | | d	 | IJq› | | d
 | IJq› W| | d | j IJ| | d | j	 IJ| j
 ƒ  qW Wd  S(   Ns   REMARK   3  s#   ANOMALOUS SCATTERER GROUPS DETAILS.s,    NUMBER OF ANOMALOUS SCATTERER GROUPS : %-6di    i   s!    ANOMALOUS SCATTERER GROUP : %-6dRO  i-   s     SELECTION: %ss              : %ss     fp  : %-15.4fs     fdp : %-15.4f(   R*   Rr   Rs   R  RD  R   t   selection_stringR
  t   f_primet   f_double_primeRv   (   Rf   R   RT  t   counterRP  RZ  R[  R\  (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRL  §  s$     

c         C   sÑ   d d  l  } |  j d  k	 r3 |  j j d | ƒ } n  |  j j d | ƒ } |  j d  k	 rŠ | j j j d |  j j	 d |  j j
 d | ƒ } n  |  j d  k	 rœ n  |  j d  k	 sº |  j d  k	 rÍ |  j d | ƒ n  | S(   NiÿÿÿÿR›   RI  RJ  (   t   iotbx.pdb.mmcifR   R*   R�   R­   RC  t   pdbt   mmcift   tls_as_cif_blockRI  RJ  RD  RF  RG  Rw  (   Rf   R›   Rœ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR�   »  s    N(   Rž   RŸ   R6   R*   R)   Ro   Ry   RM  Rw  RN  RL  R�   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR–   Ö  s   [*t   infoc           B   s>   e  Z d d d e d e d d  „ Z d d „ Z d d „ Z RS(   c	   
      C   s0  | }	 | d  k rr | d  k rr | j d  k rr | j j d  k ro | j j j d  k rl | j j j j } ql qo qr n  t j j d | d | d | d | d |	 j j	 d | ƒ |  _ d	 \ |  _
 |  _ | d  k	 rö | j d |	 j j d |	 j j ƒ |  _
 n  | d  k	 r,| j d |	 j j d |	 j j ƒ |  _ n  d  S(
   NR–   R>  RH  RG  R%   R?  t   free_reflections_per_bint   max_number_of_bins(   NN(   R*   Rg   R   t   generic_restraints_managerRG  t   mmtbxt   model_statisticsR–   t   pdb_interpretationt   cdlt   data_xt   data_nR‰  t
   alpha_betaRŠ  t   maint   max_number_of_resolution_bins(
   Rf   R–   t   fmodel_xt   fmodel_nt   refinement_paramsR>  R?  RH  RG  t   ref_par(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRo   Í  s.    			c         C   sÉ   d } | d  k r t j } n  |  j d  k	 rH | | d IJ| | IJn  |  j j d | ƒ | | IJ|  j d  k	 r¬ | | d IJ| | IJ|  j j d | ƒ | | IJn  |  j j d | d t ƒ d  S(   Ns   REMARK   3  s   X-RAY DATA.R   s   NEUTRON DATA.Rw   (	   R*   Rr   Rs   R’  R‘  t   show_remark_3R–   Ry   R6   (   Rf   R   Rq   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyRš  ï  s     

c         C   s.   |  j  j d | ƒ } |  j j d | ƒ } | S(   NR›   (   R‘  R�   R–   (   Rf   R›   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR�   þ  s    N(   Rž   RŸ   R*   R6   Ro   Rš  R�   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyR‰  Ì  s   ($   t
   __future__R    t   cctbx.array_familyR   t   libtbx.test_utilsR   t   libtbx.utilsR   Rr   R³   R�  t   cctbxR   t	   mmtbx.tlsR   t   libtbx.str_utilsR   R   t	   itertoolsR   t   mmtbx.validation.ramalyzeR	   t   mmtbx.validation.rotalyzeR
   t   mmtbx.validation.cbetadevR   t   mmtbx.validation.clashscoreR   t   mmtbx.validation.utilsR   t   objectR   R    R­   R–   R‰  (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_statistics.pyt   <module>   s&   $Àñö