ó
¹™xTc           @   s"  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 Z d  d l Z d  d l Z i d d 6d	 d
 6d d 6d d 6Z i d d 6d	 d
 6d d 6d d 6d d 6d d 6Z d d d „  ƒ  YZ d „  Z e d k re e j d ƒ n  d S(   iÿÿÿÿ(   t   divisionN(   t	   NDimTable(   t   find_rotarama_data_dir(   t   open_rotarama_dlite(   t   easy_pickle(   t   Sorryt   generals   gly-symt   glycinet   prot   prolinet   prepros   general-noGPIVprePt   cispros   cis-prolinet   transpros   trans-prolines   prepro-noGPs   pre-prolines   ileval-noprePs   isoleucine or valinet   RamachandranEvalc           B   s)   e  Z i  Z d  „  Z d „  Z d „  Z RS(   c         C   sy  t  j } i  |  _ x* | j ƒ  D] \ } } | ƒ  |  j | <q Wt ƒ  } t d | ƒ } t j j t j j | d ƒ ƒ } xú t	 j ƒ  D]ì \ } } |  j j
 | ƒ d  k	 r¯ q… n  d | d } d | d }	 | j d | d |	 d | ƒ }
 |
 j rù | st j j t j j | |	 ƒ ƒ r*t d	 ƒ ‚ n  t j d
 t j j | |
 j j ƒ ƒ } | |  j | <t j | ƒ | | <q… Wd  S(   Nt   rotarama_data_dirt	   NO_UPDATEs	   rama8000-s   .datas   .picklet   source_patht   target_patht   path_prefixsŒ   chem_data/rotarama_data/*.pickle files are missing or out of date.
  Please run
    mmtbx.rebuild_rotarama_cache
  to resolve this problem.
t	   file_name(   R   t   aaTablest   itemsR   R   t   ost   patht   existst   joint   aminoAcids_8000t   gett   Nonet	   pair_infot   needs_updateR   R   t   loadt   targett   weakreft   ref(   t   selft   main_aaTablest   aat   ndt_weakreft   rama_data_dirt	   target_dbt	   no_updatet   aafilet	   data_filet   pickle_fileR   t   ndt(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyt   __init__!   s0    			! 		"c         C   s5   |  j  j | j ƒ  ƒ } | d k r( d S| j | ƒ S(   sZ  Evaluates the protein backbone conformation from 0.0 (worst) to 1.0 (best).

    Values below 0.0005 are considered outliers for the general case,
    or values below 0.002 for glycine, proline, and pre-proline.
    The field aaName should be one of "general", "glycine", "proline", or "prepro".
    If the aaName is not recognized, returns None.N(   R   R   t   lowerR   t   valueAt(   R#   t   aaNamet   phiPsiR-   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyt   evaluate>   s     c         C   sI   | d	 k s t  ‚ t j j d | d | ƒ \ } } |  j | | | f ƒ S(
   NR   R   s   cis-prolines   trans-prolines   pre-prolines   isoleucine or valinet   i_seqst
   sites_cart(   R   R   s   cis-prolines   trans-prolines   pre-prolines   isoleucine or valine(   t   AssertionErrort   mmtbxt   rotamert   phi_psi_from_sitesR3   (   R#   R1   t   phi_psi_i_seqsR5   t   phit   psi(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyt   evaluate_sitesI   s        (   t   __name__t
   __module__R   R.   R3   R=   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyR      s   		c      h   C   s˜  t  d t ƒ d  k r d GHnrd d l m } | j ƒ  d d l m } d |  k } t ƒ  } | j	 d } t ƒ  j	 d | k s… t
 ‚ x—d d	 d
 g d f d d d g d f d d d g d f d d d g d f d d d g d f d d d g d f d d d g d f d d d g d  f d d! d" g d# f d d$ d% g d& f d d' d( g d) f d d* d+ g d, f d d- d. g d/ f d0 d1 d2 g d3 f d4 d5 d6 g d7 f d d8 d9 g d: f d d; d< g d= f d d> d? g d@ f d dA dB g dC f d dD dE g dF f d dG dH g dI f d0 dJ dK g dL f d4 dM dN g dO f d dP dQ g dR f d dS dT g dU f d dV dW g dX f d dY dZ g d[ f d d\ d] g d^ f d d_ d` g da f d db dc g d^ f d dd de g d^ f d df dg g dh f d di dj g dk f d dl dm g dn f d do dp g dq f d dr ds g dt f d du dv g dw f d dx dy g dz f d d{ d| g d} f d d~ d g d€ f d d� d‚ g dƒ f d d„ d… g d† f d d‡ dˆ g d‰ f d dŠ d‹ g dŒ f d d� dŽ g d� f d d� d‘ g d’ f d d“ d” g d• f d d– d— g d˜ f d d™ dš g d› f d dœ d� g dž f d dŸ d  g d¡ f d d¢ d£ g d¤ f d d¥ d¦ g d§ f d d¨ d© g dª f d d« d¬ g d­ f d d® d¯ g d° f d d± d² g d³ f d d´ dµ g d¶ f d d· d¸ g d¹ f d dx dº g d» f d d¼ d½ g d¾ f d d¿ dÀ g dÁ f d dÂ dÃ g dÄ f d dÅ dÆ g dÇ f d dÈ dÉ g dÊ f d dË dÌ g dÍ f d dÎ dÏ g dC f d dÐ dÑ g dÒ f d dÓ dÔ g dÕ f d0 dÖ d× g dØ f d4 dÙ dÚ g dÛ f d dÜ dÝ g d f d dÞ dß g dà f d dá dâ g dã f d dä då g dæ f d dç dè g dé f d dê dë g dì f d dí dî g dï f d dð dñ g dò f d dó dô g dõ f d dö d÷ g dø f d dù dú g dû f d dü dý g dþ f d dÿ d g df d ddg df d ddg df d dd	g d
f d ddg df d ddg df d ddg df d ddg df d0 ddg df d4 ddg df d ddg df d d d!g d"f d d#d$g d%f d d&d'g d(f d d)d*g d+f d d,d-g d.f d d/d0g d1f d d2d3g d4f d d5d6g d7f gf D]c \ } } } d8| j | | ƒ }	 | r | Gd9|	 | |	 | f GHn  | |	 | d:d;ƒs¸t
 ‚ q¸Wx2 t j	 j ƒ  D]! \ }
 } | ƒ  d  k	 s/t
 ‚ q/W~ ~ x2 t j	 j ƒ  D]! \ }
 } | ƒ  d  k sjt
 ‚ qjWd<GHd  S(=  Nt   optionals:   Skipping exercise(): rotarama_data directory not availableiÿÿÿÿ(   t   rebuild_rotarama_cache(   t   approx_equals	   --verboseR   R   g{®GáÊVÀgÃõ(\�j`@g¸…ëQxD@gfffff~aÀg{®GázT@g…ëQ¸…÷?g\�Âõ(œI@g)\�Âõ(7@g)\�Âõ(@gš™™™™ñbÀg¸…ëQV@gìQ¸…ë±?gfffff–TÀg…ëQ¸d@gö(\�Âµ7@gq=
×£pYÀg=
×£põ`@gR¸…ë‘F@g¸…ëQˆ[Àg=
×£p=^@g{®Gá:M@gR¸…ëqTÀgö(\�Â`@g¸…ëQ¸C@g®Gáz¬`ÀgÃõ(\�d@g{®Gáº5@gÃõ(\�ª`ÀgìQ¸…ë_@gfffff&E@g¸…ëQ[Àg)\�Âõ˜_@gáz®G�N@g…ëQ¸E\Àg¸…ëQ¨_@gìQ¸…O@g¤p=
×ûaÀg)\�ÂõØd@gìQ¸…«9@R
   g®Gáz4_Àg…ëQ¸%^@g…ëQ¸Å:@R	   g33333#PÀg®Gáz4b@gš™™™™¹W@g…ëQ¸åFÀgö(\�ÂDÀgö(\�Âu$@gìQ¸…‹OÀg
×£p=
@g®GázÞ?g)\�ÂõYÀg33333ÓFÀg¤p=
×£@g)\�Âõ¨UÀg
×£p=Š/Àgö(\�ÂUB@g×£p=
OcÀg
×£p=JW@g¸…ëQ¸ö?g
×£p=:\Àgáz®GIc@g¤p=
×c;@gš™™™™‰dÀg{®Gá"c@gffffff$@g¤p=
×DÀgÍÌÌÌÌOÀg=
×£p=ò?g…ëQ¸VÀgR¸…ëQK@g
×£p=
@gÃõ(\�ÊbÀg
×£p=Š!@g®Gáz®ï?g\�Âõ(ŒZÀgš™™™™iP@gÃõ(\�Âí?g®GázäSÀg33333óD@g)\�Âõ(ä?g¤p=
×#'ÀgR¸…ë±TÀg        gö(\�ÂUK@g
×£p=êH@gÃõ(\�B.@gö(\�Â5?Àg33333‹c@g{®GázÀgÍÌÌÌÌ¬JÀg¤p=
×NÀg{®Gáz6Àgš™™™™™O@g
×£p=ÚQÀg®GázÔ1Àgš™™™™P@gìQ¸…TÀg…ëQ¸…Àg®GázNF@g…ëQ¸•VÀgš™™™™ñcÀg…ëQ¸å?gö(\�ÂP@g{®Gá‚`Àg=
×£p}A@g¤p=
×ÓZÀgö(\�Âµ;@g×£p=
W!@gìQ¸…KQÀg     ÀFÀg…ëQ¸…R@g=
×£pe`Àg=
×£p=`@g�Âõ(\ïJ@g®Gázd_ÀgHáz®a@g¤p=
×CN@gR¸…ë‘]ÀgÍÌÌÌÌüb@gq=
×£pA@gq=
×£aÀg¸…ëQˆ^@g\�Âõ(Ü8@gáz®G!RÀgáz®G�b@gìQ¸…+F@g
×£p=Ú^ÀgìQ¸…ã`@g�Âõ(\ÏN@g¤p=
×STÀg®Gáz,a@gš™™™™yB@g×£p=
‡WÀgö(\�Âµ6Àg{®Gáº2@g…ëQ¸ZÀg\�Âõ(Ü>Àg®Gáz®!@gáz®G‘ZÀgš™™™™)_@g{®GáÚM@g\�Âõ(\\ÀgìQ¸…£c@gö(\�Âõ8@g¸…ëQTÀg¸…ëQheÀgÍÌÌÌÌÌ@gš™™™™ùPÀg33333³%Àg33333“J@g®Gáz´XÀg{®GázÀgfffff&:@gáz®G1W@g333333ÀgìQ¸…kR@gš™™™™)VÀgÍÌÌÌÌla@gáz®GÁ@@g\�Âõ(ÜJÀg     8b@g×£p=
W8@gq=
×£PQÀg=
×£pb@gfffffFH@gìQ¸…ëZÀg¤p=
×£`@g…ëQ¸åL@g…ëQ¸~SÀg     8dÀgfffffæ6@gìQ¸…VÀg�Âõ(\ïc@g×£p=
2@g¤p=
×ƒ]@g¤p=
×£*@gÍÌÌÌÌŒ]ÀgÍÌÌÌÌD`@gfffffÆO@g¸…ëQhYÀgfffffFc@g33333³4@g×£p=
7NÀgffffffa@g
×£p=ŠJ@gš™™™™©XÀg¤p=
×ÃCÀg=
×£p=#@g33333[eÀgìQ¸…›e@g®GázôF@g…ëQ¸åTÀg)\�Âõ˜\@gR¸…ë6@gìQ¸…»UÀgfffffÖ_@gáz®G±`Àg     @M@gáz®Gáö?gfffffZÀg®GázKÀgffffff@gö(\�ÂõWÀg®Gázü`@gìQ¸…Ë@@g®GázôNÀg…ëQ¸EFÀg…ëQ¸^<@gR¸…ëQOÀg�Âõ(\ÏT@g¸…ëQxeÀgš™™™™É[@g=
×£p=Ú?gfffffaÀgffffffaÀg�Âõ(\�@gö(\�Â5E@gÃõ(\�"E@g�Âõ(\�
@gÃõ(\�âK@g{®Gáz<@gö(\�ÂµK@gÃõ(\�’VÀgö(\�Â½c@g¸…ëQø0@gö(\�Âå`ÀgìQ¸…{a@gš™™™™ùG@g®Gáz®YÀg¸…ëQ0a@g®GázôD@gÃõ(\�Ò_Àg…ëQ¸Õ`@gö(\�ÂuN@gÃõ(\�âTÀg×£p=
ßa@gÍÌÌÌÌŒ?@g®GázdcÀgÃõ(\�Jb@gR¸…ë4@gHáz®`Àg\�Âõ(|`@gš™™™™™M@g¤p=
×ÃZÀg¸…ëQHb@g…ëQ¸?@g�Âõ(\WÀgÃõ(\�rX@gö(\�Âõ'@gö(\�ÂÅ`ÀgHáz®gY@g
×£p=
@g{®GáŠSÀgö(\�Âc@g×£p=
W?@g®Gáz.IÀg33333s;Àg=
×£pý6@gáz®G�PÀgR¸…ëQ4Àg\�Âõ(ÜP@gq=
×£pSÀgÍÌÌÌÌÌ ÀgìQ¸…+;@gš™™™™yT@g…ëQ¸ŽcÀgR¸…ë±D@g¤p=
×óZÀgfffff`@gq=
×£°<@gìQ¸…‹QÀgÃõ(\�ª`@g…ëQ¸E:@g×£p=
—_Àgö(\�Âõ@g®Gáz@g=
×£pýdÀg×£p=
ße@g)\�Âõ(@gq=
×£øcÀg{®GáÂb@gR¸…ëQ1@gÃõ(\�ÒXÀg�Âõ(\c@g33333s4@gÃõ(\�"bÀgÃõ(\�Ê`@g…ëQ¸ž5@g…ëQ¸e_Àg
×£p=Š_@gq=
×£PM@g¤p=
×YÀgìQ¸…‹[@gR¸…ë;@g¤p=
×3VÀgáz®GáÀgš™™™™ÙH@g{®GáêRÀg…ëQ¸d@g)\�Âõ(<@id   s   %4.1f %4.1f %4.1ft   epsgÍÌÌÌÌÌì?t   OK(   R   t   TrueR   t   mmtbx.command_lineRA   t   runt   libtbx.test_utilsRB   R   R   R6   R3   R   (   t   argsRA   RB   t   verboset   rt   tblt	   aminoAcidR2   t	   molpValuet   r_evalR%   R&   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyt   exerciseU   sø    
	%t   __main__i   (    (   t
   __future__R    t   mmtbx.rotamerR7   t   mmtbx.rotamer.n_dim_tableR   t   mmtbx.rotamer.rotamer_evalR   R   t   libtbxR   t   libtbx.utilsR   R!   t   sysR   t
   aminoAcidsR   R   RP   R>   t   argv(    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/ramachandran_eval.pyt   <module>   s0   

:	‹