ó
H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 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 Z e j d  e j d  e d  Z d d d d d d e d d  Z d d  Z d   Z d   Z  e! d k re    n  d S(   i˙˙˙˙(   t   division(   t   xray(   t   maptbx(   t   crystal(   t   adptbxN(   t   eltbx(   t   random_structure(   t   structure_factor_utils(   t   debug_utils(   t   flex(   t   fftpack(   t   approx_equali    c         C   s  | r d } n d } i t  j j | d | d f d d  d 6t  j j | d	 | d
 | d f d d  d 6} |  j d | d d  } | j d  j   d k sŠ t  | j d  j   d k sĘ t  | j d  j   d k së t  | j d  j   d k st  | j d  j   d k s-t  | j d  j   d k sNt  |  j   } | j d  j   d k s{t  d  S(   Ni˙˙˙˙i   g   É'@g   ŕF8
@g    ľ$?g   'w$@i    t   Ng   B@g   ŔĎ?ń?g   `ĂÚ÷?g   ż-@g   @WŰč?g    E@t   Ct   custom_dictt   tablet   wk1995i   i   t   Oi   (   g    ľ$?g   'w$@(   g   ż-@g   @WŰč?g    E@(   R   t   xray_scatteringt   gaussiant   scattering_type_registryt   n_termst   AssertionErrort   c(   t	   structuret
   negative_at   ft   custom_gaussianst   reg(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   assign_custom_gaussians   s*    					!!!!!!g      đ?i   i   id   gíľ ÷Ć°>i˙˙˙c   "      C   sW  | r d g d } n4 | r, d g d } n d d d d d d d d g } t  j    d k  re d } n d	 } t j |  d
 | d d d | d | d t d t d d d t d t 	} t j d | j   d | d | d | d d d d  t } | r`| j d i t j	 j
 d  d 6 } | j
 d  j   d	 k s6t  | j
 d  j   d k sWt  t } nH | r¨t  j    d k  r¨t  j    d k  rt } n  t | d | n  | j d | d | d d   j   } | j d! | d | d" |	  } | j   d  k st  t j | j    } t j | | |
  } t j j   t j _ t j d# | j    d | j   d$ | j   d% | j   d& | j!   d' | d( | d) | d* | d+ | d, d- d. t  } | j"   j#   } | j"   j$   } | j"   j%   } t& | |  sţt  t& | |  st  | j'   | p%| k s1t  d	 s=| rd/ G| GHd0 G| GHd1 G| j(   GHd2 G| j)   GHd3 G| j*   GHd4 G| j+   GHd5 G| j,   GHd6 G| j-   GHd7 G| j.   Gd8 | j/   GH| j'   sd9 Gt0 j1 | j2    GHd: Gt0 j3 | j2    GHqd9 Gt0 j1 t0 j4 | j5     Gt0 j1 t0 j6 | j5     GHd: Gt0 j3 t0 j4 | j5     Gt0 j3 t0 j6 | j5     GHn  | j'   rÚ| rÚt0 j1 | j2    d	 k  sśt  t0 j3 | j2    d	 k sÚt  n  | j'   s| j2   } | j$   | j!   k st  | j#   | j   k s.t  | j7 |  } | j$   | j8   k s[t  | j#   | j8   k syt  t } nŽ t j9 | j    } | j5   } | j$   | j:   k sÁt  | j#   | j:   k sßt  | j; |  } | j$   | j:   k st  | j#   | j:   k s*t  t } t< j j= d; | j>   d | j'   d< | j?   d= | d> |  j@   }  | jA | j?   |   tB jC d? | j?   d	 | j@   |  d@ dK dB dL dD | t j jD dE | dF | dG |
 d( | d) | d+ | d" |	  dH | dE | d dI  j   }! tB jC dJ | j?   d	 | j@   |! j@   d@ dM dB dN dD | d  S(O   Nt   consti   t   HR   R   R   g      ŕ?g333333ă?i    t   elementst   random_f_prime_d_mini   t   random_f_prime_scalet   random_f_double_primet   use_u_anisot	   use_u_isot   random_u_cart_scaleg333333Ó?t   random_u_isot   random_occupancyt
   scattererst	   allow_mixt   random_u_iso_scalet   random_u_iso_ming        R   i˙˙˙˙R   t   anomalous_flagt   d_mint	   algorithmt   directt   resolution_factort	   max_primet	   unit_cellR   t
   fft_n_realt
   fft_m_realt   u_baset   wing_cutofft   exp_table_one_over_step_sizet   force_complext    sampled_density_must_be_positivet   tolerance_positive_definitegńhăľřä>t   use_u_base_as_u_extras   const_gaussian:s   negative_gaussian:s   number of scatterers passed:s"   number of contributing scatterers:s   number of anomalous scatterers:s   wing_cutoff:s   exp_table_one_over_step_size:s   exp_table_size:s   max_sampling_box_edges:s   (%.4f, %.4f, %.4f)s   map min:s   map max:t   space_groupt   miller_indicest   complex_mapt   conjugate_flags   direct/fft_regressiont   min_corr_amplgŽGázŽď?t   max_mean_w_phase_errorg      @t   verboset
   miller_sett   grid_resolution_factort   quality_factort   xray_structuret   ffts   direct/fft_xraygŽGázŽď?g      @gŽGázŽď?g      @(E   t   randomR   RG   t   Truet   Falset!   random_modify_adp_and_adp_flags_2R)   R   R   R   R   R   R   R   R   t   structure_factorst   f_calct   crystal_griddingt   symmetry_flagst   NoneR
   t   real_to_complex_3dt   n_realR   t   calc_u_baset   libtbxt   introspectiont   number_of_processorst   omptbxt   envt   num_threadst   sampled_model_densityR3   t   m_realt   real_map_unpaddedt   focust   allt   lastR   R-   t   n_scatterers_passedt   n_contributing_scattererst   n_anomalous_scatterersR7   R8   t   exp_table_sizet   max_sampling_box_edgest   max_sampling_box_edges_fracR	   t   mint   real_mapt   maxt   realR?   t   imagt   forwardt	   n_complext   complex_to_complex_3dt   nt   backwardR   t   from_mapR=   t   indicest   datat   eliminate_u_extra_and_normalizeR   t   check_correlationt   from_scatterers("   t   space_group_infot   const_gaussiant   negative_gaussianR-   R*   R%   R$   R.   R1   R2   RF   R7   R8   R9   RC   R    R"   R   R:   R   t   f_directRO   t   rfftR6   t   sampled_densityR^   R_   R`   t   mapt   sf_mapt   collect_conjt   cfftt
   f_fft_datat   f_fft(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   exercise1   s   
				!!									   !$			c         C   s"  t  j d t j d d9 d	 d
  d t j t  j d d d d: d d  g   } t j j	 d; d< d  } xľt
 d  D]§} | j   } | j   d } | d k rł | j d 9_ nę | d k rŮ | j d i | d 6 nÄ | d k r÷ | j d 9_ nŚ | d k rmt j d d d d  } t t j |   d k  s<t  t j | j   |  } | | _ | j j   n0 | d k rd | _ n | d k rd  | _ n  | j d! d d" d# d$ t  j   } | j d! d d" d% d& d' d( d)  j   }	 | d k r$| j |	 j   j     j! d  s$t  n  | d= k rŐ| j   j" d* d  j |	 j   j     }
 | d k rt j |
  | j d k  sŇt  qŐt j |
  | j d k s°t  t j# |
  | j d k  sŐt  n  t j$ t% |  j    t% |	  j     j&   } | d+ k  r*t d, | | f   n d s6|  rBd- | GHn  t' j  j j( d. | d$ t  } t  j) j* d/ t% |   } | |	 t+  } t  j, d | j   d t+ d0 t+ d1 t+ d2 t+ d3 t+ d4 t+  xS d# d% g D]E } | d5 | d6 d  d. | d7 | j.   d8 | j/   d" |  j0   } qŃWqs Wd  S(>   Nt   crystal_symmetryR3   i
   i   i   iK   iP   iU   t   space_group_symbols   P 1R)   t   labelR   t   sitei    t   ug      Đ?i   i   i   iü˙˙˙i   i˙˙˙˙R   i   t   u_scalet   u_mingńżi   iö˙˙˙i   iý˙˙˙R.   R/   R0   t   cos_sin_tableRH   RF   g    ×AR7   gť˝×Ůß|Ű=t   scattering_typeg+ŮÎ÷ď?s   i_trial=%d, correlation=%.6gs   correlation=%.6gRD   t   f_obst   u_isot   u_anisot	   occupancyt   fpt   fdpRG   t   u_iso_refinable_paramst   d_target_d_f_calct   n_parameters(   i
   i   i   iK   iP   iU   (   i    i    i    (   i   i   (   i   i   (   i   i   (1   R   R   R   t   symmetryR	   t   xray_scatterert	   scattererR   R   R   t   xranget   deep_copy_scatterersR)   R   R   R   R   t   random_u_cartRi   t   eigenvaluesR   t   u_cart_as_u_starR3   t   u_start   flagst   set_use_u_aniso_onlyR   RM   RK   RN   t   at_d_star_sqt	   d_star_sqRs   t   all_ltt   gaussian_not_optionalRg   t   linear_correlationt   abst   coefficientt   cctbxt	   gradientst   target_functorst   intensity_correlationRJ   t   set_scatterer_grad_flagsRQ   t   derivativesR   t   packed(   RC   t   structure_defaultRy   t   i_trialR   R   t   u_cartR   Rz   R   R   t   cct   structure_factor_gradientst   target_functort   target_resultR/   t   grads(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   exercise_negative_parametersÍ   s    			'!			-%"%	c         C   s˝   xś t  t f D]§ } x t t f t  t f t t  f t  t  f g D]r \ } } xc t  t g D]U } t j   } t | d | d k  d | d k d | d | d | d	 |  j d
 | qX Wq? Wq Wd  S(   NRx   i   g      @Ry   i   R-   R%   R$   RC   R*   gUUUUUUŐ?gUUUUUUĺ?(   RK   RJ   RI   R   t   Verbose(   R   Rw   R-   R%   R$   R*   t   r(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   run_call_back  s     			c          C   sD   t  j j   }  t j d t j d d t d t  t	   |    d  S(   Nt   argvi   t	   call_backt   show_cpu_times(
   RU   t   utilst
   show_timesR   t   parse_options_loop_space_groupst   sysRť   Rş   RK   Rˇ   (   Rż   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   run)  s    	t   __main__gUUUUUUŐ?("   t
   __future__R    R¨   R   R   R   R   t   cctbx.eltbx.xray_scatteringR   t   cctbx.developmentR   R   R   t   cctbx.array_familyR	   t   scitbxR
   RX   t   libtbx.test_utilsR   t   libtbx.utilsRU   t   libtbx.introspectionRI   RÁ   t   seedt   set_random_seedRK   R   R   Rˇ   Rş   RÂ   t   __name__(    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sampled_model_density.pyt   <module>   s<   	J			