ó
”™xTc           @   sð   d  d l  m Z d  d l m Z d  d l m Z m Z d  d l m Z m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z d  d l Z d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j ƒ  Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   flex(   t   crystalt   sgtbx(   t
   covariancet   geometry(   t   model(   t&   format_float_with_standard_uncertainty(   t   adopt_init_argsNt   distances_as_cif_loopc        	   B   s)   e  Z d d d d d e d d  d „ Z RS(   g¼‰Ø—²Ò¬<c      	   C   sú  | | g j  d  ƒ d k s! t ‚ d } | j ƒ  } t j d | j ƒ  ƒ } | j ƒ  } | d  k	 ru | j | ƒ } n  t	 j
 d d ƒ |  _
 t j | | d	 | d
 | d | ƒ} x!| D]} | rô | | j j d ƒ sµ | | j j d ƒ rô qµ n  | j d  k	 rp| j |
 k rp|	 d  k	 oK| j | j f |	 k pK| j | j f |	 k rpt | j t j | j ƒ ƒ } n | | j } | j | j ƒ } | d k r¤d } n  |  j
 j | | j | | j | | f ƒ qµ W| j |  _ | j |  _ | j |  _ d  S(   Ni   s   %.4ft   groupt   headert   _geom_bond_atom_site_label_1t   _geom_bond_atom_site_label_2t   _geom_bond_distancet   _geom_bond_site_symmetry_2t   covariance_matrixt   cell_covariance_matrixt   parameter_mapt   Ht   1t   .(   R   R   R   R   (   t   countt   Nonet   AssertionErrort   asu_mappingsR   t   space_group_infot   space_groupt	   unit_cellt   fractionalizeR   t   loopR   t   calculate_distancest   i_seqt
   startswitht   j_seqt   variancet   format_float_with_sut   distancet   matht   sqrtt   cif_symmetry_codet   rt_mx_jit   add_rowt	   distancest	   variancest   pair_counts(   t   selft   pair_asu_tablet   site_labelst
   sites_fract
   sites_cartR   R   R   t   include_bonds_to_hydrogent   fixed_distancest   epst   fmtR   R   R   R+   t   dR%   t   sym_code(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyt   __init__   sL    !	   		! 	
N(   t   __name__t
   __module__R   t   FalseR9   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyR	      s   t   angles_as_cif_loopc        
   B   s,   e  Z d d d d d e d d d  d „	 Z RS(   g¼‰Ø—²Ò¬<c         C   s%  | | g j  d  ƒ d k s! t ‚ d } | j ƒ  } t j d | j ƒ  ƒ } | j ƒ  } | d  k	 ru | j | ƒ } n  t	 j
 d d ƒ |  _
 t j | | d | d | d | d |
 ƒ} xR| D]J} | j \ } } } | r| | j d ƒ s» | | j d ƒ rq» n  | j | j ƒ } | j | j ƒ } | d k r?d } n  | d k rTd } n  | j d  k	 rÊ| j | k rÊ|	 d  k	 o¥| | | f |	 k p¥| | | f |	 k rÊt | j t j | j ƒ ƒ } n | | j } |  j
 j | | | | | | | | | f ƒ q» W| j |  _ | j |  _ d  S(   Ni   s   %.1fR
   R   t   _geom_angle_atom_site_label_1t   _geom_angle_atom_site_label_2t   _geom_angle_atom_site_label_3t   _geom_anglet   _geom_angle_site_symmetry_1t   _geom_angle_site_symmetry_3R   R   R   t   conformer_indicesR   R   R   (   R>   R?   R@   RA   RB   RC   (   R   R   R   R   R   R   R   R   R   R   R   R   t   calculate_anglest   i_seqsR!   R(   R)   t   rt_mx_kiR#   R$   t   angleR&   R'   R*   t   anglesR,   (   R.   R/   R0   R1   R2   R   R   R   R3   t   fixed_anglesRD   R5   R6   R   R   R   RI   t   aR    R"   t   k_seqt   sym_code_jit   sym_code_kiRH   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyR9   D   s\    !	     		 	 	!N(   R:   R;   R   R<   R9   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyR=   B   s   t   hbondc           B   s   e  Z d d  „ Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   t   locals(   R.   t   d_seqt   a_seqt   rt_mx(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyR9   ‚   s    N(   R:   R;   R   R9   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyRO   �   s   t   hbonds_as_cif_loopc           B   sA   e  Z d d d  d d d d d d d d „
 Z d „  Z d „  Z RS(   i–   g333333@g¼‰Ø—²Ò¬<c         C   s  | | g j  d  ƒ d k s! t ‚ d } | } | j ƒ  } t j d | j ƒ  ƒ } | j ƒ  |  _ | |  _ | |  _	 | d  k	 r“ |  j j
 | ƒ } n  | d  k	 r´ |  j j | ƒ } n  | d  k	 rð |
 d  k	 sÒ t ‚ t j | |  j |
 ƒ |  _ n	 d  |  _ |	 |  _ | |  _ |
 |  _ t j d d ƒ |  _ xè| D]à} | j | j } } | | } | j d  k	 rŽ| | } | j | } |  j j | ƒ } n
 | | } t j | | f ƒ } x`| j ƒ  | j j ƒ  D]E\ } } | | d d k ríqÇn  | | } t j | | f ƒ } t j | | f ƒ } t j | | | f ƒ } | j | k  sÇ| j | k r]qÇn  | j d  k	 r�| j | j ƒ } n d } |  j j | | | | | | |  j  | | | t! ƒ |  j  | | | t! ƒ |  j  | | | | j ƒ |  j" | | | | | j ƒ | f ƒ qÇWq0Wd  S(   Ni   s   %.1fR
   R   t   _geom_hbond_atom_site_label_Dt   _geom_hbond_atom_site_label_Ht   _geom_hbond_atom_site_label_At   _geom_hbond_distance_DHt   _geom_hbond_distance_HAt   _geom_hbond_distance_DAt   _geom_hbond_angle_DHAt   _geom_hbond_site_symmetry_Ai    R   t   DR   (   RU   RV   RW   RX   RY   RZ   R[   R\   (   R   R]   (#   R   R   R   R   R   R   R   R   R4   RJ   R   t   orthogonalizeR   t   orthogonalize_covariance_matrixt   covariance_matrix_cartR   R5   R   R   R   RQ   RR   RS   R   R%   t   tablet   itemsRH   t   angle_modelt   distance_modelR(   R*   t   formatted_distancet   unit_mxt   formatted_angle(   R.   t   hbondsR/   R0   R1   R2   t   min_dha_anglet   max_da_distanceR   R   R   R5   R4   RJ   t   fmt_aR   R   RO   RQ   RR   t   site_cart_dt   site_frac_at   site_cart_at   distance_dat   h_seqt   h_sym_groupst   site_cart_ht   distance_dht   distance_hat	   angle_dhaR8   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyR9   ‹   sx    !							       


&
	c         C   s  | d  k r t } n  |  j d  k	 rû t j t j | | f ƒ |  j |  j ƒ } |  j d  k	 r~ | j	 | |  j |  j
 | ƒ } n | j	 | |  j
 | ƒ } | |  j k rû |  j d  k	 oÛ | | f |  j k pÛ | | f |  j k rû t | j t j | ƒ ƒ Sn  d | j S(   Ns   %.4f(   R   Rf   R`   R   t#   extract_covariance_matrix_for_sitesR   t   size_tR   R   R#   R   R5   R4   R$   Rd   R&   R'   (   R.   R    R"   R%   R)   t   covt   var(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyRe   Ú   s      	c         C   s!  | d  k r t } n  |  j d  k	 rt j t j | | | f ƒ |  j |  j ƒ } |  j d  k	 rŠ | j	 | |  j |  j
 t t | f ƒ } n! | j	 | |  j
 t t | f ƒ } | |  j k r|  j d  k	 oö | | | f |  j k pö | | | f |  j k rt | j t j | ƒ ƒ Sn  d | j S(   Ns   %.1f(   R   Rf   R`   R   Rv   R   Rw   R   R   R#   R   R5   RJ   R$   Rc   R&   R'   (   R.   R    R"   RL   RH   RG   Rx   Ry   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyRg   ì   s      	!N(   R:   R;   R   R9   Re   Rg   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyRT   ‰   s   B	(   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   R   R   R   t	   iotbx.cifR   t   libtbx.utilsR   R$   t   libtbxR   R&   t   objectR	   R=   RO   RS   Rf   RT   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/geometry.pyt   <module>   s   5?