ó
3™xTc        ?   @   sÄ  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
 d  d l m Z d  d l Z d  d l Z e j 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( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE g> ƒ Z d d dF „ Z d dG „ Z dH „  Z dI „  Z dJ e f dK „  ƒ  YZ d d dL dM „ Z d d d dL dN „ Z dO „  Z d S(P   iÿÿÿÿ(   t   division(   t   xray_scattering(   t   flexN(   t   find_max_x_multi(   t   show_minimize_multi_histogram(   t   adopt_init_argsg        g{®Gáz„?g{®Gáz”?g¸…ëQ¸ž?g{®Gáz¤?gš™™™™™©?g¸…ëQ¸®?gìQ¸…ë±?g{®Gáz´?g
×£p=
·?gš™™™™™¹?g)\�Âõ(¼?g¸…ëQ¸¾?g¤p=
×£À?gìQ¸…ëÁ?g333333Ã?g{®GázÄ?gÃõ(\�ÂÅ?g
×£p=
Ç?gR¸…ëQÈ?gš™™™™™É?g)\�Âõ(Ì?g¸…ëQ¸Î?g      Ð?g¤p=
×£Ð?gìQ¸…ëÑ?g333333Ó?g{®GázÔ?gÃõ(\�ÂÕ?gffffffÖ?g
×£p=
×?gR¸…ëQØ?gš™™™™™Ù?gáz®GáÚ?g)\�Âõ(Ü?gÍÌÌÌÌÌÜ?gq=
×£pÝ?g¸…ëQ¸Þ?g      à?gš™™™™™á?g333333ã?gÍÌÌÌÌÌä?gffffffæ?gš™™™™™é?gÍÌÌÌÌÌì?g      ð?gš™™™™™ñ?g333333ó?gÍÌÌÌÌÌô?gffffffö?g      ø?gš™™™™™ù?g333333û?gÍÌÌÌÌÌü?gffffffþ?g       @g      @g      @g      @g      @g      @g      @c   	      C   s£   t  | j ƒ  ƒ } | j ƒ  d k r1 | d 7} n  | d 7} | j ƒ  d } d d | } d |  | | | | | f G| d  k	 rž | | k rž | | k rž d Gn  Hd  S(	   Ni    s   +ct   ,iÿÿÿÿi   i   s3   %24s: %s n_terms=%-4s stol=%.2f, d_min=%.2f, e=%.4ft   Better(   t   strt   n_termst   ct   table_xt   None(	   t   sourcet   labelt   gaussian_fitt   et   e_othert   n_terms_otherR	   t   stolt   d_min(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   show_fit_summary   s     
$c   
      C   s  xxt  j t  j t  j t  j t  j g D]R} | t  j k ry y" t  j |  t ƒ j ƒ  } d } Wqø t k
 ru d  } qø Xn | t  j k rÇ y" t  j |  t ƒ j ƒ  } d } Wqø t k
 rÃ d  } qø Xn1 | j
 j |  ƒ rò | j
 |  } | j } n d  } | d  k	 r% t j j j | j ƒ  |  | j ƒ  |  | j ƒ  |  | ƒ } t j | j ƒ  ƒ }	 t | |  | |	 | | j ƒ  ƒ q% q% Wd  S(   Nt   WK1995t   IT1992(   R   t   wk1995t   it1992t   two_gaussian_agarwal_isaacst   two_gaussian_agarwal_1978t   one_gaussian_agarwal_1978t   Truet   fetcht	   ExceptionR   t   tablet   has_keyt   source_shortt   scitbxt   matht   gaussiant   fitR   t   table_yt   table_sigmasR   t   maxt   significant_relative_errorsR   R	   (
   R   R	   t   null_fitt   n_pointsR   t   libt   lib_gaussiant
   lib_sourceR   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   show_literature_fits&   s<    	

	c         C   s>   x- t  | | ƒ D] \ } } |  | I| IJq W|  d IJd  S(   Nt   &(   t   zip(   t   ft   xst   yst   xt   y(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt
   write_plotG   s    c   	   	   C   s  | j  d d ƒ } t j j |  | d ƒ } t | d ƒ } t | | j ƒ  | j ƒ  ƒ t | | j ƒ  | j ƒ  ƒ | j	 ƒ  t j j |  | d ƒ } t | d ƒ } xb t
 | j ƒ  | j ƒ  | j ƒ  | j ƒ  ƒ D]3 \ } } } } | d | | | | | | f IJqÒ W| j	 ƒ  | S(   Nt   't   primes   .xyt   ws   .cmps   %4.2f %7.4f %7.4f %8.5f %7.4f(   t   replacet   ost   patht   joint   openR8   R   R'   t   fitted_valuest   closeR2   R*   (	   t	   plots_dirR   R   t	   file_nameR3   R6   R7   t   aR   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   write_plotsL   s    
		%
t   fit_parametersc        
   B   sD   e  Z d  d d g e d  d d d g d d d  d d „	 Z d	 „  Z RS(
   i   i   i   i    i   g�íµ ÷Æ°>g{®Gáz„?gü©ñÒMbP?c
   
      C   s   t  |  t ƒ  ƒ d  S(   N(   R   t   locals(
   t   selft   max_n_termst   target_powerst   minimize_using_sigmast   n_repeats_minimizationt   shift_sqrt_b_mod_nt   b_mint   max_max_errort   n_start_fractionst   negligible_max_error(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   __init___   s    	c         C   sI   t  d d d d g d |  j d d d d g d |  j d	 d
 d d d d
 ƒ 	S(   NRJ   i   RK   RL   RM   i   RN   RO   RP   g{®Gáz”?RQ   RR   (   RG   RL   RO   (   RI   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   quickj   s    				(   t   __name__t
   __module__t   FalseRS   RT   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyRG   ]   s   	i    c         C   s8  | d  k r t ƒ  } n  | j ƒ  d } g  } d } t j g  g  ƒ } xë| j ƒ  | j k  r3| | j ƒ  j ƒ  k r� d |  | j ƒ  f GHHPn  | j ƒ  d }	 t	 d | d | d | j
 d | j d | j d	 | j d
 | j d | j d | j ƒ 	}
 |
 d  k rd |  |	 f GHHPn  | |
 j j ƒ  j ƒ  k r7d GHn  |
 j j ƒ  j ƒ  } t d |  |
 j |
 j ƒ t d |  d |	 d | d |
 j j ƒ  j ƒ  d |
 j ƒ |
 j j ƒ  |
 j ƒ  |
 j } Ht ƒ  t j j ƒ  | rþt d | d |  d |	 d |
 j ƒ n  |
 j } | j t j d | j ƒ  d d | ƒ ƒ qI W| S(   Ni    s+   %s: Full fit with %d terms. Search stopped.i   R+   t   existing_gaussianRK   RL   RM   RN   RO   RP   RQ   s   Warning: No fit: %s n_terms=%ds4   Warning: previous fit included more sampling points.s   Best fitR   R	   R,   R   RC   s   _%dR   R   iÿÿÿÿt   gaussian_sum(   R   RG   R'   R   R%   R	   RJ   R   t   sizeR   RK   RL   RM   RN   RO   RP   RQ   t   final_gaussian_fitR   t	   max_errorR0   t   showt   show_minimization_parametersR   t   syst   stdoutt   flushRF   t   appendt   fitted_gaussian(   R   R+   t   paramsRC   t   verboset   f0t   resultst   previous_n_pointsRX   R	   t   best_mint   g(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   incremental_fitsv   sj     						

		c   
      C   s¨  | d  k r t ƒ  } n  g  } t j j j | j ƒ  | j ƒ  | j ƒ  | ƒ } xS| j	 ƒ  d k r£t j j
 j d | d | ƒ } | d  k rª d |  | j	 ƒ  d f GHPn  t d |  | j | j ƒ t d |  d | j j	 ƒ  d | d	 | j j ƒ  j ƒ  d
 | j ƒ | j j ƒ  | j ƒ  | j } Ht ƒ  t j j ƒ  | rnt d | d |  d | j j	 ƒ  d | j ƒ n  | j }	 | j t j d |	 j ƒ  d d |	 ƒ ƒ qQ W| S(   Ni   RX   Rd   s4   %s n_terms=%d: No successful minimization. Aborting.s   Best fitR   R	   R+   R,   R   RC   s   _%dR   R   iÿÿÿÿRY   (   R   RG   R#   R$   R%   R&   R   R'   R(   R	   R   t   decremental_fitR   R[   R\   R0   RZ   R]   R^   R   R_   R`   Ra   RF   Rb   R   Rc   (
   R   R+   t   full_fitRd   RC   Re   Rg   t   last_fitt   good_minRj   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   decremental_fits¬   sN     					

		c         C   sô  t  j j j d |  d | d | d | ƒ } g  } | } t } x°x$| j j ƒ  d k r` | } nf t  j j j d | j d | ƒ }	 |	 d  k	 s“ t	 ‚ d G|	 j
 ƒ  |	 j } | j | j k rÆ | rÆ Pn  t d | d | d | j d	 | j d
 | j d | j d | j d | j d | j ƒ 	}
 |
 d  k	 s,t	 ‚ d G|
 j
 ƒ  | | k rJPn  |
 j | ƒ s]Pn  |
 } qB d G| j
 ƒ  | j t j d | j j ƒ  d d | j d | j ƒ ƒ | | k r¼Pn  | j j ƒ  j ƒ  |	 j j ƒ  j ƒ  k } |	 } q? H| S(   NR   R+   t   null_fit_moreRd   i   RX   s   Decremental:RK   RL   RM   RN   RO   RP   RQ   s   Incremental:s    Settled on:R   iÿÿÿÿRY   R\   (   R#   R$   R   t   fit_with_golay_startsR   R[   R	   Rl   R   t   AssertionErrort   show_summaryR\   RR   R   RK   RL   RM   RN   RO   RP   RQ   t   is_better_thanRb   R   Rc   R   RZ   (   R   R+   Rq   Rd   t   six_term_best_minRg   t   n_term_best_mint   have_all_points_in_previousRX   t   decr_best_mint   incr_best_min(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   zig_zag_fitsÕ   sj    				
							
	
		(   t
   __future__R    t   cctbx.eltbxR   t   cctbx.array_familyR   t   scitbx.math.gaussianR#   t   scitbx.math.gaussian_fitR   R   t   libtbxR   R_   R=   t   doublet   international_tables_stolsR   R   R0   R8   RF   t   objectRG   Rk   Rp   R{   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/gaussian_fit.pyt   <module>   s8   !		6(