ó
±™xTc           @   s   d  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 d d l
 m Z m Z d d l m Z d d l m Z d d	 l Z d d	 l Z d	 d	 d
 „ Z d e f d „  ƒ  YZ d d d d d d g Z d e f d „  ƒ  YZ e j d „ Z e d k re e j d ƒ n  d	 S(   sN   
Convenience tool for collecting validation statistics with minimal overhead.
iÿÿÿÿ(   t   division(   t
   molprobity(   t   file_reader(   t   slots_getstate_setstatet   Auto(   t   Sorryt   Usage(   t	   str_utils(   t   easy_mpNc         C   s«   d  } | d  k rw |  d  k	 s$ t ‚ t j |  d d ƒ} | j d ƒ | j j } | j ƒ  j ƒ  t	 j
 d |  ƒ } n |  d  k s‰ t ‚ t	 j	 d | d t d | ƒ j ƒ  S(   Nt
   force_typet   pdbt   pdb_filet   pdb_hierarchyt   keep_hydrogenst   header_info(   t   Nonet   AssertionErrorR   t   any_filet   assert_file_typet   file_objectt	   hierarchyt   atomst   reset_i_seqR   t   pdb_header_infot   Falset	   summarize(   R   R   R   t   pdb_in(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   summary   s    		t   parallel_driverc           B   s    e  Z d  Z d „  Z d „  Z RS(   s5   
  Simple wrapper for passing to easy_mp.pool_map.
  c         C   s   | |  _  d  S(   N(   R   (   t   selfR   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   __init__%   s    c         C   sZ   d d  l  } | j j j ƒ  } |  j j ƒ  | j ƒ  } d | _ | j | ƒ t	 d | ƒ S(   Niÿÿÿÿt    R   (
   t   iotbx.pdb.hierarchyR
   R   t   rootR   t   modelst   detached_copyt   idt   append_modelR   (   R   t   i_modelt   iotbxt   model_hierarchyt   model(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   __call__(   s    	(   t   __name__t
   __module__t   __doc__R   R*   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyR   !   s   	s   Ramachandran outlierss   Ramachandran favoreds   Rotamer outlierss   C-beta outlierst
   Clashscores   MolProbity scoret   ensemblec           B   sD   e  Z d  Z d d d d d d g Z e d „ Z d
 d d
 d	 „ Z RS(   sŒ   
  MolProbity validation results for an ensemble of models.  Note that the
  number of atoms in each model is not necessarily consistent.
  t   rama_outlierst   rama_favoredt   rotamer_outlierst   c_beta_deviationst
   clashscoret   mpscorec   	      C   s£   t  | j ƒ  ƒ | k s t ‚ t | ƒ } t j d | d | d t | ƒ ƒ } xN |  j D]C } g  } x$ | D] } | j t	 | | ƒ ƒ qk Wt
 |  | | ƒ qX Wd  S(   Nt	   processest
   fixed_funct   args(   t   lenR"   R   R   R   t   pool_mapt   ranget	   __slots__t   appendt   getattrt   setattr(	   R   R   t   n_modelst   nproct   validatet	   summariest   namet   arrayt   s(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyR   H   s    	R   c            s   | d  k r t j } n  d „  ‰ d „  ‰  ‡  ‡ f d †  } | d | IJ| d | | d |  j ƒ f IJ| d | | d |  j ƒ f IJ| d | | d |  j ƒ f IJ| d	 | | d
 |  j ƒ f IJ| d | | d |  j ƒ f IJ|  j d  k	 r| d | | d |  j ƒ f IJn  d  S(   Nc         S   s^   t  |  ƒ d k s- |  j d  ƒ t  |  ƒ k r1 d St |  ƒ t |  ƒ t |  ƒ t  |  ƒ f Sd  S(   Ni    (   NNN(   R9   t   countR   t   mint   maxt   sum(   RE   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   min_max_meanX   s    -c         S   s   t  j |  | d d ƒS(   Nt   replace_none_withs   (none)(   R   t   format_value(   t   formatt   value(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   fs]   s    c            sA   ˆ | ƒ \ } } } d ˆ  |  | ƒ ˆ  |  | ƒ ˆ  |  | ƒ f S(   Ns   %s %s %s(    (   RN   RE   RH   RI   t   mean(   RP   RK   (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt
   format_all_   s    s.   %s                           min    max   means   %sRamachandran outliers = %s %%s   %6.2fs   %s             favored  = %s %%s   %sRotamer outliers      = %s %%s   %sC-beta deviations     = %ss   %6ds   %sClashscore            = %ss   %sMolprobity score      = %s(	   R   t   syst   stdoutR0   R1   R2   R3   R4   R5   (   R   t   outt   prefixt   show_percentilesRR   (    (   RP   RK   sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   showU   s&    		





N(   R+   R,   R-   R<   R   R   R   RX   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyR/   9   s   	c         C   su  d d  l  } t |  ƒ d k s* d |  k r9 t d ƒ ‚ n  | j ƒ  } | j |  ƒ \ } }  |  d } t j j | ƒ s‰ t d | ƒ ‚ n  d d l	 m
 } | | d d ƒj d ƒ } | j j } | j j j ƒ  }	 d  }
 d	 } t |	 ƒ d
 k rt d | ƒ }
 n+ t d | d t |	 ƒ ƒ }
 d t |	 ƒ } | d	 IJ| d | | f IJ|
 j d | d d d t ƒ | d	 IJ|
 S(   Niÿÿÿÿi    s   --helps€  
mmtbx.validation_summary model.pdb

Prints a brief summary of validation criteria, including Ramachandran
statistics, rotamer outliers, clashscore, C-beta deviations, plus R-factors
and RMS(bonds)/RMS(angles) if found in PDB header.  (This is primarily used
for evaluating the output of refinement tests; general users are advised to
run phenix.model_vs_data or the validation GUI.)
s   Not a file: %s(   R   R	   R
   R   i   R   R   R@   s    (%d models)s   Validation summary for %s%s:RU   RV   s     RW   (   t   optparseR9   R   t   OptionParsert
   parse_argst   ost   patht   isfileR   t   iotbx.file_readerR   t   check_file_typeR   R   t   inputt   xray_structures_simpleR   R   R/   RX   t   True(   R8   RU   RY   t   parsert   optionsR   R   R   R   t   xrsRF   t   extra(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   runq   s2    


t   __main__i   (   R-   t
   __future__R    t   mmtbx.validationR   R'   R   t   libtbxR   R   t   libtbx.utilsR   R   R   R   R\   RS   R   R   t   objectR   t   molprobity_stat_labelsR/   RT   Rh   R+   t   argv(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/validation_summary.pyt   <module>   s*   	8#