ó
j™xTc           @   sü  d  d l  m Z d  d l 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 m Z d  d l Z d  d l Z d  d l Z i d d 6a d d „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e f d  „  ƒ  YZ! d e# d! „ Z$ d" „  Z% d# „  Z& d$ d% „ Z' d& d' d( d) „ Z( d* „  Z) d d+ „ Z* d, „  Z+ d S(-   iÿÿÿÿ(   t   divisionN(   t   golay_24_12_generator(   t   lbfgs(   t   lbfgsb(   t   immoptibox_ports(   t   flex(   t   ifloor(   t   adopt_init_args(   t   easy_picklei    t   Noneg�íµ ÷Æ°>c         C   s<   |  | | k  } | j  t ƒ } | |  j t ƒ s8 t ‚ | S(   N(   t   countt   Truet   all_eqt   AssertionError(   t   sorted_arrayt   cutofft   epst	   selectiont   result(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   n_less_than   s    t   LargeNegativeBc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR      s    t   minimize_mixinc           B   s;   e  Z d  „  Z d „  Z d „  Z d d „ Z d d „ Z RS(   c         C   s[   |  j  j |  j |  j d k ƒ |  _ t |  j j ƒ  ƒ } | |  j k  rW t d ƒ ‚ n  d  S(   Ni    s$   gaussian_fit error: large negative b(	   t   gaussian_fitt   apply_shiftst   xt   shift_sqrt_bt   gaussian_fit_shiftedt   mint
   array_of_bt
   hard_b_minR   (   t   selft   min_b(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR      s
    	c         C   sA   |  j  |  _ |  j j ƒ  d |  _ t j |  j j ƒ  ƒ |  _ d  S(   Niÿÿÿÿ(   R   t   final_gaussian_fitt   table_xt   max_xR   t   maxt   significant_relative_errorst	   max_error(   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   finalize"   s    c         C   sV   | d  k r t S|  j | j k r& t S|  j | j k  r< t S|  j | j k  rR t St S(   N(   R	   R   R$   t   FalseR'   (   R    t   other(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   is_better_than(   s        c         C   sk   | d  k r t j } n  | d I|  j j ƒ  I| d |  j j ƒ  d I| d |  j IJ| j ƒ  |  S(   Ns   n_terms:s   max_x: %.2fiÿÿÿÿs   max_error: %.4f(   R	   t   syst   stdoutR"   t   n_termsR#   R'   t   flush(   R    t   f(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   show_summary/   s     
c         C   sp   | d  k r t j } n  t |  ƒ } t |  d ƒ rX | d |  j 7} | d |  j 7} n  | | IJ| j ƒ  |  S(   Nt   shift_sqrt_b_mod_ns    shift_sqrt_b_mod_n:%ds    i_repeat:%d(   R	   R,   R-   t   strt   hasattrR2   t   i_repeatR/   (   R    R0   t   s(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   show_minimization_parameters7   s     

N(   R   R   R   R(   R+   R	   R1   R7   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR      s
   			t   minimize_lbfgs_mixinc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s‰   |  j  ƒ  |  j j ƒ  } |  j j |  j |  j | ƒ |  _ |  j j |  j |  j | ƒ |  _ |  j	 r… |  j
 j |  j |  j ƒ |  _ n  d  S(   N(   R   R   t   differencest   target_functiont   target_powert
   use_sigmasR0   t   gradients_d_abct   gR   R   t   gradients_d_shiftsR   (   R    R9   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt
   compute_fgC   s    
			c         C   s'   |  j  ƒ  |  j |  _ t j |  ƒ d  S(   N(   R@   R0   t   final_target_valueR   R(   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR(   M   s    
(   R   R   R@   R(   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR8   A   s   	
t   minimize_lbfgsc           B   s8   e  Z d e j d  d ƒ d d „ Z d „  Z d „  Z RS(   t   mi   iÿÿÿÿc         C   s‹   t  |  t ƒ  ƒ t j t |  ƒ d ƒ | d k s8 t ‚ t j | j ƒ  d ƒ |  _	 d  |  _ t j d |  d | d | ƒ |  _ |  j ƒ  d  S(   Ni    i   i   t   target_evaluatort   termination_paramst   core_params(   i   i   (   R   t   localst   minimize_multi_histogramt
   setdefaultR3   R   R   t   doublet   n_parametersR   R	   t   first_target_valueR   t   runt	   minimizerR(   (   R    R   R;   R<   R   t   lbfgs_termination_paramst   lbfgs_core_paramsR   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   __init__T   s    		c         C   s;   d |  j  j ƒ  |  j j |  j t |  j ƒ t |  j ƒ f S(   Ns"   lbfgs:np=%d:m=%d:tp=%d:us=%d:sq=%d(   R   RK   RP   RC   R;   t   intR<   R   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   __str__e   s    	c         C   s8   |  j  ƒ  |  j d  k r( |  j |  _ n  |  j |  j f S(   N(   R@   RL   R	   R0   R>   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt    compute_functional_and_gradientsm   s    
N(   R   R   R	   R   t   core_parametersRQ   RS   RT   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRB   R   s
   	t   minimize_lbfgsbc           B   s/   e  Z d  d d e d „ Z d „  Z d „  Z RS(   i   iÿÿÿÿc
   
      C   s§   t  |  t ƒ  ƒ t j t |  ƒ d ƒ | d k s8 t ‚ | j ƒ  |  _ y |  j ƒ  WnA t	 k
 rk ‚  n. t
 k
 r˜ t j d t j ƒ  | ƒ ‚  n X|  j ƒ  d  S(   Ni    i   i   s   lbfgsb_exception_%.0f.pickle(   i   i   (   R   RG   RH   RI   R3   R   RK   t   nRM   R   t	   ExceptionR   t   dumpt   timeR(   (
   R    R   R;   R<   R   t   apply_lower_bounds_on_bt   lbfgsb_mR   t   iprintt   use_fortran_library(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRQ   u   s    c         C   sD   d |  j  j ƒ  |  j |  j t |  j ƒ t |  j ƒ t |  j ƒ f S(   Ns)   lbfgsb:np=%d:m=%d:tp=%d:us=%d:sq=%d:lb=%d(   R   RK   R\   R;   RR   R<   R   R[   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRS   Œ   s    c         C   s=  t  j |  j d ƒ } t  j |  j d ƒ } t  j |  j d ƒ } |  j rp |  j j t t ƒ } | j	 | d ƒ n  t
 j d |  j d |  j d | d | d | d |  j ƒ |  _ t  j |  j d ƒ |  _ d |  _ t  j |  j d ƒ |  _ xQ t r8|  j j |  j |  j |  j |  j ƒ r"|  j ƒ  qè |  j j ƒ  rè Pqè qè Wd  S(	   Ni    i   RW   RC   t   lt   ut   nbdR]   (   R   RJ   RW   RR   R[   R   t   bound_flagsR)   R   t   set_selectedR   RN   R\   R]   R   R0   R>   t   processR^   R@   t   is_terminated(   R    R_   R`   Ra   Rb   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRM   •   s,    						(   R   R   R)   RQ   RS   RM   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRV   s   s   		c         C   sV  d  } xI| D]A} |  } x2t | ƒ D]$}	 | d k rK |	 | d k }
 n d }
 y7 t d | d | d | d |
 ƒ } | | _ |	 | _ Wnj t k
 r¢ d  } PnS t k
 rô } t | ƒ j d ƒ d k  rÒ ‚  n  | GHd GHHt	 j
 j ƒ  d  } Pn Xt | j j ƒ  ƒ | k  rd  } Pn  | j } | d  k sA| j | j k r& | } q& q& Wq W| S(   Ni    R   R;   R<   R   s   lbfgs error: s   Aborting this minimization.(   R	   t   xrangeRB   R2   R5   R   t   RuntimeErrorR3   t   findR,   R-   R/   R   R"   R   R'   (   t	   start_fitt   target_powerst   minimize_using_sigmasR2   t   b_mint   n_repeats_minimizationt   best_minR;   t   min_gaussian_fitt   it   shift_sqrt_b_this_timet	   minimizedt   e(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   minimize_multi_lbfgs­   sD    		 	c         C   s!  d  } x| D]} xt t g D]õ } |  }	 xæ t | ƒ D]Ø }
 | d k r^ |
 | d k } n d } y= t d |	 d | d | d | d | ƒ } | | _ |
 | _ Wn t k
 r» d  } Pn Xt | j	 j
 ƒ  ƒ | k  rá d  } Pn  | j	 }	 | d  k s| j | j k r9 | } q9 q9 Wq  Wq W| S(   Ni    R   R;   R<   R   R[   (   R	   R)   R   Rf   RV   R2   R5   R   R   R"   R   R'   (   Ri   Rj   Rk   R2   Rl   Rm   Rn   R;   R[   Ro   Rp   Rq   Rr   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   minimize_multi_lbfgsbÖ   s6    			t   immoptibox_mixinc           B   s/   e  Z d  „  Z d „  Z d d „ Z d „  Z RS(   c         C   s)   | |  _  |  j ƒ  d  |  _  |  j j ƒ  S(   N(   R   R   R	   R   R9   (   R    R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR0   û   s    	
	c         C   s)   | |  _  |  j ƒ  d  |  _  |  j j ƒ  S(   N(   R   R   R	   R   t   least_squares_jacobian_abc(   R    R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   jacobian  s    	
	c         C   s@   | d  k r! |  j d | ƒ } n  |  j d | ƒ j ƒ  j | ƒ S(   NR   (   R	   R0   Rx   t   matrix_transposet   matrix_multiply(   R    R   t   f_x(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt	   gradients  s     c         C   s/   | |  _  |  j ƒ  d  |  _  |  j j ƒ  j ƒ  S(   N(   R   R   R	   R   t%   least_squares_hessian_abc_as_packed_ut   matrix_packed_u_as_symmetric(   R    R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   hessian  s    	
	N(   R   R   R0   Rx   R	   R|   R   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRv   ù   s   		t   minimize_levenberg_marquardtc           B   s    e  Z d  d d „ Z d „  Z RS(   iô  iÿÿÿÿc         C   sž   t  |  t ƒ  ƒ t j t |  ƒ d ƒ d |  _ t j d |  d t j	 |  j
 j ƒ  d ƒ d d d d d d d	 | ƒ |  _ |  j j j ƒ  d
 |  _ |  j ƒ  d  S(   Ni    t   functiont   x0t   taug:Œ0âŽyE>t   eps_1g¼‰Ø—²Òœ<t   eps_2t   k_maxi   (   R   RG   RH   RI   R3   R   R   t   levenberg_marquardtR   RJ   R   RK   RN   t   f_x_start   normRA   R(   (   R    R   R†   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRQ     s    		c         C   s   d |  j  j ƒ  |  j f S(   Ns"   levenberg_marquardt:np=%d:k_max=%d(   R   RK   R†   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRS   "  s    (   R   R   RQ   RS   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyR€     s   t   minimize_damped_newtonc           B   s    e  Z d  d d „ Z d „  Z RS(   iô  iÿÿÿÿc         C   sž   t  |  t ƒ  ƒ t j t |  ƒ d ƒ d |  _ t j d |  d t j	 |  j
 j ƒ  d ƒ d d d d d d d	 | ƒ |  _ |  j j j ƒ  d
 |  _ |  j ƒ  d  S(   Ni    R�   R‚   Rƒ   g:Œ0âŽyE>R„   g¼‰Ø—²Òœ<R…   R†   i   (   R   RG   RH   RI   R3   R   R   t   damped_newtonR   RJ   R   RK   RN   Rˆ   R‰   RA   R(   (   R    R   R†   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRQ   )  s    		c         C   s   d |  j  j ƒ  |  j f S(   Ns   damped_newton:np=%d:k_max=%d(   R   RK   R†   (   R    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRS   7  s    (   R   R   RQ   RS   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyRŠ   '  s   c      	   C   sË   t  j ƒ  } t j t  j ƒ  ƒ } t j d | d t ƒ } t j | | ƒ } | j | ƒ } t j | ƒ } xA t	 | | ƒ D]0 \ } } |  d | | t
 d | ƒ | f IJqy W|  J| rÇ i d d 6a  n  d  S(   Nt   datat   reverses   %-39s  %5.3f %6di   i    R	   (   RH   t   keysR   RJ   t   valuest   sort_permutationR   t   selectt   sumt   zipR%   (   R0   t   resett   minimizer_typest   countst   permt   n_totalRC   t   c(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   show_minimize_multi_histogram<  s    (c         C   sX  g  } xH t  t g D]: } y | d |  ƒ } Wn t k
 r? q X| j | ƒ q Wxš | D]’ }	 x‰ t t g D]{ }
 y1 |
 d |  d | d | d |	 d | d | ƒ } Wn4 t k
 rØ } t | ƒ j d ƒ d	 k  ræ ‚  qæ qk X| j | ƒ qk WqX Wd  } xG | D]? } | d  k rqû n  | d  k s1| j
 | j
 k rû | } qû qû Wt t | ƒ c d
 7<| S(   NR   Ri   Rj   Rk   R2   Rl   Rm   s   SCITBX_ASSERT(b >= 0)i    i   (   R€   RŠ   R   t   appendRt   Ru   Rg   R3   Rh   R	   R'   RH   (   Ri   Rj   Rk   R2   Rl   Rm   t   best_min_listt   immoptibox_minimizerRr   t   current_shift_sqrt_b_mod_nt   minimize_multi_typeRs   t   best_best_minRn   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   minimize_multiJ  s<      
 c         C   s”  |  j  ƒ  } |  j ƒ  } |  j ƒ  }	 d }
 d } | j ƒ  d } x=t r| d k r¸ | d | | d } t d | d | ƒ } | |
 k r¯ | d 8} | |  j ƒ  k  r¯ Pq¯ n  | }
 n
 | d } t j j	 j
 | |  | |  |	 |  |  ƒ } t d | d | d | d	 | d
 | d | ƒ } | d  k s4| j | k rQ| d k rDPn  | d } qC | } | } | j }  | | j ƒ  k rC PqC qC W| d k r�| Sd  S(   Ni    i   i   R   R   Ri   Rj   Rk   R2   Rl   Rm   (   R#   t   table_yt   table_sigmast   sizeR   R   RK   t   scitbxt   matht   gaussiant   fitR¡   R	   R'   R"   (   R   Rj   Rk   Rm   R2   Rl   t   max_max_errorR#   R¢   t   sigmast   prev_n_pointst   good_n_pointst   i_x_highR   t   n_pointsRi   Rn   t   good_min(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt
   find_max_xl  sP    	
	
			gü©ñÒMbP?c         C   sN  |  j  ƒ  | d } |  j ƒ  d } |  j ƒ  | } | j d ƒ }	 | j | ƒ }
 | j ƒ  d } | d k r• t j | g ƒ } t j ƒ  } | } n;d | } t j | j ƒ  ƒ } t j t j | ƒ ƒ } | | } | | k  } | j	 | t j | j
 t ƒ | ƒ ƒ | d k  rWt j | j ƒ  ƒ | } | j | t j | ƒ ƒ | |
 | } ny t j j j | j ƒ  | | j ƒ  | ƒ } t j | j ƒ  ƒ } | j | | | ƒ | | c | 9<| j | ƒ | } d } | d d k r6| d k r6| | d } d | k  od k n r6t j | ƒ | } q6n  | j | ƒ | d k rˆt | d t j | d | ƒ | ƒ d k  sˆt ‚ n  t j j j |  j  ƒ  |  j ƒ  |  j ƒ  t j j j t | ƒ t | ƒ ƒ ƒ } | d k r| d k  rt | j d ƒ | ƒ d k  st ‚ n  | d k rJt | j | ƒ | ƒ d k  sJt ‚ n  | S(   Ni   i    i   iÿÿÿÿg�íµ ÷Æ°>g-Cëâ6?(   R#   R¢   t   at_x_sqR.   R   RJ   R   R%   t   absRc   R
   R   t
   array_of_aR›   R’   R¥   R¦   R§   t   termt   logt   expR   R¨   R£   t   iter(   t   null_fitt   existing_gaussiant   i_splitt   i_xt   start_fractiont   b_ranget   x_sqt   y0_tablet   yx_tablet   y0_existingt   yx_existingR.   t   at   bt   yx_partt	   scale_oldt   b_maxRl   t   selt   t_splitt   addl_bt   rR   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   make_start_gaussianž  sZ    	

%9			'((gÍÌÌÌÌÌì?gš™™™™™¹?g       @c         C   s>  d  } d  } |  j ƒ  d } xo t |  j ƒ  ƒ D][ \ } } | d  k r` | | |	 k  r` | } n  | d  k r/ | | |
 k  r/ | d } Pq/ q/ W| d  k r¯ |  j ƒ  j ƒ  } n  | d  k r× t | j ƒ  | d ƒ } n  | d k sé t ‚ | | k  sû t ‚ | j ƒ  d } t d t	 | | | | ƒ ƒ } | d k rAd } n  d  } xð t
 | | | ƒ D]Ü } xÓ t
 d | j ƒ  ƒ D]¼ } x³ t
 d | ƒ D]¢ } t d |  d | d | d | d	 | t | ƒ ƒ } xh | D]` } t d
 | d | g d | d | d | d | d | ƒ } | d  k	 rÊ| j | ƒ rÊ| } qÊqÊWqŒWqvWqZW| S(   Ni    i   i   iÿÿÿÿR¸   R¹   Rº   R»   R¼   R   Rj   Rk   Rm   R2   Rl   R©   (   R	   R¢   t	   enumerateR¤   R   RK   R   R.   R%   R   Rf   RÌ   t   floatR°   R+   (   R¸   R¹   Rj   Rk   R2   Rl   R©   t   n_start_fractionsRm   t   factor_y_x_begint   factor_y_x_endt   factor_x_stept	   i_x_begint   i_x_endt   y0Rp   t   target_valueR.   t   i_x_stepRn   R»   Rº   t   i_start_fractionR   R;   R¯   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   find_max_x_multiÔ  sR    	
! 			c   
      C   s\  t  | ƒ d k s t ‚ d d d d g } d d d d g } t j ƒ  } t j ƒ  } x˜ t d ƒ D]Š } | d } | | | | d f } | | d | | d d f }	 | j | | d	 d | d ƒ | j | |	 d	 d |	 d ƒ qa W| |  j ƒ  d	 t j | ƒ } t j	 j
 j |  j ƒ  |  j ƒ  |  j ƒ  t j	 j
 j t | ƒ t | ƒ ƒ ƒ S(
   Ni   i   i   i   i    i   i   i   i    (   t   lenR   R   RJ   Rf   R›   R¢   R’   R¥   R¦   R§   R¨   R#   R£   R·   (
   R¸   t   codet   a_startst   b_startsRÃ   RÄ   t   i_termt   i_bitst   bits_at   bits_b(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   make_golay_based_start_gaussian	  s"    
 !%!			c         C   sø  |  d  k	 r$ | d  k r$ t j } n  d  } | d  k	 rS | d I|  IJ| j ƒ  n  d } d } x®t ƒ  D]£} | d 7} t d | d | ƒ }	 t d |	 d	 | j d
 | j d | j	 d | j
 d | j ƒ }
 |
 d  k	 ri | d  k sô | j |
 j k r|
 } | | _ t j j j | j ƒ  | j ƒ  | j ƒ  | j ƒ } | d  k	 ræ| |  Id | j I| j ƒ  j ƒ  | j ƒ  j ƒ  k r�| d t j | j ƒ  ƒ In  | d | j d | j | f IJ| j d | ƒ | j d | ƒ | Jn  | j ƒ  | j | j k r	Pq	qqi qi W| d  k	 rô| d I| IJ| J| d  k rM| d |  IJnƒ | d I|  Id | j I| j ƒ  j ƒ  | j ƒ  j ƒ  k r®| d t j | j ƒ  ƒ In  | d | j d | j | f IJ| j d | ƒ | Jt d | ƒ n  | S(   Ns   label:i   i   i    i   R¸   RÛ   Ri   Rj   Rk   R2   Rl   Rm   s   max_error fitted=%.4fs	   more=%.4fs   Golay code #%d (%.2f%% of all)g      Y@R0   s&   Total number of Golay codes processed:s&   Final: %s: No successful minimization.s   Final:i   (   R	   R,   R-   R/   R   Râ   R¡   Rj   Rk   R2   Rl   Rm   R'   t   n_golay_codes_processedR¥   R¦   R§   R¨   R#   R¢   R£   R"   R¤   R   R%   R&   t   showt
   show_tablet   negligible_max_errorR7   Rš   (   t   labelR¸   t   null_fit_moret   paramst   print_toR¯   t   n_golay_codes_totalRã   t
   golay_codeRi   Rn   t   fit_more(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   fit_with_golay_starts  s|    
									
$


$c         C   sÉ  |  j  ƒ  d } d  } t |  j ƒ  ƒ } t |  j ƒ  ƒ } xˆt |  j  ƒ  ƒ D]t} | | } | |  | | d } | |  | | d }	 x5t | ƒ D]'}
 | } | |
 c | 7<t j j j	 |  j
 ƒ  |  j ƒ  |  j ƒ  t j j j | |	 ƒ ƒ } xÅ t j j j d | d | j d | j d | j d | j d | j ƒ } | d  k rMPn  | j | j k r{| j | ƒ rw| } n  Pn  t j j j	 | j
 ƒ  d  | j ƒ  d  | j ƒ  d  | j ƒ } qø q– WqM W| S(	   Ni   Ri   Rj   Rk   R2   Rl   Rm   iÿÿÿÿ(   R.   R	   t   listR³   R   Rf   R¥   R¦   R§   R¨   R#   R¢   R£   R’   R   R¡   Rj   Rk   R2   Rl   Rm   R'   R©   R+   R"   (   R¹   Ré   R.   R¯   t   last_at   last_bt   i_delt   a_delt   sel_at   sel_bt   i_addRÃ   Ri   Rn   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   decremental_fita  sH    
								(,   t
   __future__R    t   scitbx.math.gaussianR¥   t   scitbx.mathR   R   R   t   scitbx.examplesR   t   scitbx.array_familyR   t   libtbx.math_utilsR   t   libtbxR   R   RZ   R¦   R,   RH   R   Rg   R   t   objectR   R8   RB   RV   Rt   Ru   Rv   R€   RŠ   R	   R   Rš   R¡   R°   RÌ   RÙ   Râ   Rî   R÷   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/gaussian_fit.pyt   <module>   sD   (!:	)	#	"	7:*	A