ó
,™xTc           @   sï   d  d l  m Z d  d l m Z d  d l m Z m Z m Z m Z m	 Z	 m
 Z
 d  d l m Z m Z d  d l m Z d  d l Z d  d l m Z d „  Z d d	 „ Z d
 „  Z d „  Z d „  Z d d „ Z d „  Z e d k rë e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   flex(   t
   covariancet   crystalt   geometryt   sgtbxt   uctbxt   xray(   t   approx_equalt	   show_diff(   t   matrixN(   t   StringIOc           C   sR   t  j d t j d d ƒ d t j t  j d d d d f ƒ t  j d d ƒ g ƒ ƒ S(   Nt   crystal_symmetryg
×£p=
@gáz®Gá@iZ   ix   t   P6222t
   scattererst   Sii   g       @g      @t   Ogžï§ÆK7É?gžï§ÆK7É¿g_Ò­£ªê?(   g
×£p=
@g
×£p=
@gáz®Gá@iZ   iZ   ix   g      à?g      à?gUUUUUUÕ?(   gžï§ÆK7É?gžï§ÆK7É¿g_Ò­£ªê?(   R   t	   structureR   t   symmetryR   t   xray_scatterert	   scatterer(    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   quartz	   s    	c         C   sW  |  d  k	 r! t j d |  ƒ } n t j d d ƒ } t j d t j d | d	 d
 ƒ d t j t j	 d d d d d d ƒ t j	 d d d d d d ƒ t j	 d d d d d d ƒ t j	 d d d d d d ƒ t j	 d d d d  d d ƒ t j	 d d d d! d d ƒ t j	 d d d d" d d ƒ t j	 d d d d# d d ƒ t j	 d d d d$ d d ƒ f	 ƒ ƒ S(%   Nt   metrical_matrixt
   parametersg
×£p=
@gáz®Gá@iZ   ix   R   t	   unit_cellt   space_group_symbols
   hall:  P 1R   t   labelR   t   siteg      à?gF]kïSUÕ?t   ug        g]QJVUå?R   gžï§ÆK7É?gV-²é?g£®µ÷©ªê?gžï§ÆK7Ù?gtE)!XUÅ?g1¬Zdã?(   g
×£p=
@g
×£p=
@gáz®Gá@iZ   iZ   ix   (   g      à?g      à?gF]kïSUÕ?(   g        g      à?g]QJVUå?(   g      à?g        g        (   gžï§ÆK7É?gV-²é?g£®µ÷©ªê?(   gžï§ÆK7Ù?gžï§ÆK7É?gtE)!XUÅ?(   gV-²é?g1¬Zdã?g      à?(   gžï§ÆK7É?gžï§ÆK7Ù?g      à?(   g1¬Zdã?gV-²é?gtE)!XUÅ?(   gV-²é?gžï§ÆK7É?g£®µ÷©ªê?(
   t   NoneR   R   R   R   R   R   R   R   R   (   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt	   quartz_p1   sX    												c          C   s—  t  ƒ  }  |  j ƒ  } |  j ƒ  } x | D] } | j t ƒ q( W|  j | ƒ t j d ƒ } t j d ƒ } |  j ƒ  } t	 j
 | | | ƒ } t j | j ƒ  ƒ } t j | j ƒ  ƒ }	 |  j ƒ  }
 |  j ƒ  } t j d ƒ } |
 d | j | | d ƒ f } t j | ƒ } t | j d ƒ s$t ‚ t j | d ƒ t j | d ƒ } | t j | j ƒ  j ƒ  j ƒ  ƒ |	 } | j ƒ  } t j | d t | t j | d ƒ ƒ ƒ } | t j | j  ƒ  ƒ | j! ƒ  } t | j" | | | ƒ | d d d ƒsüt ‚ t d | j" | | | | ƒ ƒ s#t ‚ t j d ƒ } |
 d | j | | d ƒ f } t j | ƒ } t | j | j# ƒ  d ƒ s„t ‚ t | j$ ƒ  d | j" | | | | ƒ ƒ sµt ‚ t j d ƒ } t j d ƒ } | t j | j ƒ  j ƒ  j ƒ  ƒ |	 } | t j | j ƒ  j ƒ  j ƒ  ƒ |	 } t	 j% t j& d d d g ƒ | | ƒ } | j | | d ƒ |
 d | j | | d ƒ f } t j' | ƒ } t | j( d ƒ s¨t ‚ | j) ƒ  } t j t | t j | d ƒ ƒ | d t | t j | d ƒ ƒ ƒ } | t j | j  ƒ  ƒ | j! ƒ  } t | j" | | | t j ƒ  | f ƒ | d d d ƒs]t ‚ t d | j" | | | | t j ƒ  | f ƒ ƒ s“t ‚ d  S(   Ng:Œ0âŽyE>g•Ö&è.>g•Ö&è.!>gßA:ÜÅ)>g•Ö&è.1>g:Œ0âŽy5>g:Œ0âŽyU>g+i¤)+`>g:Œ0âŽye>g¸…ëQ¸ž?i    g{®Gáz¤?s   -y,x-y,z-1/3i   ggd/Ûù?t   epsgVçž¯Ò<gb’ì�š”]?s   x+1,y,zs   x-y,x,z-2/3gç"ð4¬SY@i   gdC�ÇWvq?(   g:Œ0âŽyE>g•Ö&è.>g•Ö&è.!>gßA:ÜÅ)>g•Ö&è.1>g:Œ0âŽy5>g:Œ0âŽyU>g•Ö&è.>g•Ö&è.!>gßA:ÜÅ)>g•Ö&è.1>g+i¤)+`>g•Ö&è.>g•Ö&è.!>gßA:ÜÅ)>g:Œ0âŽyU>g•Ö&è.>g•Ö&è.!>g+i¤)+`>g•Ö&è.>g:Œ0âŽye>(   g¸…ëQ¸ž?g¸…ëQ¸ž?i    i    i    i    g¸…ëQ¸ž?i    i    i    i    g{®Gáz¤?i    i    i    i    i    i    i    i    i    (*   R   R   t   scatterer_flagst   set_grad_sitet   Truet   set_scatterer_flagsR   t   doublet   parameter_mapR   t   orthogonalize_covariance_matrixR
   t   sqrt   orthogonalization_matrixt   fractionalization_matrixt
   sites_cartt
   sites_fracR   t   rt_mxt   orthogonalizeR   t   distanceR   t   distance_modelt   AssertionErrort   colt   rt   inverset	   as_doublet   d_distance_d_sitest   rowt   tuplet   matrix_packed_u_as_symmetrict	   transposet   varianceR   t   matrix_packed_u_diagonalt#   extract_covariance_matrix_for_sitest   size_tt   anglet   angle_modelt   d_angle_d_sites(   t   xst   uct   flagst   ft   covt   cell_vcvt	   param_mapt   cov_cartR   t   FR*   R+   t   rt_mx_jit   sitest   dt   vt
   r_inv_cartt   gt   rt_mx_kit   r_inv_cart_jit   r_inv_cart_kit   cov_at   a(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   exercise_geometryA   sx    	    	    	!$).#.$!"!))'(!#:c    
      C   sü   d  d „ }  d  d „ } t ƒ  } | j ƒ  } | j ƒ  } | d | d f } t j | ƒ } | j | ƒ } t |  | j ƒ  ƒ } t | | ƒ s• t	 ‚ | d | d | d f } t j
 | ƒ }	 |	 j | ƒ } t | | j ƒ  ƒ } t | | ƒ sø t	 ‚ d  S(   Nc         S   sQ   t  d |  ƒ } | j ƒ  } | j ƒ  } | d | d f } t j | ƒ } | j S(   NR   i    i   (   R   R   R*   R   R.   R/   (   R   RA   RB   R*   RK   RL   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   calc_distance‚   s    c         S   sc   t  d |  ƒ } | j ƒ  } | j ƒ  } | d | d | d f } t j | ƒ } | j t j d S(   NR   i   i    i   i´   (   R   R   R*   R   R>   R?   t   matht   pi(   R   RA   RB   R*   RK   RT   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt
   calc_angle‰   s    i    i   i   (   R   R   R   R*   R   R.   t   d_distance_d_metrical_matrixt   finite_differencesR   R0   R>   t   d_angle_d_metrical_matrix(
   RV   RY   RA   RB   R*   RK   RL   t   gradst   fd_gradsRT   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   exercise_grad_metrical_matrix�   s    	c       O   C   s   t  j d t j d dQ d d ƒ d t j t  j d	 d
 d dR d dS d d d d ƒ t  j d	 d d dT d dU d d d d ƒ t  j d	 d  d dV d dW d d d d ƒ t  j d	 d( d dX d dY d d- d d. ƒ f ƒ ƒ }  |  j ƒ  } x | D] } | j t	 ƒ qâ W|  j
 | ƒ |  j ƒ  } |  j ƒ  } t j d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d0 d1 d/ d2 d3 d4 d/ d/ d/ d/ d/ d5 d/ d6 d7 d8 d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d9 d: d; d/ d/ d/ d/ d/ d< d= d/ d/ d/ d/ d/ d> d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ d/ gN ƒ } t j d? d? d/ d/ d/ d/ d? d/ d/ d/ d/ d@ d/ d/ d/ d/ d/ d/ d/ d/ d/ g ƒ } |  j ƒ  } t j | | | ƒ } t j dZ ƒ }	 t j |	 | | ƒ }
 x:t j ƒ  t j ƒ  t j ƒ  f t j dD ƒ t j ƒ  t j ƒ  f t j ƒ  t j ƒ  t j dD ƒ f t j dD ƒ t j ƒ  t j dD ƒ f f D]® } | d/ | |	 d/ } | dC | |	 dC } | dA | |	 dA } t j | j | ƒ | j | ƒ | j | ƒ f ƒ } | j |
 | | | ƒ } t | d/ dE dF ƒs5t ‚ q5W|  j dG dA ƒ } dH dI l } | j j dJ ƒ rüdH dI l } t  ƒ  } | | j! j" | |  j# ƒ  j$ ƒ  dK |  j ƒ  dL | dM | dN | ƒj% IJt& | j' ƒ  dO ƒ sŽt ‚ t  ƒ  } | | j! j( | |  j# ƒ  j$ ƒ  dK |  j ƒ  dL | dM | dN | ƒj% IJt& | j' ƒ  dP ƒ süt ‚ n  dI S([   sK  
  BF6 sitting on inversion centre in high symmetry space group.

  The angles formed between F20, B17 and either F18 or F19 are necessarily
  exactly equal to 90 degrees, and hence their variance should be exactly zero.
  The angles formed by F18, B17 and F19 are free to refine, and hence should
  have an associated variance.
  R   R   g^ºI‹6@gîëÀ9#ÂA@iZ   R   s   hall: -I 4bd 2R   R   t   F18R   g      à?gëª@-ï?g+ˆ�®}¥¿R   ghY÷�…è0?g®Ø_vOF?g$Dù‚"?g       €g6wô¿\‹¿t   fpgÕ±Jé™^’?t   fdpg�hW!å'…?t   F19g|Ô_¯°àí?gŽ°¨ˆÓI–?gXþ|[°T'?g(Ö©ò=#Q?g:‘`ª™µ$?g?«Ì”Öß"?t   F20g
pÜ?g      ð?g        gµRäG.?gü©ñÒMb@?grQ-"ŠÉ?g„¹ÝË}r?t   B17gÕýL½n!?g„¹ÝË}rD?g™ò!¨½
?gTäqs*	?g
ƒ2�&W?g·}�úëF?i    gâkþ=[Á¢>go×üÙK~R¾gL^1ÜAV‹¾gÙ-!É_Çq¾gW_qöÈ&¾gêÓAKá~>g.asã%c¾g�]Šz‰Ú?>g|Qw„e=¾gA®~P®>g¸Óì;Ï@€>gt™”\Þ@¾g­h÷¤B…>gäˆÎ"o•C>gè™ôþ/nƒ>g�íµ ÷Æ�>gÀ�v¾À(¸>i   i   i   s
   1-x,2-y,-zR   g¼‰Ø—²Ò¬<t   distance_cutoffiÿÿÿÿNt   iotbxR+   t   covariance_matrixt   cell_covariance_matrixR%   sÇ   loop_
  _geom_bond_atom_site_label_1
  _geom_bond_atom_site_label_2
  _geom_bond_distance
  _geom_bond_site_symmetry_2
  F18  B17  1.601(13)  4_575
  F19  B17  1.683(18)  .
  F20  B17   1.397(9)  .

sÚ  loop_
  _geom_angle_atom_site_label_1
  _geom_angle_atom_site_label_2
  _geom_angle_atom_site_label_3
  _geom_angle
  _geom_angle_site_symmetry_1
  _geom_angle_site_symmetry_3
  F18  B17  F18    180.0  .      4_575
  F19  B17  F18  87.1(7)  .      4_575
  F19  B17  F18  92.9(7)  .      .
  F19  B17  F18  92.9(7)  4_575  4_575
  F19  B17  F18  87.1(7)  4_575  .
  F19  B17  F19    180.0  4_575  .
  F20  B17  F18     90.0  .      4_575
  F20  B17  F18     90.0  .      .
  F20  B17  F19     90.0  .      .
  F20  B17  F19     90.0  .      4_575
  F20  B17  F18     90.0  9_675  4_575
  F20  B17  F18     90.0  9_675  .
  F20  B17  F19     90.0  9_675  .
  F20  B17  F19     90.0  9_675  4_575
  F20  B17  F20    180.0  9_675  .

(   g^ºI‹6@g^ºI‹6@gîëÀ9#ÂA@iZ   iZ   iZ   (   g      à?gëª@-ï?g+ˆ�®}¥¿(   ghY÷�…è0?g®Ø_vOF?g$Dù‚"?g       €g       €g6wô¿\‹¿(   g      à?g|Ô_¯°àí?gŽ°¨ˆÓI–?(   gXþ|[°T'?g(Ö©ò=#Q?g:‘`ª™µ$?g       €g       €g?«Ì”Öß"?(   g
pÜ?g      ð?g        (   gµRäG.?gü©ñÒMb@?grQ-"ŠÉ?g       €g       €g„¹ÝË}r?(   g      à?g      ð?g        (   gÕýL½n!?g„¹ÝË}rD?g™ò!¨½
?g       €g       €gTäqs*	?(   i   i   i   ()   R   R   R   R   R   R   R   R    R!   R"   R#   R+   R   R$   R%   R   R&   R=   R<   R   R,   R   R>   R-   R:   R   R0   t   pair_asu_tablet   libtbx.load_envt   envt
   has_modulet	   iotbx.cifR   t   cift   distances_as_cif_loopR   t   extract_labelst   loopR	   t   getvaluet   angles_as_cif_loop(   RA   RC   RD   R+   R   RE   t   cell_covRG   RH   t   i_seqst
   cov_i_seqst   sym_opst   site_frac_jit   site_frac_it   site_frac_kiRT   t   varRj   t   libtbxRg   t   s(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   exercise_high_symmetry_case    s²    								 -0H6!!.	
	g�íµ ÷Æ°>c   	      C   s˜   g  } x‹ t  d ƒ D]} } t | j ƒ  ƒ } | | c d | 7<|  d | ƒ } | | c d | 8<|  d | ƒ } | | d | } | j | ƒ q W| S(   Ni   i   R   (   t   ranget   listR   t   append(	   t   funcR   R   t	   gradientst   it   mmt   qmt   qpt   dq(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyR[   %  s    c           C   s   t  ƒ  t ƒ  t ƒ  d GHd  S(   Nt   OK(   R   R_   RU   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   run1  s    t   __main__(   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   R   R   R   R   R   t   libtbx.test_utilsR   R	   t   scitbxR
   RW   t	   cStringIOR   R   R   R   RU   R_   R   R[   R‹   t   __name__(    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry/tests/tst_geometry.pyt   <module>   s   .	0	@		…	