ó
»™xTc        	   @   s&  d  d l  m Z d  d l 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 m Z d  d l m Z 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 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 Z d  d l Z d  d l Z d  d l Z e j  d ƒ e j! d ƒ d e" f d „  ƒ  YZ# d „  Z$ d „  Z% e& d „ Z' d „  Z( d „  Z) d „  Z* d d d „ Z+ d Z, d Z- d „  Z. d e/ d d  d! e0 e& e j1 d" „ Z2 d# „  Z3 d S($   iÿÿÿÿ(   t   divisionN(   t   flex(   t   pdb(   t   adptbxt   sgtbx(   t   Sorryt   null_out(   t   reflection_file_utils(   t   real_space_correlation(   t   format_value(   t   utils(   t   easy_pickle(   t   StringIO(   t   model_statistics(   t
   group_argsi    t   mvdc           B   sD   e  Z d  „  Z d d d d d d d d „ Z d „  Z d d „ Z RS(   c         C   sU   d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _	 d  S(   N(
   t   Nonet   crystalt   modelst   datat   model_vs_datat
   pdb_headert   misct   pdb_filet   fmodelt   maps(   t   self(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   __init__   s    								c         C   s¬   | d  k	 r | |  _ n  | d  k	 r0 | |  _ n  | d  k	 rH | |  _ n  | d  k	 r` | |  _ n  | d  k	 rx | |  _ n  | d  k	 r� | |  _ n  | d  k	 r¨ | |  _ n  d  S(   N(   R   R   R   R   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   collect(   s           c         C   s
   t  |  ƒ S(   N(   t   summarize_results(   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   get_summary8   s    c         C   së  | d  k r t j } n  | d I|  j j IJ| d I|  j j Id I|  j j IJ| d It |  j ƒ IJxst	 |  j ƒ D]b\ } } | d t
 d | d ƒ j ƒ  IJ| d I| j IJ| d	 IJd
 } xF | j D]; } | j ƒ  } t | d
 ƒ | k rÚ t | d
 ƒ } qÚ qÚ Wd t
 | ƒ d } x7 | j D], } | j ƒ  \ } } | | | | f IJq7W| j }	 | d IJ| d |	 j j IJd }
 xH |	 j j j ƒ  D]4 } t | j d ƒ d ƒ } | |
 k r§| }
 q§q§Wx] |	 j j j ƒ  D]I } d t
 |
 ƒ d } d d | d } | | t | j d ƒ ƒ IJqòW| d IJ| d |	 j j |	 j j |	 j j |	 j j f IJ|	 j d  k	 r¿| d |	 j j |	 j j |	 j j |	 j j f IJn  |	 j d  k	 r| d |	 j j |	 j j |	 j j |	 j j f IJn  |	 j d  k	 rG| d |	 j j |	 j j |	 j j |	 j j f IJn  |	 j d  k	 r‹| d |	 j j |	 j j |	 j j |	 j j f IJn  |	 j d  k	 rÏ| d |	 j j |	 j j |	 j j |	 j j f IJn  | j d  k	 r| d t d | j ƒ j ƒ  IJn  | d |	 j j |	 j j |	 j j  f IJ| d t d  |	 j j! ƒ IJ| d! |	 j j" IJ| j# } | d  k	 rZ| d" IJ| d# | j$ d$ | j$ d | j% f IJ| d% | j& d$ | j& d | j' f IJ| d& | j( d$ | j( d | j) f IJ| d' | j* d$ | j* d | j+ f IJ| d( | j, d$ | j, d | j- f IJ| d) | j. d
 IJn  | j/ | j0 g j1 d  ƒ d
 k r³| j2 } | d  k	 rz| d* IJ| d# | j$ d$ | j$ d | j% f IJ| d% | j& d$ | j& d | j' f IJ| d& | j( d$ | j( d | j) f IJ| d' | j* d$ | j* d | j+ f IJ| d( | j, d$ | j, d | j- f IJ| d) | j. d
 IJn  | j0 } | d  k	 ry| d+ IJ| d# | j$ d$ | j$ d | j% f IJ| d% | j& d$ | j& d | j' f IJ| d& | j( d$ | j( d | j) f IJ| d' | j* d$ | j* d | j+ f IJ| d( | j, d$ | j, d | j- f IJ| d) | j. d
 IJn  | j/ } | d  k	 r³| d, IJ| d) | j. d
 IJq³n  | j3 d  k	 r | j3 j4 } | j3 j5 } | j3 j6 } | d- IJ| d. IJ| d/ | d
 | d d0 d f IJ| d1 | d
 | d d0 d f IJ| d2 | d
 | d d0 d f IJ| d3 | j3 j7 d
 t
 d4 | j3 j7 d d0 ƒ j ƒ  d f IJ| d5 | j3 j8 IJ| d6 | j3 j9 IJ| d7 | j3 j: IJq q W| d8 IJd9 j; d: |  j< j= d; t d< |  j< j> ƒ d= t d> |  j< j? ƒ d? t d> |  j< j@ ƒ d@ t d> |  j< jA ƒ dA t d> |  j< jB ƒ dB t dC |  j< jC ƒ dD t dE |  j< jD ƒ dF t dE |  j< jE ƒ dG t dH |  j< jF ƒ dI t dJ |  j< jG ƒ dK t dE |  j< jH ƒ dL t dJ |  j< jI ƒ dM t dN |  j< jJ ƒ g ƒ } | dO I| IJ| dP IJdQ t dR |  jK jL ƒ j ƒ  dS t dR |  jK jM ƒ j ƒ  g } |  jK jN } | d  k	 r¦
| dT 9} n  | jO dU t dV | ƒ ƒ d9 j; | ƒ } | dO I| IJ|  jP d  k	 r| dW IJ| dX I|  jP jQ IJ| dY I|  jP jR IJ| dZ I|  jP jS IJ| d[ I|  jP jT IJ| d\ I|  jP jU IJ| d] I|  jP jV IJn  |  jW d  k	 rt| d^ IJ| d_ t d` |  jW jX ƒ IJ| da t d` |  jW jY ƒ IJ| db t d` |  jW jL ƒ IJ| dc t d` |  jW jM ƒ IJ| dd t d` |  jW j> ƒ IJ| de t d` |  jW j? ƒ IJ| df t d` |  jW jZ ƒ IJ| dg t d` |  jW j[ ƒ IJ|  jW j\ d  k	 r²| dh t d` |  jW j\ ƒ IJn | di t d` |  jW j\ ƒ IJ|  jW j] d  k	 r5| dj t d` dk j; t
 |  jW j] j^ j_ ƒ dl t
 t |  jW j] j` ƒ ƒ g ƒ ƒ IJn
 | dm IJ|  jW ja d  k	 rt| dn t d` |  jW ja ƒ IJqtn  | do IJ| dp t d |  jb jc ƒ j ƒ  IJ| dq t dr |  jb jd ƒ j ƒ  IJ| ds t dr |  jb je ƒ j ƒ  IJd  S(t   Ns     Unit cell:       s     Space group:     s   number of symmetry operations:s     Number of models:s     Model #%s:s   %di   s4       Number of residues in alternative conformations:s       Residue content:i    s         %-s   s : %ss
       Atoms:s         content: %st   :t   %t   ss           %s s
   count: %s s   occupancy sum: %ss         ADP (min,max,mean):s*           all           (%s atoms): %s %s %ss*           side chains   (%s atoms): %s %s %ss*           main chains   (%s atoms): %s %s %ss*           macromolecule (%s atoms): %s %s %ss*           ligands       (%s atoms): %s %s %ss*           solvent       (%s atoms): %s %s %ss         mean bonded (Bi-Bj) : %ss   %8.2fs1         occupancies (min,max,mean)       : %s %s %ss)         number_of_anisotropic            : s   %-7ss+         number_of_non_positive_definite  : %ss<       Stereochemistry statistics (mean, max, count) - overall:s'         bonds            : %8.4f %8.4f %di   s'         angles           : %8.4f %8.4f %ds'         dihedrals        : %8.4f %8.4f %ds'         chirality        : %8.4f %8.4f %ds'         planarity        : %8.4f %8.4f %ds         non-bonded (min) : %8.4fsB       Stereochemistry statistics (mean, max, count) - macromolecule:s<       Stereochemistry statistics (mean, max, count) - ligands:s)       Stereochemistry statistics - solvent:s       Molprobity statistics:s#         Ramachandran plot, number of:s#           outliers : %-5d (%-5.2f %s)g      Y@s#           allowed  : %-5d (%-5.2f %s)s#           favored  : %-5d (%-5.2f %s)s*         Rotamer outliers        : %d (%s %s)s   %6.2fs"         Cbeta deviations >0.25A : %dsK         All-atom clashscore     : %.2f (steric overlaps >0.4A per 1000 atoms)s$         Overall score           : %.2fs     Data:s    
    s)   data_label                           : %ss'   high_resolution                      : s   %-5.2fs'   low_resolution                       : s   %-6.2fs'   completeness_in_range                : s'   completeness(d_min-inf)              : s'   completeness(6A-inf)                 : s'   wilson_b                             : s   %-6.1fs'   number_of_reflections                : s   %-8ds'   number_of_reflections(non-anomalous) : s'   test_set_size                        : s   %-8.4fs'   test_flag_value                      : s   %-ss'   number_of_Fobs_outliers              : s'   twinned                              : s'   anomalous_flag                       : s   %-6ss      s     Model_vs_Data:s'   r_work(re-computed)                : %ss   %-6.4fs'   r_free(re-computed)                : %sid   s+   solvent_content_estimated_via_mask : %-s %%s   %.1fs4       mFo-DFc map: positive and negative peak numbers:s         >  3 sigma: s         >  6 sigma: s         >  9 sigma: s         < -3 sigma: s         < -6 sigma: s         < -9 sigma: s-     Information extracted from PDB file header:s       program_name    : %-ss   %ss       year            : %-ss       r_work          : %-ss       r_free          : %-ss       high_resolution : %-ss       low_resolution  : %-ss       sigma_cutoff    : %-ss       matthews_coeff  : %-ss       solvent_cont    : %-s %%s       solvent_cont    : %-ss       TLS             : %-st    s   (number of groups: %s)s       TLS             : Nones       exptl_method    : %-ss.     After applying resolution and sigma cutoffs:s       n_refl_cutoff : %-ss       r_work_cutoff : %-ss   %6.4fs       r_free_cutoff : %-s(f   R   t   syst   stdoutR   t   uct   sgt   n_sym_opt   lenR   t	   enumeratet   strt   stript   n_residues_in_altlocst   resname_classest   splitt   xray_structure_statt   allt   n_atomst   atom_counts_strt   tuplet   b_mint   b_maxt   b_meant	   sidechaint   backbonet   macromoleculet   ligandt   solventt   rms_b_iso_or_b_equiv_bondedR	   t   o_mint   o_maxt   o_meant   n_anisot   n_npdt   geometry_allt   bt   b_numbert   at   a_numbert   dt   d_numbert   ct   c_numbert   pt   p_numbert   nt   geometry_solventt   geometry_ligandt   countt   geometry_macromoleculet
   molprobityt   ramalyze_outlierst   ramalyze_allowedt   ramalyze_favoredt   rotalyzet   cbetadevt
   clashscoret   mpscoret   joinR   t
   data_labelt   high_resolutiont   low_resolutiont   completeness_in_ranget   completeness_d_min_inft   completeness_6A_inft   wilson_bt   number_of_reflectionst   number_of_reflections_mergedt   test_set_sizet   test_flag_valuet   number_of_Fobs_outlierst   twinnedt   anomalous_flagR   t   r_workt   r_freet   solvent_content_via_maskt   appendR   t   peaks_plus_3t   peaks_plus_6t   peaks_plus_9t   peaks_minus_3t   peaks_minus_6t   peaks_minus_9R   t   program_namet   yeart   sigma_cutofft   matthews_coefft   solvent_contt   tlst   pdb_inp_tlst   tls_presentt   tls_selectionst   exptl_methodR   t   n_refl_cutofft   r_work_cutofft   r_free_cutoff(   R   t   logt   i_seqt   i_modelt   len_maxt   kt   fmtt   rct   vt   xt   max_field_for_element_countt   element_occupancy_sumt   individual_element_count_lent   ieclt   gt   outlt   allot   favot   resultt   sc(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   show;   s>    "
	
 	
!
2 5 5 5 5 5#)	
(((((!	
(((((	
(((((	


###+

" 	

 )

##N(   t   __name__t
   __module__R   R   R   R   R“   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyR      s   			c         C   sÊ   d  } t } | } d } x= | j ƒ  D]/ } | j d ƒ r% t } t | | ƒ } Pq% q% W| rÂ |  } t d | j j ƒ  d | j j	 ƒ  d | j j
 ƒ  d | j j ƒ  d | j d | j d	 | j ƒ Sd  Sd  S(
   Ni    t
   amino_acidRS   RT   RU   RV   RW   RX   RY   (   R   t   Falset   keysRP   t   Truet   intR   t   ramalyze_objt   get_outliers_count_and_fractiont   get_allowed_count_and_fractiont   get_favored_count_and_fractiont   rotalyze_objt
   c_beta_devRX   RY   (   t   model_statistics_geometryR-   R‘   t   need_ramachandranR†   t
   n_residuesR„   t   msg(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   molprobity_statsß   s(    		
c   )      C   sY  t  |  ƒ d k rI |  d } x! |  d D] }	 | j |	 ƒ } q' W| }  n
 |  d }  t j d |  d | j ƒ  d t d t d t ƒ |  j ƒ  }
 | r |  j ƒ  j	 ƒ  j
 ƒ  } d | k pÀ d	 | k } | j d
 t d d d | ƒ } t j j d | d t ƒ } n  | j ƒ  } g  } d  } x*t | ƒ D]\ } } t j j ƒ  } | j | | j ƒ  ƒ | j ƒ  } | j | j | j } g  } x] t | j j
 ƒ  | j j ƒ  ƒ D]: \ } } | j d j | j  d d ƒ t! | ƒ g ƒ ƒ q¢W|  j" | ƒ } | j# ƒ  j$ ƒ  | j% ƒ  j$ ƒ  k st& ‚ | j ƒ  } | | d „ } | d | d | ƒ } | j' t ƒ d k rˆ| d k rˆt( d | d | d | ƒ } n t( d | d | ƒ } d  } d  } d  }  d  }! d  }" d  }# | rû| j' t ƒ d k rG| d k rG| j" | ƒ } | j" | ƒ } | j" | ƒ } | j) j" d |
 ƒ } | d |
 d | ƒ } n  t* j+ |  j% ƒ  j$ ƒ  | ƒ }$ | j) j" d |$ ƒ } t j j d | d t ƒ }% |% j) j, d | j- ƒ  ƒ t. j) d | d t d |% ƒ }! | j/ j' t ƒ d k r | j/ }& t. j) d | j" |& ƒ d t d |% j" |& ƒ ƒ } n  | j0 j' t ƒ d k rt| j0 }' t. j) d | j" |' ƒ d t d |% j" |' ƒ ƒ } n  | j1 j' t ƒ d k rÈ| j1 }( t. j) d | j" |( ƒ d t d |% j" |( ƒ ƒ }  n  t j2 d |% d | ƒ }# t3 d |! d | j ƒ }" n  | j t4 d | d | d  | d! |# d" |! d# | d$ | d% |  d& |" ƒ 	ƒ q%W| j5 d' | ƒ | S((   Ni   i    t   x1t   x2t   sitest   adpt   occupanciest   Ht   Dt   show_energiest   plain_pairs_radiusg      @t   assume_hydrogens_all_missingt   geometryt   normalizationR"   t   common_t    c         S   s‹   t  ƒ  } | j j |  ƒ | _ | j j |  ƒ | _ | j j |  ƒ | _ | j j |  ƒ | _ | j j |  ƒ | _ | j j |  ƒ | _ | S(   N(   R   R0   t   selectR9   R;   R:   R8   R7   (   t	   selectiont   atom_selectionsR‘   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   select_atom_selections.  s    	Rµ   R¶   t   neutront   xray_structuret   hd_selt
   sites_cartt   pdb_hierarchyt   molprobity_scorest   restraints_managerR¡   R-   R,   R/   R<   RB   RQ   RN   RO   RR   R   (6   R(   t   concatenateR
   t   assert_xray_structures_equalR¹   R™   R—   t   hd_selectiont   scattering_type_registryt   type_count_dictR˜   t   geometry_restraints_managert   mmtbxt
   restraintst   managerR   R   R)   R   t	   hierarchyt   roott   append_modelt   detached_copyt   overall_countst   n_alt_conf_puret   n_alt_conf_propert   n_alt_conf_impropert   zipR-   t   valuesRl   RZ   t   replaceR*   R´   t   atomst   sizet
   scattererst   AssertionErrorRP   t   show_xray_structure_statisticsR°   R   t   boolt   pair_proxiesR»   R   R9   R;   R:   R<   R¥   R   R   ()   t   xray_structurest   processed_pdb_filet   scattering_tableRÈ   t   model_selectionst   show_geometry_statisticst   mvd_objR¶   t   tmpt   xit
   hd_sel_allt	   sctr_keyst   has_hdR°   t   restraints_manager_allR   t   geometry_statisticsR,   R�   t   model_selectiont   hierarchy_i_seqt   overall_counts_i_seqR-   R„   R‡   R¹   Rº   R·   t   atom_selections_i_modelR/   t'   model_statistics_geometry_macromoleculet!   model_statistics_geometry_solventt    model_statistics_geometry_ligandt   model_statistics_geometry_allt   molprobity_stats_i_seqR<   t   model_selection_as_boolR¾   t   mac_selt   sol_selt   lig_sel(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   show_geometryõ   sæ    	
	
		

2*		!	!													c         C   s¸  t  d d  d d  d d  d d  d d  d d  ƒ } | d  k	 rL |  j | ƒ }  n  xe| j j ƒ  D]T} | j | } | j t ƒ d k r\ | d  k	 r£ | j | ƒ } n  |  j | ƒ } | j ƒ  } g  } xG | D]? }	 | j d |	 j	 t
 |	 j ƒ t
 d	 |	 j ƒ j ƒ  f ƒ qË Wd
 j | ƒ }
 | j ƒ  } | j ƒ  j t ƒ } | j ƒ  j t ƒ } t d t j t j | ƒ ƒ ƒ } t d t j t j | ƒ ƒ ƒ } t d t j t j | ƒ ƒ ƒ } t d | j ƒ  j ƒ  ƒ j ƒ  } t d | ƒ j ƒ  } | j ƒ  j ƒ  } t d t j | ƒ ƒ j ƒ  } t d t j | ƒ ƒ j ƒ  } t d t j | ƒ ƒ j ƒ  } t  d | d |
 d | d | d | d | d | d | d | d | ƒ 
} t | | | ƒ q\ q\ W| S(   NR0   R9   R7   R;   R:   R8   i    s   %s:%s:%ss   %10.2fR"   s   %-6.1fs   %-8ds   %-8ss   %-6.2fR1   R2   R4   R5   R6   R=   R>   R?   R@   RA   (   R   R   R´   t   __dict__R˜   RP   R™   t*   scattering_types_counts_and_occupancy_sumsRl   t   scattering_typeR*   t   occupancy_sumR+   RZ   t   extract_u_iso_or_u_equivt   use_u_anisot   is_positive_definite_uR—   R	   R   t   u_as_bR   t   meant   mint   maxRÕ   RÔ   t   extract_occupanciest   setattr(   R¹   R¶   Rº   R‘   t   keyt   valuet   xrst   atom_countst   atom_counts_strst   acR2   t   b_isosR@   t   n_not_positive_definiteR6   R4   R5   R1   RA   t   occR?   R=   R>   t
   tmp_result(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyR×   ‹  s\    	"!!!!	c      	   C   s%   t  j d |  d t d | d t ƒ  ƒ S(   Nt   crystal_symmetryt   force_symmetryt   reflection_filest   err(   R   t   reflection_file_serverR™   R   (   R  R  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyR  »  s
    	c         C   s	  |  j  ƒ  } |  j ƒ  j ƒ  j t ƒ d |  j ƒ  j ƒ  j ƒ  } t | j ƒ } | j |  j k r‡ d t | j ƒ t |  j ƒ f } n  t d | d | j	 d | j
 d | j d | j d | j d	 |  j ƒ  d
 | j d | j d | d | d | d | d |  j ƒ  j ƒ  ƒ S(   Ng      ð?s   May be, %s or %sR[   R\   R]   R^   R_   R`   Ra   Rb   Rc   Rd   Re   Rf   Rg   Rh   (   t   infot   r_free_flagsR   RP   R™   RÔ   R*   t   twinR   t   d_mint   d_maxR^   R_   t   completeness_6_infRa   Rb   Rc   t   f_obsRh   (   R   t   n_outlRe   t   f_obs_labelst
   fmodel_cutR  t   flags_pcRg   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt	   show_dataÂ  s(    5%							c         C   s}  |  j  ƒ  j ƒ  \ } } |  j ƒ  j ƒ  j t ƒ d |  j ƒ  j ƒ  j ƒ  } | d k rb d  } n |  j ƒ  } d  } t	 |  d d  ƒ } | d  k	 rž | j
 } n  d  } } t |  ƒ j d k rR|  j ƒ  j ƒ  }	 |	 j d d ƒ |	 j ƒ  j d ƒ }
 |  j ƒ  j ƒ  } | j d d ƒ | j ƒ  j d ƒ } |  j d |
 ƒ } |  j d | ƒ } n  t d |  j ƒ  d	 | d
 | d | d | ƒ S(   Ng      Y@i    t   mask_managert   twin_model_managert   n_binsi
   Rµ   Ri   Rj   t   r_work_outer_shellt   r_free_outer_shellRk   (   R  t	   d_max_minR  R   RP   R™   RÔ   R   Rj   t   getattrRk   t   typeR”   t
   f_obs_workt   customized_copyt   setup_binnert   binnerRµ   t
   f_obs_freeRi   R   (   R   R  R  R  Rj   R’   t   mmR   R!  t   f_obs_work_copyt   bin_selection_workt   f_obs_free_copyt   bin_selection_free(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   show_model_vs_dataÙ  s4     	
g      @s   mFo-DFcc   	      C   sÝ  t  d d d d d d d d d d d d ƒ } t j j j ƒ  } d | j _ |  j rš |  j ƒ  j	 ƒ  j
 t ƒ d k rš |  j ƒ  j ƒ  } |  j d	 | ƒ n  t j j d
 |  d | d | d | d t ƒ j ƒ  } | d  k	 rå | j } n  t j j d
 |  d | d d | d | d t ƒ j ƒ  } | d  k	 r4| j } n  | | g j
 d  ƒ d k rÙt  d | d k j
 t ƒ d | d k j
 t ƒ d | d k j
 t ƒ d | d k  j
 t ƒ d | d k  j
 t ƒ d | d k  j
 t ƒ ƒ } n  | S(   NRm   i    Rn   Ro   Rp   Rq   Rr   g333333ó?R  R   t   map_typet
   map_cutofft   paramst   silentg      ð¿i   i   i	   iýÿÿÿiúÿÿÿi÷ÿÿÿ(   R   RÅ   t
   find_peakst   master_paramst   extractt   peak_searcht   min_cross_distanceR  R  R   RP   R™   t   generate_r_free_flagst   updateRÇ   t   peaksR   t   heights(	   R   Rß   R1  R0  R‘   R2  t   rfft
   peaks_plust   peaks_minus(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyR   ô  sJ    	* 
 s¤  
phenix.model_vs_data: compute model, data and model-to-data fit statistics.

Reference:
  phenix.model_vs_data: a high-level tool for the calculation of
  crystallographic model and data statistics. P.V. Afonine, R.W.
  Grosse-Kunstleve, V.B. Chen, J.J. Headd, N.W. Moriarty, J.S. Richardson,
  D.C. Richardson, A. Urzhumtsev, P.H. Zwart, P.D. Adams
  J. Appl. Cryst. 43, 677-685 (2010).

Inputs:
  - File with reflection data (Fobs or Iobs), and R-free flags (optionally);
  - label(s) selecting which reflection data arrays should be used (in case
    there are multiple choices in input file, there is no need to provide labels
    otherwise);
  - PDB file with input model;
  - some other optional parameters.

Usage examples:
  1. phenix.model_vs_data model.pdb data.hkl
  2. phenix.model_vs_data model.pdb data.hkl f_obs_label="F" r_free_flags_label="FREE"
  3. phenix.model_vs_data model.pdb data.hkl scattering_table=neutron
  4. phenix.model_vs_data model.pdb data.hkl map="2mFo-DFc"
  5. phenix.model_vs_data model.pdb data.hkl map="3Fo-2Fc" map="mFo-DFc"

  Note: Map type string: [p][m]Fo+[q][D]Fc[kick][filled]. Examples: 2mFo-DFc,
  3.2Fo-2.3Fc, Fc, anom, fo-fc_kick, etc.
s  f_obs_label = None
  .type = str
r_free_flags_label = None
  .type = str
scattering_table = wk1995  it1992  *n_gaussian  neutron
  .type = choice
map = None
  .type = str
  .multiple = True
high_resolution = None
  .type = float
comprehensive = False
  .type = bool
dump_result_object_as_pickle = False
  .type = bool
ignore_giant_models_and_datasets = True
  .type = bool
skip_twin_detection = False
  .type = bool
  .expert_level = 3
unmerged_data = None
  .type = path
unmerged_labels = None
  .type = str
n_bins = 20
  .type = int
c         C   sU   | s |  d IJn  t  j j t ƒ } | sD | j d d d |  ƒ n  | sQ |  Jn  | S(   Ns   Default params::
t   prefixs     t   out(   t   iotbxt   philt   parset   master_params_strR“   (   R€   R3  t   parsed(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   defaultsT  s       s   mmtbx.model_vs_datai€8 i@B g      ‰@c	   E      C   s(  d d  l  }	 t |  ƒ d k s- |  d g k rN | t IJt d | d t ƒ d  St d | d t ƒ }
 t ƒ  } t j d |  d | d |
 ƒ } | j	 j
 ƒ  } | j } t | ƒ d k rÃ t d ƒ ‚ n  | j } | d  k rç t d	 ƒ ‚ n  t | j ƒ d k rt d
 ƒ ‚ n  | j } t d | d | ƒ } t j ƒ  j
 ƒ  } | j d  k	 rY| j | _ n  | j d  k	 rz| j | j _ n  | j d  k	 r˜| j | _ n  t j d | d | d d d d d d d t d t ƒ  ƒ } | j } | j ƒ  j ƒ  } | j r| | k rt d | ƒ ‚ n  t | j ƒ  j  ƒ  d  ƒ } | j r^| | k r^t d t! | ƒ ƒ ‚ n  | j } | j" } | d  k r¯| j# d t$ j% | j& ƒ  j ƒ  t ƒ ƒ } d  } n  |	 j j' d | d | j( d | d | j) d k d | d | ƒ } | j* d t ƒ | j+ } | j, } | j- } | j. ƒ  | j/ } t0 d  | j1 d! d  ƒ d" | j1 d! d# ƒ d$ | j1 d! d% ƒ d& | j1 d! d' ƒ d( | j1 d! d( ƒ d) | j1 d! d) ƒ ƒ } | j) } | j2 ƒ  }  |  d  k	 rØd* |  k rØd } n  |	 j j3 d+ | d, | d- | j4 ƒ  ƒ }! |! j5 }" |! j6 }# | j7 d. t0 d/ | j ƒ  d0 | j ƒ  j8 ƒ  j9 ƒ  d1 | j ƒ  j8 ƒ  j: ƒ  j; ƒ  j< ƒ  d2 | j ƒ  j= ƒ  ƒ ƒ | j> ƒ  }$ |$ j? ƒ  }% |% j@ ƒ  d  }& | jA |$ ƒ }' t0 d3 |' d4 g  d5 g  ƒ }& |' jB r—|' jC d  k r—t |" ƒ d6 k r—|	 jD jE jF d3 |' d7 | j+ j/ d8 |! jG ƒ }& t |& jH ƒ t |' jI ƒ k r—t |' jI ƒ d k r—t jJ d9 | d: | d8 |" d d4 |& jH d; |' jI ƒ g }" q—n  tK d< |" d+ | d, | d= |$ d> |# d? | d@ | dA | ƒ }( |	 jL jM j
 ƒ  }) | jN ƒ  jO ƒ  }* | jP dB t dC dD ƒ } | jP dB t dC dD ƒ } t jQ d< |" d, | dE |) d9 | d: | dF | jR ƒ }+ | j& ƒ  j ƒ  |+ j ƒ  j& ƒ  j ƒ  }, | j7 dG tS |+ ƒ ƒ d  }- d  }. d  }/ d  }0 d  }1 d  }2 d  }3 d  }4 | jT dH | d ƒ }5 |5 d  k	 r|5 jU }- |5 jV }. |5 jW }/ |5 jX }0 |5 jY }1 n  | jZ ƒ  }2 | j[ ƒ  }3 | j\ ƒ  }4 | j7 dI t0 dJ |2 dK | j] ƒ  dL |- dM |. dN |/ dO |0 dP |1 dQ |4 dR |3 dS |& dT |  ƒ ƒ |+ }6 t$ j% |+ j ƒ  j& ƒ  j ƒ  t ƒ }7 |1 d  k	 r|+ j ƒ  j^ ƒ  d  k	 r|7 |+ j ƒ  j& ƒ  |+ j ƒ  j^ ƒ  |1 k M}7 n  |/ d  k	 rft_ |/ |+ j ƒ  j4 ƒ  ƒ dU k rf|7 |+ j ƒ  j` ƒ  j& ƒ  |/ k M}7 n  |0 d  k	 r½t_ |0 |+ j ƒ  ja ƒ  d ƒ dU k r½|7 |+ j ƒ  j` ƒ  j& ƒ  |0 k  M}7 n  |7 jb t ƒ |7 j ƒ  k r;	|7 jb t ƒ d k r;	t jQ d< |" d, | d9 |+ j ƒ  jc |7 ƒ d: |+ j ƒ  jc |7 ƒ dF | jR ƒ }6 n  | j7 dV t0 dW |6 jU ƒ  dX |6 jV ƒ  dY |6 j ƒ  j& ƒ  j ƒ  ƒ ƒ | j7 d td dZ |+ d[ |, d\ | d] |* d^ |6 ƒ ƒ t |" ƒ d6 k rã	| j7 d_ te dZ |+ d@ | ƒ ƒ n  d  }8 | jf d  k	 r 
d d  lg }	 d d  lh }	 |+ j ƒ  ji ƒ  } |	 jj jk d9 | dH | jf d` | jl d tm ƒ  ƒ }9 |	 jn jo jp da |+ jq ƒ  ji ƒ  d9 | d: |+ j ƒ  ji ƒ  db |9 dc | jr ƒ }8 n  | js d | ƒ |8 d  k	 rÕ
|8 jS dd | de df ƒ n  | rð
| | _' |+ | _t n  t | ju ƒ d k rÞxÖ | ju D]È }: |	 jv dg |: ƒ }; |	 je jw ƒ  jx |	 je jy |; ƒ ƒ j
 ƒ  }< |	 je jz dZ |6 dh |< j{ ƒ }= t| j} j~ | j d ƒ }> |> jb di ƒ r­|> |> j€ di ƒ  }? n |> }? |? dj |; j� ƒ  }@ |= j‚ dH |@ ƒ qWn  |+ jƒ s| dk IJ|	 j„ j… dZ |+ dd | de df ƒ n  | j† r{|6 jƒ r{|6 j‡ d  k	 r{tˆ j‰ ƒ  j
 ƒ  }A | |A _) tˆ jŠ dZ |6 dl |$ dh |A d | dm t ƒ n  | j‹ r$g  }B xq | j | j D]_ }C t| j} j~ |C ƒ }C y |C |C j€ di ƒ  }C Wn tŒ k
 rÝn X|C |B k r›|B j� |C ƒ q›q›Wdn jŽ |B ƒ }D t� j� do |D | ƒ n  | S(p   Niÿÿÿÿi    s   --helpR€   R3  t   argsR5  s   No reflection file found.s   No crystal symmetry found.s   No PDB file found.R  R  R  t
   parameterst   data_parameter_scopes   refinement.input.xray_datat   flags_parameter_scopes'   refinement.input.xray_data.r_free_flagst   data_descriptions
   X-ray datat
   keep_goings   Too many reflections: %di   s'   Too large unit cell (max dimension): %sR   t   pdb_file_namest   cif_objectst   use_neutron_distancesR¸   t%   ignore_unknown_nonbonded_energy_typest   stop_if_duplicate_labelsR0   t   stringR9   s   protein or dna or rnaR;   t   waterR:   s$   not (protein or dna or rna or water)R8   R7   t   NEUTRONRÛ   RÜ   R  R   R%   R&   R'   t   uc_volRy   R{   t   tls_selection_stringsi   t   all_chain_proxiesR¹   R  R  t
   tls_groupsRÚ   RÈ   RÝ   RÞ   Rß   R¶   t   reverset   by_valuet   packed_indicest   mask_paramst   skip_twin_detectionR   t	   file_nameR   Rs   Rt   Ri   Rj   R\   R]   Ru   Rv   Rw   Rx   R|   g¸…ëQ¸ž?R   R~   R   R}   R   R  Re   R  R  R   t   data_labelst   f_modelt   unmerged_i_obsR  RA  R@  s     t   map_name_stringR2  t   .s   _%s_map_coeffs.mtzs   Statistics in resolution bins:R¼   t   show_resultst   _s	   %s.pickle(‘   t   mmtbx.f_model_infoR(   R¤   RG  R—   R™   R   R
   t   process_command_line_argsR2  R6  R  R   R  R   RN  R  t   data_and_flags_master_paramst   f_obs_labelt   labelst   r_free_flags_labelR  t   labelR\   t   determine_data_and_flagsR   R  t   indicesRÔ   t    ignore_giant_models_and_datasetsRÿ   t	   unit_cellRI  R*   Re   t   arrayR   RØ   R   R   RO  RÜ   t   set_ppfRÛ   t   pdb_raw_recordst   pdb_inpt   xray_structures_simpleRX  R   Rµ   t   get_experiment_typet'   xray_structures_from_processed_pdb_fileR  RÚ   RÝ   R   t   space_group_infot   symbol_and_numberR$  t   groupt   order_zt   volumet   construct_hierarchyRÓ   t   reset_i_seqt   extract_tls_paramsRz   t   error_stringRx   t   toolst   extract_tls_from_pdbt   xray_structure_allR{   t
   tls_paramst    extract_tls_and_u_total_from_pdbRô   t   maskst   mask_master_paramsR  t   label_stringt   sortt   fmodel_simpleR^  R/  t   get_r_rfree_sigmaRi   Rj   t   hight   lowt   sigmat   get_program_namet   get_solvent_contentt   get_matthews_coefft   extract_header_yeart   sigmast   abst
   d_spacingsR"  RP   R´   R  R   t   unmerged_datat   mmtbx.validation.experimentalt   mmtbx.command_linet   average_bijvoet_matest   command_linet   load_and_validate_unmerged_datat   unmerged_labelsR   t
   validationt   experimentalt   merging_and_model_statisticsRa  R  R“   R   t   mapt	   map_namest   map_and_map_coeff_master_paramst   fetcht   cast_map_coeff_paramst   compute_map_coefficientst   map_coefficientst   ost   patht   basenamet   reflection_file_namest   indext   formatt   write_mtz_fileR  t   f_model_infot*   r_work_and_completeness_in_resolution_binst   comprehensiveR¹   R   R5  t   simplet   dump_result_object_as_picklet	   ExceptionRl   RZ   R   t   dump(E   RH  t   command_nameRÞ   t   model_size_max_atomst   data_size_max_reflectionst   unit_cell_max_dimensiont   return_fmodel_and_pdbRA  R€   RÅ   RF  Rß   t   processed_argsR2  R  R  RN  t   rfsRI  t   determine_data_and_flags_resultR  Rb   t   max_unit_cell_dimensionR  Re   t   mmtbx_pdb_fileRÛ   Rt  Ru  t   acpR¶   RÜ   R|   t   xsfppfRÚ   RÝ   RÈ   t	   pdb_atomst   pdb_tlsRy   Ræ   t   mpR  R   R  t
   pub_r_workt
   pub_r_freet   pub_hight   pub_lowt	   pub_sigmat   pub_program_namet   pub_solv_contt   pub_matthewst   published_resultsR  t   tmp_selt   cc_star_statsRb  Rc  t   map_type_objt
   map_paramst   maps_objt   fnR@  R_  t
   rsc_paramst   output_prefixest   opt   output_prefix(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   run[  sô   	!
											*						
					$
		
			(				
$$/.%2%0		
"				
		
	   c      v   C   s€  t  |  j d d  ƒ } | d  k r* d  } n t j t j d d | ƒ ƒ } |  j d } t  | d d  ƒ } t  | d d  ƒ } t  t  | d d  ƒ d d  ƒ } t  t  | d d  ƒ d	 d  ƒ } t  t  | d d  ƒ d
 d  ƒ } t  t  | d d  ƒ d d  ƒ }	 t  t  | d d  ƒ d d  ƒ }
 | d  k	 r}| j } | j	 } | j
 d d } | j d d } | j d d } | j d d } | j } n d  } } } } } } } d „  } d „  } t d | d t  |  j d d  ƒ d |  j j d |  j j d |  j j d |  j j d t  |  j d d  ƒ d t  |  j d d  ƒ d t  |  j d d  ƒ d t  |  j d d  ƒ d t  |  j d d  ƒ d t  |  j d  d  ƒ d! t  |  j d" d  ƒ d# |  j j d$ |  j j d% |  j j d& |  j j d' |  j j d( | t  | d( d  ƒ ƒ d) | t  | d( d  ƒ ƒ d* | t  |	 d( d  ƒ ƒ d+ | t  |
 d( d  ƒ ƒ d, | t  | d- d  ƒ ƒ d. | t  | d/ d  ƒ ƒ d0 | t  | d1 d  ƒ ƒ d2 | t  | d- d  ƒ ƒ d3 | t  | d/ d  ƒ ƒ d4 | t  | d1 d  ƒ ƒ d5 | t  | d- d  ƒ ƒ d6 | t  | d/ d  ƒ ƒ d7 | t  | d1 d  ƒ ƒ d8 | t  |	 d/ d  ƒ ƒ d9 | t  |
 d/ d  ƒ ƒ d: t  | d: d  ƒ d; |  j j d< |  j j d= t  | d/ d  ƒ d> t  | d- d  ƒ d? t  | d@ d  ƒ dA t  | dB d  ƒ dC t  | dD d  ƒ dE t  | d$ d  ƒ dF t  | dG d  ƒ dH t  | dI d  ƒ dJ t  | dK d  ƒ dL t  | dM d  ƒ dN | dO | dP | dQ | dR | dS | dT | dU |  j j dV |  j j  dW t  t  t  |  j dW d  ƒ dX d  ƒ dY ƒ ƒ 8S(Z   NR&   s   \ \(.*R³   i    RB   RR   R/   R0   R9   R8   R:   R;   i   g      Y@c         S   s7   |  d  k r d  Sy t |  ƒ SWn t k
 r2 d  SXd  S(   N(   R   Rš   t
   ValueError(   R  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   convert_intš  s     c         S   s7   |  d  k r d  Sy t |  ƒ SWn t k
 r2 d  SXd  S(   N(   R   t   floatRÙ  (   R  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   convert_float   s     t   space_groupRq  R%   Ri   Rj   R   R!  t   pdb_header_r_workt   pdb_header_r_freet   r_work_cutoffsR~   t   r_free_cutoffsR   Rs   t	   d_max_pdbR]   t	   d_min_pdbR\   R  R  R`   R_   R^   R1   t   n_macro_atomst   n_ligand_atomst   n_solvent_atomst   adp_max_allR5   t   adp_mean_allR6   t   adp_min_allR4   t
   adp_max_mmt   adp_mean_mmt
   adp_min_mmt
   adp_max_bbt   adp_mean_bbt
   adp_min_bbt   adp_mean_ligt   adp_mean_watR@   Ra   Rk   t	   bond_rmsdt   bond_max_deviationt
   angle_rmsdt   a_meant   angle_max_deviationt   a_maxt   dihedral_rmsdt   d_meant   dihedral_max_deviationt   chirality_rmsdt   c_meant   chirality_max_deviationt   c_maxt   planarity_rmsdt   p_meant   planarity_max_deviationt   p_maxt   rama_favoredt   rama_allowedt   rama_outlierst   rotamer_outlierst   c_beta_deviationsRX   RY   t   twin_lawRh   Rx   Ry   Rz   (!   R#  R   R   R   Ry  t   ret   subR   RW   RX   RT   RU   RS   RV   RY   R   R   Ri   Rj   R   R!  R   R   R   R\   R]   R`   R_   R^   Ra   Rk   Rg   Rh   (   Rß   t   space_group_strRÝ  t   model_statst   geometry_statsR¥   t   xs_statst   mm_statst   bb_statst	   lig_statst	   wat_statsR  RX   R  R  R  R  RY   RÚ  RÜ  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyR   |  s¬    					(4   t
   __future__R    R#   R¨  t   randomR	  t   cctbx.array_familyR   RB  R   t   cctbxR   R   t   libtbx.utilsR   R   R   RÅ   R   t   libtbx.str_utilsR	   R
   t   libtbxR   t	   cStringIOR   R   R   t   mmtbx.restraintst   mmtbx.find_peakst
   mmtbx.mapst   mmtbx.maskst   seedt   set_random_seedt   objectR   R¥   Rô   R   R×   R  R  R/  R   R¤   RE  RG  R™   R—   R$   RØ  R   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/model_vs_data.pyt   <module>   sV   0Ä		–0			A	ÿ 