ó
O™xTc           @   s  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d l m	 Z	 d  d l
 m Z m Z d  d l Z d  d l Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z e d k re ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   uctbx(   t   adptbx(   t   flexN(   t   matrix(   t   Exception_expectedt   approx_equalc         C   s?  |  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 | | | } t  | ƒ d k  s;t | ƒ ‚ d  S(	   Ni    i   i   i   i   i   g       @g-Cëâ6?(   t   abst   AssertionError(   t   adpt   xt   rt   st   tt   f(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   check_eigenvalue   s
    b~"c         C   sI   t  j | ƒ } t t  j d |  ƒ | d | j | j d ƒ sE t ‚ d  S(   Nt   sym_mat3g      ð?g-Cëâ6?(   R   t   colR   t   symt   elemsR   (   R	   R
   t   v(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   check_eigenvector   s    c       	   C   sÓ  d t  j d }  t t j d ƒ d |  ƒ s3 t ‚ t t j t j d ƒ ƒ d ƒ sZ t ‚ d< } t t j | ƒ g  | D] } | |  ^ qv ƒ s• t ‚ t t j t j | ƒ ƒ | ƒ s¼ t ‚ t j d= ƒ } x† t j	 t j
 f t j t j f t j t j f t j t j f t j t j f f D]3 \ } } t | | | | | ƒ ƒ | ƒ st ‚ qWt t j t j | ƒ ƒ | ƒ s{t ‚ t t j t j d ƒ ƒ d ƒ s¢t ‚ xh t j t j f t j t j f t j t j f f D]3 \ } } t | | | | d ƒ ƒ d ƒ sÖt ‚ qÖWt j d | ƒ } t | j t j | ƒ ƒ s@t ‚ t | j g  | d  D] } | | j ^ qTt  | d ƒ ƒ s„t ‚ t j! d | d t j | | ƒ ƒ } t | j | j ƒ sÃt ‚ t | j" t j | | j ƒ ƒ sêt ‚ t j# d | d t j | | ƒ ƒ } t | j | j ƒ s)t ‚ t | j$ t j | | j ƒ ƒ sPt ‚ t j% d | d t j | | ƒ ƒ } t | j | j ƒ s�t ‚ t | j& t j | | j ƒ ƒ s¶t ‚ t t j' d d ƒ t  j( d> ƒ ƒ sàt ‚ t t j) d d ƒ t  j( d |  d ƒ ƒ st ‚ t t j' | d? d ƒ t j) | d@ d |  ƒ ƒ sIt ‚ t j | | ƒ }	 t j* dA |	 ƒ }
 t |
 t j+ dB t j |	 ƒ ƒ ƒ s—t ‚ t |
 t j, | dC t j
 | |	 ƒ ƒ ƒ sÇt ‚ t |
 t j- | dD t j | |	 ƒ ƒ ƒ s÷t ‚ x$ t j. | ƒ D] } t/ | | ƒ qWt j0 t j. | ƒ ƒ s=t ‚ t j0 t j. | ƒ d ƒ s_t ‚ t j0 t j. | ƒ d ƒ s€t ‚ t j0 | ƒ s–t ‚ t j0 | d ƒ s¯t ‚ t j0 | d ƒ sÇt ‚ dE } t j1 | ƒ } t | j2 ƒ  dF ƒ s÷t ‚ x7 t3 d ƒ D]) } t4 | | j2 ƒ  | | j5 | ƒ ƒ qWdG } dH } t t j6 | | ƒ | ƒ s^t ‚ t t j1 | ƒ j2 ƒ  dI ƒ s‚t ‚ t j1 | ƒ } y | j5 d ƒ Wn. t7 k
 rÒ} t8 | ƒ j9 d* ƒ sÙt ‚ n Xt: ‚ t j; d | d+ d ƒ } t | dJ ƒ st ‚ t j; d | d+ d d2 d ƒ } t | dK ƒ s9t ‚ t j; d | d+ d d2 d ƒ } t t< j= j1 j> | ƒ j2 ƒ  dL ƒ s�t ‚ t t< j= j1 j> | ƒ j2 ƒ  dM ƒ s«t ‚ t j; | ƒ } t | | ƒ sÏt ‚ d  S(N   Ni   i   gffffff@i   i   i	   i   i   i   iP   in   id   t   u_cartt	   unit_cellt   u_start   u_cift   betag      Ð?gffffffÀi    g…ëQ¸…ó?gJ+‡á?g–C‹lçûé?gV-²�ã?g�St$—ÿ�?gôýÔxé&Á?gaÃÓ+e‰¿g$˜jf-ê?g/OçŠÒæ?g‡¥�Õ°Û?iüÿÿÿi   iÆ   i   iü  it   i¿  i  gAðb€óŽ,@g×sÄ÷Ì~@g¸i ò5uó¿s   Index out of range.t   u_ming-ßD>ù¥@gøý›'.@gr‹ß®"@g‚Œ€
Gðû?g@•äÊê§ò?g›› —ë@t   u_maxg…#H¥Øñ@g†Èéëùšð?g·'Hlw?@g‘µ†R{Ñã?gv¬­3Ù¿gý`*GŽô?g ý¾óŽ,@g26úÌ~@ggT*ò5uó¿(   i   i   i	   i   i   i   (   i   i   i   iP   in   id   gffffffâ¿(   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   gJ+‡á?g–C‹lçûé?gV-²�ã?g�St$—ÿ�?gôýÔxé&Á?gaÃÓ+e‰¿(   g$˜jf-ê?g/OçŠÒæ?g‡¥�Õ°Û?(	   i   i   i   i   iüÿÿÿi   i   i   i   (   iÆ   i   iü  it   i¿  i  (   gAðb€óŽ,@g×sÄ÷Ì~@g¸i ò5uó¿(   g-ßD>ù¥@gøý›'.@gr‹ß®"@g‚Œ€
Gðû?g@•äÊê§ò?g›› —ë@(   g…#H¥Øñ@g†Èéëùšð?g·'Hlw?@g‘µ†R{Ñã?gv¬­3Ù¿gý`*GŽô?(   g ý¾óŽ,@g26úÌ~@ggT*ò5uó¿(   i   g26úÌ~@i    (?   t   matht   piR   R   t   u_as_bR   t   b_as_uR   R   t   u_cif_as_u_start   u_star_as_u_cift   u_cart_as_u_start   u_star_as_u_cartt   u_cart_as_u_cift   u_cif_as_u_cartt   u_cart_as_betat   beta_as_u_cartt   u_cif_as_betat   beta_as_u_cift   beta_as_u_start   u_star_as_betat   u_cart_as_u_isot   u_iso_as_u_cartt   u_iso_as_u_start   u_star_as_u_isot   u_iso_as_u_cift   u_cif_as_u_isot   u_iso_as_betat   beta_as_u_isot   factor_u_cart_u_isot   u_isot   u_cart_minus_u_isot   listt   factor_u_star_u_isot   u_star_minus_u_isot   factor_u_cif_u_isot   u_cif_minus_u_isot   factor_beta_u_isot   beta_minus_u_isot   debye_waller_factor_b_isot   expt   debye_waller_factor_u_isot   debye_waller_factor_u_start   debye_waller_factor_betat   debye_waller_factor_u_cift   debye_waller_factor_u_cartt   eigenvaluesR   t   is_positive_definitet   eigensystemt   valuest   xrangeR   t   vectorst   c_u_c_transposet   RuntimeErrort   strt   endswithR   t   eigenvalue_filteringt   scitbxt   linalgt   real_symmetric(   t   episqt   uR
   t   uct   fwt   bwt   fct   uiiR   R   t   dwt   et   upR   t   it   cR   t   uf(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_interface   sº    "'5'+''+!;			 ""!'!  c         C   sl   t  j |  | ƒ } t  j | ƒ } t  j |  | ƒ } g  t | | ƒ D] \ } } | | ^ qC } t  j | ƒ S(   N(   R   R0   R,   R3   t   zipR+   (   R   R   R6   R,   R3   t   aR^   R>   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   u_star_minus_u_iso_airliew   s
    ,c         C   s`   t  j |  | ƒ } t  j | ƒ } g  | d  D] } | | ^ q, t | d ƒ } t  j |  | ƒ S(   Ni   (   R   R$   R-   R8   R#   (   R   R   R   R6   Rc   R7   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   u_star_minus_u_iso_ralf~   s    /c    	      C   s<  x5t  d ƒ D]'}  t j d d d d ƒ } | j t j d d ƒ ƒ | j ƒ  j | ƒ } | d | d | d | d	 | d
 | d g } t j d ƒ } t	 j
 | | ƒ } t | | ƒ } t | | ƒ } t | | d ƒ sà t ‚ t	 j d | d | ƒ } t | j t	 j | ƒ ƒ st ‚ t | j | d ƒ s t ‚ q Wd  S(   Nid   t   sizei	   t   factori   i    i   i   i   i   i   i   iP   in   g»½×Ùß|Û=R   R   (   i   i   i   iP   id   in   (   RJ   R   t   random_doublet   resizet   gridt   matrix_transposet   matrix_multiplyR   R   R   R#   Rd   Re   R   R   R9   R6   R-   R:   (	   t   i_trialRc   RU   R   R   R   t   airliet   ralfR   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_factor_u_star_u_iso„   s    0!c          C   sð  t  j dG ƒ }  t t j |  j dH ƒ d d	 ƒ d
 ƒ d k  sD t ‚ t t j |  dI d	 ƒ d
 ƒ d k  so t ‚ dJ } t t j |  dK | ƒ d ƒ d k  s  t ‚ dL } t t j	 d dM ƒ d d d d d d  g ƒ sÙ t ‚ t j
 d dN d! | ƒ } t | d" d# d$ d% d& d' d( g ƒ st ‚ t t j d dO ƒ d) d d d* d+ d, d- d d d. d/ d d d d  d0 d1 d2 d d3 d- g ƒ s|t ‚ t j d dP d! | ƒ } t | d d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE d5 dF d: g ƒ sìt ‚ d  S(Q   Ni   i   i	   iP   id   i‚   i   i   gš™™™™™™?gl²—„C#{?g�íµ ÷Æ°>gš™™™™™¹?gš™™™™™É?g333333Ó?g{®Gáz¤¿gš™™™™™©?g¸…ëQ¸®¿i   i   i   gó{|=~Õ?g�íµ ÷ÆÀ>gTäqs*É>g�íµ ÷Æ >gH¯¼šò×š>gvƒôõ!¤>t   hiÿÿÿÿi   i   iöÿÿÿiüÿÿÿR   gü©ñÒMbP?g`Û´¥ƒ‹ß¿g¤–AT0´¿g¤–AT0”¿gM|]Qi<Ù¿gM|]Qi<É?g¤–AT0´?iq  iô  iÿÿÿiœÿÿÿi   iØÿÿÿiðÿÿÿi�  i8ÿÿÿi°ÿÿÿi(   gªn�6"Ï?g‚Þ¬¶ïì£?g‚Þ¬¶ïìƒ?g!X¤+èÈ?g!X¤+è¸¿g‚Þ¬¶ïì£¿g'XÕ2�y?g'XÕ2�Y?gÎ0®ŠáŸ?gÎ0®Šá�¿g'XÕ2�y¿g'XÕ2�9?gÎ0®Šá?gÎ0®Šáo¿g'XÕ2�Y¿g‚Þ¬¶ïìÃ?g‚Þ¬¶ïì³¿gÎ0®ŠáŸ¿gÎ0®Šá�?(   i   i   i	   iP   id   i‚   (   i   i   i	   (   i   i   i	   (   gš™™™™™¹?gš™™™™™É?g333333Ó?g{®Gáz¤¿gš™™™™™©?g¸…ëQ¸®¿(   i   i   i   (   g�íµ ÷ÆÀ>g�íµ ÷Æ°>gTäqs*É>g�íµ ÷Æ >gH¯¼šò×š>gvƒôõ!¤>(   i   i   iÿÿÿÿ(   i   i   iÿÿÿÿ(   i   i   iÿÿÿÿ(   i   i   iÿÿÿÿ(   R   R   R   R   RA   t	   d_star_sqR   RD   R   t0   debye_waller_factor_u_star_gradient_coefficientst$   debye_waller_factor_u_star_gradientst1   debye_waller_factor_u_star_curvature_coefficientst%   debye_waller_factor_u_star_curvatures(   t   ucellRU   R   t   gR_   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_debye_waller“   sB    !
		
						c          C   sç   t  j d ƒ }  d } t j |  | ƒ } t | d ƒ s< t ‚ t | t j |  | ƒ ƒ s] t ‚ t j | g d ƒ } t j |  | ƒ } x# | D] } t | | ƒ sŒ t ‚ qŒ Wt j |  | ƒ } x# | D] } t | | ƒ sÄ t ‚ qÄ Wd  S(   NgtöÐ{Ð—(@g—s\�ø/@gâ76qç4@g     ÀT@g     @[@g      `@ggTYÏ¨9AgVÔ›ƒ?�:AgWÄmS—à@AgÙM%aEÁg•˜¿¬„=Ág66Zò6Agì>8ý½¸Å@g¯á%ËN­@gDA¥7qÅ°@gß,‰ƒÂtÀgu]É`ïEuÀgj!-edy@i   (   gtöÐ{Ð—(@g—s\�ø/@gâ76qç4@g     ÀT@g     @[@g      `@(   ggTYÏ¨9AgVÔ›ƒ?�:AgWÄmS—à@AgÙM%aEÁg•˜¿¬„=Ág66Zò6A(   gì>8ý½¸Å@g¯á%ËN­@gDA¥7qÅ°@gß,‰ƒÂtÀgu]É`ïEuÀgj!-edy@(	   R   R   R   t   grad_u_star_as_u_cartR   R   t   grad_u_cart_as_u_starR   t   sym_mat3_double(   RV   t   grad_u_start   grad_u_cartt   grad_u_star_arrayt   grad_u_cart_arrayRx   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_grad_u_transformations·   s&     	  c         C   sk  t  j |  d d d g ƒ } t t  j | ƒ ƒ } |  j ƒ  | j ƒ  x% t d ƒ D] } t | | | ƒ qR Wx8 t d ƒ D]* } t |  | | | ƒ d k  sz t ‚ qz Wt  j	 | ƒ rgt  j
 | ƒ } t | j ƒ  ƒ } | j ƒ  x% t d ƒ D] } t | | | ƒ qï Wx8 t d ƒ D]* } t |  | | | ƒ d k  st ‚ qWg  } xM t d ƒ D]? } t | | j ƒ  | | j | ƒ ƒ | j | j | ƒ ƒ qXWd  St j t j t j | j ƒ  ƒ ƒ ƒ } t j | ƒ j ƒ  } | | | j ƒ  } t j d | ƒ j } t | | j ƒ  | j d d ƒs,t ‚ t | | | j ƒ  j d d ƒsTt ‚ t | | | j d d ƒsvt ‚ t j d g  | j ƒ  D] }	 |	 d t j ƒ  d ^ qŒƒ }
 |
 j ƒ  |
 j ƒ  } t  j | ƒ } t | ƒ d	 k sðt ‚ |
 |
 j ƒ  j ƒ  } t  j | ƒ } t | ƒ d	 k s-t ‚ |
 |
 j ƒ  } t  j | ƒ } t | ƒ d	 k sgt ‚ n  d  S(
   Ng        i   g-Cëâ6?R   t   epsgü©ñÒMbP?i
   g      à?i    (   R   t   random_rotate_ellipsoidR8   RF   t   sortRJ   R   R   R   RG   RH   RI   R   RK   t   extendR   t   diagR   t   sqrtt   doublet   sqrt	   transposeR   R   R   t   as_sym_mat3t   randomt   min(   R†   RU   t   evR^   t   est   evect	   sqrt_evalt   sqrt_ut   u_fullR
   t   sqrt_u_plus_shiftst   sts(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_eigen_coreÍ   sN    

(
(#'(("	4id   c         C   s	  t  d d d g ƒ xï t d ƒ D]á } xØ t |  ƒ D]Ê } | d k rm g  t d ƒ D] } t j ƒ  ^ qR } n  | d k rÑ t j d ƒ } t j ƒ  | | <t j ƒ  | | d d <| | d d | | d d <n  | d k ró t j ƒ  g d } n  t  | ƒ q3 Wq  Wd  S(   Ni    i   i   i   (   R–   RJ   RŒ   t	   randrange(   t   n_trialst   n_equalRm   R^   R†   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_eigen÷   s    (!c          C   s¸   d d l  m }  |  j d d ƒ } t j d | d	 d
 d d ƒ } t | d | d
 | d d ƒ si t ‚ t | d d ƒ s‚ t ‚ t | d d ƒ s› t ‚ t | d d ƒ s´ t ‚ d  S(   Niÿÿÿÿ(   t   crystali
   i   i   iZ   t   P212121t   crystal_symmetryt   u_scalei   R   gš™™™™™¹?i    i   i   i   i   (   i
   i   i   iZ   iZ   iZ   (   t   cctbxR›   t   symmetryR   t,   random_traceless_symmetry_constrained_b_cartR   R   (   R›   t   cst   bc(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt5   exercise_random_traceless_symmetry_constrained_b_cart  s    	)c    
      C   sÉ  d d  l  }  |  j j d ƒ s" d  Sd d l m } | j d d ƒ } | j j ƒ  } | j ƒ  } | j ƒ  } t	 j
 d | d j d | d	 j d
 | d j d | d	 j d | j ƒ  ƒ } | j ƒ  t	 j
 d | d j d | d	 j d
 | d j d | d	 j d | j ƒ  ƒ } | | k st ‚ t | d d d ƒs:t ‚ t	 j
 d | d j d | d j d
 | d j d | d j d | j ƒ  ƒ } t | d d d ƒs¡t ‚ | j d d ƒ }	 |	 | k sÅt ‚ d  S(   Niÿÿÿÿt   iotbx(   t	   hierarchyt
   pdb_strings{  
CRYST1   10.000   11.000   12.000  70.00  80.00  90.00 P 1
HETATM    1  O  AHOH A   1       4.000   5.000   3.000  1.00 12.63           O
HETATM    2  O  BHOH A   1       4.500   5.000   3.000  1.00 12.63           O
HETATM    3  O  AHOH A   2       7.000   1.000   6.000  1.00 28.42           O
HETATM    4  O  BHOH A   2       8.500   1.000   6.000  1.00 28.42           O
ENDt   u_1i    t   u_2i   t   site_1t   site_2R   go�Å�1Ó?R‚   g-Cëâ6?i   i   gçsîv½4Ó¿g�íµ ÷Æ°>(   t   libtbx.load_envt   envt
   has_modulet	   iotbx.pdbR¦   t   inputt   xray_structure_simpleR   t
   scatterersR   t   intersectionR6   t   sitet   convert_to_anisotropicR   R   R   t   intersection_of_scatterers(
   t   libtbxR¦   t   pdb_int   xrsR   t   sct   delta12t   delta12_anisot   delta34t   delta34b(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   exercise_misc  sB     			
		c           C   s:   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  d GHd  S(   Nt   OK(   R¿   Ra   Rp   Ry   R�   Rš   R¤   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   run9  s    t   __main__(   t
   __future__R    RŸ   R   R   t   cctbx.array_familyR   t   scitbx.linalg.eigensystemRQ   R   t   libtbx.test_utilsR   R   R   RŒ   R   R   Ra   Rd   Re   Rp   Ry   R�   R–   Rš   R¤   R¿   RÁ   t   __name__(    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_adptbx.pyt   <module>   s.   	
		]				$		*	
	)	
