ó
I™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 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 e f d „  ƒ  YZ d e f d „  ƒ  YZ d d „ Z d d „ Z d d „ Z  e! d d e! d „ Z" d „  Z# d „  Z$ d „  Z% e& d k rže% ƒ  e ƒ  GHn  d
 S(    iÿÿÿÿ(   t   division(   t   flex(   t   crystal(   t   miller(   t   xray(   t   sgtbx(   t   uctbx(   t   random_structure(   t   differential_evolutionN(   t   approx_equal(   t   format_cpu_timesi    c          C   s¼  t  j t j d ƒ d d g d d d ƒ}  |  j t d ƒ j ƒ  } t j d | j	 ƒ  d | j
 ƒ  d	 | j
 ƒ  d
 | j ƒ  d d d d. d d d d d | j
 ƒ  d d d d ƒ } t j d | j	 ƒ  d t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ d d d  d | j	 ƒ  d | j ƒ  d t d d d d d d d d d d d d g	 ƒ } | j | j
 ƒ  ƒ } t | d d d  ƒsnt ‚ | j | j
 ƒ  ƒ } | j | j
 ƒ  ƒ } xg t | | d | d ƒ D]K \ } } }	 t | j | d d! ƒsàt ‚ t | j |	 d d! ƒs³t ‚ q³WxUt j t d" ƒ ƒ d# D]:}
 t j d | j	 ƒ  d t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ d$ d d  d | j	 ƒ  d | j ƒ  d t d |
 d d d d d d d d d d g	 ƒ } | j | j
 ƒ  ƒ } | j | j
 ƒ  ƒ } | j
 ƒ  } d% } xft | j
 ƒ  j ƒ  ƒ D]L} t | j
 ƒ  | ƒ } | t | d ƒ | | <| j | ƒ } t | | | ƒ } | t d | ƒ | | <| j | ƒ } t | | | ƒ } | d | d k rï| d | d& k rït | | d | | d d d' ƒsìt ‚ qïn  | d | d k rH| d | d& k rHt | | d | | d d d' ƒsEt ‚ qHn  | | | <qWqWd( } t j d | j	 ƒ  d t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ d d d  d | j	 ƒ  d | j ƒ  d t d d d d d d d d d d d d g	 ƒ } d) d* d+ d, d- g } x± | D]© } | j | ƒ | j | j
 ƒ  d ƒ } | j | | ƒ | j | j
 ƒ  d ƒ } | | | } | j | ƒ | j  | j
 ƒ  d ƒ } t | | d d d' ƒst ‚ qWd  S(/   Nt   P4t   elementst   Ci6  t   n_scatterersg      @t   hklt   f_atomst   f_maskt	   unit_cellt	   k_overallg      ð?t   u_stari    t   k_solg        t   u_solt   f_partt   k_partt   u_partt   hkl_obst   i_obst   w_obst   hkl_calct   space_groupt   anomalous_flagt   alphat   twin_lawiÿÿÿÿi   t   epsg�íµ ÷Æ°>gñhãˆµøä>i2   g      Y@gš™™™™™ñ?g-Cëâ6?iÄ	  g{®Gáz„?g»½×Ùß|Û=gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?(   i    i    i    i    i    i    (!   t   rst   xray_structureR   t   space_group_infot   structure_factorst   Falset   f_calcR   t   f_model_core_datat   indicest   dataR   t&   least_squares_hemihedral_twinning_on_iR   t   abst   NoneR   t   targetR	   t   AssertionErrort   d_target_d_fmodelt   d_target_d_abt   zipt   realt   imagt   doublet   ranget   xranget   sizet   complext   floatR    t   d_target_d_alpha(   t   tmpt   sfst   f_modt   target_evaluatorR/   t   derivs_complext	   derivs_abt   cmplxt   dat   dbR    t   old_target_evaluatort   old_target_valuet
   old_derivst   new_datat   ht   N_testt   orit   new_target_valuet	   fdif_realt	   fdif_imagt	   tst_alphat   iit
   old_targett
   new_targett   fdt   an(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_ls_on_i   s¤    			,$	" 	,$11	,$c          C   só  t  j t j d ƒ d d g d d d ƒ}  |  j t d ƒ j ƒ  } t j d | j	 ƒ  d | j
 ƒ  d	 | j
 ƒ  d
 | j ƒ  d d d d- d d d d d | j
 ƒ  d d d d ƒ } t j d | j	 ƒ  d t j t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ ƒ d d d  d | j	 ƒ  d | j ƒ  d t d d d d d d d d d d d d g	 ƒ } | j | j
 ƒ  ƒ } t | d d d  ƒswt ‚ | j | j
 ƒ  ƒ } | j | j
 ƒ  ƒ } xh t | | d | d ƒ D]L \ } } }	 t | j | d d! ƒsét ‚ t | j |	 d d! ƒs¼t ‚ q¼Wxyt j t d" ƒ ƒ d# D]^}
 t j d | j	 ƒ  d t j t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ ƒ d$ d d  d | j	 ƒ  d | j ƒ  d t d |
 d d d d d d d d d d g	 ƒ } | j | j
 ƒ  ƒ } | j | j
 ƒ  ƒ } | j
 ƒ  } d% } d } xit | j
 ƒ  j ƒ  ƒ D]O} t | j
 ƒ  | ƒ } | t | d ƒ | | <| j | ƒ } t | | | ƒ } | t d | ƒ | | <| j | ƒ } t | | | ƒ } | d | d k rû| d 7} t | | d | | d d d& ƒsût ‚ n  t | d | ƒ d k rd| d | d k rd| d 7} t | | d | | d d d& ƒsat ‚ qdn  | | | <qW| d k s&t ‚ q&Wd! } t j d | j	 ƒ  d t j t j | j
 ƒ  ƒ t j | j
 ƒ  ƒ ƒ d d d  d | j	 ƒ  d | j ƒ  d t d d d d d d d d d d d d g	 ƒ } d' d( d) d* d+ g } x± | D]© } | j  | ƒ | j | j
 ƒ  d ƒ } | j  | | ƒ | j | j
 ƒ  d ƒ } | | | } | j  | ƒ | j! | j
 ƒ  d ƒ } t | | d d d, ƒsBt ‚ qBWd  S(.   NR   R   R   i6  R   g      @R   R   R   R   R   g      ð?R   i    R   g        R   R   R   R   R   t   f_obsR   R   R   R   R    R!   iÿÿÿÿi   R"   g�íµ ÷Æ°>gñhãˆµøä>i2   g      Y@gš™™™™™ñ?g-Cëâ6?gü©ñÒMbP?gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g{®Gáz„?(   i    i    i    i    i    i    ("   R#   R$   R   R%   R&   R'   R(   R   R)   R*   R+   R   t&   least_squares_hemihedral_twinning_on_fR   t   sqrtR-   R.   R   R/   R	   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R    R<   (   R=   R>   R?   R@   R/   RA   RB   RC   RD   RE   R    RF   RG   RH   RI   RJ   t   checkedRK   RL   RM   RN   RO   RP   RQ   RR   RS   RT   RU   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_ls_on_f‡   sª    			5$	# 	5$
.
1	5$t   find_maxc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   ss   | |  _  d |  _ g  |  _ d d g |  _ d |  _ t j |  d d d d d	 d
 d d d t d d d d ƒ|  _ d  S(   Ni   i    i   g¼‰Ø—²Òœ<t   population_sizeid   t   fg333333Ó?t   crgÍÌÌÌÌÌì?t   n_crossi   t   show_progresst   show_progress_nth_cycleR"   gê-�™—q=(   i    i   (   i    i   (	   t   tot   nt   xt   domainR"   t   det    differential_evolution_optimizert   Truet   optim(   t   selft   tot(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   __init__ú   s    				c         C   s   d  d  S(   N(   R.   (   Rk   t   meant   mint   bestt   count(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   print_status  s    c         C   s^   | d } | |  j  k  r% |  j  } n  | d } | |  j  k  rJ |  j  } n  |  j j | | ƒ S(   Ni    i   (   R"   Rc   t   log_p(   Rk   t   vectort   f1t   f2(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyR/     s    

(   t   __name__t
   __module__Rm   Rr   R/   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyR\   ù   s   		t   minimc           B   s&   e  Z d  „  Z d d „ Z d „  Z RS(   c         C   s8   | |  _  t j | | g ƒ |  _ t j j d |  ƒ d  S(   NR@   (   Rl   R   R6   Re   t   scitbxt   lbfgst   run(   Rk   Rl   t   fm1t   fm2(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyRm     s    	gñhãˆµøä>c         C   sr   |  j  j | | ƒ } |  j  j | | | ƒ } |  j  j | | | ƒ } | | | | g } t j | ƒ | } | S(   N(   Rl   Rs   R   R6   (   Rk   Ru   Rv   RJ   t   fot   fp1t   fp2R=   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   g$  s    c         C   su  |  j  j |  j d |  j d ƒ } |  j  j |  j d |  j d ƒ } |  j |  j d |  j d ƒ } t t j t | d ƒ ƒ ƒ } | d k  rš d } n  t j	 | ƒ } | d k  rã t
 | d | | d | d d ƒsã t ‚ n  t t j t | d ƒ ƒ ƒ } | d k  rd } n  t j	 | ƒ } | d k  r`t
 | d | | d | d d ƒs`t ‚ n  | t j | ƒ f S(   Ni    i   g     jø@R"   g      à?(   Rl   Rs   Re   t   d_log_p_d_fR‚   t   intt   matht   logR-   t   expR	   R0   R   R6   (   Rk   R^   R‚   t   g1t   div(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt    compute_functional_and_gradients,  s     ## 	.	.(   Rw   Rx   Rm   R‚   RŠ   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyRy     s   	g{®Gáz„?c         C   s�  |  j  | | ƒ } |  j | | ƒ } |  j | | | ƒ } |  j | | | ƒ } | d | | | | } |  j | | ƒ } |  j | | | ƒ } |  j | | | ƒ } | d | | | | }	 t t j t | d ƒ ƒ ƒ }
 |
 d k  rö d }
 n  t j |
 ƒ }
 t | |
 | d |
 d d ƒs,t ‚ t t j t | d ƒ ƒ ƒ }
 |
 d k  r`d }
 n  t j |
 ƒ }
 t |	 |
 | d |
 d d ƒs–t ‚ |  j | | | | ƒ } |  j | | | | ƒ } |  j | | | | ƒ } |  j | | | | ƒ } | | | | } | | | d } t t j t | d ƒ ƒ ƒ }
 |
 d k  rVd }
 n  t j |
 ƒ }
 t | |
 | d |
 d d ƒsŒt ‚ d  S(   Ng       @i    R"   gš™™™™™©?i   g      @i   (	   t   dd_log_p_dd_fRs   R„   R…   R†   R-   R‡   R	   R0   (   Rl   Ru   Rv   RJ   t   snd_dert   tmp0t   tmp1t   tmp2t   ddf1t   ddf2R‰   t   tmp3R=   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_snd_derC  s<    	'	'	i   c         C   s  t  |  d d ƒ } | j d } | j d } |  j | | ƒ } | d } | d } | d } | | | | }	 | |	 }
 | |	 } | |	 } t j t |
 ƒ d ƒ } t j t | ƒ d ƒ } |  j | | | | | ƒ } |  j | | ƒ } t | | d d ƒst	 ‚ d  S(   Ni   i    i   g       @R"   gš™™™™™©?(
   Ry   Re   R‹   R…   RY   R-   t   num_integratet   laplace_integrateR	   R0   (   t   twin_likR7   t   tmp_1_lbfgsR}   R~   RŒ   t   is11t   is22t   is12t   dett   s11t   s22t   s12t   s1t   s2t
   quad_valuet   laplace_value(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_integrationn  s     




c         C   sD  t  |  d d ƒ } | j d } | j d } |  j | | ƒ } | d } | d } | d } | | | | }	 | |	 }
 | |	 } | |	 } t j t |
 ƒ d ƒ } t j t | ƒ d ƒ } x~ t d d ƒ D]m } xd t d d ƒ D]S } | | d | } | | d | } | G| G|  j | | ƒ |  j | | ƒ GHqå WqÏ Wd  S(   Ni   i    i   g       @içÿÿÿi   g      9@(   Ry   Re   R‹   R…   RY   R-   R8   Rs   (   R–   R7   R—   R}   R~   RŒ   R˜   R™   Rš   R›   Rœ   R�   Rž   RŸ   R    RQ   t   jjRe   t   y(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   plot_functionƒ  s$    




gš™™™™™¹?gffffffæ?c         C   sç   d } d } d
 } d } d } d }	 | }
 d |
 |
 } |  }  | } t  j | | | | | |	 d d |  |  |
 | | d ƒ } t | ƒ } t | | j d | j d ƒ } t | d d	 ƒ t | d	 d ƒ t | ƒ | rã t | ƒ n  d  S(   Ng333333ã?g      ð?g      Y@g333333Ó?iZ   i    i   g      @g       @g{®Gáz„?g{®Gáz„?(   R   t   single_twin_likelihoodR\   Ry   Re   R“   R£   R¦   (   t   centrict   twin_fractiont   sigmaat   plott   io1t   io2t   so1t   so2t   fc1t   fc2t   at   bt   tft   tmp_1t   tmp_1_deR—   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_single_likelihood—  s,     
c          C   sS  t  j d ƒ }  t j d |  d d ƒ } t j d | d t d d ƒ j ƒ  } t j	 | j
 ƒ  j ƒ  t ƒ } t | d	 <| j | ƒ } | j
 ƒ  j | j
 ƒ  ƒ s¤ t ‚ t j | j
 ƒ  | j ƒ  t d
 d d
 d d
 d
 d
 d
 d g	 ƒ } | j ƒ  } | j d | ƒ } | j ƒ  } | j | ƒ \ } } | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  k sLt ‚ | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  k svt ‚ | j ƒ  sˆt ‚ t j | j
 ƒ  | j ƒ  t d
 d d
 d d
 d
 d
 d
 d g	 ƒ } | j ƒ  }	 | j ƒ  }
 | j |	 j ƒ  ƒ sût ‚ | j |
 j ƒ  ƒ st ‚ | j |
 j
 ƒ  |
 j ƒ  ƒ } | j |
 j ƒ  ƒ sOt ‚ d  S(   Ns   40,40,70,90,90,90R   R   t   P1t   crystal_symmetryR   t   d_ming      @i,  i    i   iÿÿÿÿR*   (   R   R   R   t   symmetryR   t	   build_setR'   t
   map_to_asuR   t   boolR*   R9   Ri   t   selectt   all_eqR0   R   t   twin_completionR   t   twin_completet   customized_copyt   common_setst   is_unique_set_under_symmetryt   generate_r_free_flags_basict)   generate_r_free_flags_on_lattice_symmetryt   check_free_flagsR+   t   get_free_model_selection(   t   uct   xst
   miller_setR¿   t   miller_set_modt   checkert   new_hklR²   R³   t   basic_flagst   lattice_flagst   selection_array(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   tst_twin_completion»  sB    
"		$		**		$c          C   s‰  t  j t j d ƒ d d g d d d ƒ}  t |  j t d ƒ j ƒ  ƒ } t j	 d | j
 ƒ  d | j
 ƒ  d	 | j ƒ  d
 t d d d d d d d d d d g	 ƒ } | j ƒ  } d d d d d g } xÁ| D]¹} | j d | j ƒ  d | j ƒ  d | ƒ \ } } | j ƒ  | } t j t j | ƒ ƒ } | d k s8t ‚ | j d | d d  d | ƒ \ } }	 | j d | d | d | ƒ \ } }	 | j ƒ  | } t j t j | ƒ ƒ } t | d d d ƒsÃt ‚ | j ƒ  }
 t |
 j ƒ  ƒ } x� t | j ƒ  | | | |
 ƒ D]} \ } } } } } d | | j ƒ  | | | j ƒ  | } t | | d d d ƒs^t ‚ t | | d d d ƒs t ‚ q WqÈ Wd  S(   NR   R   R   i6  R   g      @R   R   R   R   R!   iÿÿÿÿi    i   gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g\�Âõ(\ß?R   t	   sigma_obsR©   gü©ñÒMbP?R"   gñhãˆµøä>(   R#   R$   R   R%   R-   R&   R'   R(   R   t   hemihedral_detwinnerR*   R   t	   f_as_f_sqt   twin_with_twin_fractionR+   t   sigmasR   t   sumR0   t   detwin_with_twin_fractionR.   R	   t   obs_to_twin_obsR7   R9   R3   (   R=   R>   t
   tmp_detwinR´   t   tt   it   st   difft   dtit   dtst   permutt   indRQ   R¤   t   kkt   ppt   mmt   no(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt
   tst_detwinæ  sD    		$4*c           C   s   t  ƒ  t ƒ  t ƒ  t ƒ  t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ t t d d ƒ d  S(	   Ng333333Ã?g        gš™™™™™¹?gš™™™™™Ù?g333333ã?gš™™™™™é?g      Ð?g)\�Âõ(Ü?(   Ré   RÓ   RV   R[   R·   Ri   R'   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyR|     sX    t   __main__('   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   R   R   R   R   t   cctbx.developmentR   R#   Rz   R   Rg   t   scitbx.lbfgst   libtbx.test_utilsR	   t   libtbx.utilsR
   t   randomR…   t   seedt   set_random_seedRV   R[   t   objectR\   Ry   R“   R£   R¦   R'   R·   RÓ   Ré   R|   Rw   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_twin_target.pyt   <module>   s@   	t	r$&+!	+	,	7