ó
È™xTc           @   sE  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 m Z d  d l Z d  d l Z e j d ƒ e j d ƒ d „  Z d „  Z d „  Z d „  Z d „  Z e d k rAe ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   crystal(   t   sgtbx(   t   xray(   t   flex(   t   miller(   t   max_lik(   t   maxlik(   t   approx_equal(   t   format_cpu_timesN(   t   random_structure(   t   wk1995i    c          C   s½	  t  j  ƒ  }  d } d } t j d dK d d	 ƒ } t j d
 | ƒ } x® t d ƒ D]  } t j d d | t t j	 | ƒ ƒ d d | t t j
 | ƒ ƒ d d | d f d t t j
 | ƒ ƒ d d t j d d d d d ƒ } | j | ƒ qO Wt t | j ƒ  j ƒ  d | ƒ ƒ } t j d | ƒ } | j | j ƒ  |  ƒ | j d | d t ƒ j ƒ  }	 | j d | d t ƒ j ƒ  }
 t |	 ƒ } t |
 ƒ }	 d t j | j ƒ  j ƒ  ƒ } t t j |	 j ƒ  ƒ d ƒ sÙt ‚ t t j |	 j ƒ  ƒ d ƒ sýt ‚ t t j |	 j ƒ  ƒ d ƒ s!t ‚ t t j | j ƒ  ƒ d ƒ sEt ‚ t t j | j ƒ  ƒ d ƒ sit ‚ t t j | j ƒ  ƒ d ƒ s�t ‚ | j ƒ  |	 j ƒ  k s«t ‚ t j |
 j ƒ  j ƒ  t ƒ } d  } xS t |
 j ƒ  j ƒ  ƒ D]9 } | d } | d! k rt | | <qèd  } t  | | <qèW| j! t  ƒ d" k s@t ‚ | j! t ƒ d# k s[t ‚ | j ƒ  d$ k sst ‚ t" j# d% | d& |	 d' d d( | d) t ƒ j$ ƒ  \ } } | j ƒ  j ƒ  | j ƒ  j ƒ  k sÓt ‚ | j ƒ  j ƒ  | j ƒ  k s÷t ‚ t t j | j ƒ  ƒ d* ƒ st ‚ t t j | j ƒ  ƒ d* ƒ s?t ‚ t t j | j ƒ  ƒ d+ ƒ sct ‚ t t j | j ƒ  ƒ d+ ƒ s‡t ‚ t" j# d% | d& |	 d' d, d( | d) t ƒ j$ ƒ  \ } } | j ƒ  j ƒ  | j ƒ  j ƒ  k sçt ‚ | j ƒ  j ƒ  | j ƒ  k st ‚ t t j | j ƒ  ƒ d- ƒ s/t ‚ t t j | j ƒ  ƒ d. ƒ sSt ‚ t t j | j ƒ  ƒ d/ ƒ swt ‚ t t j | j ƒ  ƒ d0 ƒ s›t ‚ t" j% d1 | d2 d3 d4 d5 d6 d7 d8 d9 d: d ƒ j$ ƒ  \ } } t& j' d% | j ƒ  d; t j |	 j ƒ  ƒ d< | j ƒ  d= | j ƒ  d> |	 j( ƒ  d? |	 j ƒ  ƒ j) ƒ  } t j | ƒ d k sUt ‚ t j | ƒ d9 k spt ‚ t j | j ƒ  ƒ t j | j ƒ  ƒ k o¥d k n s°t ‚ t t j | j ƒ  ƒ d@ ƒ sÔt ‚ t t j | j ƒ  ƒ dA ƒ søt ‚ t j dL dE ƒ } t j* dM dN f ƒ } t+ j, | | ƒ } t j- dO ƒ } t j- dP ƒ } t+ j, | | ƒ } t+ j. | | ƒ } t+ j. | | ƒ } t j- d d9 ƒ } t j- d dI ƒ } t& j' d% | j ƒ  d; | j ƒ  d< | d= | d> | j( ƒ  d? | j ƒ  ƒ j) ƒ  } t | d9 d9 g ƒ st ‚ t j- d d ƒ } t j- d dI ƒ } t& j' d% | j ƒ  d; | j ƒ  d< | d= | d> | j( ƒ  d? | j ƒ  ƒ j) ƒ  } t | d9 d9 g ƒ sŸt ‚ t j- d d9 ƒ } t j- d dJ ƒ } t& j' d% | j ƒ  d; | j ƒ  d< | d= | d> | j( ƒ  d? | j ƒ  ƒ j) ƒ  } t | d9 d9 g ƒ s,	t ‚ t j- d d ƒ } t j- d dJ ƒ } t& j' d% | j ƒ  d; | j ƒ  d< | d= | d> | j( ƒ  d? | j ƒ  ƒ j) ƒ  } t | d d g ƒ s¹	t ‚ d  S(Q   Ngš™™™™™¹?g      ø?t	   unit_cellg×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   t   space_group_symbols
   P 21 21 21t   crystal_symmetryiè  t   siteg      ð?g     @�@t   ug      Y@g       @i   t	   occupancyt   scattering_typet   Ci   t   special_position_settingst   d_mint   anomalous_flaggDóÆ2šº@g¡AEx:”?g©+ÜH²)S@gûŒÑ[•2»@gv82ÞFR?g˜ì�Åó R@i    i
   iú   iÒ  iÌ	  t   f_obst   f_calct   free_reflections_per_bint   flagst   interpolationg¦Ý¦¼@í?gã Áü”‰@i2   g¦ÖŽV–!í?g«ö¸çþ"ñ?gÙ£1GÈ¼5@gAAÎ Ï~°@t   ft   n_atoms_absentid   t   n_atoms_includedi„  t   bf_atoms_absentg      9@t   final_errorg        t   absent_atom_typet   f_modelt   alphat   betat   space_groupt   miller_indicesg‰S9/FÛ@g(X”¿Ê@i   i   i   s   P 2 2 2iþÿÿÿiüÿÿÿg       @g    eÍÍAg•Ö&è.>(   g×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   iZ   iZ   (   i   i   i   (   i   iþÿÿÿi   (   i    i    iüÿÿÿ(   g      ð?g       @(   g      ð?g       @(/   t   timeR   t   symmetryR   t	   structuret   xranget	   scatterert   abst   matht   sint   cost   pit   add_scatterert   intt   roundt
   scattererst   sizet   add_scattererst   structure_factorst   FalseR   R   t   pow2t
   d_spacingst   dataR   t   maxt   AssertionErrort   mint   meant   boolt   indicest   Truet   countR   t   alpha_beta_est_managert
   alpha_betat   alpha_beta_calcR   t   fom_and_phase_errorR%   t   fomt   miller_indexR   t   sett   doublet   array(   t   tstartt   fraction_missingR   R(   R)   t   kR+   t   n_keept   partial_structureR   t   f_calc_partialR   t	   d_star_sqR   t   iR#   R$   RH   t   xst   mit   mst   fct   fot   msot   mact   maot   alpt   bet(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   test_1   s    		(	&$$$$$$
	*$$$$$*$$$$$	@$$c          C   sf  d }  d } d } d  } d } t  j d ƒ } t j d | d d	 g |  d
 | d t ƒ } | j d d ƒ | j d | d t d d ƒ j ƒ  } t | ƒ } xÇ
| D]¿
}	 t	 t
 | j ƒ  j ƒ  d |	 ƒ ƒ }
 t j d | ƒ } | j | j ƒ  |
  ƒ | j d | d t d d ƒ j ƒ  } t | ƒ } t j | j ƒ  j ƒ  t ƒ } d } xS t | j ƒ  j ƒ  ƒ D]9 } | d } | d k rŠt | | <qad } t | | <qaWt j d | d | d | j ƒ  j ƒ  d | d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k sþt ‚ | j ƒ  | j ƒ  k st ‚ t t j | j ƒ  ƒ d d ƒ sCt ‚ t t j | j ƒ  ƒ d d ƒ sjt ‚ t t j | j ƒ  ƒ d d ƒ s‘t ‚ t t j | j ƒ  ƒ d d ƒ s¸t ‚ t j d | d | d | j ƒ  j ƒ  d | d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k st ‚ | j ƒ  | j ƒ  k s6t ‚ t t j | j ƒ  ƒ d d ƒ s]t ‚ t t j | j ƒ  ƒ d d ƒ s„t ‚ t t j | j ƒ  ƒ d d ƒ s«t ‚ t t j | j ƒ  ƒ d d ƒ sÒt ‚ t j d t j d | d | j ƒ  | ƒ d | d d d | d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k sBt ‚ | j ƒ  | j ƒ  k s`t ‚ t t j | j ƒ  ƒ d | d ƒ s‹t ‚ t t j | j ƒ  ƒ d | d ƒ s¶t ‚ t t j | j ƒ  ƒ d d ƒ sÝt ‚ t t j | j ƒ  ƒ d d ƒ st ‚ t j d t j d | d | j ƒ  | ƒ d | d d d | d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k stt ‚ | j ƒ  | j ƒ  k s’t ‚ t t j | j ƒ  ƒ d | d ƒ s½t ‚ t t j | j ƒ  ƒ d | d ƒ sèt ‚ t t j | j ƒ  ƒ d d ƒ st ‚ t t j | j ƒ  ƒ d d ƒ s6t ‚ t j d t j d | d | j ƒ  | ƒ d | d d d t j | j ƒ  j ƒ  t ƒ d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k s¾t ‚ | j ƒ  | j ƒ  k sÜt ‚ t t j | j ƒ  ƒ d | d ƒ st ‚ t t j | j ƒ  ƒ d | d ƒ s2t ‚ t t j | j ƒ  ƒ d d ƒ sYt ‚ t t j | j ƒ  ƒ d d ƒ s€t ‚ t j d t j d | d | j ƒ  | ƒ d | d d d t j | j ƒ  j ƒ  t ƒ d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k st ‚ | j ƒ  | j ƒ  k s&t ‚ t t j | j ƒ  ƒ d | d ƒ sQt ‚ t t j | j ƒ  ƒ d | d ƒ s|t ‚ t t j | j ƒ  ƒ d d ƒ s£t ‚ t t j | j ƒ  ƒ d d ƒ sÊt ‚ t j d t j d | d | j ƒ  | ƒ d | d d d t j | j ƒ  j ƒ  t ƒ d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k sR	t ‚ | j ƒ  | j ƒ  k sp	t ‚ t t j | j ƒ  ƒ d | d ƒ s›	t ‚ t t j | j ƒ  ƒ d | d ƒ sÆ	t ‚ t t j | j ƒ  ƒ d d ƒ sí	t ‚ t t j | j ƒ  ƒ d d ƒ s
t ‚ t j d t j d | d | j ƒ  | ƒ d | d d d t j | j ƒ  j ƒ  t ƒ d t ƒ j ƒ  \ } } | j ƒ  | j ƒ  k sœ
t ‚ | j ƒ  | j ƒ  k sº
t ‚ t t j | j ƒ  ƒ d | d ƒ så
t ‚ t t j | j ƒ  ƒ d | d ƒ st ‚ t t j | j ƒ  ƒ d d ƒ s7t ‚ t t j | j ƒ  ƒ d d ƒ sŸ t ‚ qŸ Wd  S(!   Niè  g       @i2   g        g      @t   P212121t   space_group_infot   elementst   Nt   volume_per_atomt   random_u_isot   tableR   R   R   t	   algorithmt   directi   R   i    i
   R   R   R   R   R   g      ð?g{®Gáz„?t
   miller_setR;   iÈ   (   g        (   R   Ra   R
   t   xray_structureR8   t   scattering_type_registryR7   R   R,   R2   R3   R4   R5   R   R)   R6   R   R@   RA   R*   RB   R   RD   R;   RE   R=   R   R>   R<   R   RL   (   t   n_sitesR   Rd   RN   t   scaleRa   R)   R   R   t   fmRP   RQ   RR   R   RO   RT   R#   R$   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   test_2¬   s   		&
	''''	''''	++''	++''	++''	++''	++''	++'c          C   s5  t  j d d d d ƒ }  t j d |  ƒ } | j d	 d
 d t ƒ j ƒ  j ƒ  } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } xy t d | j
 ƒ  d ƒ D]^ } | d | | d <| d | | d <| d | | d <t | ƒ t | d ƒ | | d <q¼ Wt j d | d | d | d | d |  j ƒ  d | ƒ } | j ƒ  }	 | j ƒ  }
 | j ƒ  } | j ƒ  } | j ƒ  } t t j |	 ƒ d d ƒ s±t ‚ t t j |	 ƒ d d ƒ sÒt ‚ t t j |	 ƒ d d ƒ sót ‚ t t j |
 ƒ d d ƒ st ‚ t t j |
 ƒ d d ƒ s5t ‚ t t j |
 ƒ d d ƒ sVt ‚ t t j | ƒ d d ƒ swt ‚ t t j | ƒ d d ƒ s˜t ‚ t t j | ƒ d d ƒ s¹t ‚ t t j | ƒ d d ƒ sÚt ‚ t t j | ƒ d d ƒ sût ‚ t t j | ƒ d d ƒ st ‚ t | d ƒ s1t ‚ d  S(    NR   g×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   R   s
   P 21 21 21R   R   g      ø?R   i   g      ð?g     @@R   R"   R#   R$   R%   R&   gÌ–µ�“£@g-Cëâ6?g        g¼�¸aö÷�@gñµñ!A’?gKdÕ¢ç@g%õä¼9ó?g'ò.B°øï?ga:ÅÜç?iõ  (   g×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   iZ   iZ   (   R   R(   R   R)   R7   R8   R   RA   R   RK   R5   t   ranget   floatR   t   f_star_w_star_mu_nuR%   t   f_start   w_start   mut   nut   number_of_f_star_zeroR   R<   R=   R>   R?   (   R(   R)   RV   R#   R$   t   d_obst   d_calcRT   t   objRs   Rt   Ru   Rv   t   nzero(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   test_3R  sL    	 &	!!!!!!!!!!!!c          C   s¤  t  j d d d d ƒ }  t j d |  ƒ } | j d	 d
 d t ƒ j ƒ  j ƒ  } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } t j	 | j
 ƒ  ƒ } t j | j
 ƒ  d ƒ } d } xM t | j
 ƒ  ƒ D]9 }	 | d } | d k rü d | |	 <qÓ d } d | |	 <qÓ Wxy t d | j
 ƒ  d ƒ D]^ }	 |	 d
 | |	 d <|	 d | |	 d <|	 d | |	 d <t |	 ƒ t |	 d ƒ | |	 d <q*Wt j d | d | d | d | d |  j ƒ  d | ƒ }
 |
 j ƒ  } |
 j ƒ  } t t j | ƒ d d ƒ sût ‚ t t j | ƒ d d ƒ st ‚ t t j | ƒ d d ƒ s=t ‚ t t j | ƒ d d ƒ s^t ‚ t t j | ƒ d d ƒ st ‚ t t j | ƒ d d ƒ s t ‚ d  S(   NR   g×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   R   s
   P 21 21 21R   R   g      ø?R   i    i   i
   g      ð?g     @@R   R"   R#   R$   R%   R&   g;„ˆ®{V@g-Cëâ6?gÿi#‚/?g}ÄÞµSË4@gyfT¿þÿï?geIot“H?gÓ°ò ðvë?(   g×£p=
W/@g…ëQ¸^9@g×£p=
×A@iZ   iZ   iZ   (   R   R(   R   R)   R7   R8   R   RA   R   RK   R5   R2   R*   Rp   Rq   R   RG   R%   t   phase_errorRH   R   R<   R=   R>   R?   (   R(   R)   RV   R#   R$   Rx   Ry   R   RO   RT   Rz   t   perRH   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   test_4  sH    	
 &	!!!!!c           C   s(   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  GHd  S(   N(   R_   Ro   R|   R   R	   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   run¬  s
    t   __main__(    t
   __future__R    t   cctbxR   R   R   t   cctbx.array_familyR   R   t   mmtbxR   t   mmtbx.max_likR   t   libtbx.test_utilsR   t   libtbx.utilsR	   R'   t   cctbx.developmentR
   t   cctbx.eltbx.xray_scatteringR   t   randomR-   t   seedt   set_random_seedR_   Ro   R|   R   R€   t   __name__(    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/max_lik/tst_maxlik.pyt   <module>   s.   	—	¦	-	-	