ó
j™xTc           @   s»   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d „  Z d „  Z d „  Z	 d d	 „ Z
 d
 „  Z d „  Z e d k r· e ƒ  e ƒ  e ƒ  e ƒ  e	 ƒ  e
 ƒ  d GHn  d S(   iÿÿÿÿ(   t   division(   t   math(   t   flex(   t   sharedc          C   sš  t  j d ƒ }  |  j d d d d ƒ |  j d d d ƒ } t | d ƒ d k sV t ‚ t j d d g ƒ } t j	 d d g ƒ } |  j
 | | ƒ s˜ t ‚ |  j d d d ƒ } |  j d d d ƒ } t | d ƒ d k sÞ t ‚ t | d ƒ d k sú t ‚ |  j ƒ  } |  j ƒ  } |  j d d ƒ } t | ƒ d k s<t ‚ d | k sNt ‚ d	 | k s`t ‚ d
 | k srt ‚ d | k s„t ‚ d | k s–t ‚ d  S(   Ni
   i   g      @gñhãˆµøä>i   g      .@y                i   i   i   i	   (   i
   i   i   (   i   i   i   y      .@        y      .@        (   R   t	   nlm_arrayt   set_coeft   get_coeft   abst   AssertionErrorR   t
   tiny_int_3R   t   complex_doublet
   load_coefst   nlmt   coefst   select_on_nlt   len(   R   t   at   nlm_indt   nlm_coeft   bR   t   cnlmt   sel(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_nlm   s(    c          C   s…   d }  t  j |  ƒ } d } xc t d |  ƒ D]R } | j | ƒ } | j | ƒ } | | } d t | | ƒ | d k  s+ t ‚ q+ Wd  S(   NiY   g      ð?i   g    _ B(   R   t   log_factorial_generatort   ranget   log_factt   factR   R   (   t   Nt   lfgt   fft   iit   tmpt   tmp2(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_log_factorial   s    
c          C   s©  d }  d } t  j |  ƒ } x‡t | ƒ D]y} xpt | ƒ D]b} | | d d k r; t  j | | | ƒ } t j t j t d ƒ ƒ d ƒ } | j | ƒ } | | | | } t j | ƒ d } t | d ƒ d	 k  sÜ t	 ‚ x¾ t | ƒ D]­ }	 x¤ t |	 ƒ D]– }
 |	 |
 d d k rü |	 | k r’|
 | k r�t  j |	 |
 | ƒ } | j | ƒ } | | | | } t j | ƒ d } | d
 k  sŒt	 ‚ q�q’qü qü Wqé Wq; q; Wq( Wd  S(   Ni2   i   i   i    i † g    ðiø@g     jø@i   g{®Gáz”?g{®Gáz„?(
   R   R   R   t   zernike_radialR   t   doublet   ft   sumR   R   (   R   t   MR   t   nt   lt   rzfat   rR   R   t   nnt   llt   rzfbR   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_zernike_radial)   s,    "gffffffî?c         C   s#  d } d } | d d } t  j | | t ƒ } t  j | | t ƒ } | j ƒ  } | j ƒ  } | j ƒ  } d d  l }	 |	 j d d  ƒ }
 x–t	 | j
 ƒ  ƒ D]‚} xyt	 | d | j
 ƒ  ƒ D]^} |
 j ƒ  |  k  r× q¹ n  | d } | d } d | | <d | | <| j | | ƒ | j | | ƒ | j ƒ  } | j ƒ  } t j | t j | ƒ ƒ | j
 ƒ  } t j | t j | ƒ ƒ | j
 ƒ  } t j | t j | ƒ ƒ | j
 ƒ  } t | ƒ } t | ƒ } t | ƒ } d
 | | } d
 t | | ƒ | } | d k  st ‚ | d k  s¹ t ‚ q¹ Wq™ Wd  S(   Ni   i   i   i   iÿÿÿÿt   xg        g      ð?y              ð?g      Y@g       @g      @y      ð?      ð?y      ð?      ð?(   R   t   zernike_gridt   Falset   xyzR   R   t   randomt   Randomt   NoneR   t   sizeR   R$   R   R%   t   conjR   R   (   t   skip_iteration_probabilityR&   R   t   dddt   zgat   zgbR2   R   R   R3   t   rngR   t   jjt   coefsat   coefsbt   fat   fbt   prodsumt   prodsumat   prodsumbt   t1t   t2t   t3(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_zernike_gridD   s@     



&&&c          C   s  t  j d ƒ }  |  j ƒ  } d } xD | D]< } | t | ƒ d 7} | d | d d d k s( t ‚ q( Wd } | | k s€ t ‚ |  j ƒ  } | j ƒ  | j ƒ  k sª t ‚ t j t	 | j ƒ  ƒ ƒ } |  j
 | | ƒ sÝ t ‚ t j d g ƒ } t j d	 g ƒ } |  j
 | | ƒ st ‚ |  j ƒ  } x9 t | | ƒ D]( \ }	 }
 t |	 |
 ƒ d
 k  s6t ‚ q6Wx¤ t | | ƒ D]“ \ } } |  j | d | d ƒ } t | | ƒ d
 k  s´t ‚ |  j | d | d d ƒ |  j | d | d ƒ } t | d ƒ d
 k  srt ‚ qrWd  S(   Ni   t    s   
i    i   i   sT   (0, 0)
(1, 1)
(2, 0)
(2, 2)
(3, 1)
(3, 3)
(4, 0)
(4, 2)
(4, 4)
(5, 1)
(5, 3)
(5, 5)
i
   g      $@gñhãˆµøä>i,  (   i
   i
   (   R   t   nl_arrayt   nlt   strR   R   R6   R   R#   R   R   R   t
   tiny_int_2t   zipR   R   R   (   t   this_nl_arrayRK   t   resultt   tnlt   expected_resultR   t	   new_coefst   new_nlt   new_coefR/   t   yt   cct   thc(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_nlr   s0    & c          C   s  d }  d } t  j |  ƒ } t  j | d d | ƒ } | j d d ƒ } | j d d ƒ } x9 t | | ƒ D]( \ } } t | | ƒ d k  sh t ‚ qh W| j d d	 ƒ } | j d d	 ƒ } x9 t | | ƒ D]( \ } } t | | ƒ d k  sÈ t ‚ qÈ Wd d d g } t j	 t
 d ƒ ƒ d d }	 t j	 t
 d ƒ ƒ d d }
 xÇ |	 D]¿ } x¶ |
 D]® } | j d d | | ƒ } | j d d | | ƒ } d t | j | j ƒ t t | j ƒ d ƒ d k  sÃt ‚ d t | j | j ƒ t t | j ƒ d ƒ d k  sQt ‚ qQWqDWd  S(   Ni2   i   i   iPÃ  i   i   gH¯¼šò×z>i   i   i    i   i   id   g…ëQ¸	@g      Y@g…ëQ¸@i
   gê-�™—q=g       @(   i    i    (   i   i   (   i   i   (   R   R   t   nss_spherical_harmonicst   legendre_lmt   legendre_lm_pcRN   R   R   R   R#   R   t   spherical_harmonict   spherical_harmonic_pct   realt   maxt   imag(   R   R&   R   t   nssspheR   R   t   aat   bbt   lmt   thetat   phit   ttt   ppR*   t   rr(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   tst_nss_spherical_harmonics™   s*      <t   __main__t   OKN(   t
   __future__R    t   scitbxR   t   scitbx.array_familyR   R   R   R!   R.   RH   RY   Rk   t   __name__(    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_zernike.pyt   <module>   s"   			.	'	 