ó
£™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	 m
 Z
 d  d l Z d Z d Z d	 Z d
 Z d Z d Z d Z d Z d	 Z d
 Z d Z d d d d d d g Z d d d d d d g Z d d d d d d g Z d d  d! d" d# g Z d$ d  d! d" d# g Z d% e
 f d& „  ƒ  YZ d' e f d( „  ƒ  YZ d) e f d* „  ƒ  YZ d+ e f d, „  ƒ  YZ d- „  Z  d. „  Z! d/ „  Z" d0 „  Z# d1 „  Z$ d2 „  Z% d3 „  Z& d4 „  Z' d5 „  Z( d6 „  Z) d7 e j* f d8 „  ƒ  YZ+ d9 e j, e+ f d: „  ƒ  YZ- e. d; „ Z/ d S(<   iÿÿÿÿ(   t   division(   t   residuet
   validationt   atom(   t   graphics(   t
   data_plots(   t   slots_getstate_setstateNi    i   i   i   i   i   t   generalt   glycines   cis-prolines   trans-prolines   pre-prolines   isoleucine or valinet   Generalt   Glys   cis-Pros	   trans-Pros   pre-Pros   Ile/Vals   all non-Pro/Gly residuest   Glycines   cis-Prolines   trans-Prolines   pre-Proline residuess
   Ile or Valt   OUTLIERt   Allowedt   Favoredt   Anys   Allowed/Outliert   Outliert   c_alphac           B   s#   e  Z d  Z d d g Z d „  Z RS(   s4   Container class used in the generation of kinemages.t   id_strt   xyzc         C   s   | |  _  | |  _ d  S(   N(   R   R   (   t   selfR   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   __init__#   s    	(   t   __name__t
   __module__t   __doc__t	   __slots__R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR       s   t   ramachandranc           B   s�   e  Z d  Z d d d d d d g Z e j e Z e d „  ƒ Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d „  Z RS(   sP   
  Result class for protein backbone Ramachandran analysis (phenix.ramalyze).
  t   res_typet	   rama_typet   scoret   phit   psit   c_alphasc           C   s   d d S(   Ns   %-20s %-12s %10s %6s %-20st   Residuet   Typet   Regiont   Scores   Phi/Psi(   R!   R"   R#   R$   s   Phi/Psi(    (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   header5   s    c         C   s   t  |  j S(   N(   t   res_type_labelsR   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   residue_type:   s    c         C   s   t  |  j S(   N(   t
   rama_typesR   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   ramalyze_type=   s    c      
   C   sX   d |  j  ƒ  |  j ƒ  |  j ƒ  |  j d j g  |  j |  j g D] } d | ^ q= ƒ f S(   Ns   %-20s %-12s %10s %6.2f %10st   ,s   %.1f(   R   R'   R)   R   t   joinR   R   (   R   t   x(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt	   as_string@   s    c         C   s&   d |  j  |  j |  j |  j |  j f S(   Ns   %s%4s%1s %1s%s(   t   chain_idt   resseqt   icodet   altloct   resname(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt
   id_str_oldF   s    c         C   s<   d |  j  ƒ  |  j |  j |  j |  j ƒ  t |  j j ƒ  f S(   Ns   %s:%.2f:%.2f:%.2f:%s:%s(   R   R   R   R   R)   t	   res_typesR   t
   capitalize(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt
   format_oldJ   s    c         C   s–   |  j  ƒ  s t ‚ d |  j d j d |  j d j f } | d |  j d j d |  j d j f 7} | d |  j d j d |  j d j f 7} | S(   Ns   {%s CA}P %s
i    s   %.3f %.3f %.3fs   {%s CA} %s
i   i   (   t
   is_outliert   AssertionErrorR    R   R   (   R   t   ram_out(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   as_kinemageO   s    c         C   s8   |  j  d |  j |  j f t j ƒ  |  j |  j |  j g S(   Ns   %s %s(   R.   R2   t   residt   seflR'   R   R   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   as_table_row_phenixZ   s    (   R   R   R   t   __rama_attr__R   R   t   staticmethodR%   R'   R)   R-   R3   R6   R:   R=   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR   '   s    							t   ramachandran_ensemblec           B   sD   e  Z d  Z e j Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s1   Container for results for an ensemble of residuesc         C   sÌ   |  j  | d ƒ | d j |  _ g  | D] } | j ^ q( |  _ d d l m } | j g  | D] } | j ^ q] ƒ |  _ | j g  | D] } | j ^ q… ƒ |  _ | j g  | D] } | j ^ q­ ƒ |  _ d  S(   Ni    iÿÿÿÿ(   t   flex(	   t   _copy_constructorR   R   t   scitbx.array_familyRA   t   doubleR   R   R   (   R   t   all_resultst   rRA   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR   a   s    ((c         C   s   |  j  j ƒ  S(   N(   R   t   min_max_mean(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   phi_min_max_meanj   s    c         C   s   |  j  j ƒ  S(   N(   R   RG   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   psi_min_max_meanm   s    c         C   s   |  j  j ƒ  S(   N(   R   RG   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   score_statisticsp   s    c         C   s   d  S(   N(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt	   phi_ranges   s    (
   R   R   R   R   R   R   RH   RI   RJ   RK   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR@   ^   s   						t   ramalyzec           B   s�  e  Z d  Z e j d d d d d d g Z d Z d Z d	 d
 d d d d g Z d d d d d d g Z d g d Z	 d „  Z
 e e e j e d „ Z d „  Z d/ d d „ Z e j d d „ Z e d e d „ Z d „  Z d „  Z d „  Z e d  „  ƒ Z e d! „  ƒ Z d" „  Z d# „  Z d$ „  Z d% „  Z d& „  Z  d' „  Z! d( „  Z" d) „  Z# d* „  Z$ d+ „  Z% d, „  Z& d- „  Z' d. „  Z( RS(0   su   
  Frontend for calculating Ramachandran statistics for a model.  Can directly
  generate the corresponding plots.
  t   out_percentt   fav_percentt	   n_allowedt	   n_favoredt   n_typet   _outlier_i_seqss%   Analyze protein backbone ramachandrans&   residue:score%:phi:psi:evaluation:typet   ChainR!   s   Residue typeR$   t   Phit   Psis   %ss   %.2fs   %.1fi}   i   c         C   s   t  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_result_classƒ   s    c   8   !   C   sý  t  j |  ƒ d |  _ d |  _ d g d |  _ d d l m } d d  l } d d l m } d d l	 m
 }	 |	 j ƒ  |  _ | j ƒ  }
 |
 j ƒ  } | j d ƒ r® |
 j ƒ  n  | j d | ƒ } d } g  } | j ƒ  } d# \ } } d  } d  } d  } xÂ| j ƒ  D]´} x«| j ƒ  D]�} | r7| j d	 | ƒ } n	 | j } t | j ƒ  ƒ } x^t | ƒ D]P\ } } d$ \ } } } | d  k	 r•| } | } n  t | | ƒ } | j ƒ  } | j j ƒ  }  | d k r?| | | d
 j ƒ  k r|  d k r<| | d
 j j ƒ  d k r<q_q<q?| | | d
 j ƒ  d
 k r?q_q?n  | t | ƒ d
 k  rü| j ƒ  | | d
 j ƒ  k r§|  d k rÑ| | d
 j j ƒ  d k rÑq_qÑn* | j ƒ  | | d
 j ƒ  d
 k rÑq_n  t | | d
 ƒ } | | d
 j ƒ  }! n d  } d  }! x¤| j  ƒ  D]–}" |" j! }# | d  k	 rB| j" |# ƒ } n  | d  k	 r”| j" |# ƒ } | d  k r”t# | j$ ƒ  ƒ }$ | j" |$ d ƒ } q”n  | d  k	 ræ| j" |# ƒ } | d  k ræt# | j$ ƒ  ƒ }% | j" |% d ƒ } qæn  t% | | ƒ }& t& | | ƒ }' t' |" ƒ }( |& d  k	 r|' d  k	 rt( }) |  j) d
 7_) |" j* d d !d k r\t+ }) nŠ |" j* d d !d k r™t, | | ƒ }* |* r�t- }) qæt. }) nM t/ | | ƒ r±t0 }) n5 |" j* d d !d k sÝ|" j* d d !d k ræt1 }) n  |  j |) c d
 7<| j2 t3 |) |& |' g ƒ }+ |  j4 |) |+ ƒ }, t5 |) |+ ƒ }- d  }. |- rÚg  }. xt | | | g D]c }/ xZ |/ D]R }0 |0 j6 j ƒ  d k ret7 d |0 ƒ }1 |. j8 t9 d |1 j: ƒ  d |1 j; ƒ ƒ qeqeWqXWt |. ƒ d k sÚt< ‚ n  t= d | d | j> d | j d |" j* d |" j! d d  d |& d |' d |, d |) d |+ d d  |- d |( d! |. ƒ }2 | sT|- rg|  j? j8 |2 ƒ n  |- r«|" j ƒ  j ƒ  }3 |3 j d ƒ s•t< ‚ |  j j@ |3 ƒ q«qqWq_WqWqW|  jA ƒ  \ }4 }5 |  jB ƒ  \ }6 }7 |5 d" |  _C |7 d" |  _D d  S(%   Ni    i   iÿÿÿÿ(   t   utils(   t   ramachandran_eval(   RA   t	   hierarchyt    t   chaini   i   t   GLYt   PROt   ILEt   VALt   CAt   pdb_atomR   R   R.   R/   R0   R2   R1   t   segidR   R   R   R   R   id   t   outlierR    g      Y@(   NN(   NNN(E   R   R   RO   RP   RQ   t   mmtbx.validationRW   t   mmtbx.rotamerRX   RC   RA   t   size_tRR   t   atomst   extract_i_seqt   all_eqt   reset_i_seqt   use_segids_in_place_of_chainidst   RamachandranEvalt   Nonet   modelst   chainst   get_segid_as_chainidt   idt   listt   residue_groupst	   enumeratet   construct_complete_residuest   resseq_as_intR0   t   stript   lent   atom_groupsR1   t   gett   sortedt   keyst   get_phit   get_psit
   get_centert   RAMA_GENERALt   n_totalR2   t   RAMA_GLYCINEt   is_cis_peptidet   RAMA_CISPROt   RAMA_TRANSPROt   isPreProt   RAMA_PREPROt   RAMA_ILE_VALt   evaluateR4   t   evaluateScoret	   isOutliert   nameR   t   appendR   t   atom_group_id_strR   R8   R   R/   t   resultst   extendt   get_outliers_count_and_fractiont   get_favored_count_and_fractionRM   RN   (8   R   t   pdb_hierarchyt   outliers_onlyt   show_errorst   outt   quietRW   t   mmtbxRX   RA   t	   pdb_atomst
   all_i_seqst
   use_segidst   analysist   output_listRF   t
   prev_rezest
   next_rezest
   prev_residt
   cur_resseqt   next_resseqt   modelR[   R.   t   residuest   it   residue_groupt   prev_atom_listt   next_atom_listt	   atom_listt   rezest   prev_resseqt	   cur_icodet
   next_residt
   atom_groupt   alt_conft	   prev_keyst	   next_keysR   R   t   coordsR   t   is_cist   valuet   ramaTypeR7   R    Rg   t   at   a_t   resultt   i_seqst	   out_countRM   t	   fav_countRN   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR   …   sü    						)			)												
	&c   
      C   sÓ   d d l  m } | d IJ| d IJx¨ t d ƒ D]š } | j d t | d t ƒ } t | j d d	 ƒ } | d
 | } |  j d | ƒ \ } }	 t	 d | d | d | d t
 | d ƒ d | ƒ | d | IJq1 Wd S(   s¡   
    Write a set of six PNG images representing the plots for each residue type.

    :param plot_file_base: file name prefix
    :param out: log filehandle
    iÿÿÿÿ(   RW   RZ   s   Creating images of plots...i   t   pos_typet   convert_to_numpy_arrayt   /t   _s   _rama_%s.pngt   position_typet   pointst   rotarama_datat   titlet   *t	   file_names
     wrote %sN(   Rd   RW   t   ranget   get_rotarama_dataR4   t   TrueR&   t   replacet   get_plot_datat   draw_ramachandran_plott   format_ramachandran_plot_title(
   R   t   plot_file_baseR–   RW   t   post   statst
   file_labelt   plot_file_nameRÁ   R²   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   write_plots  s"    

	
	s   MolProbity - Ramachandran plotsc         C   s>   d d  l  } | j j j d | d | d |  ƒ } | j ƒ  | S(   Niÿÿÿÿt   parentRÃ   R   (   t   wxtbx.plots.molprobityt   plotst
   molprobityt   ramalyze_framet   Show(   R   RÓ   RÃ   t   wxtbxt   frame(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   display_wx_plots.  s
    
RZ   c         C   sF   | | d |  j  |  j ƒ  f IJ| | d |  j |  j ƒ  f IJd  S(   Ns#   SUMMARY: %.2f%% outliers (Goal: %s)s"   SUMMARY: %.2f%% favored (Goal: %s)(   RM   t   get_outliers_goalRN   t   get_favored_goal(   R   R–   t   prefix(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   show_summary6  s    

RÄ   c         C   s  t  | t ƒ r+ d | k o& d k n s7 t | ƒ ‚ g  g  } } xÄ t |  j ƒ D]³ \ } } | j | k rT | d k sŠ | | j k rT | t k sÆ | | j k sÆ | j t	 t
 g k r| t k r| j | j | j | j ƒ  | j ƒ  f ƒ | j | j ƒ qqT qT W| | f S(   Ni    i   RÄ   (   t
   isinstancet   intR8   Rt   R�   R   R2   t   RAMALYZE_ANYR   t   RAMALYZE_ALLOWEDt   RAMALYZE_OUTLIERt   RAMALYZE_NOT_FAVOREDR�   R   R   t	   simple_idR7   R   (   R   RÀ   t   residue_namet
   point_typeRÁ   R²   R¥   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRÊ   <  s    .	c         C   s×   | d k r |  j  d 7_  t S| t k r` | d k rJ |  j d 7_ t S|  j d 7_ t Sns | t k r¡ | d k r‹ |  j d 7_ t S|  j d 7_ t Sn2 | d k rÀ |  j d 7_ t S|  j d 7_ t Sd  S(   Ng{®Gáz”?i   gü©ñÒMb@?gü©ñÒMb`?gü©ñÒMbP?(   RP   t   RAMALYZE_FAVOREDR€   RO   Rã   t
   n_outliersRä   R„   (   R   t   resTypeR´   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRŠ   M  s(    c         C   s   d S(   Ns   < 0.2%(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRÜ   g  s    c         C   s=   |  j  d k r9 |  j | } t | ƒ |  j  } | | f Sd S(   Ni    g        (   i    g        (   R�   RQ   t   float(   R   R   t   countt   fraction(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   _get_count_and_fractionj  s
    
c         C   s   |  j  ƒ  \ } } | d S(   Ng      Y@(   R’   (   R   RP   t   frac_favored(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   percent_favoredq  s    c         C   s   |  j  ƒ  \ } } | d S(   Ng      Y@(   t   get_allowed_count_and_fraction(   R   RO   t   frac_allowed(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   percent_allowedv  s    c         C   s0   |  j  d k r, |  j |  j  } |  j | f Sd S(   Ni    g        (   i    g        (   R�   RO   (   R   Rî   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRò   {  s    c         C   s   d S(   Ns   > 99.8%(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_allowed_goal�  s    c         C   s0   |  j  d k r, |  j |  j  } |  j | f Sd S(   Ni    g        (   i    g        (   R�   RP   (   R   Rî   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR’   „  s    c         C   s   d S(   Ns   > 98%(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRÝ   Š  s    c         C   s   |  j  t ƒ S(   N(   Rï   R€   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_general_count_and_fraction�  s    c         C   s   |  j  t ƒ S(   N(   Rï   R‚   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_gly_count_and_fraction�  s    c         C   s   |  j  t ƒ S(   N(   Rï   R„   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_cis_pro_count_and_fraction“  s    c         C   s   |  j  t ƒ S(   N(   Rï   R…   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt    get_trans_pro_count_and_fraction–  s    c         C   s   |  j  t ƒ S(   N(   Rï   R‡   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_prepro_count_and_fraction™  s    c         C   s   |  j  t ƒ S(   N(   Rï   Rˆ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_ileval_count_and_fractionœ  s    c         C   s   |  j  S(   N(   R�   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_phi_psi_residues_countŸ  s    c         C   sG   d } | d 7} x0 |  j  D]% } | j ƒ  r | | j ƒ  7} q q W| S(   Ns2   @subgroup {Rama outliers} master= {Rama outliers}
s0   @vectorlist {bad Rama Ca} width= 4 color= green
(   R�   R7   R:   (   R   R9   t   rama(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR:   ¢  s    
c         C   sX   g  } xK |  j  D]@ } | j ƒ  r | j | j | j | j | j | j f ƒ q q W| S(   N(   R�   R7   R�   R.   R;   R2   R   R   (   R   t   dataR¸   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   as_coot_dataª  s    N()   R   R   R   R   R   t   program_descriptiont   output_headert   gui_list_headerst   gui_formatst   wx_column_widthsRV   t   Falset   syst   stdoutR   RÒ   Rm   RÛ   Rß   R€   Râ   RÊ   RŠ   RÜ   Rï   t   propertyRñ   Rô   Rò   Rõ   R’   RÝ   Rö   R÷   Rø   Rù   Rú   Rû   Rü   R:   Rÿ   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRL   v   sJ   	‹																c         C   sl   d  } |  d  k rh xS |  j ƒ  D]B } | j d k rI | d  k rI | } n  | j | k r | } q q Wn  | S(   NRZ   (   Rm   Ry   R1   (   R¦   R1   t   matcht   ag(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   get_matching_atom_group²  s     	 c         C   s  d d  l  } d \ } } } } |  d  k	 rV x) |  D] } | j d k r1 | } q1 q1 Wn  | d  k	 r¾ xY | D]N } | j d k r‡ | } n  | j d k rŸ | } n  | j d k ri | } qi qi Wn  | d  k	 r| d  k	 r| d  k	 r| d  k	 r| j j | | | | ƒ Sd  S(   Niÿÿÿÿs    C  s    N  s    CA (   NNNN(   Re   Rm   RŒ   t   rotamert   phi_from_atoms(   t
   prev_atomsRg   R˜   t   prevCt   resNt   resCAt   resCR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR}   º  s       	 	 0c         C   s  d d  l  } d \ } } } } | d  k	 rV x) | D] } | j d k r1 | } q1 q1 Wn  |  d  k	 r¾ xY |  D]N } | j d k r‡ | } n  | j d k rŸ | } n  | j d k ri | } qi qi Wn  | d  k	 r| d  k	 r| d  k	 r| d  k	 r| j j | | | | ƒ Sd  S(   Niÿÿÿÿs    N  s    CA s    C  (   NNNN(   Re   Rm   RŒ   R  t   psi_from_atoms(   Rg   t
   next_atomsR˜   R  R  R  t   nextNR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR~   È  s       	 	 0c         C   s  d d  l  } d \ } } } } |  d  k	 rn xA |  D]6 } | j d k rO | } n  | j d k r1 | } q1 q1 Wn  | d  k	 r¾ xA | D]6 } | j d k rŸ | } n  | j d k r� | } q� q� Wn  | d  k	 r| d  k	 r| d  k	 r| d  k	 r| j j | | | | ƒ Sd  S(   Niÿÿÿÿs    CA s    C  s    N  (   NNNN(   Re   Rm   RŒ   R  t   omega_from_atoms(   R  Rg   R˜   t   prevCAR  t   thisNt   thisCAR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt	   get_omegaÖ  s      	  	 0c         C   s3   t  |  | ƒ } | d k r+ | d k  r+ t St Sd  S(   Niâÿÿÿi   (   R  RÈ   R  (   R  Rg   t   omega(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRƒ   ä  s    c         C   ss  |  d  k	 roi  } d \ } } } } |  j ƒ  } g  } x= | D]5 } | j d k re | j d | ƒ q= | j | ƒ q= WxÝ | D]Õ } t }	 xŒ | j ƒ  D]~ }
 |
 j d k r´ |
 } n  |
 j d k rÌ |
 } n  |
 j d k rä |
 } n  |
 j d k rü |
 } n  |
 j d k r– t }	 q– q– Wd  | | | | g k r} |	 r} | | | | g | | j <q} q} Wt	 | ƒ d k ro| Sn  d  S(	   NRZ   i    s    N  s    CA s    C  s    O  (   NNNN(   s    N  s    CA s    C  s    O  (
   Rm   Ry   R1   t   insertR�   R  Rg   RŒ   RÈ   Rx   (   t	   res_groupt   complete_dictt   nitt   cat   cot   oxyRy   t	   reorderedR
  t   changedR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRu   ë  s6     	 	 	 	 c         C   s<   d  } x/ |  j ƒ  D]! } | j d k r | j } q q W| S(   Ns    CA (   Rm   Rg   RŒ   R   (   R
  R²   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR     s
    c         C   si   | d k  s" | t  |  ƒ d k r& t S|  | d } x. | j ƒ  D]  } | j d d !d k rA t SqA Wt S(   Ni    i   i   R]   (   Rx   R  Ry   R2   RÈ   (   R¤   R¥   t   nextR
  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR†     s    "  c         C   s^   |  t  k r# | d k  r t St Sn7 |  t k rF | d k  r? t St Sn | d k  rV t St Sd  S(   Ngü©ñÒMb@?gü©ñÒMb`?gü©ñÒMbP?(   R€   RÈ   R  R„   (   Rë   R´   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR‹     s       c         C   s+   | d k r d t  |  } n
 d | } | S(   NRÄ   s   Ramachandran plot for (   t   res_type_plot_labels(   RÀ   R'   RÃ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRÌ   #  s    
t   ramachandran_plot_mixinc           B   s&   e  Z d  d d  d g Z d d „ Z RS(   iMÿÿÿi³   c         C   se   |  j  j ƒ  } | j d ƒ | j d d d d d g ƒ | j d ƒ | j d d d d d g ƒ d  S(   NRT   iˆÿÿÿiÄÿÿÿi    i<   ix   RU   (   t   plott   get_axest
   set_xlabelt
   set_xtickst
   set_ylabelt
   set_yticks(   R   t   y_markst   axes(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt
   set_labels,  s
    (    (   R   R   t   extentR0  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR'  *  s   t   ramachandran_plotc           B   s   e  Z d  „  Z RS(   c         O   s-   t  j j |  | | Ž t j |  | | Ž d  S(   N(   R   t   simple_matplotlib_plotR   R'  (   R   t   argst   kwds(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR   5  s    (   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyR2  3  s   c         C   si   t  ƒ  } | t k r$ d d g } n d d g } | j d | d | d |  d d d	 | ƒ | j | ƒ d  S(
   Ng‰A`åÐ"Ã?gªñÒMbØ?gßO�—nË?RÏ   RÃ   RÁ   t   colormapt   Bluest   contours(   R2  R€   t	   draw_plott
   save_image(   RÁ   RÂ   RÀ   RÃ   RÅ   t   show_labelst   pR8  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyRË   9  s    		(0   t
   __future__R    Rd   R   R   R   R   t   iotbxR   t   libtbxR   R  R€   R‚   R„   R…   R‡   Rˆ   Rä   Rã   Ré   Râ   Rå   R4   R&   R&  R(   t   rama_type_labelsR   R   R@   RL   R  R}   R~   R  Rƒ   Ru   R   R†   R‹   RÌ   t   rotarama_plot_mixinR'  R3  R2  RÈ   RË   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/ramalyze.pyt   <module>   sV   		7ÿ =												
