ó
¿™xTc        	   @   sW  d  d l  m Z d  d l m Z d  d l 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 Z d  d l Z d  d	 l m Z d  d
 l m Z e j d ƒ e j d ƒ d d „ Z e j j j ƒ  Z d e _ e e _ d d d d d d e d d „ Z d „  Z  d „  Z! e" d k rSe! ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   flexN(   t   generate_random_hl(   t   random_structure(   t   debug_utils(   t   adptbx(   t   approx_equal(   t   xray(   t   masksi    gñhãˆµøä>c         C   s,  |  j  } | j } | j ƒ  } t j ƒ  } xû t | j ƒ  j ƒ  ƒ D]á } | j ƒ  | } | j } g  }	 x° t d ƒ D]¢ }
 g  } xr | | g D]c } t	 | j
 | ƒ ƒ } | |
 c | 7<| j | ƒ | _ | j d t ƒ | j |  ƒ  j ƒ  ƒ q� W| j | d | d d | ƒ qu W| | _ qC W| S(   Ni   t   update_f_calci    i   i   (   t   managert   xray_structuret	   unit_cellR   t   doublet   xranget
   scattererst   sizet   sitet   listt   orthogonalizet   fractionalizet   update_xray_structuret   Truet   appendt   target_work(   t   target_functort   epst   fmodelt	   structureR   t   gst   i_scatterert   sct	   site_origt   d_target_d_sitet   ixt   tst
   signed_epst	   site_cart(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/regression/tst_fmodel_fd.pyt   finite_differences_site   s&    			%t   directi
   t   wk1995g       @gffffffÖ?g     €F@c	   %      C   sl  t  j d |  d d> | d d |  d d	 d
 d d t d t d t ƒ }	 |	 j d | ƒ |	 j ƒ  }
 |	 j ƒ  } t j d d d d ƒ } t j	 | | ƒ } t j
 | |
 j d | ƒ ƒ } x¯t t g D]¡} |	 j ƒ  } | r-| j ƒ  d k só t ‚ x. d d g D]  } d | | _ d | | _ q Wt } n7 x. d d g D]  } d | | _ d | | _ q:Wt } t |	 j d | d | d t j d t j ƒ j ƒ  ƒ } | j d |	 d t j d t j ƒ j ƒ  } t | ƒ } | j d d d d ƒ } |	 j ƒ  } | j d  d! ƒ x]t j j j D]L} | r5| d? k r5qq5n  | d$ k r_| rMqn  t d& | ƒ } n d  } | d% k r“| st j j j! d  k r“qn  d' G| GHt" j# d( | j ƒ  d) t ƒ d* t$ j% | j& ƒ  j' ƒ  ƒ d+ } t j	 | j ƒ  t j( | ƒ ƒ } t j) j* j+ | j, ƒ  | ƒ } t j) j* j- | | | ƒ } t j) j. d | d, | d- | d. | d/ | d0 t d1 | d2 | d3 t/ j0 j1 ƒ  ƒ 	} | j2 d | d4 t d5 t ƒ t" j# d( | j j ƒ  d) t ƒ | j2 d4 t ƒ | j3 ƒ  } | j4 ƒ  | d6 t ƒ j5 ƒ  j6 ƒ  } t7 d7 | ƒ } t$ j8 | | ƒ j9 ƒ  }  d s2| r”d8 Gt: | ƒ GHd9 Gt: | ƒ GHd: Gg  t; | | ƒ D] \ }! }" |" |! ^ qdGH| Gd; G|  G|  GHHn  | | }# |# t< d t$ j< t$ j | ƒ ƒ ƒ }# d< }$ t= t t$ j> |# ƒ ƒ d= |$ ƒ sðt ‚ t= t t$ j? |# ƒ ƒ d= |$ ƒ st ‚ t= t t$ j< |# ƒ ƒ d= |$ ƒ s>t ‚ t= |  d* |$ ƒ sVt ‚ | j@ ƒ  qWqÃ Wd  S(@   Nt   space_group_infot   elementst   Ot   Nt   Ci   i   t   volume_per_atomid   t   min_distanceg      ø?t   general_positions_onlyt   random_u_isot   random_occupancyt   tablet   u_scalei   t   u_mint   u_stari   gš™™™™™É¿i    t   d_mint   anomalous_flagt   cos_sin_tablet	   algorithmR   t   fractiongš™™™™™¹?t   max_freeiÿàõt   rms_differenceg333333Ó?t   ls_wunit_k1t   mlt   mlhlt   ml_sadt
   miller_sets     R   R   g      ð?g      @t   f_obst   r_free_flagst   target_namet   abcdt   sf_and_grads_accuracy_paramst   k_maskt   k_anisotropict   mask_paramsR	   t   update_f_maskt   compute_gradientsR   s   ana:s   fin:s   rat:s   corr:gTäqs*é>g        (   R+   R,   R-   (   R>   R?   R@   RA   (A   R   R   R   t   Falset   scattering_type_registryt   space_groupR   R   t   random_u_cartt   u_cart_as_u_start   u_star_as_u_cartt   average_u_starR   R   t   AssertionErrort   fpt   fdpt   abst   structure_factorst
   sfg_paramsR9   R:   t   f_calct!   structure_factors_from_scattererst   generate_r_free_flagst   deep_copy_scattererst   shake_sites_in_placet   mmtbxt
   refinementt   targetst   target_namesR   t   Nonet   phaserR   t   set_scatterer_grad_flagsR   t   pow2t
   d_spacingst   datat   b_as_ut   f_modelt   extRI   t   indicesRH   R
   R   t   mask_master_paramst   extractR   R   t   prepare_for_minimizationt   d_target_d_site_cartt	   as_doubleR&   t   linear_correlationt   coefficientR   t   zipt   maxR   t   mint   meant   model_error_ml(%   R)   t
   n_elementsR3   R7   t   k_solt   b_solt   b_cartt   quickt   verboseR   t   sgt   uct   u_cart_1t   u_star_1R8   R   t   it   have_non_zero_fdpRC   t
   f_obs_compt   flagst   xrst   targett   experimental_phasest   ssR6   RI   RH   R   t   t_fR   t   gfdt   cct   at   ft   difft	   tolerance(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/regression/tst_fmodel_fd.pyt   exercise+   sÆ    									 		#		
/
%'''c         C   s#   t  d | d |  j d |  j ƒ d  S(   NR)   R~   R}   (   R’   t   VerboseR}   (   R†   R)   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/regression/tst_fmodel_fd.pyt   run_call_backš   s    	c           C   s3   t  j d t j d d t d d d t d t ƒ d  S(	   Nt   argvi   t	   call_backt   keywordsR}   t   symbols_to_stdoutt   symbols_to_stderr(   s   quick(   R   t   parse_options_loop_space_groupst   sysR•   R”   R   RM   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/regression/tst_fmodel_fd.pyt   run    s    	t   __main__(#   t
   __future__R    t   cctbx.array_familyR   t   mmtbx.f_modelR_   t   mmtbx.refinement.targetst   cctbx.regression.tst_millerR   t   cctbx.developmentR   R   t   cctbxR   t   libtbx.test_utilsR   t   randomR›   R   R   t   seedt   set_random_seedR&   Rj   t#   sf_and_grads_accuracy_master_paramsRn   RY   R:   RM   R9   Rc   R’   R”   Rœ   t   __name__(    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/regression/tst_fmodel_fd.pyt   <module>   s<   		g		