ó
•™xTc        )   @   s—  d  Z  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 j	 d d	 ƒ j
 ƒ  Z dt du dv dw dx dy dz d{ d| d} d~ d d€ d� d‚ dƒ d„ d… d† d‡ dˆ d‰ dŠ d‹ dŒ d� dŽ d� d� d‘ d’ d“ d” d• d– d— d˜ d™ g& Z e dQ dM dO dS dY d\ d^ d` dg dh dD dG d5 dj g ƒ Z e g  e D] \ Z Z Z Z e e f ^ q"ƒ Z dl e f dm „  ƒ  YZ dn e f do „  ƒ  YZ dp „  Z dq „  Z dr ds „ Z d S(š   sç   
WARNING: IN DEVELOPMENT AND INCOMPLETE.

Tools for formatting the standard "Table 1" in MX papers.  Relies on other
methods (phenix.refine, phenix.model_vs_data, phenix.merging_statistics, etc.)
to extract statistics for display.
iÿÿÿÿ(   t   division(   t   slots_getstate_setstate(   t   Sorry(   t	   str_utilsNu   Ã…s   utf-8t   strictt
   wavelengtht
   Wavelengths   %.4gt	   d_max_mins   Resolution ranges   %.3g - %.3gt   space_groups   Space groups   %st	   unit_cells	   Unit cells   %g %g %g %g %g %gt
   n_refl_alls   Total reflectionss   %ds    _reflns.pdbx_number_measured_allt   n_refls   Unique reflectionss   _reflns.number_obst   multiplicityt   Multiplicitys   %.1fs   _reflns.pdbx_redundancyt   completenesss   Completeness (%)s   %.2fs   _reflns.percent_possible_obst   i_over_sigmas   Mean I/sigma(I)s   _reflns.pdbx_netI_over_sigmaIt   wilson_bs   Wilson B-factors   _reflns.B_iso_Wilson_estimatet   r_syms   R-merges   _reflns.pdbx_Rmerge_I_obst   r_meass   R-meass   _reflns.pdbx_Rrim_I_obst   cc_one_halfs   CC1/2s   %.3gs   _reflns.phenix_cc_1/2t   cc_stars   CC*s   _reflns.phenix_cc_start   n_refl_refines   Reflections used in refinementt   n_frees   Reflections used for R-frees   _refine.ls_number_reflns_R_freet   r_works   R-works   %.4fs   _refine.ls_R_factor_R_workt   r_frees   R-frees   _refine.ls_R_factor_R_freet   cc_works   CC(work)s   %.3ft   cc_frees   CC(free)t   n_atomss   Number of non-hydrogen atomst   n_macro_atomss     macromoleculest   n_ligand_atomss	     ligandst   n_waterss     watert
   n_residuess   Protein residuest   n_nucs   Nucleic acid basest	   bond_rmsds
   RMS(bonds)t
   angle_rmsds   RMS(angles)t   rama_favoreds   Ramachandran favored (%)s   %.2gt   rama_alloweds   Ramachandran allowed (%)t   rama_outlierss   Ramachandran outliers (%)t   rota_outlierss   Rotamer outliers (%)t
   clashscoret
   Clashscoret   adp_means   Average B-factort   adp_mean_mmt   adp_mean_ligt   adp_mean_wats	     solventt   n_tls_groupss   Number of TLS groupst   columnc           B   s\   e  Z d  Z d d d g g  e D] Z e d ^ q Z d „  Z d „  Z d „  Z d „  Z	 RS(	   s&  
  Statistics for a single structure, including optional high-resolution
  shell.  Any combination of standard attributes is permitted as keyword
  arguments to the constructor.  (Note that the high-resolution shell is
  itself another instance of this class, with fewer keywords specified.)
  t   outer_shellt   labelt   anomalous_flagi    c         K   sf   t  | ƒ } xJ |  j D]? } | | j ƒ  k rE t |  | | | ƒ q t |  | d  ƒ q Wd  |  _ d  S(   N(   t   dictt	   __slots__t   keyst   setattrt   NoneR/   (   t   selft   kwdst   name(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   __init__`   s    c         K   s   t  | �  |  _ |  S(   N(   R.   R/   (   R7   R8   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   add_outer_shelli   s    c         C   sÂ   t  |  | d  ƒ } | d  k r. | t k r. d  St  |  j | d  ƒ } t | } | d k rh t | ƒ } n t | | ƒ } | d  k	 r¾ | d k rž t | ƒ } n t | | ƒ } | d | 7} n  | S(   NR   s    (%s)(   t   getattrR6   t   optional_if_noneR/   t   keyword_formatst   format_d_max_mint   format_value(   R7   R9   t   valuet   shell_valuet   fst
   cell_valuet   subvalue(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   format_statm   s    
c         C   se   g  } xO t  D]G \ } } } t |  | d  ƒ } | d  k	 r | j d | | f ƒ q q Wd j | ƒ S(   Ns   %s %ss   
(   t   keywordsR<   R6   t   appendt   join(   R7   t   linest	   stat_nameR0   t   format_stringRA   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   __repr__   s    (
   t   __name__t
   __module__t   __doc__RG   t   kwR3   R:   R;   RF   RM   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyR.   U   s   				t   tablec           B   sk   e  Z d  Z d d d g Z d e d „ Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z RS(   sQ   
  Combined table of statistics for one or more structures published together.
  t   text_field_separationt   columnst    count_anomalous_pairs_separatelyi   c         C   s   | |  _  | |  _ g  |  _ d  S(   N(   RS   RU   RT   (   R7   RS   RU   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyR:   Ž   s    		c         C   s   |  j  j | ƒ d  S(   N(   RT   RH   (   R7   t   col(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt
   add_column”   s    c         C   s·  g  } | j  d g g  |  j D] } | j ^ q ƒ x˜ t D]� \ } } } } g  } x' |  j D] } | j  | j | ƒ ƒ q\ W| g  t t | ƒ ƒ D] } d  ^ q’ k r­ q: n  | j d | ƒ | j  | ƒ q: Wt | ƒ }	 t |  j ƒ d }
 g  t |
 ƒ D]# } g  | D] } | | ^ q^ qú } g  | D] } t	 | d ƒ ^ q*} g  t |	 ƒ D]# } g  | D] } | | ^ q_^ qR} d |  j
 } d j g  | D] } | j | ƒ ^ q•ƒ } | S(   Nt    i    i   t   rightt    s   
(   RH   RT   R0   RG   RF   t   ranget   lenR6   t   insertt   resize_columnRS   RI   (   R7   t   rowsR.   RK   R0   t   fstringt   cif_tagt   rowt   xt   n_rowst   n_colst   iRT   RV   t   jRR   t   sept   out(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   format_as_txt—   s$    -+6"6+c   	      C   s÷   g  } | j  d g g  |  j D] } | j ^ q ƒ x˜ t D]� \ } } } } g  } x' |  j D] } | j  | j | ƒ ƒ q\ W| g  t t | ƒ ƒ D] } d  ^ q’ k r­ q: n  | j d | ƒ | j  | ƒ q: Wd j	 g  | D] } d j	 | ƒ ^ qÛ ƒ S(   NRX   i    s   
t   ,(
   RH   RT   R0   RG   RF   R[   R\   R6   R]   RI   (	   R7   R_   R.   RK   R0   R`   Ra   Rb   Rc   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   format_as_csv«   s    -+c         C   sê  y d d  l  } Wn t k
 r/ t d ƒ ‚ n X| j ƒ  } | j } | j ƒ  } | j j | ƒ | j | j	 j
 ƒ } | j d ƒ | j | ƒ t |  j ƒ d } | j j d g | } | j | Œ  } | j | j d ƒ ƒ g }	 t }
 xd |  j D]Y } | j } | j r| d 7} t }
 n  | j | j	 j
 | ƒ } |	 j | j | ƒ ƒ qô W| j |	 Œ  xð t D]è \ } } } } | j | j | j	 j
 | ƒ ƒ g } d } x€ |  j D]u } | j | ƒ } | d  k rÙ| d 7} n  | j | j	 j | j d	 d
 ƒ ƒ } | j | ƒ | j | j | ƒ ƒ q«W| t | ƒ d k r@qen  | j | Œ  qeW| j | ƒ | j | j	 j ƒ } | j d d ƒ | j | ƒ |
 ræ| j | j	 j ƒ } |  j rÅ| j d ƒ n | j d d ƒ | j | ƒ n  | S(   Niÿÿÿÿs"   The PyRTF module is not available.s4   Table 1.  Data collection and refinement statistics.i   i   RX   t   *i    t	   alignmenti   s9   Statistics for the highest-resolution shell are shown in s   parentheses.s6   * Friedel mates were counted separately where present.s/   * Friedel mates were averaged when calculating s   reflection statistics.(   t   PyRTFt   ImportErrorR   t   Documentt
   StyleSheett   Sectiont   SectionsRH   t	   Paragrapht   ParagraphStylest   Heading2R\   RT   t   TabPSt   DEFAULT_WIDTHt   Tablet   Cellt   FalseR0   R1   t   Truet   AddRowRG   RF   R6   t   Normalt   ParagraphPSRU   (   R7   Ro   t   doct   sst   sectiont   pRe   t
   col_widthsRR   t   headerR1   R.   R0   t   column_labelRK   R`   Ra   Rb   t   n_nonet   txtt   note(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   format_as_rtf¸   sf    			
	$			c         C   s6   t  | d ƒ } |  j ƒ  } | j | ƒ | j ƒ  d  S(   Nt   w(   t   openRj   t   writet   close(   R7   t	   file_namet   fRi   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   save_txtî   s    c         C   s6   t  | d ƒ } |  j ƒ  } | j | ƒ | j ƒ  d  S(   NRŒ   (   R�   Rl   RŽ   R�   (   R7   R�   R‘   Ri   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   save_csvô   s    c         C   sQ   d d  l  } | j ƒ  } |  j ƒ  } t | d ƒ } | j | | ƒ | j ƒ  d  S(   NiÿÿÿÿRŒ   (   Ro   t   RendererR‹   R�   t   WriteR�   (   R7   R�   Ro   t   DRR�   R‘   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   save_rtfú   s    (   RN   RO   RP   R3   R|   R:   RW   Rj   Rl   R‹   R’   R“   R—   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyRR   ‡   s   					6		c         C   sV   y" t  j |  | d d ƒj ƒ  } Wn) t k
 rM } t d |  | f ƒ ‚ n X| Sd  S(   Nt   replace_none_withRX   s   Formatting error: %s, %s(   R   R@   t   stript	   Exceptiont   RuntimeError(   RC   RA   t   val_strt   e(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyR@     s
    "c         C   sl   |  d k s |  d	 k r d S|  \ } } d | } t j d d t j d d d | ƒ ƒ } d | | f Sd S(
   s,   Format a resolution range (e.g. '30 - 2.56')RX   s   %.4g s   \.$s   .0s   0*$s   %.3fs   %s - %sN(   NN(   R6   t   ret   sub(   R   t   d_maxt   d_mint	   d_max_strt	   d_min_str(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyR?     s    
(RY   c         C   s¡   t  g  |  D] } t t | ƒ ƒ ^ q
 ƒ } | d k r\ d | } g  |  D] } | | ^ qH S| d k r� d | } g  |  D] } | | ^ qy St d | ƒ ‚ d  S(   NRY   s   %%%dst   lefts   %%%-dss   Alignemnt '%s' not supported.(   t   maxR\   t   strR›   (   t   cell_valuesRn   t   cellt	   max_widthRC   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyR^     s    +

(   R   R   s   %.4gN(   s	   d_max_mins   Resolution ranges   %.3g - %.3gN(   R   s   Space groups   %sN(   R	   s	   Unit cells   %g %g %g %g %g %gN(   R
   s   Total reflectionss   %ds    _reflns.pdbx_number_measured_all(   R   s   Unique reflectionss   %ds   _reflns.number_obs(   R   R   s   %.1fs   _reflns.pdbx_redundancy(   R   s   Completeness (%)s   %.2fs   _reflns.percent_possible_obs(   R   s   Mean I/sigma(I)s   %.2fs   _reflns.pdbx_netI_over_sigmaI(   R   s   Wilson B-factors   %.2fs   _reflns.B_iso_Wilson_estimate(   R   s   R-merges   %.4gs   _reflns.pdbx_Rmerge_I_obs(   R   s   R-meass   %.4gs   _reflns.pdbx_Rrim_I_obs(   R   s   CC1/2s   %.3gs   _reflns.phenix_cc_1/2(   R   s   CC*s   %.3gs   _reflns.phenix_cc_star(   R   s   Reflections used in refinements   %dN(   R   s   Reflections used for R-frees   %ds   _refine.ls_number_reflns_R_free(   R   s   R-works   %.4fs   _refine.ls_R_factor_R_work(   R   s   R-frees   %.4fs   _refine.ls_R_factor_R_free(   R   s   CC(work)s   %.3fN(   R   s   CC(free)s   %.3fN(   R   s   Number of non-hydrogen atomss   %dN(   R   s     macromoleculess   %dN(   R   s	     ligandss   %dN(   R   s     waters   %dN(   R   s   Protein residuess   %dN(   R    s   Nucleic acid basess   %dN(   R!   s
   RMS(bonds)s   %.3fN(   R"   s   RMS(angles)s   %.2fN(   R#   s   Ramachandran favored (%)s   %.2gN(   R$   s   Ramachandran allowed (%)s   %.2gN(   R%   s   Ramachandran outliers (%)s   %.2gN(   R&   s   Rotamer outliers (%)s   %.2gN(   R'   R(   s   %.2fN(   R)   s   Average B-factors   %.2fN(   R*   s     macromoleculess   %.2fN(   R+   s	     ligandss   %.2fN(   R,   s	     solvents   %.2fN(   R-   s   Number of TLS groupss   %dN(   RP   t
   __future__R    t   libtbxR   t   libtbx.utilsR   R   Rž   t   encodeR™   t   angstromR6   RG   t   setR=   R2   RQ   R0   RC   Ra   R>   R.   RR   R@   R?   R^   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/table_one.pyt   <module>   sp    	12		
