ó
¹™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 m Z d  d l m Z d  d l Z d  d	 l m Z d  d l Z d  d l Z d  d l Z d  d l Z e d
 „ Z d d „ Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6Z d „  Z e d  „ Z d e e e d! „ Z d" d+ d# „  ƒ  YZ  d$ d, d% „  ƒ  YZ! d& d- d' „  ƒ  YZ" d( „  Z# e$ d) k röe# e j% d* ƒ n  d S(.   iÿÿÿÿ(   t   divisionN(   t	   NDimTable(   t   easy_pickle(   t   dlite(   t   Sorry(   t   PropertyFilet   SidechainAngles(   t   monomer_library(   t   flexc         C   s˜   t  j j t j j d d ƒ ƒ } | d  k r” t  j j d ƒ } | d  k r” t  j j t j j d d ƒ ƒ } | d  k r‘ |  r‘ t d ƒ ‚ q‘ q” n  | S(   Nt	   chem_datat   rotarama_datat   ext_ref_filess™   Can't find chem_data/rotarama_data/ directory:
  Please run
    svn co svn://quiddity.biochem.duke.edu:21/phenix/rotarama_data
  to resolve this problem.(   t   libtbxt   envt   find_in_repositoriest   ost   patht   joint   NoneR   (   t   optionalt   result(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   find_rotarama_data_dir   s    		c         C   s4   |  d  k r t ƒ  }  n  t j t j j |  d ƒ ƒ S(   Ns   rotarama.dlite(   R   R   R   t	   target_dbR   R   R   (   t   rotarama_data_dir(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   open_rotarama_dlite   s    t   argt   asnt   aspt   cyst   glnt   glut   hist   ilet   leut   lyst   mett   phetyrt   phet   prot   sert   thrt   trpt   tyrt   valc         C   s;   t  | d d  ƒ } | d  k	 r+ | d |  ƒ S| j d |  ƒ S(   Nt   get_comp_comp_idt   comp_id(   t   getattrR   t   get_comp_comp_id_direct(   t   residuet   mon_lib_srvt   get_func(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   mon_lib_query:   s     c         C   sf  g  } x0 |  j  ƒ  D]" } | j | j j ƒ  j ƒ  ƒ q Wt |  j j ƒ  j ƒ  | ƒ } g  } | s– xr | j ƒ  D] } | j | j ƒ  j ƒ  ƒ qp WnB | d  k	 rØ x3 | j	 ƒ  D]" } | j | j
 j ƒ  j ƒ  ƒ q¯ Wn  g  }	 x� | D]y } | | k rå | j d d ƒ }
 | j ƒ  d k r$d }
 n | j ƒ  d k r?d }
 n  |
 | k r^|	 j | ƒ q^qå qå W|	 S(   Nt   *t   't   O1Pt   OP1t   O2Pt   OP2(   t   atomst   appendt   namet   stript   upperR3   t   resnamet	   atom_dictR   t   non_hydrogen_atomst   atom_idt   replace(   R0   R1   t   ignore_hydrogenst	   atom_listt   atomt   mlqt   reference_listt   att   nont   missingt	   atom_temp(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   eval_residue_completeness@   s,      #		c      	   C   så  g  } | d  k r$ t j j ƒ  } n  xº|  j ƒ  D]¬} x£| j ƒ  D]•} xŒ| j ƒ  D]~} | j ƒ  }	 xi| j ƒ  D][}
 g  } |
 j ƒ  } |
 j d k r¿ d | j	 | j
 ƒ  | j f } n% d | j	 | j
 ƒ  |
 j | j f } g  } x/ | j ƒ  D]! } | j d k r÷ | j } q÷ q÷ Wt d | d | ƒ } | st | ƒ d k r¯| j | ƒ | j | ƒ | r|| j | ƒ q|q¯n0 | j | ƒ | j | ƒ | r¯| j | ƒ n  t | ƒ d k rv | j | ƒ qv qv WqW WqD Wq1 W| S(   Nt    s
   %2s%5s %3ss   %2s%5s%1s%3ss    CA R0   R1   i    (   R   R   t   servert   modelst   chainst   residue_groupst
   conformerst   only_residuet   altloct   idt   residR?   R:   R<   t   xyzRM   t   lenR;   (   t   pdb_hierarchyR1   RD   t   report_whole_rest   return_ca_post   missing_atom_listt   modelt   chaint   residue_groupRS   t	   conformert   itemR0   t   keyt   ca_xyzRF   RK   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   eval_sidechain_completenessX   sF    	 t   RotamerEvalc           B   sV   e  Z i  Z d d d d  d „ Z d „  Z d „  Z d „  Z d d d „ Z d „  Z	 RS(   t   500c         C   sK  | d  k r t t ƒ } n  | |  _ | d  k rE t j j j ƒ  } n  | d  k r] t j } n  | |  _	 |  j	 d k r‡ d |  _
 d } n- |  j	 d k r¨ d |  _
 d } n t d ƒ ‚ | |  _ | |  _ t ƒ  |  _ t j } i  |  _ x* | j ƒ  D] \ } } | ƒ  |  j | <qñ Wt ƒ  }	 t j j t j j |	 d ƒ ƒ }
 t d	 |	 ƒ } xú t j ƒ  D]ì \ } } |  j j | ƒ d  k	 r�qWn  | | 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! | ƒ | | <qWWd  S(   NRg   g{®Gáz„?s   rota500-t   8000gú~j¼t“h?s	   rota8000-s1   data_version given to RotamerEval not recognized.t	   NO_UPDATER   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   R   t   Truet   sidechain_anglest   mmtbxR   RO   t   syst   stdoutt   data_versiont   outlier_thresholdR   t   logR1   t	   RotamerIDt   rot_idRf   t   aaTablest   itemsR   R   R   t   existsR   R   t
   aminoAcidst   gett	   pair_infot   needs_updateR   t   loadt   targett   weakreft   ref(   t   selfRo   R1   Ru   Rs   t
   fileprefixt   main_aaTablest   aat   ndt_weakreft   rotamer_data_dirt	   no_updateR   t   aafilet	   data_filet   pickle_fileR}   t   ndt(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   __init__‰   sT    											! 		"c         C   s5   |  j  j | j ƒ  ƒ } | d k r( d S| j | ƒ S(   sÅ   Evaluates the specified rotamer from 0.0 (worst) to 1.0 (best).

       Values below 0.003 are generally considered outliers.
       If the 3-letter amino acid name is not recognized, returns None.N(   Rx   R|   t   lowerR   t   valueAt(   Rƒ   t   aaNamet	   chiAnglesR�   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   evaluate½   s     c         C   sÕ   i  } | j  ƒ  } x¼ | D]´ } | j | j ƒ d  k r | j | j j d d d ƒ ƒ d  k rz | | j j d d d ƒ =nC | j | j j d d d ƒ ƒ d  k r½ | | j j d d d ƒ =n  | | | j <q q W| S(   Nt   Ht   Di   (   R:   R|   R<   R   RC   (   Rƒ   R0   R@   R:   RF   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   get_atom_dictÆ   s    ''c         C   s(   |  j  | ƒ } |  j j d | d | ƒ S(   Nt   resR@   (   R–   Ro   t   measureChiAngles(   Rƒ   R0   R@   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt
   chi_anglesÓ   s    c   
      C   sg  | | g j  d  ƒ d k s! t ‚ | d  k	 rQ | j ƒ  } | j j ƒ  j ƒ  } n  | d k ra d  S| d k rv d } n  |  j | ƒ } y1 |  j j	 d | d | ƒ } |  j
 | | ƒ } Wn t k
 rÊ d  SX| d  k rÛ d  S|  j j | | d t ƒ} |  j j | | ƒ }	 |	 d k r-| d  k s)t ‚ |	 S|	 d	 k rL| |  j k rLd
 S| |  j k  r_d S|	 Sd  S(   Ni   t   glyt   mseR#   R—   R@   t   symmetryt	   EXCEPTIONRN   t   UNCLASSIFIEDt   OUTLIER(   t   countR   t   AssertionErrorR:   R?   R�   R=   R–   Ro   R˜   R“   t	   ExceptionRw   t	   wrap_chist   Falset   identifyRt   (
   Rƒ   R0   R`   R:   R?   R@   t   chist   valueR£   t   rotamer_name(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   evaluate_residueÙ   s<    !		c   
   	   C   s  | j  ƒ  j ƒ  } t j j } | | j ƒ d k r| j  ƒ  j ƒ  } |  j j d t d | j d | j  ƒ  j	 ƒ  d | ƒ } | d  k s¥ | j d  k	 s¥ | j d  k r® d  } n  | d  k	 rd } xT | D]I \ } } t j t j | | j ƒ  ƒ ƒ }	 |	 | k  rÇ |	 } | } qÇ qÇ Wqn  | S(   Nt   common_amino_acidt   fine_samplingR-   t
   atom_namest
   sites_cartg    eÍÍA(   R:   t   extract_xyzt   iotbxt   pdbt   common_residue_names_get_classR?   R1   t   rotamer_iteratorRn   t   extract_nameR   t   problem_messaget   rotamer_infoR   t   meant   sqrtt   dot(
   Rƒ   R0   t   sites_cart_resultt	   get_classR­   R²   t   dist_mint   rt   rotamer_sites_cartt   d(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   nearest_rotamer_sites_cartþ   s*    			"N(
   t   __name__t
   __module__Rx   R   RŽ   R“   R–   R™   R©   R¿   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRf   ƒ   s   /				"Rv   c           B   sJ   e  Z i  Z d  „  Z d „  Z e d „ Z d „  Z e d „ Z	 d „  Z
 RS(   c         C   s  t  |  j ƒ d k rÿ |  j ƒ  } |  j t j j | d ƒ ƒ } x½ | D]² } | j d ƒ } | d j ƒ  } | d j ƒ  j d ƒ } | j d ƒ } | d } | d }	 t	 | |	 | ƒ }
 g  } | |  j k rÞ |  j | } n  | j
 |
 ƒ | |  j | <qF Wn  d  S(   Ni    s   rotamer_names.propst   =i   s   "t    (   RY   t   namest   find_source_dirt   processR   R   R   t   splitR=   t   NamedRotR;   (   Rƒ   t
   source_dirt   rota_names_listt   linet
   split_linet   aa_namet   rangest
   name_splitR†   t   rot_namet   rott   rotList(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRŽ     s     

c         C   s‡   | j  ƒ  } | d k r d S| |  j k r= t d | ƒ ‚ n  |  j | | ƒ } |  j | } x$ | D] } | j | ƒ rc | j Sqc Wd S(   Nt   alaR�   s   Unknown residue name: %sRN   (   R�   RÄ   R   R£   t   containsR¨   (   Rƒ   RÍ   R¦   R£   RÒ   RÑ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyR¥   /  s      c         C   sG   t  j j t j j d d ƒ ƒ } | d  k rC |  rC t d ƒ ‚ n  | S(   NRp   t   rotamers1   Can't seem to find mmtbx/rotamer/ directory.
    (   R   R   R   R   R   R   R   R   (   R   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRÅ   :  s
    !c         C   sŒ   g  } y t  | ƒ } Wn& t k
 r> } | d GHt j ƒ  n Xx< | D]4 } | j d ƒ sF | d k rm qF qF | j | ƒ qF W| j ƒ  | S(   Ns    file not foundt   #s   
(   t   opent   ImportErrorRq   t   exitt
   startswithR;   t   close(   Rƒ   t   fileLoct   rotaListt   ft   eRË   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRÆ   B  s    	 
c         C   s¯   | j  ƒ  } g  } xu t d t | ƒ ƒ D]^ } | | d  k	 ry | j | | d ƒ | | d k  r† | | c d 7<q† q( | j d  ƒ q( W| t k r« |  j | | ƒ } n  | S(   Ni    ih  (   R�   t   rangeRY   R   R;   Rn   t   wrap_sym(   Rƒ   RÍ   R¦   Rœ   R£   t   i(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyR£   O  s    c         C   s›   | j  ƒ  } | d k s< | d k s< | d k s< | d k r— t | ƒ d } | | d  k	 r— | | d | | <| | d k  r” | | c d 7<q” q— n  | S(   NR   R   R%   R*   i   i´   i    (   R�   RY   R   (   Rƒ   RÍ   R£   Râ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRá   d  s    0(   RÀ   RÁ   RÄ   RŽ   R¥   R¤   RÅ   RÆ   Rn   R£   Rá   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRv     s   			RÈ   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s1   | |  _  | |  _ t t | j d ƒ ƒ |  _ d  S(   Ns   , (   RÍ   R¨   t   mapt   intRÇ   t   bounds(   Rƒ   R†   R¨   Rå   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRŽ   s  s    		c         C   s   t  |  j ƒ d t  |  j ƒ S(   NRÂ   (   t   strR¨   Rå   (   Rƒ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   __str__x  s    c         C   sh   xa t  d t |  j ƒ d ƒ D]D } | | d |  j | k  s\ | | d |  j | d k r t Sq Wt S(   Ni    i   i   (   Rà   RY   Rå   R¤   Rn   (   Rƒ   t   anglesRâ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRÔ   {  s
    " (   RÀ   RÁ   RŽ   Rç   RÔ   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyRÈ   q  s   		c      H   C   s?  t  d t ƒ d  k r d GHnd d l m } | j ƒ  d d l m } d |  k } t ƒ  } | j	 d } t ƒ  j	 d | k s… t
 ‚ | j d g ƒ d	 g k s¦ t
 ‚ | j d	 g ƒ d	 k sÄ t
 ‚ | g  | j d	 d
 !D] } | d ^ qØ d	 d d d d d d d d d d d d d d d d d d d g ƒ s6t
 ‚ | | j d d g ƒ d ƒ sZt
 ‚ xid d d  d! g d" f d# d$ d% d& g d' f d( d) d* g d+ f d, d- d. g d/ f d0 d1 g d) f d2 d3 d4 d5 d6 g d7 f d8 d9 g d: f d; d< d= g d> f d8 d? g d@ f d2 dA dB dC dD g dE f d8 dF g dG f d( dH dI g dJ f d8 dK g dL f d; dM dN g dO f dP dQ dR dS g dT f d0 dU g dV f dP dW dX dY g dZ f d[ d\ g d] f d d^ g d_ f d` da db g dc f d8 dd g de f d( df dg g dh f dP di dj dk g dl f dm d! dn g do f d0 dp g dq f d2 dr ds dt du g dv f d2 dw dx dy dz g d{ f d( d| d} g d~ f d# d d€ d� g d‚ f d` dƒ d„ g d… f d2 d† d‡ dˆ d‰ g dŠ f dP d‹ dŒ d� g dŽ f d( d� d� g d‘ f d[ d’ g d“ f d[ d” g d• f d` d– d— g d˜ f d# d™ dš d› g dœ f d# d� dž dŸ g d  f d¡ d¢ d£ d¤ d¥ g d¦ f d; d§ d¨ g d© f d( dª d« g dN f d, d% d¬ g d­ f d2 d® d¯ d° d± g d² f d# d³ d´ dµ g d¶ f d; d· d¸ g d¹ f dP dº d» d¼ g d½ f d` d¾ d¿ g dÀ f d¡ dÁ dr dÂ dÃ g dJ f d8 dÄ g dÅ f d; dÆ dÇ g dÈ f d dÉ g dÊ f d` dË dÌ g dÍ f dÎ dÏ dÐ g dÑ f dm dÒ dÓ g dÔ f d( dÕ dÖ g d× f d# dØ dÙ dÚ g dÛ f d2 dÜ dÝ dÞ dß g dà f dP dá dâ dã g dä f d då g dæ f d8 dç g dè f d; dé dê g dë f dì dí dî g dï f d; dð dñ g dò f d0 dó g dô f d; dõ dh g dö f d¡ d÷ dø dù dú g d˜ f d; dû dü g d_ f d¡ dý dþ dÿ d g df gD D]c \ } } }	 d| j | | ƒ }
 | r§| Gd|
 |	 |
 |	 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 st
 ‚ qWdGHd  S(  NR   s:   Skipping exercise(): rotarama_data directory not availableiÿÿÿÿ(   t   rebuild_rotarama_cache(   t   approx_equals	   --verboseR+   g      à?i    i   iè  g(eRCà@gh’XRîÎ@g&áBÁ½@gçSÇ*5@gÆ5>“ý#@gcD¢Ð@g
¾iúìà@g‹v“¾@g¶J°8œ	@gÇ¹M¸WF@g…8„*5@gIZÖý#@gcD¢Ð@gÄ±.n£ @g‹v“¾û?t   SERi<   g§üÿ¯I é?t   METgš™™™™T@gfffff†eÀg     0f@gfffffæ1@t   GLNg     Àd@g     @f@gš™™™™ÙZÀgš™™™™™1@t   ILEgfffff&N@gÍÌÌÌÌLd@gÍÌÌÌÌL:@t   PHEgš™™™™YNÀgš™™™™yX@g33333X@t   VALgš™™™™yfÀt   LYSg33333óeÀgffffff@g     €eÀgfffffÆeÀg333333U@t   THRgÍÌÌÌÌ,S@gš™™™™™'@t   LEUgÍÌÌÌÌQÀgš™™™™¹dÀgÍÌÌÌÌL1@gÍÌÌÌÌ¬Q@gš™™™™=@gš™™™™ifÀgÍÌÌÌÌlfÀg33333ãbÀgfffff¦HÀg33333³A@g33333³OÀgfffff&Q@gÍÌÌÌÌl_@gÍÌÌÌÌìeÀgš™™™™™¹?g      P@g33333sF@g33333s]Àg333333>@gš™™™™™É?t   GLUgfffffÆRÀgÍÌÌÌÌüdÀgš™™™™ya@g33333³J@g     @OÀgÍÌÌÌÌÌA@gš™™™™yRÀg     @KÀgffffff2Àgš™™™™K@t   PROg      =Àgš™™™™9U@gš™™™™ÙA@g       @t   ASPgfffff&TÀgÍÌÌÌÌÌ3ÀgÍÌÌÌÌLQ@gÍÌÌÌÌLN@gfffff¦T@g33333sNÀgÍÌÌÌÌLKÀgš™™™™™C@g333333eÀg33333ãeÀg333333R@gš™™™™B@t   ASNgfffffæJ@g     €C@gfffffe@gš™™™™ÙG@gÍÌÌÌÌìQÀgÍÌÌÌÌ¼eÀgfffffff@gÍÌÌÌÌlf@gfffff&X@gffffffNÀgš™™™™)e@gÍÌÌÌÌœb@gfffffFVÀgÍÌÌÌÌÌ2@gš™™™™¹QÀg     Ðd@g33333ÓR@gÍÌÌÌÌf@gÍÌÌÌÌ|e@gš™™™™™A@gš™™™™™L@g33333ÃbÀg     `P@gš™™™™™@g33333“S@gfffffFa@g333333O@gÍÌÌÌÌ¬dÀgffffff@gÍÌÌÌÌNÀg333333SÀgš™™™™BÀgfffff&M@g333333KÀg      d@gÍÌÌÌÌLB@gš™™™™™?Àgš™™™™™S@gffffff<Àgš™™™™ÙU@g33333Ó`@gš™™™™ÙNÀg        g33333óNÀg     `fÀgš™™™™©dÀgfffffæ8@gÍÌÌÌÌŒJÀgÍÌÌÌÌ|fÀg      <@gš™™™™ÙP@t   ARGgfffff6d@g33333³e@gfffffÆe@gÍÌÌÌÌ¬ZÀgš™™™™YD@g33333QÀgÍÌÌÌÌÜd@gfffff¦S@g33333sHÀgÍÌÌÌÌMÀgÍÌÌÌÌŒS@gš™™™™YW@g     ÀNÀgfffff¶e@gš™™™™ù[ÀgffffffMÀgš™™™™™ @g33333“eÀgš™™™™)f@g      ]@gffffff2@gffffffIÀgfffff–eÀgÍÌÌÌÌÌ9@g      e@gÍÌÌÌÌ¬a@gÍÌÌÌÌŒe@gš™™™™™@g     €SÀg333333f@gÍÌÌÌÌS@g33333óKÀgÍÌÌÌÌŒ\@g      `ÀgfffffæM@gfffffR@gfffff&NÀgfffffffÀg      U@g33333³M@gÍÌÌÌÌ¬S@g     @RÀg      c@gÍÌÌÌÌ¬V@t   TYRgfffff¦OÀgfffffæY@gÍÌÌÌÌW@g33333ãcÀg      bÀgš™™™™™@gffffffQÀgÍÌÌÌÌf@g      Q@gš™™™™ÙSÀgfffff6dÀgÍÌÌÌÌŒbÀg333333#@gš™™™™ÙH@gfffff¶d@gš™™™™Ic@gš™™™™9R@gš™™™™™.@gÍÌÌÌÌRÀgfffff¦_@gš™™™™YB@g333333@gÍÌÌÌÌLRÀgÍÌÌÌÌÌ?@gÍÌÌÌÌLNÀg     @X@g     ÀEÀgÍÌÌÌÌ\eÀg333333'@t   HISgfffffFQÀg333333VÀgš™™™™™V@gš™™™™™e@gš™™™™yP@gffffffI@g      f@g33333ÓV@gfffff[Àgš™™™™™Ù?gÍÌÌÌÌ¼`@gš™™™™ycÀg333333;@gÍÌÌÌÌcÀg      WÀg     ÀB@g33333SbÀg33333³c@gš™™™™9W@g     àWÀgš™™™™™	@id   s   %4.1f %4.1f %4.1ft   epsgÍÌÌÌÌÌì?t   OK(   R   Rn   R   t   mmtbx.command_lineRé   t   runt   libtbx.test_utilsRê   Rf   Rx   R¡   t   whereIst	   bin2indext   lookupTableR“   Ry   (   t   argsRé   Rê   t   verboseR¼   t   tblt   yt	   aminoAcidR’   t	   molpValuet   r_evalR†   R‡   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   exerciseƒ  sÄ    
	!$!$+t   __main__i   (    (    (    (&   t
   __future__R    t   libtbx.load_envR   t   mmtbx.rotamer.n_dim_tableR   R   R   t   libtbx.utilsR   t   mmtbx.rotamer.sidechain_anglesR   R   Rp   R   t   mmtbx.monomer_library.servert   cctbx.array_familyR   R�   Rq   R   t	   iotbx.pdbR¯   R¤   R   R   R   R{   R3   Rn   RM   Re   Rf   Rv   RÈ   R
  RÀ   t   argv(    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/rotamer/rotamer_eval.pyt   <module>   sZ   
	'“[	r