ó
¨™xTc           @   sK  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 m Z d  d
 l m Z d  d l m Z d  d l Z
 d  d l m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z e j d ƒ e j d ƒ d  d l j Z d „  Z d „  Z  d „  Z! d d e" d d „ Z# d „  Z$ d „  Z% e" d d „ Z& d „  Z' d „  Z( d e) f d „  ƒ  YZ* d d d  d! „ Z+ d" „  Z, d# „  Z- d$ d% „ Z. d& „  Z/ d' „  Z0 d( „  Z1 d) „  Z2 d* „  Z3 d+ „  Z4 e5 d, k rGd  d l6 Z6 e4 d- e6 j7 d. ƒ n  d S(/   iÿÿÿÿ(   t   division(   t   flex(   t   crystal(   t   miller(   t   xray(   t   sgtbx(   t   uctbx(   t   scaling(   t   approx_equal(   t   absolute_scaling(   t   twin_analysesN(   t   random_transform(   t   StringIO(   t   format_cpu_timesi    c          C   s­  t  j j d ƒ }  t  j j d ƒ } x˜ t d d ƒ D]‡ } | d } t |  j | ƒ t j | ƒ d d ƒsq t ‚ | d k r4 t | j	 | ƒ t
 j | ƒ t j | ƒ d d ƒs» t ‚ q4 q4 Wd	 } xl t t g D]^ } t j ƒ  } |  j | d
 | ƒ} d | t | ƒ t j ƒ  | f GHt | d ƒ sÒ t ‚ qÒ Wd } xl t t g D]^ } t j ƒ  } | j | d
 | ƒ} d | t | ƒ t j ƒ  | f GHt | d ƒ sGt ‚ qGWd  S(   Ngü©ñÒMbP?iˆ  iüÿÿiè  g      Y@t   epsgñhãˆµøä>i    iÀáä t	   optimizeds&   very_quick_erf*%d optimized=%s: %.2f si@KL s!   quick_ei0*%d optimized=%s: %.2f s(   t   mmtbxR   t   very_quick_erft	   quick_ei0t   xrangeR   t   erft   smt   AssertionErrort   ei0t   matht   expt	   bessel_i0t   Falset   Truet   timet   loop_for_timingst   str(   t   qerft   qeiot   it   xt   number_of_iterationsR   t   t0t   zero(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt	   test_luts   s*    
-Bc          C   sÚ   t  j d ƒ }  t |  d ƒ s$ t ‚ t  j d ƒ }  t |  d ƒ sH t ‚ t j d d d d g ƒ } t  j | ƒ } t | d d ƒ s‹ t ‚ t | d d ƒ s¤ t ‚ t | d	 d ƒ s½ t ‚ t | d
 d ƒ sÖ t ‚ d  S(   NgGçüÇ�‡?gÖ‹¡œhWÖ¿gßŒš¯’��?g»ì×�î¼â¿g      ð?g        i    i   i   i   (   R   t
   gamma_protR   R   R   t   doublet   get_gamma_prot(   t   gamma_prot_testt	   d_star_sqt   gamma_array_test(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_gamma_prot5   s    c          C   s‰   t  j d d ƒ }  d 
d d d d d } t |  | d	 d ƒsH t ‚ t j d g ƒ } t  j | d ƒ } t | d
 |  ƒ s… t ‚ d  S(   Ng        g      ð?g       @g      @g      @g      ø?g      @g333333ó?R   i    g      >@g     €f@g      %@g     `R@g333333#@g333333S@(   R   t   sigma_prot_sqR   R   R   R)   t   get_sigma_prot_sq(   t   z_0t
   z_0_theoryR,   t	   z_0_array(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_sigma_protC   s    g        g-Cëâ6?c         C   s*  t  j d d ƒ } t  j d d ƒ } t  j d | ƒ } | d } t  j d d ƒ } t  j d d ƒ }	 t  j d d ƒ }
 t j d | d | d | d	 |	 d
 | d |
 d | d |  | d | ƒ 	} t j d | d | d | d	 |	 d
 | d |
 d | d |  | d | ƒ 	} | | d | } t j d | d | d | d	 |	 d
 | d |
 d | d |  d | | ƒ 	} t j d | d | d | d	 |	 d
 | d |
 d | d |  d | | ƒ 	} | | d | } t j d | d | d | d	 |	 d
 | d |
 d | d |  d | ƒ 	} t | | d ƒ st ‚ t | | d ƒ s&t ‚ d  S(   Ni
   g      Ð?g      ð?g      $@g        R,   t   f_obst   sigma_f_obst   epsilont   sigma_sqR(   t   centrict   p_scalet
   p_B_wilsong       Ài    i   (   R   R)   t   boolR   t   wilson_total_nllt   wilson_total_nll_gradientR   R   (   R:   R;   R9   t   hR,   R5   t   centric_arrayR6   R8   R7   t   gammat   stmp1t   stmp2t   s_grad_difft   btmp1t   btmp2t   b_grad_difft   grad(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   finite_diffs_isoQ   sp    

	
		c          C   s4  t  j d d ƒ }  t  j d d ƒ } t  j d d ƒ } t  j d d ƒ } t  j d d ƒ } t  j d d ƒ } t  j d t ƒ } t  j d t ƒ } d } d }	 t j d |  d d | d d | d d	 | d d
 | d d | d d | d d | d |	 d t ƒ 
}
 t j d |  d d | d d | d d	 | d d
 | d d | d d | d d d d |	 d t ƒ 
} t |
 d ƒ syt ‚ t |
 | ƒ sŽt ‚ t j d |  d d | d d | d d	 | d d
 | d d | d d | d d | d |	 ƒ 	} t j d |  d d | d d | d d	 | d d
 | d d | d d | d d d d |	 d t ƒ 
} t | d ƒ set ‚ t | | ƒ szt ‚ t j	 d |  d | d | d	 | d
 | d | d | d | d |	 ƒ 	} t j	 d |  d | d | d	 | d
 | d | d | d | d |	 ƒ 	} t | |
 d ƒ st ‚ t | | d ƒ s0t ‚ d  S(   Ni
   g      Ð?g      ð?g        R,   i    R5   R6   R7   R8   R(   R9   R:   R;   t	   transformg†V'g(ñ?g»|ëÃz£Ó?g      $@(
   R   R)   R<   R   R   R   t   wilson_single_nllR   R   R=   (   R,   R5   R6   R8   R7   RA   R9   t   acentricR:   R;   t   centric_single_transt   centric_single_no_transt   acentric_single_transt   acentric_single_no_transt   centric_totalt   acentric_total(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_likelihood_iso”   sž    	






		






		






		






					c        	   C   sü   t  d d d d d t d d ƒ t  d d d d	 d t d d ƒ t  d d
 d d	 d t d d ƒ t  d d d d d t d d ƒ t  d d d d d t d d ƒ t  d d d d	 d t d d ƒ t  d d
 d d	 d t d d ƒ t  d d d d d t d d ƒ d  S(   NR:   g      @R;   g      $@R9   R?   g�íµ ÷Æ°>g      Àg      $Àg     €V@g     €VÀ(   RI   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_gradients_isoó   s0    c          C   sU  t  j d d ƒ } t  j d d ƒ } t  j d | ƒ } | d } t  j d d ƒ } t  j d d ƒ }	 t  j d d ƒ }
 t j d ƒ } t  j d d f ƒ } t j d d ƒ } t j	 | | ƒ } t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | | ƒ
 } | d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } | d c | 8<| d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } | d c | 8<| d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } | d c | 8<| d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } | d c | 8<| d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } | d c | 8<| d c | 7<t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } t
 j | j ƒ  d | d | d |	 d | d |
 d | d |  | | ƒ
 } t
 j | j ƒ  | | |	 | |
 | |  | | ƒ
 } | | | } | | | } | | | } | | | } | | | } | | | } | | | } t | | d ƒ sàt | | d f ƒ ‚ t | | d ƒ s	t | | d f ƒ ‚ t | | d ƒ s"t ‚ t | | d ƒ s;t ‚ t | | d ƒ sTt ‚ t | | d ƒ smt ‚ t | | d ƒ s†t ‚ t | | d d ƒ s£t ‚ t | | d d ƒ sÀt ‚ t | | d d ƒ sÝt ‚ t | | d d ƒ sút ‚ t | | d d ƒ st ‚ t | | d d ƒ s4t ‚ t | | d d ƒ sQt ‚ d  S(   Ni   g      Ð?g      ð?g      $@g        s   20, 30, 40, 90.0, 90.0, 90.0i   i   i   i   i(   s   P 2 2 2i    i   i   i   g       @(   i   i   i   (   i   i   i   (   i   i   i(   (   R   R)   R<   R   t	   unit_cellt   miller_indexR   t   symmetryR   t   setR   t   wilson_single_nll_anisot   indicest    wilson_single_nll_aniso_gradientt   wilson_total_nll_aniso_gradientR   R   (    R:   t   u_starR9   R?   R,   R5   R@   R6   R8   R7   RA   RU   t   mit   xst   mst   nll_normt	   nll_scalet   nll_u11t   nll_u22t   nll_u33t   nll_u12t   nll_u13t   nll_u23t   gt   g2t   dst   du11t   du22t   du33t   du12t   du13t   du23(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   finite_diffs_aniso  s   
										))c          C   sG  d d d d d d g }  t  j d d ƒ } t  j d d ƒ } t  j d t ƒ } | d } t  j d d ƒ } t  j d d ƒ } t  j d d ƒ } t j d ƒ } t  j d d f ƒ }	 t j d d ƒ }
 t	 j
 |
 |	 ƒ } t j | j ƒ  d | d | d | d | d | d | d d | |  ƒ
 } t | d ƒ s7t ‚ t j | j ƒ  d | d | d | d | d | d | d d | |  ƒ
 } t  j d t ƒ } t j | j ƒ  d | d | d | d | d | d | d d | |  ƒ
 } t | d ƒ söt ‚ t  j d t ƒ } d d d d d d g }  t j | j ƒ  d | d | d | d | d | d | d d | |  ƒ
 } t | d ƒ s�t ‚ t  j d t ƒ } t j | j ƒ  d | d | d | d | d | d | d d | |  ƒ
 } t | d ƒ sôt ‚ t | d <t j | j ƒ  | | | | | | d | |  ƒ
 } t | d ƒ sCt ‚ d  S(   Ni    i   g      Ð?g      ð?g      $@g        s   20, 30, 40, 90.0, 90.0, 90.0i   i   i   i   i(   s   P 2 2 2gFë¨j‚(ñ?gpíDIH¤Ó?gê’qŒd�ø?g©iÓÌì?g¹3çz@(   i   i   i   (   i   i   i   (   i   i   i(   (   R   R)   R<   R   R   RU   RV   R   RW   R   RX   R   RY   RZ   R   R   R   t   wilson_total_nll_aniso(   R]   R,   R5   R@   R6   R8   R7   RA   RU   R^   R_   R`   t   nll_centric_anisot   nll_acentric_anisot   nll_total_aniso(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_likelihood_aniso®  s¤    
					
	c           C   sv  t  d d d d d d d g t d ƒ t  d d d d d d d g t d ƒ t  d d d d d d d g t d ƒ t  d d d d d d d g t d ƒ t  d	 d d d d d d g t d ƒ t  d	 d d d d d d g t d ƒ t  d
 d d d d d d g t d ƒ t  d
 d d d d d d g t d ƒ t  d
 d
 d d d d d g t d ƒ t  d
 d
 d d d d d g t d ƒ d  S(   Ng        gH¯¼šò×z>g       @g      ð?g      @g      @g      @g      @g      $Àg      $@g      4@g      >@g      D@g      I@g      N@(   Rr   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_grads_aniso  s    %%%%%%%%%t   scaling_testerc           B   sq   e  Z d  „  Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z	 d d	 „ Z
 RS(
   c      	   C   s"  t  j d d ƒ |  _ t  j d d ƒ |  _ t  j d d ƒ |  _ t  j d d ƒ |  _ t j d ƒ |  _ t  j d d f ƒ |  _	 t
 j d d ƒ |  _ t j |  j |  j	 ƒ |  _ d d d d d d	 g |  _ d |  _ t j |  j	 |  j |  j |  j |  j |  j |  j |  j ƒ |  _ t j |  j	 |  j |  j |  j |  j |  j |  j |  j ƒ |  _ t j |  j	 |  j |  j |  j |  j |  j |  j |  j ƒ |  _ t j |  j	 |  j |  j |  j |  j |  j |  j |  j ƒ |  _ |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j  ƒ  |  j! ƒ  |  j" ƒ  d  S(   Ni   g      ð?g      @gš™™™™™¹?i   s   20, 30, 40, 90.0, 90.0, 90.0i   i   i   i   i   i   i(   s   P 2 2 2i   gš™™™™™Ù?(   i   i   i   (   i   i   i   (   i   i   i(   (#   R   R)   t	   data_obs1t	   data_obs2t
   sigma_obs1t
   sigma_obs2R   RU   RV   R^   R   RW   R_   R   RX   R`   t   uR:   R   t   least_squares_on_i_wtt   ls_i_wtt   least_squares_on_it   ls_it   least_squares_on_f_wtt   ls_f_wtt   least_squares_on_ft   ls_ft   tst_ls_f_wtt   tst_ls_i_wtt   tst_ls_ft   tst_ls_it   tst_hes_ls_i_wtt   tst_hes_ls_f_wtt   tst_hes_ls_it   tst_hes_ls_f(   t   self(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   __init__  sl    	






gH¯¼šò×z>c   	      C   sT  |  j  j ƒ  } t j d | ƒ } t j d d ƒ } |  j  j |  j | ƒ |  j  j ƒ  } | | d <|  j  j |  j ƒ x‘ t d ƒ D]ƒ } t t j |  j ƒ j	 ƒ  ƒ } | | c | 7<|  j  j
 | ƒ |  j  j ƒ  } | | | d <|  j  j
 |  j ƒ |  j  j ƒ  } qƒ Wt d t j t j | ƒ ƒ ƒ } t | | | | | | ƒ sPt ‚ d  S(   Ni   i    i   i   (   R€   t   get_functionR   R)   t   set_p_scaleR:   t   ranget   listR~   t	   deep_copyt
   set_u_rwgkt   get_gradientt   maxt   absR   R   (	   R�   R?   t   tmpt   beforet   aftert   iit   u_tmpt   gradst   f(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyRˆ   T  s"    
!c   	      C   sT  |  j  j ƒ  } t j d | ƒ } t j d d ƒ } |  j  j |  j | ƒ |  j  j ƒ  } | | d <|  j  j |  j ƒ x‚ t d ƒ D]t } t t j |  j ƒ j	 ƒ  ƒ } | | c | 7<|  j  j
 | ƒ |  j  j ƒ  } | | | d <|  j  j
 |  j ƒ qƒ W|  j  j ƒ  } t d t j t j | ƒ ƒ ƒ } t | | | | | | ƒ sPt ‚ d  S(   Ni   i    i   i   (   R„   R‘   R   R)   R’   R:   R“   R”   R~   R•   R–   R—   R˜   R™   R   R   (	   R�   R?   Rš   R›   Rœ   R�   Rž   RŸ   R    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyR‡   i  s"    
!c   	      C   sT  |  j  j ƒ  } t j d | ƒ } t j d d ƒ } |  j  j |  j | ƒ |  j  j ƒ  } | | d <|  j  j |  j ƒ x‚ t d ƒ D]t } t t j |  j ƒ j	 ƒ  ƒ } | | c | 7<|  j  j
 | ƒ |  j  j ƒ  } | | | d <|  j  j
 |  j ƒ qƒ W|  j  j ƒ  } t d t j t j | ƒ ƒ ƒ } t | | | | | | ƒ sPt ‚ d  S(   Ni   i    i   i   (   R†   R‘   R   R)   R’   R:   R“   R”   R~   R•   R–   R—   R˜   R™   R   R   (	   R�   R?   Rš   R›   Rœ   R�   Rž   RŸ   R    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyR‰   ~  s"    
!c   	      C   sT  |  j  j ƒ  } t j d | ƒ } t j d d ƒ } |  j  j |  j | ƒ |  j  j ƒ  } | | d <|  j  j |  j ƒ x‚ t d ƒ D]t } t t j |  j ƒ j	 ƒ  ƒ } | | c | 7<|  j  j
 | ƒ |  j  j ƒ  } | | | d <|  j  j
 |  j ƒ qƒ W|  j  j ƒ  } t d t j t j | ƒ ƒ ƒ } t | | | | | | ƒ sPt ‚ d  S(   Ni   i    i   i   (   R‚   R‘   R   R)   R’   R:   R“   R”   R~   R•   R–   R—   R˜   R™   R   R   (	   R�   R?   Rš   R›   Rœ   R�   Rž   RŸ   R    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyRŠ   “  s"    
!c         C   s°  |  j  j ƒ  } | j ƒ  } |  j  j ƒ  } |  j  j |  j | ƒ |  j  j ƒ  } t | | | ƒ } g  } | j | ƒ |  j  j |  j ƒ x– t d ƒ D]ˆ } t t	 j
 |  j ƒ j ƒ  ƒ } | | c | 7<|  j  j | ƒ |  j  j ƒ  } | | | } | j t | ƒ ƒ |  j  j |  j ƒ q˜ Wt d t	 j t	 j | ƒ ƒ ƒ } d }	 x^ t d ƒ D]P } xG t d ƒ D]9 }
 t | | |
 | | |	 | ƒ sšt ‚ |	 d 7}	 qkWqXWd  S(   Ni   i   i    i   (   R€   t   hessian_as_packed_ut   matrix_packed_u_as_symmetricR—   R’   R:   R”   t   appendR“   R   R)   R~   R•   R–   R˜   R™   R   R   (   R�   R?   t   hes_analRŸ   Rš   t   tmp_hessR�   Rž   R    t   countt   jj(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyR‹   ©  s.    !)c         C   s°  |  j  j ƒ  } | j ƒ  } |  j  j ƒ  } |  j  j |  j | ƒ |  j  j ƒ  } t | | | ƒ } g  } | j | ƒ |  j  j |  j ƒ x– t d ƒ D]ˆ } t t	 j
 |  j ƒ j ƒ  ƒ } | | c | 7<|  j  j | ƒ |  j  j ƒ  } | | | } | j t | ƒ ƒ |  j  j |  j ƒ q˜ Wt d t	 j t	 j | ƒ ƒ ƒ } d }	 x^ t d ƒ D]P } xG t d ƒ D]9 }
 t | | |
 | | |	 | ƒ sšt ‚ |	 d 7}	 qkWqXWd  S(   Ni   i   i    i   (   R„   R¡   R¢   R—   R’   R:   R”   R£   R“   R   R)   R~   R•   R–   R˜   R™   R   R   (   R�   R?   R¤   RŸ   Rš   R¥   R�   Rž   R    R¦   R§   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyRŒ   Ç  s.    !)c   
      C   s‘  |  j  j ƒ  } | j ƒ  } |  j  j ƒ  } |  j  j |  j | ƒ |  j  j ƒ  } t | | | ƒ } g  } | j | ƒ |  j  j |  j ƒ x– t d ƒ D]ˆ } t t	 j
 |  j ƒ j ƒ  ƒ } | | c | 7<|  j  j | ƒ |  j  j ƒ  } | | | } | j t | ƒ ƒ |  j  j |  j ƒ q˜ Wd } x` t d ƒ D]R } xI t d ƒ D]; }	 t | | |	 | | d d d ƒs{t ‚ | d 7} qJWq7Wd  S(   Ni   i    i   i   R   gñhãˆµøä>(   R‚   R¡   R¢   R—   R’   R:   R”   R£   R“   R   R)   R~   R•   R–   R   R   (
   R�   R?   R¤   RŸ   Rš   R¥   R�   Rž   R¦   R§   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyR�   å  s,    +c   
      C   s‘  |  j  j ƒ  } | j ƒ  } |  j  j ƒ  } |  j  j |  j | ƒ |  j  j ƒ  } t | | | ƒ } g  } | j | ƒ |  j  j |  j ƒ x– t d ƒ D]ˆ } t t	 j
 |  j ƒ j ƒ  ƒ } | | c | 7<|  j  j | ƒ |  j  j ƒ  } | | | } | j t | ƒ ƒ |  j  j |  j ƒ q˜ Wd } x` t d ƒ D]R } xI t d ƒ D]; }	 t | | |	 | | d d d ƒs{t ‚ | d 7} qJWq7Wd  S(   Ni   i    i   i   R   gñhãˆµøä>(   R†   R¡   R¢   R—   R’   R:   R”   R£   R“   R   R)   R~   R•   R–   R   R   (
   R�   R?   R¤   RŸ   Rš   R¥   R�   Rž   R¦   R§   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyRŽ     s,    +(   t   __name__t
   __module__R�   Rˆ   R‡   R‰   RŠ   R‹   RŒ   R�   RŽ   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyRy     s   	=i#   g     H‚@g      @c         C   s±  t  j d ƒ } t j | d ƒ } t j d | d t d | ƒ } | j ƒ  j ƒ  } d	 | | } i d
 | d	 d 6d | d	 d 6d | d	 d 6d | d	 d 6} t	 j
 d | d d	 d d ƒ } | j | ƒ | j }	 | j }
 |
 d	 |	 } | t j |  | d ƒ } t j | j ƒ  ƒ } | | t j d ƒ } | d d } t j d | j ƒ  ƒ } | | } | | } t j | d | d | ƒ} | j t j j ƒ  ƒ } | j ƒ  } | S(   Ng     @T@g     €N@g     €V@g      ^@s    P 3 t   crystal_symmetryt   anomalous_flagt   d_ming      ð?g       @t   Hg      @t   Cg      ø?t   Ng333333ó?t   Ot   asu_contentst   fraction_proteint   fraction_nucleicg        g       @i   g      Y@t   datat   sigmas(   g     @T@g     @T@g     €N@g     €V@g     €V@g      ^@(   R   RU   R   RW   R   t	   build_setR   t
   d_spacingsR´   R	   t   scattering_informationt	   scat_datat	   gamma_tott   sigma_tot_sqR   R   R   t   wilson_intensity_variatet   sizeR   t   normal_variatet   arrayt   set_observation_typeR   t   observation_typest	   intensityt	   f_sq_as_f(   t   B_addt
   n_residuesR¬   RU   t   xtalt
   miller_setR,   t   asut	   scat_infoR(   t
   sigma_prott   protein_totalt   normalised_random_intensitiest   random_intensitiest   std_devt   noiset   miller_array(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   random_data"  sD    						

	c         C   sÄ   t  |  d d ƒ} t j | d d ƒ} t |  | j d d ƒsE t ‚ t j | d d ƒ} t |  | j d d d ƒs| t ‚ t |  | j d d d ƒsž t ‚ t |  | j d d d ƒsÀ t ‚ d  S(   NRÅ   g      Y@R   i   i    i   i   (   RÑ   R	   t   ml_iso_absolute_scalingR   t   b_wilsonR   t   ml_aniso_absolute_scalingt   b_cart(   RÄ   RÐ   t   scale_object_isot   scale_object_aniso(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_scaling_on_random_dataR  s    		""c          C   s   t  d d d ƒ}  |  j ƒ  j ƒ  } d | | } i d d 6d d	 6d d 6d d 6} t j d | d d d d ƒ } | j | ƒ t j d d ƒ } | j | ƒ t j | d ƒ } xi t | j	 ƒ  ƒ D]U } t
 | j | | j | d d ƒsò t ‚ t
 | j | | | d d ƒsÃ t ‚ qÃ Wd  S(   Ng     €A@R¬   g      @g      ð?g       @g     H‚@R­   g      @R®   g      ø?R¯   g333333ó?R°   R±   R²   R³   g        RÅ   g     `h@g      @R   gü©ñÒMbP?g      à?g     H²@g     Ú¦@g     l‹@g     ð…@g     H‚@(   RÑ   R·   R´   R	   R¸   R¹   R   R0   R“   R½   R   R»   R   (   RÐ   R,   RÈ   RÉ   t
   scat_info2RÊ   R�   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_scattering_infoe  s(    "				
gš™™™™™É?c      	   C   sÃ  t  ƒ  } t d ƒ j ƒ  } | j ƒ  } t j |  ƒ } | j | j | ƒ j ƒ  ƒ \ } } | j d d | | j	 ƒ  | | j	 ƒ  d t
 j t
 j d | | j ƒ  d ƒ t
 j | | j ƒ  d ƒ ƒ ƒ } | j | j ƒ  ƒ t j | d | d d ƒ} | j j }	 t | j j |	 | d	 d
 ƒs*t ‚ t | j |	 j j | d	 d
 ƒsRt ‚ | d k rËt | j j d d	 d
 ƒst ‚ t | j j d d	 d
 ƒs t ‚ t | j |	 j j d d	 d
 ƒsËt ‚ n  | d k rDt | j j d d	 d
 ƒsøt ‚ t | j j d d	 d
 ƒst ‚ t | j |	 j j d d	 d
 ƒsDt ‚ n  | d
 k rk| j j d k skt ‚ n  | j j  d k sƒt ‚ t j! | d | d d ƒ}
 | d
 k r¿|
 t" k s¿t ‚ n  d  S(   Ni#   R´   g      ð?Rµ   g       @t   outt   verboseiœÿÿÿR   gš™™™™™¹?i    g      à?g      Ø?g      ø?g        g      @g{®Gáz„?(#   R   RÑ   t
   map_to_asut	   f_as_f_sqR   t   change_of_basis_opt   common_setst   change_basist   customized_copyR´   R   t   sqrtt   powRµ   RÀ   t   observation_typet   t_aR
   t   twin_summaryt   most_worrysome_twin_lawR   t   britton_alphaR   t   twin_law_dependent_analysest   ml_murray_rustt   estimated_alphat   l_testt   mean_lt   i_ratiot   h_testt   mean_ht   maha_lt   patterson_p_valuet   twin_analyses_briefR   (   t   twin_operatort   twin_fractiont
   out_stringRÐ   t   cb_opt   miller_array_modt   miller_array_twint   twinned_millert   twin_anal_objectt   indext   answer(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   twin_the_data_and_analyse€  sV    		#	!!c   
   
   C   s½  t  d ƒ j ƒ  } | j ƒ  } x˜t d d d d d d g d d d d d d g d	 d
 d d d d g ƒ D]N\ } } } t j |  ƒ } | j | j | ƒ j ƒ  ƒ \ } } | j d d | | j	 ƒ  | | j	 ƒ  d t
 j t
 j d | | j ƒ  d ƒ t
 j | | j ƒ  d ƒ ƒ ƒ } | j | j ƒ  ƒ t j | j ƒ  | j	 ƒ  | j ƒ  | j ƒ  | j ƒ  j ƒ  j ƒ  d d !ƒ }	 t |	 j ƒ  | d ƒ s—t ‚ t |	 j ƒ  | d ƒ sg t ‚ qg Wd  S(   Ni#   i    gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g        gZd;ßOÕ?gÝ$�•CË?g¸…ëQ¸¾?gîëÀ9#J«?gÌ]KÈ=‹?R´   g      ð?Rµ   g       @i	   g{®Gáz´?(   RÑ   RÝ   RÞ   t   zipR   Rß   Rà   Rá   Râ   R´   R   Rã   Rä   Rµ   RÀ   Rå   R   t   twin_rRZ   t   space_groupR«   t   ct   rt	   as_doubleR   t   r_abs_valueR   t
   r_sq_value(
   Rõ   RÐ   Rö   t   expected_r_abst   expected_r_sqRø   Rù   Rú   Rû   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_twin_r_valueÁ  s.    (	#			"c           C   s   t  j d ƒ d  S(   NgL‚¢]?é(   R   t   log(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_constantà  s    c          C   s}   t  d d d ƒ}  t j |  d t ƒ} | j j ƒ  | j j ƒ  j ƒ  j ƒ  } t j	 | ƒ } t
 d | d d ƒsy t ‚ d  S(   Ng     €A@R¬   g      @t   auto_kernelg      ð?R   gš™™™™™©?(   RÑ   R	   t   kernel_normalisationR   t   normalised_millerR´   t   epsilonsR  R   t   meanR   R   (   RÐ   t
   normalizert   z_values(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_kernel_based_normalisationæ  s    c          C   sí   t  d d d ƒ}  t j |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d d ƒ } x• t d d ƒ D]„ } x{ t d d ƒ D]j } | j | d	 | d	 d
 ƒ } | j	 | d	 d | d	 d d d d
 d ƒ } t
 | | d d ƒsw t ‚ qw Wqa Wd  S(   Ng     €A@R¬   g      @i   i    i   i   i   g      @g      Ð?g‚vIhÂ%<=iûÿÿÿi   R   g{®Gáz„?(	   i   i    i    i    i   i    i    i    i   (   RÑ   R   Rë   R´   RZ   R  R«   R   t   p_rawt   num_intR   R   (   RÐ   t   ml_mr_objectR�   R§   t   p1t   p2(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_ml_murray_rustï  s    						,c           C   sÕ   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t d ƒ t d ƒ t d ƒ t d ƒ t d ƒ t	 ƒ  t
 d d ƒ t
 d d ƒ t
 d d	 ƒ t
 d d
 ƒ t
 d d ƒ t ƒ  t ƒ  t d ƒ t ƒ  d  S(   Ni
   i   i(   iF   iP   s	   h+k,-k,-lg        gš™™™™™¹?gš™™™™™É?g333333Ó?g      à?(   R'   R  RS   RT   R.   R4   Rw   Rx   RØ   Ry   Rÿ   RÚ   R  R
  R  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   test_all   s.    





c         C   s+   t  |  ƒ d k s t ‚ t ƒ  t ƒ  GHd  S(   Ni    (   t   lenR   R  R   (   t   args(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   run  s    t   __main__R  i   (8   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   R   R   R   R   R   R   t   libtbx.test_utilsR   t   mmtbx.scalingR	   R
   Ræ   t   scitbx.python_utilsR   t   randomR   R   t   libtbx.str_utilsR   t   libtbx.utilsR   t   seedt   set_random_seedt   scitbx.mathR   R'   R.   R4   R   RI   RS   RT   Rr   Rw   Rx   t   objectRy   RÑ   RØ   RÚ   Rÿ   R
  R  R  R  R  R  R¨   t   syst   argv(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_scaling.pyt   <module>   s^   			C	_	"˜	Y	ÿ .		A							