ó
˜™xTc           @   s„   d  d l  m Z d  d l Z d  d l m Z d  d l Z d  d l m Z d  d l m	 Z	 e j
 j d ƒ Z d e	 f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   divisionN(   t   matrix(   t   normalize_angle(   t   slots_getstate_setstates)    bond_min_distance = 1.2
    .type = float
  bond_max_distance = 1.8
    .type = float
  epsilon_range_min = 155.0
    .type = float
  epsilon_range_max = 310.0
    .type = float
  delta_range_2p_min = 129.0
    .type = float
  delta_range_2p_max = 162.0
    .type = float
  delta_range_3p_min = 65.0
    .type = float
  delta_range_3p_max = 104.0
    .type = float
  p_distance_c1p_outbound_line_2p_max = 2.9
    .type = float
  o3p_distance_c1p_outbound_line_2p_max = 2.4
    .type = float
  bond_detection_distance_tolerance = 0.5
    .type = float
t   evaluatec           B   sG   e  Z d  d d d d d d d d d	 d
 d d g Z d „  Z d „  Z RS(   t   epsilont   deltat   p_distance_c1p_outbound_linet   o3p_distance_c1p_outbound_linet
   p_perp_xyzt   o3p_perp_xyzt   is_epsilon_outliert   is_2p_deltat   is_3p_deltat   is_delta_outliert"   is_2p_p_distance_c1p_outbound_linet$   is_2p_o3p_distance_c1p_outbound_linet   is_2pc         K   s4   x- t  j D]" } t |  | | j | d  ƒ ƒ q
 Wd  S(   N(   R   t	   __slots__t   setattrt   gett   None(   t   Ot   keyword_argst   slot(    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyt   assign2   s    c   #         s  ‡  f d †  } | d ƒ } | d ƒ } | d ƒ } | d ƒ }	 | d ƒ }
 | | f | |	 f |
 |	 f g } g  | D] \ } } t  | | ƒ ^ qs } d  } | d  k	 rñ t j | j ƒ } t  | | ƒ } | | j k rñ | } | j | ƒ qñ n  | d  k rd  } n) t j | j ƒ } | j t  | | ƒ ƒ t | ƒ | j k  sYt	 | ƒ | j k rg|  j
 ƒ  d  Sd „  } | d  k r…d  } n | | | | |	 g ƒ } | |
 |	 | | g ƒ } | d  k rÜd  } d  } d  } d  } nË | d  k r÷d  } d  } nX t j j d | | f ƒ j d	 | ƒ d
 } | t j j d | | f ƒ j d	 | ƒ f } t j j d | | f ƒ j d	 | ƒ d
 } | t j j d | | f ƒ j d	 | ƒ f } d } | d  k s×| j d  k s×| j d  k ràd  } n( | | j k  pû| | j k } | d 7} | j d  k s&| j d  k r/d  } n( | | j k oJ| | j k } | d 7} | j d  k su| j d  k r~d  } n( | | j k o™| | j k } | d 7} | d  k sÁ| j d  k rÊd  } n | | j k  } | d 7} | d  k sþ| j d  k rd  } n | | j k  } | d 7} | d k r5d  }  n0 | }! |! d  k rP| }! n  |! r_t }  n t }  | d  k s‰| d  k s‰|  d  k r’d  }" n* |  rŸ| s­|  r¶| r¶t }" n t }" |  j
 d | d | d | d | d | d | d | d | d | d |" d | d | d |  ƒ d  S(   Nc            s   t  j ˆ  |  j ƒ S(   N(   R   t   colt   xyz(   t   key(   t   residue_1_deoxy_ribo_atom_dict(    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyt   v;   s    s   C1's   O3's   C3's   C4's   C5'c         S   s%   t  t j j d |  d t ƒ d t ƒS(   Nt   sitest   deg(   R   t   scitbxt   matht   dihedral_anglet   True(   R   (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyt   diheW   s    t   pointst   pointg      à?i    i   R   R   R   R   R	   R
   R   R   R   R   R   R   R   (   t   absR   R   R   R   t   bond_max_distancet   appendt   mint   bond_min_distancet   maxR   R!   R"   t   line_given_pointst   distance_sqt   perp_xyzt   epsilon_range_mint   epsilon_range_maxt   delta_range_2p_mint   delta_range_2p_maxt   delta_range_3p_mint   delta_range_3p_maxt#   p_distance_c1p_outbound_line_2p_maxt%   o3p_distance_c1p_outbound_line_2p_maxR$   t   False(#   R   t   paramsR   t   residue_1_c1p_outbound_atomt   residue_2_p_atomR   t   c1pt   o3pt   c3pt   c4pt   c5pt   bonded_sitest   s1t   s2t	   distancest   pt   p_trialt   dt   c1p_outboundR%   R   R   R   R   R	   R
   t   n_decisionsR   R   R   R   R   R   t   perp_distanceR   (    (   R   s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyt   __init__6   sÒ    		)	
					
	
	
	
	
			$			(   t   __name__t
   __module__R   R   RL   (    (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyR   !   s   		(   t
   __future__R    t   scitbx.mathR!   R   t   libtbx.philt   libtbxt   libtbx.math_utilsR   R   t   philt   parset   master_philR   (    (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/rna_sugar_pucker_analysis.pyt   <module>   s   		