ó
Œ™xTc           @   sQ  d  d l  m Z d  d l m Z d  d l m 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 6Z i  Z xN e j ƒ  D]@ \ Z	 Z
 e	 j d d ƒ j d d ƒ j d d  ƒ Z	 e
 e e	 <q� Wd! Z d" e f d# „  ƒ  YZ e ƒ  Z d$ e f d% „  ƒ  YZ d& „  Z e d' j ƒ  ƒ Z d( e f d) „  ƒ  YZ d* S(+   iÿÿÿÿ(   t   division(   t   matrix(   t   slots_getstate_setstategÃõ(\�Â÷?s   OP1 Ps   OP2 Pg°rh‘í|ù?s   O5' Pg¼t“Vø?s   C1' C2'g-²�ï§ö?s   C1' O4'gP�—nƒö?s   C2' O2'gX9´Èvø?s   C2' C3'g�—nƒÀö?s   C3' O3'g¦›Ä °rø?s   C3' C4'g²�ï§ÆK÷?s   C4' O4'g“V-ø?s   C4' C5'g¢E¶óýÔö?s   C5' O5't   OP1t   O1Pt   OP2t   O2Pt   't   *gœÄ °rh÷?t   _make_tablesc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d  |  _ d  S(   N(   t   Nonet   cache(   t   O(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt   __init__    s    c         C   sÏ   |  j  d  k rÄ g  |  _  d } t g  | D] } | j d d	 ƒ ^ q( ƒ } xx d d g D]g } t | d ƒ } |  j  j | | f ƒ |  j  j | t g  | D] } | j d d	 ƒ ^ q˜ ƒ f ƒ qV Wn  |  j  | S(   Ns   C5's   C4's   O4's   C1's   C2's   C3's   O3'R   R   s   OP1 Ps   OP2 Ps   O1P Ps   O2P Ps   O5' Ps   C1' C2's   C2' C3's   C3' C4's   C3' O3's   C4' C5's   C4' O4's   C1' O4's   C5' O5'(   s   C5's   C4's   O4's   C1's   C2's   C3's   O3'(   s   OP1 Ps   OP2 P(   s   O1P Ps   O2P P(	   s   O5' Ps   C1' C2's   C2' C3's   C3' C4's   C3' O3's   C4' C5's   C4' O4's   C1' O4's   C5' O5'(   R   R
   t   tuplet   replacet   sett   append(   R   t   indext   atoms_tt   at   atoms_st   bonds_1t   bonds_tt   b(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt   __call__#   s    	+  
B(   t   __name__t
   __module__R   R   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyR	      s   	t   atom_name_analysisc           B   s5   e  Z d  d d d d d d g Z d „  Z d „  Z RS(	   t   sub_classificationt   required_atomst   required_bondst   have_o2t   c2_o2t   c1t   have_all_required_atomsc         C   s¾  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ t |  _ d | k rO d  Sd | k rt d | k rk d  Sd } n) d | k r™ d | k r� d  Sd } n d  Sd | k rè t	 d	 | ƒ \ |  _ |  _ d
 | k |  _ d |  _ d |  _ nS d | k r7t	 d	 | d ƒ \ |  _ |  _ d | k |  _ d |  _ d |  _ n d  S| d k rb|  j d k rbd |  _ n+ | d k r‰|  j d k r‰d |  _ n d  Sx! |  j D] } | | k r—d  Sq—Wt
 |  _ d  S(   Nt   PR   R   i    R   R   i   s   O5'R   s   O2's   C2' O2's   C1's   O5*i   s   O2*s   C2* O2*s   C1*t    t   v3(   R
   R   R   R   R    R!   R"   t   FalseR#   t   _tablest   True(   R   t	   atom_dictt   tab_offst   required_atom(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyR   >   sL    							  	 			 c         C   s   |  j  d k r t St S(   NR&   (   R   t)   bond_distance_ideal_by_bond_atom_names_v3t)   bond_distance_ideal_by_bond_atom_names_v2(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt&   bond_distance_ideal_by_bond_atom_namese   s    (   R   R   t	   __slots__R   R/   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyR   3   s   		'c         C   sâ   t  d |  ƒ } | j s d  St } t ƒ  } xy | D]q } | j | j g } | j ƒ  d j | ƒ } | | j	 k r‚ | j
 | ƒ q2 | j r2 | | j k r2 t } q2 q2 Wt | ƒ t | j	 ƒ k rÆ d  S| r× d | j Sd | j S(   NR*   t    t   RNAt   DNA(   R   R#   R
   R'   R   t	   atom_id_1t	   atom_id_2t   sortt   joinR   t   addR    R!   R)   t   lenR   (   R*   t	   bond_listR   t   rna_indicatort   bonds_matchedt   bondt   pair(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt   classificationj   s$    		
 s   C1' C2' C3' O3' C4' O4' C5' O5't   residue_analysisc           B   s;   e  Z d  d d d d d d d d d	 d
 g Z d d „ Z RS(   t   problemsR*   t   deoxy_ribo_atom_dictt   p_atomt   op_atomst   c1p_outbound_candidatest   o2p_atomt   h_atomst   is_terminus_with_o5pt   c1p_outbound_atomt   is_rnag      à?c      	      s^  g  |  _  | j d t d t d t d t ƒ |  _ t |  j ƒ t | ƒ k r^ |  j  j d ƒ n  g  } i  |  _ xZ t D]R } |  j j	 | ƒ } | d  k r¯ | j d | ƒ qt n  | |  j | <|  j | =qt Wd  |  _ xb |  j j ƒ  D]Q } | j d ƒ rã | d k r!|  j | |  _ |  j | =q4|  j  j d ƒ qã qã Wg  |  _ x› d0 d1 g D]� } x„ | D]B } |  j j	 | ƒ } | d  k	 r[|  j j | ƒ |  j | =Pq[q[W|  j j d  ƒ |  j d  k	 rN|  j  j d | d ƒ qNqNW|  j j	 d ƒ |  _ |  j d  k	 r|  j d =n  i  |  _ x½ |  j j ƒ  D]¬ } t | ƒ d k rW|  j  j d ƒ q)n  d j | d ƒ d k s´t | ƒ d k r)d j | d ƒ d k r)d j | d ƒ d k r)|  j | |  j | <|  j | =q)q)Wi  |  _ x§ |  j j ƒ  D]– } | j d ƒ d k rI| d k r3| |  j | <|  j | =qò|  j  j d ƒ qòn  | j d ƒ sg| j d ƒ rò|  j | |  j | <|  j | =qòqòWt |  _ t |  j  ƒ d k rõt | ƒ d k rõt |  j ƒ d k rõ|  j j	 d ƒ d  k	 rõt |  _ n |  j  j | ƒ ‡  f d †  } |  j d  k	 rt j |  j j ƒ } x~ t d d g ƒ D]j \ }	 }
 |  j |	 } | d  k rvqKn  t j | j ƒ } | |
 | | ƒ sK|  j  j d |	 d ƒ qKqKW|  j j	 d ƒ } | d  k	 rt j | j ƒ } | d | | ƒ s|  j  j d ƒ qqn  |  j d  k	 r“|  j j	 d ƒ } | d  k	 r“t j | j ƒ } t j |  j j ƒ } | d  | | ƒ s�|  j  j d! ƒ q�q“n  x¸ d" d# d$ d% d& d' d( d) g D]˜ }
 g  } x‰ |
 d*  |
 d+ g D]A } |  j j	 | ƒ } | d  k rûPn  | j t j | j ƒ ƒ qÓW| |
 | Œ s²|  j  j d, |
 j d- d. ƒ ƒ q²q²Wd  |  _ t |  j ƒ d k r'|  j j	 d/ ƒ } | d  k	 r't ˆ  } t j | j ƒ } x{ |  j j ƒ  D]g \ } } t j | j ƒ } t | | ƒ } | | k r¶| | k s|  j d  k r¶| |  _ | } q¶q¶Wq'n  t |  j  ƒ d k rHd  |  _  n  |  j d  k	 |  _ d  S(2   Nt   strip_namest   upper_namest   convert_stars_to_primest%   throw_runtime_error_if_duplicate_keyst	   key_clasht   missing_R$   t   other_PR   R   R   R   i    s   O2't
   blank_namet   HDi   t
   0123456789R   s   N2't   other_primet   Nt   Cs   O5'c            s2   t  | | ƒ } t |  } | | ˆ  k r. t St S(   N(   t   absR-   R'   R)   (   t   key_pairt   site_1t   site_2t   distance_modelt   distance_ideal(   t   distance_tolerance(    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt   check_distance×   s
    
s   OP1 Ps   OP2 Ps   long_distance_P_OP%ds   O5' Ps   long_distance_P_O5's   C2's   C2' O2's   long_distance_C2'_O2's   C1' C2's   C1' O4's   C2' C3's   C3' O3's   C3' C4's   C4' O4's   C4' C5's   C5' O5'i   i   t   long_distance_R1   t   _s   C1'(   s   OP1s   O1P(   s   OP2s   O2P(   RA   t
   build_dictR)   R'   R*   R9   R   RB   t   deoxy_ribo_atom_keyst   getR
   RC   t   keyst
   startswithRD   RF   RG   t   findRE   RH   t   extendR   t   colt   xyzt	   enumerateR   RI   t   c1p_outbound_distance_estimatet   itemsRX   RJ   (   R   t   residue_atomsR^   t   deoxy_ribo_problemst   keyt   atomRe   R_   RZ   t   iRY   R[   t   sitest   closest_distancet   distance(    (   R^   sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyR   Ž   sø    					
			  '	
	(   R   R   R0   R   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyR@      s   	N(   t
   __future__R    t   scitbxR   t   libtbxR   R-   R.   Rm   Rp   t   valueR   Rl   t   objectR	   R(   R   R?   R   t   splitRc   R@   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/rna_dna_detection.pyt   <module>   s:   
	7	