ó
j™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 m Z d  d l m Z	 d  d l
 m Z d  d l m Z d  d l Z d  d l Z d  d	 l m Z d
 „  Z d d „ Z d d d „ Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ  d „  Z! e" d k r¶e j# d Z$ e% e$ ƒ d k ríe& e$ d ƒ Z' e& e$ d ƒ Z( e& e$ d ƒ Z) e& e$ d  ƒ Z* e e+ e( e) e* ƒ ƒ Z, e e( e) e* e' e, ƒ GHe- ƒ  n  e% e$ ƒ d k re& e$ d ƒ Z. n e% e$ ƒ d k r-d! Z. n  e% e$ ƒ d k r�e& e$ d ƒ Z. e& e$ d ƒ Z' e' e. k sqt/ ‚ e! e. e' ƒ n  e- ƒ  e e. ƒ e e. ƒ e- ƒ  e j ƒ  Z0 e d" d ƒ e j ƒ  Z1 d# Ge1 e0 GHe d" d ƒ e j ƒ  Z2 d$ Ge2 e1 GHe- ƒ  e d% d& ƒ e- ƒ  e j ƒ  Z0 e j# d Z$ d Z3 e% e$ ƒ d k rTe$ d Z3 n  e d' d d( e3 ƒe- ƒ  e d) d  ƒ e d* d ƒ e d+ d, ƒ e j ƒ  Z1 d- Ge1 e0 GHd. GHn  d S(/   iÿÿÿÿ(   t   division(   t   math(   t   differential_evolution(   t   simplex(   t   lbfgs(   t!   direct_search_simulated_annealing(   t   flexN(   t   Fractionc         C   s¡   t  |  d ƒ } t j ƒ  } xu | D]m } | j ƒ  } t | ƒ d k r" t | d ƒ } t | d ƒ } t | d ƒ } | j | | | g ƒ q" q" W| j ƒ  | S(   Nt   ri   i    i   i   (	   t   openR   t   vec3_doublet   splitt   lent   intt   floatt   appendt   close(   t   filenamet   filet   datat   linet   keyst   xt   yt   z(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt	   read_data   s    
id   c         C   sD  t  d |  ƒ } t j | ƒ } t j |  | ƒ } t j ƒ  } t d d ƒ } d } xâ t | | d ƒ D]Ì }	 xÃ t | | d ƒ D]­ }
 t j	 |	 |	 |
 |
 ƒ | } | d k r» d } n7 t j
 |
 |	 ƒ } | j | | ƒ } | j } | d } | j |	 | |
 | | g ƒ | |	 | I|
 | I| IJq� Wqf W| j ƒ  | S(   Ni   s   original.datt   wi    i   g      ð?g        (   t   maxR   t   log_factorial_generatort   zernike_2d_polynomeR   R
   R	   t   ranget   smatht   sqrtt   atan2t   ft   realR   R   (   t   nt   lt   Nt   nmaxt   lfgt   rapt   imaget   originalt   countR   R   t   rrt   valuet   tt(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   generate_image   s&    		
&
c         C   sb  t  d |  ƒ } t d d ƒ } t j ƒ  } | d  k	 rE t | ƒ } n t |  | ƒ } t t j | j	 ƒ  ƒ ƒ } | d } t
 j | | ƒ }	 |	 j | ƒ |	 j ƒ  t j ƒ  }
 d G|
 | GHt
 j |	 | ƒ } | j ƒ  } t j ƒ  }
 d G|
 | GHt j | ƒ } t
 j | ƒ } | j ƒ  } | j | | ƒ t
 j | ƒ } | j |  | ƒ d GHxA t | | ƒ D]0 \ } } t | ƒ d k  r‡d } n  | G| GHq`WHt j | d d ƒ } x"t | | ƒ D]\ } } | d }  | d } | d k rô| d } n  t
 j |  | ƒ } d } x½ t d | ƒ D]¬ } | | } x™ t d | ƒ D]ˆ } | | } t j | | | | ƒ | } | d	 k r€d
 } n$ t j | | ƒ } | j | | ƒ } | | | | | | <| d } q<WqWq»Wd } x{ t d | ƒ D]j } xa t d | ƒ D]P } | | j } | d k rB| | I| I| | d I| IJn  | d } qüWqæW| j ƒ  d  S(   Ni   s   rebuilt.datR   i   s   time used: gü©ñÒMbP?i    i   g      ð?g        (   R   R	   t   timet   NoneR   R0   R   R   R    t   sizeR   t
   two_d_gridt   clean_spacet   construct_space_sumt   two_d_zernike_momentst   momentsR   R#   t   nl_arrayt   nlt
   load_coefsR   t   get_coeft   zipt   abst   complex_doubleR   R   R!   R"   R   (   R$   R%   R&   R   R'   t   rebuiltt   tt1R*   t   NPt   grid_2dt   tt2t   zernike_2d_momR8   t   coefsR9   t   nlsR(   R:   t   ct   reconstR)   t   iR   R   R-   R.   R/   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   tst_2d_zernike_mom3   sn    

	



	'c         C   sß   t  |  d ƒ } d } d \ } } t j | | | | ƒ t j | | ƒ } } t j | ƒ } t j |  | ƒ }	 |	 j | | ƒ }
 t j | | ƒ } t j	 | | ƒ } | j
 |  | | | ƒ } |
 G| Gt |
 ƒ Gt | ƒ GHd  S(   Ni   i2   gš™™™™™¹?gÍÌÌÌÌÌì?(   gš™™™™™¹?gÍÌÌÌÌÌì?(   R   R   R    R!   R   R   R   R"   R4   R7   t   zernike_polyR>   (   R$   R%   R'   t   npR   R   R   t   tR(   R)   t   rt_valuet   gridt   zm2dt   xy_value(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   tst_2d_polyz   s    .c         C   s]  t  |  d ƒ } d } t j t | | d ƒ ƒ | } t j | | ƒ } t j | | ƒ } t j ƒ  } t d d ƒ } x� | D]ˆ }	 x | D]w }
 t	 j
 |	 |	 |
 |
 ƒ } | d k r¿ d } n | j |  | |	 |
 ƒ j } | j |	 | | |
 | | | g ƒ q‰ Wq| W| j | ƒ | j ƒ  t j | | ƒ } | j ƒ  } t j | ƒ } t j | ƒ } | j ƒ  } xA t | | ƒ D]0 \ } } t | ƒ d k  ržd	 } n  | G| GHqwW| d
 d } | j | | ƒ } d	 } x{ t d	 | ƒ D]j }	 xa t d	 | ƒ D]P }
 | | j } | d	 k r=| |	 I|
 I| | d
 I| IJn  | d } q÷WqáW| j ƒ  d  S(   Ni   id   i   s   testmap.datR   g      ð?g        gü©ñÒMbP?i    i   (   R   R   t   doubleR   R   R4   R7   R
   R   R   R    RL   R#   R   R5   R6   R8   R9   R:   R=   R>   t   zernike_mapR   (   R$   R%   R'   RM   t   pointsRP   RQ   R*   t   outputR   R   R   R.   RE   R8   RF   R9   RG   R:   RH   RB   RI   RJ   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt	   tst_2d_zmŠ   sF    !	.
	'c         C   sI  t  d ƒ } t d ƒ } t d ƒ g |  | | d } x½ t | |  d d ƒ D]¥ } xœ t | | d d ƒ D]„ }	 x{ t | | d d ƒ D]c }
 | j |  | | ƒ | j | | |	 ƒ | j | | |
 ƒ } | | |	 |
 | | | |	 |
 <qˆ Wqk WqN WxE t d | |  | | d d ƒ D]! } | t  | | | d ƒ } qWt | ƒ S(   Ni    i   i   i   (   R   t   longR   R<   R   (   t   n1t   n2t   n3t   mt   Bnmk_objR.   t   tempt   ckt   k1t   k2t   k3t   kk(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   integrate_triple_zernike2dº   s    ;.)t   Bnmkc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s7   Bnmk coefficient object hold 2d zernike expansion coefsc         C   s)   | |  _  t j | ƒ |  _ |  j ƒ  d  S(   N(   R'   R   t	   nmk_arrayRf   t   initialize_bnmk(   t   selfR'   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   __init__Ì   s    	c         C   s.  x't  |  j d d ƒ D]} |  j j | | | d ƒ xî t  | d d d ƒ D]Ö } |  j j | | d | ƒ | | d | | } |  j j | | | | ƒ x„ t  | d | d d ƒ D]h } |  j j | | | d ƒ | | d | d | | d | | | } |  j j | | | | ƒ q¶ WqL Wq Wd  S(   Niÿÿÿÿg      ð?i   iþÿÿÿg       @i   (   R   R'   Rf   t   set_coefR<   (   Ri   R$   R]   R.   t   k(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyRh   Ñ   s    0!Ic         C   s   t  |  j j | | | ƒ j ƒ S(   N(   R   Rf   R<   R#   (   Ri   R$   R]   Rl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyR<   Û   s    c         C   s€   xy t  |  j d ƒ D]d } x[ t  | d d ƒ D]G } x> t  | | d d ƒ D]& } | G| G| G|  j | | | ƒ GHqJ Wq- Wq Wd  S(   Ni   iÿÿÿÿiþÿÿÿi   (   R   R'   R<   (   Ri   R$   R]   Rl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt
   print_bnmkÞ   s    (   t   __name__t
   __module__t   __doc__Rj   Rh   R<   Rm   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyRf   Ê   s
   		
	c   	   
   C   sÞ   t  |  ƒ } g  } xÅ t |  d ƒ D]³ } t j |  ƒ } xŽ t | |  d d ƒ D]v } xm t | | d d ƒ D]U } xL t | | d d ƒ D]4 } t | | | | | ƒ } | j | | | | ƒ q‰ Wql WqO W| j | ƒ q# W| S(   Ni   i   (   Rf   R   R   Rg   Re   Rk   R   (	   R'   R^   t
   coef_tableR]   t   C_m_3nRZ   R[   R\   R.   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   tst_integral_triple_zernike2då   s    "c         C   sò   t  j ƒ  } xß t |  | d d ƒ D]Ç } d } x« t |  | d d ƒ D]“ } | |  d } x| t |  | d d ƒ D]d }	 |	 |  d }
 t | | |	 g d t ƒ\ } } } | | j | | | ƒ j | | | |
 } qq WqF W| j | ƒ q# W| S(   Ni   i   i    t   reverse(   R   RT   R   t   sortedt   TrueR<   R#   R   (   R]   R'   t   Inmt   coef_table_mt   Cnm_mR$   R_   RZ   t   n1_indxR[   t   n2_indxRJ   t   jRl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   calc_Cnm_4m_from_Inmõ   s    $4c      	   C   sp  t  j | ƒ } xZt d | d d ƒ D]B} x9t d | d d ƒ D]!} d } xû t | | d d ƒ D]ã } x~ t | | d ƒ D]j } t | | | g d t ƒ\ }	 }
 } | | | j |	 |
 | ƒ j |  j | | ƒ |  j | | ƒ } q Wt | | | g d t ƒ\ }	 }
 } | | | j |	 |
 | ƒ j |  j | | ƒ d d } qf W| j | | | d ƒ qC Wq& W| S(   Ni    i   i   Rt   g       @(   R   R9   R   Ru   Rv   R<   R#   Rk   (   Rw   Rq   R'   t   CnmR$   R]   R_   RZ   R[   RJ   R|   Rl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   calc_Cnm_from_Inm  s    $D$<c         C   sO  t  j |  ƒ } | j ƒ  } | j ƒ  } t j | ƒ } | j | | ƒ t |  ƒ } t | | |  ƒ } xä t	 d |  d d ƒ D]Ì } | | } t j
 ƒ  }	 t j
 ƒ  }
 xP t	 | |  d d ƒ D]8 } |	 j | j | | ƒ ƒ |
 j | j | | ƒ ƒ qº Wt | |  |	 | ƒ } x9 t |
 | ƒ D]( \ } } t | | ƒ d k  st ‚ qWq{ Wd  S(   Ni    i   i   g�íµ ÷Æ°>(   R   R9   R:   R3   R   t   random_doubleR;   Rs   R   R   RT   R   R<   R}   R=   R>   t   AssertionError(   R'   Rw   RG   R3   RF   Rq   R~   t   mmRx   t   Inm_mRy   t   nnt	   Cnm_m_newt   iit   jj(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   comp_Cnm_calculations  s"    
c         C   s  t  j |  ƒ } | j ƒ  } | j ƒ  } t j | ƒ } | j | | ƒ t |  ƒ } t | | |  ƒ } t  j |  ƒ } x� t	 |  d ƒ D]‹ } x‚ t	 | d d ƒ D]n }	 | j
 | |	 ƒ }
 | |	 j
 | | | ƒ j } | d k r� |
 | } | G|	 G| j
 | |	 ƒ d G| GHq� q� Wq„ Wd  S(   Ni   iÿÿÿÿiþÿÿÿi    i   (   R   R9   R:   R3   R   R€   R;   Rs   R   R   R<   R#   (   R'   Rw   RG   R3   RF   Rq   R~   t   new_InmR$   R]   t	   Cnm_valuet   coefR.   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   tst_solving_Inm+  s    
t
   inm_refinec           B   se   e  Z d  „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z RS(   c   	      C   s�  | |  _  | |  _ | |  _ t j | ƒ |  _ | |  _ |  j |  j |  _ d  |  _	 |  j  |  j d d |  _
 |  j
 |  _ d g |  j
 |  _ t j ƒ  |  _ t |  j | d d ƒ |  _ t |  j
 ƒ |  _ x3 |  j D]( } |  j j |  j j | |  j ƒ ƒ qÓ W|  j j ƒ  d |  _ d } xi t d ƒ D][ } |  j ƒ  |  j |  j	 ƒ } | | k  rq| } |  j	 j ƒ  |  _ n  t |  j	 ƒ G| GHq(W| GHd  S(   Ni   i   g      ð¿g      ð?g    „×—Ai
   (   g      ð¿g      ð?(   R'   R~   Rq   R   R9   Rw   R]   Rx   R2   R   t   ndimR$   t   domainR   RT   t   target_dataR   t   n_listt   n_indx_listR   R<   t   normt   scalet	   run_lbfgst   targett	   deep_copyt   best_solutiont   list(	   Ri   R'   R~   Rq   R]   R„   t   lowest_scoreR†   t   score(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyRj   B  s2    					&
c         C   s:   d |  _  t j |  j ƒ d d |  _ t j d |  ƒ d  S(   Ng�íµ ÷Æ°>i   i   t   target_evaluator(   t   hR   R€   R$   R   R   t   run(   Ri   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyR•   c  s    	c         C   s.   |  j  |  j ƒ } |  j |  j ƒ } | | f S(   N(   R–   R   t   analytic_f_prime(   Ri   RN   t   dd(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt    compute_functional_and_gradientsh  s    g-Cëâ6?c   	      C   s“   |  j  | ƒ } g  } xb t | j ƒ  ƒ D]N } | j ƒ  } | | | | | <|  j  | ƒ } | | | } | j | ƒ q( Wt j | ƒ } | | f S(   N(   R–   R   R3   R—   R   R   RT   (	   Ri   t   vectorR�   RN   R    R†   t   vector_1t   tht   delta(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   derivsn  s    c         C   s   d  S(   N(    (   Ri   t	   minimizer(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   callback_after_stepz  s    c         C   s£   g  } x8 t  |  j ƒ D]' } | j t j |  j ƒ d d ƒ q W| j t j |  j d ƒ ƒ t j d |  j d | d |  d d d	 t ƒ |  _ |  j j	 ƒ  |  _
 d  S(
   Ng       @g      ð?i    t	   dimensiont   matrixt	   evaluatort	   tolerancegñhãˆµøä>t   further_opt(   R   R$   R   R   R€   RT   t   dssaRv   t	   optimizert   get_solutionR   (   Ri   t   start_matrixR†   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   run_dssa}  s    %0c      	   C   s�   g  } x8 t  |  j ƒ D]' } | j t j |  j ƒ d d ƒ q W| j t j |  j d ƒ ƒ t j d |  j d | d |  d d ƒ |  _ |  j j	 ƒ  |  _
 d  S(	   Ng       @g      ð?i    R©   Rª   R«   R¬   gñhãˆµøä>(   R   R$   R   R   R€   RT   R   t   simplex_optR¯   R°   R   (   Ri   R±   R†   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   run_simplex†  s    %*c         C   s  t  j ƒ  } |  j |  j d |  j } xÓ |  j D]È } d } x¬ t |  j |  j ƒ D]• \ } } d } xn t |  j |  j ƒ D]W \ }	 }
 t | | |	 g d t	 ƒ\ } } } | |  j
 j | | | ƒ j | |
 } q{ W| | | | } qS W| j | ƒ q1 W| S(   Ng      @i    Rt   (   R   RT   t	   calc_dataR�   R”   R‘   R=   R’   Ru   Rv   Rx   R<   R#   R   (   Ri   Rw   t   f_primet
   pre_factorR$   R_   RZ   Rz   t   temp1R[   R{   RJ   R|   Rl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyRŸ   Ž  s    ""$+c         C   s6   |  j  | ƒ |  _ t j |  j |  j ƒ } | |  j S(   N(   R   Rµ   R   t   sum_sqR�   R”   (   Ri   R   R›   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyR–   ž  s    c         C   s  t  j ƒ  } xú t |  j |  j d d ƒ D]Ü } d } xÀ t |  j |  j d d ƒ D]¢ } | |  j d } xˆ t |  j |  j d d ƒ D]j } | |  j d } t | | | g d t ƒ\ }	 }
 } | |  j j |	 |
 | ƒ j	 | | | | } q† WqR W| j
 | ƒ q) W| S(   Ni   i   i    Rt   (   R   RT   R   R]   R'   Ru   Rv   Rx   R<   R#   R   (   Ri   Rw   R~   R$   R_   RZ   Rz   R[   R{   RJ   R|   Rl   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyR   £  s    ###$7(   Rn   Ro   Rj   R•   R¡   R¦   R¨   R²   R´   RŸ   R–   R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyR�   A  s   	!								c         C   sC  t  j |  ƒ } | j ƒ  } | j ƒ  } t j | ƒ } | j | | ƒ t |  ƒ } t | | |  ƒ } t	 j	 ƒ  } t
 |  | | | ƒ }	 t j ƒ  }
 x7 t | |  d d ƒ D] } |
 j | j | | ƒ ƒ q¨ Wx) t |
 |	 j ƒ D] \ } } | G| GHqÞ Wd G|	 j |	 j ƒ GHd G|	 j |
 ƒ GHt	 j	 ƒ  } d G|  Gd G| | GHd  S(   Ni   i   s   score=s   nmax=s
   time used:(   R   R9   R:   R3   R   R€   R;   Rs   R   R1   R�   RT   R   R   R<   R=   R˜   R–   R   (   R'   R]   Rw   RG   R3   RF   Rq   R~   t   t1t   refine_de_objt   solutionR„   t   sst   xxt   t2(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   test_solving°  s$    t   __main__i   i   i    i   i   i   i)   s   xy:  s   rt:  i3   i   i   R   i   i   i   i   s   time used: t   OK(4   t
   __future__R    t   scitbxR   R   t   deR   R   R   R®   t   scitbx.array_familyR   t   stdlibR   R1   t   syst	   fractionsR   R   R0   R2   RK   RS   RX   Re   t   objectRf   Rs   R}   R   Rˆ   RŒ   R�   RÀ   Rn   t   argvt   argsR   R   R]   RZ   R[   R\   R   R^   t   exitR'   R�   Rº   R¿   t   t3R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tst_2d_zernike.pyt   <module>   sŠ   	G		0						o	
	

