ó
Š™xTc           @   s`  d  d l  m Z d  d l Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 d d d d d d d d d g
 Z	 e 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! 6ƒ Z
 e e	 d" d# d$ g e
 d% d¸ g d& d¹ d' dº ƒZ e e	 d+ d, d- d. d/ g e
 d& d» d' d¼ ƒZ e e	 d+ d, d4 d5 d6 d7 d8 d9 d: d; d< g e
 d& d½ d' d¾ ƒZ e e	 d+ d, d- d. d/ dD dE dF dG dH dI dJ dK dL dM g e
 i dE dN 6d% d¿ g d& dÀ d' dÁ ƒZ e e	 d+ d, d4 d5 d6 d7 d8 d9 d: d; d< dF dG dH dI g e
 i dF dU 6dG dV 6dH dW 6dI dX 6d% dÂ g d& dÃ d' dÄ ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ d[ d\ d] d^ d_ g e
 d% dÅ dÆ g d& dÇ d' dÈ ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ de d\ d] d^ d_ g e
 i de df 6d% dÉ dÊ g d& dË d' dÌ ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ dU dV dW dX g e
 d% dÍ dÎ dÏ g d& dÐ d' dÑ ƒZ e e	 d+ d, d- d. d/ dD dF di dJ dj dk dl dm dn do dp g e
 i dp dq 6d% dÒ g d& dÓ d' dÔ ƒZ e e	 d+ d, d- d. d/ dD dF di dJ ds dl dm dt du dv dw dx dy dz d{ g e
 d% dÕ g d& dÖ d' d× ƒZ e e	 d+ d, d- d. d/ d dE g e
 d% dØ g d& dÙ d' dÚ ƒZ e e	 d+ d, d4 d� d‚ d9 d: d; d< g	 e
 d& dÛ d' dÜ ƒZ e e	 d+ d, d- d. d/ dD dƒ d„ dK dL g
 e
 d% dÝ g d& dÞ d' dß ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ dU d… d† d‡ dˆ g e
 d% dà dá g d& dâ d' dã ƒZ e e	 d+ d, d- d. d/ dD dF di dJ dj dk dl dm dn do d‹ dŒ g e
 d% dä g d& då d' dæ ƒZ e e	 d+ d, d- d. d/ dŽ dE g e
 i dE dN 6d% dç g d& dè d' dé ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ dU dV dW dX d\ d] d^ d_ d� dq d� d‘ g e
 d% dê dë dì dí g d& dî d' dï ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ dU dV dW dX d“ d” do d• d– d— d˜ d™ dš g e
 d% dð dñ dò g d& dó d' dô ƒZ e e	 d+ d, d- d. d/ dD d  di dJ dj dk dl d† dn g e
 d% dõ g d& dö d' d÷ ƒZ e e	 d+ d, d- d. d/ dD dƒ di d¡ dj g
 e
 d% dø dù g d& dú d' dû ƒZ e e	 d+ d, d- d. d/ dD dN dY dZ dU d… dl d¢ dn g e
 d% dü dý g d& dþ d' dÿ ƒZ i e d£ 6e d¤ 6e d¥ 6e d¦ 6e d§ 6e d¨ 6e d© 6e dª 6e d« 6e d¬ 6e d­ 6e d® 6e d¯ 6e d° 6e d± 6e d² 6e d³ 6e d´ 6e dµ 6e d¶ 6e d· 6Z  d S(   iÿÿÿÿ(   t   divisionNt   dict_with_addc           B   s   e  Z d  „  Z RS(   c         C   s   t  |  ƒ } | j | ƒ | S(   N(   R   t   update(   t   selft   othert   result(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   __add__   s    (   t   __name__t
   __module__R   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyR      s   c         C   sF   t  |  ƒ d k rB |  d d k rB |  d d k rB |  d |  d Sd  S(   Ni   t   hi    t	   123456789(   t   lent   None(   t   pattern(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   alternative_hydrogen_pattern   s
    t   interpreterc           B   s   e  Z g  d  „ Z d „  Z RS(   c      
   C   s  t  ƒ  } x | D] } | j | ƒ q Wt | ƒ t | ƒ k sE t ‚ x, | j ƒ  D] \ } } | | k sR t ‚ qR Wxh | D]` }	 t |	 ƒ d k s™ t ‚ x? |	 D]7 } | | k r  t d d t |	 ƒ d | ƒ ‚ q  q  Wq{ Wi  }
 x¶ | D]® } | j ƒ  | k s
t ‚ x� d d g D] } | j d | ƒ } | |
 k r|t d t	 | ƒ d	 j
 g  | D] } t	 | ƒ ^ qWƒ f ƒ ‚ n  | |
 | <| | k rPqqWqì Wt | ƒ } x3 | D]+ } t | ƒ } | d  k	 r±| | | <q±q±Wx? | j ƒ  D]1 \ } } t | ƒ } | d  k	 rí| | | <qíqíWi  } x˜ | j ƒ  D]Š \ } } x{ d d g D]m } | j d | ƒ } | | k r•t d
 d | d | d ƒ ‚ n  | j d | ƒ | | <| | k rNPqNqNWq5W| |  _ | |  _ | |  _ |
 |  _ | |  _ | |  _ | |  _ d  S(   Ni   s'   Inconsistent mutually_exclusive_pairs:
s     given: %s
s%     pattern %s not in expected_patternst   Ht   DR	   s-   Duplicate name %s given expected_patterns: %ss   , s   Inconsistent synonym_patterns:
s     synonym_pattern: %s
s(     name derived from synonym_pattern: %s
s8     Another synonym_pattern already lead to the same name.(   t   sett   addR   t   AssertionErrort   itemst   RuntimeErrort   strt   stript   replacet   show_stringt   joint   dictR   R   t   expected_patternst   synonym_patternst   mutually_exclusive_pairst   expectedt   synonymst   non_hydrogenst	   hydrogens(   R   R   R   R"   R#   R   t   expected_patterns_sett   expected_patternt   synonym_patternt   mepR    R	   t   namet   pt   altR!   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   __init__   sf    	*)
     						c      	   C   s¤   i  } g  } xv | D]n } | j  ƒ  j ƒ  } |  j j |  j j | | ƒ ƒ } | d  k rh | j | ƒ q | j | g  ƒ j | ƒ q Wt d |  d | d | d | ƒ S(   NR   t
   atom_namesR    t
   unexpected(	   R   t   upperR    t   getR!   R   t   appendt
   setdefaultt   matched_atom_names(   R   R,   R    R-   t	   atom_nameR(   R%   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   match_atom_namesM   s    !(   R   R   R+   R4   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyR      s   6R2   c           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d d d „ Z d „  Z e	 d „ Z
 RS(	   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R   R,   R    R-   (   R   R   R,   R    R-   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyR+   _   s    			c         C   sg   d |  j  j } xP d d d g D]? } | d | 7} x( t |  | g  ƒ D] } | d | 7} qG Wq  W| S(   Ns   
%sR,   R    R-   s   
  %ss    %s(   t	   __class__R   t   getattr(   R   t   outlt   attrR(   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   __repr__e   s    c         C   sI   i  } x< |  j  j ƒ  D]+ \ } } t | ƒ d k r | | | <q q W| S(   Ni   (   R    R   R   (   R   R   R%   t   names(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt'   expected_patterns_with_multiple_matchesp   s
    c         C   se   g  } xX |  j  j D]J } | d |  j k r | d |  j k r | j | d | d f ƒ q q W| S(   Ni    i   (   R   R   R    R0   (   R   R   R'   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyR   w   s    "t    c         C   s$  d } | d  k r t j } n  t |  j ƒ d k r{ | | d Id j g  |  j D] } d | d ^ qQ ƒ IJ| d 7} n  xf |  j ƒ  j ƒ  D]R \ } } | | d | d j g  | D] } d | d ^ q´ ƒ f IJ| d 7} qŽ Wx9 |  j ƒ  D]+ } | | d d j | ƒ IJ| d 7} qñ W| S(	   Ni    s   unexpected atom names:s   , t   "i   s/   multiple matches: expected pattern=%s  names=%ss   mutually exclusive: %st    (	   R   t   syst   stdoutR   R-   R   R;   R   R   (   R   t   outt   prefixR   R(   R%   R:   t   pair(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   show_problems   s      $
2c   
      C   sg  d  g t |  j ƒ } i  } x6 t |  j ƒ D]% \ } } | j | g  ƒ j | ƒ q, Wi  } xr |  j j D]d } | d |  j k r¨ | d | | d <| d | | d <qh | d | | d <| d | | d <qh Wx� |  j j	 ƒ  D] \ } } | j
 | | ƒ } | j ƒ  }	 |	 d d k r/|	 d |	 d }	 n  x- | D]% } x | | D] } |	 | | <qGWq6Wqà W| S(   Ni   i    i   R
   (   R   R   R,   t	   enumerateR1   R0   R   R   R    R   R/   R.   (
   R   R   t   name_indicest   iR(   t
   mep_translR'   R%   R:   t   mon_lib_name(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   mon_lib_names�   s(    c         C   s^   | r+ t  |  j j ƒ j t  |  j ƒ  ƒ ƒ St  |  j j |  j j ƒ j t  |  j ƒ  ƒ ƒ Sd  S(   N(   R   R   R"   t
   differenceRJ   R#   (   R   t   ignore_hydrogen(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   missing_atom_names§   s    N(   R   R   R+   R9   R;   R   R   RD   RJ   t   FalseRM   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyR2   ]   s   					t   NR	   t   1ht   2ht   3ht   CAt   Ct   Ot   OXTt   hXTt   OT1t   OT2t   OCt   hCt   hNt   1hNt   2hNt   3hNt   1hTt   2hTt   3hTt   h0At   h0Bt   h0Ct   1hAt   2hAt   3hAR   R"   R#   R   t   HA1t   HA2t   hAt   CBt   1hBt   2hBt   3hBt   HAt   HB1t   HB2t   HB3t   hBt   CG1t   1hG1t   2hG1t   3hG1t   CG2t   1hG2t   2hG2t   3hG2t   HBt   HG11t   HG12t   HG13t   HG21t   HG22t   HG23t   CGt   hGt   CD1t   1hD1t   2hD1t   3hD1t   CD2t   1hD2t   2hD2t   3hD2t   1hGt   HD11t   HD12t   HD13t   HD21t   HD22t   HD23t   CDt   1hDt   2hDt   3hDt   2hGt   3hGt   SDt   CEt   1hEt   2hEt   3hEt   HG1t   HG2t   HE1t   HE2t   HE3t   SEt   SEDt   HD1t   HD2t   hD1t   hD2t   CE1t   hE1t   CE2t   hE2t   CZt   hZt   1hZt   HZt   NE1t   CE3t   hE3t   CZ2t   hZ2t   CZ3t   hZ3t   CH2t   hH2t   HZ2t   HZ3t   HH2t   OGt   HGt   OG1t   hG1t   OD1t   ND2t   OE1t   NE2t   1hE2t   2hE2t   HE21t   HE22t   OHt   hHt   HHt   SGt   NZt   2hZt   3hZt   HZ1t   NEt   hEt   NH1t   1hH1t   2hH1t   NH2t   1hH2t   2hH2t   HEt   HH11t   HH12t   HH21t   HH22t   ND1t   OD2t   OE2t   GLYt   ALAt   VALt   LEUt   ILEt   METt   MSEt   PROt   PHEt   TRPt   SERt   THRt   ASNt   GLNt   TYRt   CYSt   LYSt   ARGt   HISt   ASPt   GLU(   Rf   Rg   Rh   (   RO   RS   RT   RU   (   R   Ri   Rj   (   RO   RS   RT   RU   Rl   (   R   Rp   Rq   Rr   Rs   (   RO   RS   RT   RU   Rl   Ru   Ry   (	   R   Rp   R}   R~   R   R€   R�   R‚   Rƒ   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R„   R†   RŠ   (
   R   Rp   Rq   Rr   R�   R�   R‘   R’   R“   R”   (   Rv   Rw   Rx   (   RO   RS   RT   RU   Rl   Ru   R†   Ry   (   R   Rp   R}   R~   R   R�   R�   R‘   R�   R‚   Rƒ   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (   RO   RS   RT   RU   Rl   R„   R›   Rœ   (	   R   Rp   Rq   Rr   R    R¡   R¢   R£   R¤   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (   RO   RS   RT   RU   Rl   R„   R¥   Rœ   (	   R   Rp   Rq   Rr   R    R¡   R¢   R£   R¤   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (   R–   R—   R˜   (   RO   RS   RT   RU   Rl   R„   R•   (   Rp   Rq   Rr   R    R¡   R§   R¨   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R„   R†   R«   R¯   R­   RŠ   (	   R   Rp   Rq   Rr   R§   R¢   R²   R£   R¨   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R„   R†   RŠ   R³   R­   R´   R¶   R¸   Rº   (
   R   Rp   Rr   Rs   R§   R¢   R¤   R¼   R½   R¾   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R¿   (   R   Rp   Rq   Rr   RÀ   (   RO   RS   RT   RU   Rl   RÁ   Ry   (   R   Rp   R}   R    R�   R‚   Rƒ   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R„   RÃ   RÄ   (   R   Rp   Rq   Rr   R’   R“   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (	   RO   RS   RT   RU   Rl   R„   R•   RÅ   RÆ   (   R   Rp   Rq   Rr   R    R¡   RÉ   RÊ   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   R„   R†   R«   R¯   RË   R­   RŠ   (	   R   Rp   Rq   Rr   R§   R¢   RÍ   R£   R¨   (   Rm   Rn   Ro   (   RO   RS   RT   RU   Rl   RÎ   (   R   Rp   Rq   Rr   RÀ   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (   R–   R—   R˜   (   R�   Rž   RŸ   (	   RO   RS   RT   RU   Rl   R„   R•   Rœ   RÏ   (   R   Rp   Rq   Rr   R    R¡   R§   R¨   R¢   R£   RÒ   R¼   R½   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (   R–   R—   R˜   (   RO   RS   RT   RU   Rl   R„   R•   RÓ   R¯   RÕ   RØ   (   R   Rp   Rq   Rr   R    R¡   R§   R¨   RÛ   RÜ   RÝ   RÞ   Rß   (   Rm   Rn   Ro   (
   RO   RS   RT   RU   Rl   R„   Rà   R«   RÆ   RŠ   (   R   Rp   Rq   Rr   R§   R¢   R£   R¨   (   Rm   Rn   Ro   (   R©   Rª   Rª   (   RO   RS   RT   RU   Rl   R„   RÃ   Rá   (   R   Rp   Rq   Rr   (   Rm   Rn   Ro   (   RŽ   R™   Rš   (	   RO   RS   RT   RU   Rl   R„   R•   RÅ   Râ   (   R   Rp   Rq   Rr   R    R¡   (!   t
   __future__R    R?   R   R   R   t   objectR   R2   t   peptide_expected_patternst   peptide_synonym_patternst   gly_interpretert   ala_interpretert   val_interpretert   leu_interpretert   ile_interpretert   met_interpretert   mse_interpretert   pro_interpretert   phe_interpretert   trp_interpretert   ser_interpretert   thr_interpretert   asn_interpretert   gln_interpretert   tyr_interpretert   cys_interpretert   lys_interpretert   arg_interpretert   his_interpretert   asp_interpretert   glu_interpretert   interpreters(    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/atom_name_interpretation.pyt   <module>   s^  	KT							 							
		
	 	
							
		
			 			 	
		
		
		