ó
Œ™xTc           @   sz  d  d l  m Z d  d l Z d „  Z i d j ƒ  d 6d j ƒ  d 6d j ƒ  d	 6d
 j ƒ  d 6d j ƒ  d 6d j ƒ  d 6d j ƒ  d 6d j ƒ  d 6Z d „  Z i d j ƒ  d 6d j ƒ  d 6d j ƒ  d 6d j ƒ  d 6d j ƒ  d 6Z i d j ƒ  d 6d  j ƒ  d 6d! j ƒ  d 6d" j ƒ  d 6d# j ƒ  d 6Z	 d$ „  Z
 d% „  Z d& „  Z d' „  Z d( „  Z d) „  Z e d* k rve ƒ  n  d S(+   iÿÿÿÿ(   t   divisionNc    	   
   C   s�  xJd  d g D]<}  t j j d |  ƒ } | j d  k s= t ‚ | j ƒ  d k sU t ‚ | j d d ƒ sn t ‚ | j ƒ  s� t ‚ | j	 ƒ  s” t ‚ | j
 ƒ  s§ t ‚ | j ƒ  sº t ‚ | j ƒ  sÍ t ‚ | j ƒ  sà t ‚ | j ƒ  só t ‚ | j ƒ  st ‚ | j ƒ  st ‚ | j ƒ  s,t ‚ | j ƒ  s?t ‚ | j ƒ  q Wx@t j j D]2\ } } } x t t g D]} | r™d | j ƒ  d } n | } t j j d | ƒ } | j | k sÉt ‚ | j ƒ  | k sát ‚ | j d d ƒ sút ‚ | j d d ƒ st ‚ xU | j d d	 ƒ j ƒ  D]; } | j d | ƒ sJt ‚ | j d | d
 ƒ s,t ‚ q,W| j ƒ  | j d ƒ d k p›| j d ƒ d k k s§t ‚ | j	 ƒ  | j d ƒ d k k sÎt ‚ | j
 ƒ  | j d k k sït ‚ | j ƒ  | j d k k st ‚ | j ƒ  | j d k k s1t ‚ | j ƒ  | j d k k sRt ‚ | j ƒ  | j d k k sst ‚ | j ƒ  s•| j ƒ  s¶t ‚ n! | j ƒ  r¶| j ƒ  s¶t ‚ n  | j ƒ  | j d k k s×t ‚ | j ƒ  | j d k k søt ‚ | j ƒ  s| j ƒ  st ‚ n  | j ƒ  s<| j ƒ  s<t ‚ n  | j ƒ  rG| j ƒ  sZt ‚ | j d k sot ‚ | j ƒ  s�t ‚ | j	 ƒ  | j d ƒ d k k s¨t ‚ | j ƒ  d k sÀt ‚ | j
 ƒ  sÓt ‚ | j ƒ  såt ‚ | j ƒ  søt ‚ | j ƒ  st ‚ | j ƒ  st ‚ | j ƒ  s1t ‚ | j ƒ  sQt ‚ n
| j ƒ  rQ| j ƒ  set ‚ | j d k szt ‚ | j ƒ  sŒt ‚ | j	 ƒ  | j d ƒ d k k s³t ‚ | j ƒ  d k sËt ‚ | j
 ƒ  sÞt ‚ | j ƒ  sñt ‚ | j ƒ  st ‚ | j ƒ  st ‚ | j ƒ  s(t ‚ | j ƒ  s;t ‚ | j ƒ  sQt ‚ n  | j ƒ  | j d  k spt ‚ | j ƒ  d k svt ‚ qvWqZWxc t j j D]U \ } } } t j j d | d
 ƒ } | j d  k sÚt ‚ | j ƒ  d k s�t ‚ q�Wx� t j j D]‚ \ } } } xp t t | ƒ ƒ D]\ } t j j d | |  d
 | | d ƒ } | j d  k sit ‚ | j ƒ  d k s%t ‚ q%WqWd  S(   Nt    t	   atom_namet   Nonet   residue_names     t    t   Dt   ANYs   A C G U DA DC DG DTt   Xt   Hi    s    O2's   HO2's   H2''s    P  s    OP1s    OP2t   HOP2s    OP3t   HOP3s   HO5's   HO3's   A C G Ui   (   s    P  s    OP1s    OP2R
   s    OP3R   (   s    OP3R   (   R   t   iotbxt   pdbt   rna_dna_atom_names_infot   reference_namet   AssertionErrort   compatible_residue_namest   is_compatible_witht   is_hydrogent   is_deuteriumt
   is_o2primet   is_ho2primet   is_h2primeprimet   is_in_phosphate_groupt   is_op3_or_hop3t   is_ho5primet   is_ho3primet   change_h2primeprime_to_ho2primet   change_ho5prime_to_hop3t   change_to_unknownt   rna_dna_atom_name_aliasest   Falset   Truet   lowert   replacet   splitt   findt   xranget   len(	   R   t   infot   at   rt   fR"   t	   work_namet   nt   i(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   exercise_rna_dna_atom_names   s®     !<'!!!!!''
 )s�   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N9 C8 H8 N7 C5 C4 N3
    C2 H2 N1 C6 N6 H61 H62 C2* H2* O2* HO2* C3* H3* O3*t   ARs{   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N1 C2 O2 N3 C4 N4 H41
    H42 C5 H5 C6 H6 C2* H2* O2* HO2* C3* H3* O3*t   CRs„   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N9 C8 H8 N7 C5 C4 N3 C2
    N2 H21 H22 N1 H1 C6 O6 C2* H2* O2* HO2* C3* H3* O3*t   GRsv   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N1 C2 O2 N3 H3 C4 O4 C5
    H5 C6 H6 C2* H2* O2* HO2* C3* H3* O3*t   URs~   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N9 C8 H8 N7 C5 C4 N3 C2
    H2 N1 C6 N6 H61 H62 C2* H2*1 H2*2 C3* H3* O3*t   ADsx   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N1 C2 O2 N3 C4 N4 H41
    H42 C5 H5 C6 H6 C2* H2*1 H2*2 C3* H3* O3*t   CDs�   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N9 C8 H8 N7 C5 C4 N3 C2
    N2 H21 H22 N1 H1 C6 O6 C2* H2*1 H2*2 C3* H3* O3*t   GDsƒ   
    P O1P O2P O5* C5* H5*1 H5*2 C4* H4* O4* C1* H1* N1 C2 O2 N3 H3 C4 O4 C5
    C5M H5M1 H5M2 H5M3 C6 H6 C2* H2*1 H2*2 C3* H3* O3*t   TDc    
         sn  d }  xat  j ƒ  D]S\ ‰  } | d d d g } d ‰ ˆ  d d k rQ d	 ‰ n  ‡  ‡ f d
 †  } | d | ƒ } | j ƒ  } xP t | | ƒ D]? \ } } | d k r» | d k sÍ t ‚ qŽ | | k sŽ t ‚ qŽ Wg  } x? t | | j ƒ D]+ \ } }	 |	 j ƒ  rqê n  | j | ƒ qê W| d | ƒ } | j ƒ  } x/ t | | ƒ D] \ } } | | k sDt ‚ qDWq Wd  S(   Ni    t   O3Ts   HO5*s   HO3*R   t   At   Ct   Gt   ?c            sp   t  j j d ˆ ˆ  d d |  ƒ } ˆ  d d k rO | j ˆ  d k sl t ‚ n | j d ˆ  d k sl t ‚ | S(   NR   i    t
   atom_namesi   t   RR   (   R   R   t!   rna_dna_atom_names_interpretationR   R   (   t	   mon_namest   result(   t   mon_codet   q(    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   interpretation}   s    	R@   R   (   R9   R:   R;   (   t   mon_lib_rna_dna_namest   itemst   mon_lib_namest   zipR   t   infosR   t   append(
   t
   n_problemsR@   RD   t   interpretedt   interp_mon_namest   inpt   outt   mon_names_without_phosphatet   mon_nameR(   (    (   RB   RC   sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   exercise_mon_lib_namesw   s,     	
 sƒ   
    P O1P O2P O5' C5' H5' H5'' C4' H4' O4' C1' H1' N9 C4 N3 C2 N2 H21 H22
    N1 H1 C6 O6 C5 N7 C8 H8 C2' H2' O2' HO2' C3' H3' O3't   GUAs€   
    P O1P O2P O5' C5' H5' H5'' C4' H4' O4' C1' H1' N9 C4 N3 C2 H2 N1 C6
    N6 H61 H62 C5 N7 C8 H8 C2' H2' O2' HO2' C3' H3' O3't   ADEsz   
    P O1P O2P O5' C5' H5' H5'' C4' H4' O4' C1' H1' N1 C6 H6 C2 O2 N3 C4
    N4 H41 H42 C5 H5 C2' H2' O2' HO2' C3' H3' O3't   CYTs�   
    P O1P O2P O5' C5' H5' H5'' C4' H4' O4' C1' H1' N1 C6 H6 C2 O2 N3 H3 C4
    O4 C5 C7 H71 H72 H73 C2' H2' O2' HO2' C3' H3' O3't   THYsu   
    P O1P O2P O5' C5' H5' H5'' C4' H4' O4' C1' H1' N1 C6 H6 C2 O2 N3 H3 C4
    O4 C5 H5 C2' H2' O2' HO2' C3' H3' O3't   URIsf   
    P O1P O2P O5' C5' C4' O4' C1' N9 C4 N3 C2 N2 H21 H22 N1 H1 C6 O6 C5
    N7 C8 C2' O2' H2' C3' O3's`   
    P O1P O2P O5' C5' C4' O4' C1' N9 C4 N3 C2 N1 C6 N6 H61 H62 C5 N7 C8
    C2' O2' H2' C3' O3'sZ   
    P O1P O2P O5' C5' C4' O4' C1' N1 C6 C2 O2 N3 C4 N4 H41 H42 C5 C2' O2'
    H2' C3' O3'sY   
    P O1P O2P O5' C5' C4' O4' C1' N1 C6 C2 O2 N3 H3 C4 O4 C5 C5A C2' O2'
    H2' C3' O3'sU   
    P O1P O2P O5' C5' C4' O4' C1' N1 C6 C2 O2 N3 H3 C4 O4 C5 C2' O2' H2'
    C3' O3'c         C   s@   t  |  ƒ } | j d ƒ | r< | j d ƒ | j d ƒ n  | S(   Ns   O2's   HO2's   H2''(   t   listt   removeRJ   (   R=   t   have_hydrogensRA   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   apply_cns_deox¼   s    c         C   s3   t  |  ƒ } | r" | j d ƒ n  | j d ƒ | S(   Nt   H5Tt   O5T(   RX   RJ   (   R=   RZ   RA   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   apply_cns_5phoÄ   s
    c         C   sM   t  |  ƒ } | j d ƒ | j d ƒ | j d ƒ | rI | j d ƒ n  | S(   Nt   Pt   O1Pt   O2PR\   (   RX   RY   RJ   (   R=   RZ   RA   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   apply_cns_5terË   s    c         C   s&   t  |  ƒ } | r" | j d ƒ n  | S(   Nt   H3T(   RX   RJ   (   R=   RZ   RA   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   apply_cns_3terÔ   s    c         C   sâ  xÛ|  j  ƒ  D]Í\ } } x¾t t g D]°} d } | d k rM | rn q& qn n! | d k rh | sn q& qn n d } | rŒ t d | d | ƒ } n  d „  } x>| t g D]0} | d | d | ƒ } x| t t g D]}	 t j j	 d | | d	 d |	 d | d | ƒ ƒ }
 | s'|
 j
 | d	 k sDt ‚ n |
 j
 d
 | d	 k sDt ‚ |
 j |	 t k k s_t ‚ |
 j |	 t k k szt ‚ | rž|
 j | t k k s®t ‚ n |
 j s®t ‚ |
 j d	 k sÃt ‚ |
 j t |
 j ƒ k sát ‚ xê t |
 j |
 j ƒ D]Ó \ } } | d k r'| j d k sÊt ‚ q÷| d k rK| j d k sÊt ‚ q÷| d k ro| j d k sÊt ‚ q÷| d k r·|	 t k rŸ| j d k s´t ‚ qÊ| j d k sÊt ‚ q÷| j j ƒ  | k q÷WqÍ Wq¢ Wq& Wq Wd  S(   NR   RW   RV   R<   R=   RZ   c         S   s   |  S(   N(    (   R=   RZ   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt
   do_nothingç   s    R   i    R   R`   s    OP1Ra   s    OP2R]   s    OP3R\   s   HO5'R   (   RF   R    R!   R[   Rd   R^   Rb   R   R   R?   R   R   t   have_phosphatet   have_op3_or_hop3t   have_ho3primet   n_unexpectedt
   n_expectedR'   R=   RH   RI   R   t   strip(   t	   cns_namesRZ   R   t   atom_names_baset   deoxRC   Re   t   apply3R=   t   apply5RL   R   R(   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   exercise_cns_namesÚ   sX     	 		"c           C   s[   t  ƒ  t t j j ƒ d k s% t ‚ t ƒ  t d t d t	 ƒ t d t
 d t ƒ d GHd  S(   Nif   Rl   RZ   t   OK(   R/   R'   R   R   t#   rna_dna_atom_names_backbone_aliasesR   RR   Rq   t   cns_names_dna_rna_allatom_topR!   t   cns_names_dna_rna_topR    (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   exercise  s    t   __main__(   t
   __future__R    t	   iotbx.pdbR   R/   R$   RE   RR   Rt   Ru   R[   R^   Rb   Rd   Rq   Rv   t   __name__(    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_rna_dna_atom_names.pyt   <module>   s@   	X	!						1	
