ó
1™xTc           @   sÀ   d  d l  m Z d  d l m 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 e d k r¼ e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   xray_scattering(   t   flex(   t   Exception_expectedt   approx_equalNc          C   sw  t  j ƒ  }  t |  ƒ d k s$ t ‚ |  d  d d d d d g k sI t ‚ |  d d	 k s_ t ‚ x8 |  D]0 } t  j d
 | d t d t ƒ | k sf t ‚ qf Wt  j d
 d ƒ d k s¸ t ‚ t  j d
 d ƒ d k sÖ t ‚ t  j d
 d ƒ d k sô t ‚ t  j d
 d ƒ d k st ‚ t  j d
 d ƒ d k s0t ‚ t  j d
 d d t d t ƒ d  k sZt ‚ y  t  j d
 d d t d t ƒ Wn+ t k
 r§} t	 | ƒ d k s®t ‚ n Xt
 ‚ d d l m } x² |  D]ª } t  j d | ƒ \ } } | d k s| j | t ƒ j ƒ  | k st ‚ | d k rÅt | ƒ d k s7t ‚ d j | d ƒ d k sVt ‚ | d d k sot ‚ qÅqÅWd  S(    NiÙ   i   t   Ht   Dt   Tt   Hisot   Heiÿÿÿÿs   Pu6+t   labelt   exactt   optionals   na+s   Na1+s   o-s   O1-s   SI4+As   Si4+s   SI1+t   Sis%   Unknown scattering type label: "SI1+"(   t   tiny_pset   scattering_typet    i   t	   123456789i    i   t   +t   -(   R   R   (   R   t   standard_labels_listt   lent   AssertionErrort   get_standard_labelt   Truet   Falset   Nonet
   ValueErrort   strR   t   cctbx.eltbxR   t   get_element_and_charge_symbolst   tablet   symbolt   find(   t
   std_labelst   lt   eR   t   slt   c(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   exercise_basic   s8    %	%0c          C   s�  t  j d ƒ }  |  j ƒ  d k s' t ‚ t |  j ƒ  d ƒ sB t ‚ |  j ƒ  sT t ‚ |  j ƒ  d k sl t ‚ t  j d t ƒ }  |  j ƒ  d k s– t ‚ t |  j ƒ  d ƒ s± t ‚ |  j ƒ  sÄ t ‚ |  j ƒ  d k sÜ t ‚ t  j d ƒ }  |  j ƒ  d k st ‚ |  j	 ƒ  d, k st ‚ |  j
 ƒ  d- k s3t ‚ t |  j ƒ  d ƒ sNt ‚ |  j ƒ  d k sft ‚ t  j d. d/ ƒ }  |  j ƒ  d k s�t ‚ |  j	 ƒ  d0 k s¨t ‚ |  j
 ƒ  d1 k sÀt ‚ |  j ƒ  d k sØt ‚ t  j d2 d3 d ƒ }  |  j ƒ  d k st ‚ |  j	 ƒ  d4 k st ‚ |  j
 ƒ  d5 k s5t ‚ t |  j ƒ  d ƒ sPt ‚ t  j t j d6 ƒ ƒ }  t |  j	 ƒ  d7 ƒ sƒt ‚ t |  j
 ƒ  d8 ƒ sžt ‚ t |  j ƒ  d ƒ s¹t ‚ |  j ƒ  sÌt ‚ t  j t j d9 ƒ d t ƒ }  t |  j ƒ  d ƒ st ‚ |  j ƒ  st ‚ t  j t j d: ƒ d ƒ }  t |  j ƒ  d ƒ sMt ‚ |  j ƒ  s_t ‚ t  j d; d< d ƒ }  |  j ƒ  d k sŒt ‚ t |  j	 ƒ  d= ƒ s§t ‚ t |  j
 ƒ  d> ƒ sÂt ‚ t |  j ƒ  d ƒ sÝt ‚ t |  j d? ƒ d ƒ sût ‚ t |  j t j d@ ƒ ƒ d ƒ s"t ‚ t |  j d ƒ d ƒ s@t ‚ t |  j t j d d g ƒ ƒ d d g ƒ sst ‚ t |  j t j d ƒ ƒ d ƒ sšt ‚ t j |  ƒ } t j | ƒ } | j ƒ  |  j ƒ  k sÖt ‚ t | j	 ƒ  |  j	 ƒ  ƒ s÷t ‚ t | j
 ƒ  |  j
 ƒ  ƒ st ‚ t | j ƒ  |  j ƒ  ƒ s9t ‚ | j ƒ  sKt ‚ t  j dA dB ƒ }  t j |  ƒ } t j | ƒ } | j ƒ  |  j ƒ  k s™t ‚ t | j	 ƒ  |  j	 ƒ  ƒ sºt ‚ t | j
 ƒ  |  j
 ƒ  ƒ sÛt ‚ t | j ƒ  |  j ƒ  ƒ süt ‚ | j ƒ  st ‚ t  j t dC dD dE g Œ  Œ  }  |  j ƒ  s@t ‚ |  j } t | d d d d ƒ d ƒ smt ‚ t | d d d d ƒ d ƒ s‘t ‚ t | d d d d ƒ d ƒ sµt ‚ t | d d d d ƒ d ƒ sÙt ‚ t  j dF dG d& ƒ }  |  j ƒ  s t ‚ |  j } t | d d d d' ƒ d( ƒ s-t ‚ t | d d d d ƒ d) ƒ sQt ‚ t | d d d d' ƒ d* ƒ sut ‚ t | d d d d ƒ d+ ƒ s™t ‚ d  S(H   Ni    i   iþÿÿÿi   i   i   i   iüÿÿÿgš™™™™™¹¿gš™™™™™É?g333333Ó¿gš™™™™™Ù?g      à¿i   g      @g8¶Ch©Ù*@g½pçÂ(.@gá•Y r@gë¢¯û*Î?@gQ´ñ˜�úû?gkÉUîÌ„Ü?gJP¡,n•û?g_�(ý”*%@t   rt   b_isog«�ì\´‹p@gÍE›¢E®G@gÃkþIÏðÍ?g`>wHà%Ï?g{®Gáz@gR¸…ëQð?gBÏfÕçjù?g®Gáz®ë?g+•Ô	Ø4@g
×£p=j$@gÂ†§WÊ2â?gÞ“‡…ZÓI@g¸@‚âÇ˜Ë?gš™™™™™¹?g²Þpk×:{@g5¬×d•øG@gbQ±‰ÊÛÎ?g�åæØÏ?(    (    (    (    (    (    (    (    (    (    (   i   i   i   i   (   i   i   (   i   i   (   i   i   i   i   (   i   i   i   i   (   i   iþÿÿÿi   iüÿÿÿi   (   gš™™™™™¹¿gš™™™™™É?g333333Ó¿gš™™™™™Ù?g      à¿(   i   iþÿÿÿi   iüÿÿÿi   (   gš™™™™™¹¿gš™™™™™É?g333333Ó¿gš™™™™™Ù?g      à¿g      è?g      è?(   i   iþÿÿÿi   iüÿÿÿi   (   gš™™™™™¹¿gš™™™™™É?g333333Ó¿gš™™™™™Ù?g      à¿(   gá•Y r@gë¢¯û*Î?@(   gQ´ñ˜�úû?gkÉUîÌ„Ü?(   gJP¡,n•û?g_�(ý”*%@(   g{®Gáz@gR¸…ëQð?gBÏfÕçjù?g®Gáz®ë?(   g+•Ô	Ø4@g
×£p=j$@gÂ†§WÊ2â?gÞ“‡…ZÓI@(   R   t   gaussiant   n_termsR   R   R&   t   use_ct   n_parametersR   t
   array_of_at
   array_of_bR   t   doubleR   t
   at_stol_sqt   at_stolt   matht   sqrtt   at_d_star_sqt	   at_d_start   picklet   dumpst   loadst   zipt   electron_density(   t   gt   sR#   R$   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   exercise_gaussian'   s¦    ''!!!!!!		$$$$		$$$c          C   sH  t  j ƒ  d k s t ‚ t  j d ƒ d k s3 t ‚ t  j d ƒ d k sN t ‚ xÚ d d d d	 d
 d g D]À }  t  j d |  ƒ } | j ƒ  d k s— t ‚ | j ƒ  } | j ƒ  |  k s» t ‚ t | j	 d ƒ d d d ƒsß t ‚ | j
 ƒ  d k s÷ t ‚ | j ƒ  d k st ‚ | j ƒ  d k sg t ‚ qg Wx”t t  j ƒ  ƒ D]€} x¤ d d d d	 d
 d g D]Š }  t  j | |  ƒ } | j ƒ  j ƒ  |  k s“t ‚ t  j | j ƒ  |  ƒ } | j ƒ  | j ƒ  k sÉt ‚ | j ƒ  j ƒ  |  k s]t ‚ q]WxÐ d d g D]Â } x¹ d d g D]« } t  j | | | ƒ } t  j | j ƒ  | | ƒ } | j ƒ  | j ƒ  k s_t ‚ | d k rtd }  n d }  | j ƒ  j ƒ  |  k s˜t ‚ | j ƒ  j ƒ  |  k st ‚ qWqøWq>Wd } g  } g  }	 xX d d d d	 d
 d g D]> }  t  j | |  ƒ } | j | j
 ƒ  ƒ |	 j | j ƒ  ƒ qíWxø t d d d d	 d
 d g | |	 ƒ D]Ò \ }  }
 } t  j d d d
 |
 d | d ƒ } | j ƒ  j ƒ  |  k s¦t ‚ t | j
 ƒ  |
 ƒ sÁt ‚ |  d k  rTt  j d d d
 |
 d t |	 ƒ d ƒ } | j ƒ  j ƒ  t |  d d ƒ k s&t ‚ qTqTW|	 d |	 d
 k sDt ‚ d  S(   NiÕ   R   i    s   Pu6+iÔ   i   i   i   i   i   i   t   epsg{®Gáz„?g�íµ ÷Æ°>i
   g      à?t   Beg*kg{„?(   R   t   n_gaussian_table_sizeR   t   n_gaussian_table_indext   n_gaussian_table_entryR
   R*   R+   R   t   at_xt   max_stolt   d_mint   max_relative_errort   xranget   appendR:   t   maxt   min(   R+   R$   R<   t   i_entryt   fRF   RG   R
   t   be_max_stolst   be_max_relative_errorst   stol(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   exercise_n_gaussian}   sd    $"	*%2c          C   s  t  j d ƒ }  |  j ƒ  d k s' t ‚ |  j ƒ  d k s? t ‚ |  j ƒ  } | j ƒ  d k sc t ‚ | j ƒ  d k s{ t ‚ t | j	 ƒ  d! ƒ s– t ‚ t | j
 ƒ  d" ƒ s± t ‚ t | j ƒ  d ƒ sÌ t ‚ t | j d ƒ d ƒ sê t ‚ t | j d# ƒ d ƒ st ‚ t | j d$ ƒ d ƒ s&t ‚ t | j d% ƒ d ƒ sDt ‚ t  j d t ƒ }  |  j ƒ  d k snt ‚ |  j ƒ  } t | j	 ƒ  d d ƒ s™t ‚ t | j
 ƒ  d d ƒ s¸t ‚ t | j ƒ  d ƒ sÓt ‚ t  j d ƒ }  |  j ƒ  d k sút ‚ |  j ƒ  } t | j	 ƒ  d d ƒ s%t ‚ d } x“ t  j ƒ  D]… }  | d 7} | d k ro|  j ƒ  d  k s‡t ‚ n |  j ƒ  d  k s‡t ‚ t  j |  j ƒ  t ƒ } | j ƒ  |  j ƒ  k s8t ‚ q8W| d k sÓt ‚ t  j ƒ  } t | ƒ } | | k sýt ‚ d  S(&   Nt   c1t   IT1992t   Ci   i	   g{®Gáz@gR¸…ëQð?gBÏfÕçjù?g®Gáz®ë?g+•Ô	Ø4@g
×£p=j$@gÂ†§WÊ2â?gÞ“‡…ZÓI@g¸@‚âÇ˜Ë?i    g­ G.ÿ@g      ð?g£¯!}D @gÚXúÓ½@gT™P1@s   yb2+s   Yb2+gjMó<@i   g¤p=
×c4@gèÁÝY»­@s     yB3+s   Yb3+gÜ×�sFä;@i   iÕ   t   Cf(   g{®Gáz@gR¸…ëQð?gBÏfÕçjù?g®Gáz®ë?(   g+•Ô	Ø4@g
×£p=j$@gÂ†§WÊ2â?gÞ“‡…ZÓI@gÇqÇq¼?gÇqÇq¼?gÇqÇq¼?(   R   t   it1992R   R   R
   t   fetchR+   R-   R   R.   R/   R&   R1   R2   R5   R   t   it1992_iteratort   iter(   R$   R<   t   nt   dt   it   j(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   exercise_it1992²   sF    
"c          C   sÑ  t  j d ƒ }  |  j ƒ  d k s' t ‚ |  j ƒ  d k s? t ‚ |  j ƒ  } t | j ƒ  d" ƒ sf t ‚ t | j ƒ  d# ƒ s� t ‚ t | j	 ƒ  d ƒ sœ t ‚ t | j
 d ƒ d ƒ sº t ‚ t | j
 d$ ƒ d ƒ sØ t ‚ t | j d% ƒ d ƒ sö t ‚ t | j d& ƒ d ƒ st ‚ t  j d t ƒ }  |  j ƒ  d k s>t ‚ |  j ƒ  } t | j ƒ  d d ƒ sit ‚ t | j ƒ  d d ƒ sˆt ‚ t | j	 ƒ  d ƒ s£t ‚ t  j d ƒ }  |  j ƒ  d k sÊt ‚ |  j ƒ  } t | j ƒ  d d ƒ sõt ‚ d } x“ t  j ƒ  D]… }  | d 7} | d  k r?|  j ƒ  d! k sWt ‚ n |  j ƒ  d! k sWt ‚ t  j |  j ƒ  t ƒ } | j ƒ  |  j ƒ  k st ‚ qW| d  k s£t ‚ t  j ƒ  } t | ƒ } | | k sÍt ‚ d  S('   NRR   t   WK1995RT   gåcw�’B@gõøÃÏ?ñ?g7þDeÃÚ÷?g×/ØÛöÀg{»%9`×æ?gE.8ƒ¿�-@gz6«>WÛè?g©õ~£E@gÐî�b€D3¿g~©Ÿ7©Î?gNŸt"1@i    gK �!ý@g      ð?i	   g#]­4Ñ&@gø«‰æØ¿@gÛæb0ë/@s   yb2+s   Yb2+g9)Ì{œq<@i   g%ìÛIDøW?g	Äëú77Às     yB3+s   Yb3+g÷™1<@i   iÕ   s   Pu6+(   gåcw�’B@gõøÃÏ?ñ?g7þDeÃÚ÷?g×/ØÛöÀg{»%9`×æ?(   gE.8ƒ¿�-@gz6«>WÛè?g©õ~£E@gÐî�b€D3¿g~©Ÿ7©Î?gÇqÇq¼?gÇqÇq¼?gÇqÇq¼?(   R   t   wk1995R   R   R
   RW   R   R.   R/   R&   R1   R2   R5   R   t   wk1995_iteratorRY   (   R$   R<   RZ   R[   R\   R]   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   exercise_wk1995Ø   sF    
"c    	      C   sx  g  }  x' t  j ƒ  D] } |  j | j ƒ  ƒ q W|  j ƒ  g  } x' t  j ƒ  D] } | j | j ƒ  ƒ qM W| j ƒ  | |  k s† t ‚ g  } x9 t t  j ƒ  ƒ D]% } | j t  j	 | d ƒ j ƒ  ƒ qŸ W| j ƒ  | |  k sä t ‚ x� t  j
 ƒ  D] } t  j | t ƒ j ƒ  } t  j | t ƒ j ƒ  } t  j	 | d d ƒ j ƒ  } t | j d ƒ | j d ƒ d d ƒ sñ t ‚ qñ Wd  S(   Ni   i    i   g{®Gázt?(   R   RX   RI   R
   t   sortRa   R   RH   RA   RC   R   RV   R   RW   R`   R*   R   R2   (	   t   lbl_itR$   t   lbl_wkt   lbl_ngRL   R
   t   itt   wkt   ng(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   ensure_common_symbolsþ   s&     
 
#
c          C   sÄ   d d l  m }  x­ t j ƒ  D]Ÿ } | j ƒ  } t j d | d t ƒ \ } } |  j | ƒ j ƒ  | k sn t	 ‚ |  j | j
 ƒ  ƒ j ƒ  | k s• t	 ‚ |  j | j ƒ  ƒ j ƒ  | k s t	 ‚ q Wd  S(   Niÿÿÿÿ(   R   R   R   (   R   R   R   RX   R
   R   R   R   R    R   t   lowert   upper(   R   R$   R#   R&   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   ensure_correct_element_symbol  s    	!'c           C   s:   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  d GHd  S(   Nt   OK(   R'   R>   RQ   R^   Rb   Rj   Rm   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   run  s    t   __main__(   t
   __future__R    R   R   t   cctbx.array_familyR   t   libtbx.test_utilsR   R   R7   R3   R'   R>   RQ   R^   Rb   Rj   Rm   Ro   t   __name__(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/tests/tst_xray_scattering.pyt   <module>   s   		V	5	&	&		
	
