ó
8™xTc           @   s4  d  d l  m Z d  d l m Z d  d l m Z m Z 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 e j d ƒ e j d ƒ d d „ Z d d „ Z d „  Z d d d „ Z d „  Z d „  Z e d k r0e e j d ƒ n  d	 S(   iÿÿÿÿ(   t   division(   t   miller(   t   scatterer_as_listt   scatterer_from_listt   structure_factors(   t   least_squares(   t   flex(   t   random_structure(   t   debug_utils(   t   approx_equalN(   t   StringIOi    g:Œ0âŽyE>c      	   C   s†  t  j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } xOt t | ƒ ƒ D];} | | j j ƒ  se d } n d } g  }	 xü t | ƒ D]î }
 g  } x¾ | | g D]¯ } t | | ƒ } | |
 c | 7<t	 | ƒ | | <t
 d | d |  ƒ } d } xN t |  j ƒ  | j ƒ  ƒ D]1 \ } } t d | d | ƒ } | | j ƒ  7} qW| j | ƒ q˜ W| j | d | d d	 | ƒ q~ W| | | | <qC W| S(
   Ni   i   t   xray_structuret
   miller_seti    t   obst   calci   i   (   R   t   doublet
   scattererst   deep_copy_scattererst   xranget   lent   flagst   use_u_anisoR   R   R   t   zipt   datat   fsR   t   ft   append(   t   f_obsR   t   epst   resultR   t   xray_structure_epst   scatterers_epst   i_scatterert   npt   dxt   ixt   tst
   signed_epst   si_epst   sft   sum_target_fR   R   t   target(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   d_target_d_params_finite   s2    	(%c         C   sG  t  j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } xt t | ƒ ƒ D]ü } | | j j ƒ  se d } n d } g  }	 x½ t | ƒ D]¯ }
 g  } x | | g D]p } t | | ƒ } | |
 c | 7<t	 | ƒ | | <t
 d | d |  ƒ } | j d |  d t ƒ } | j | ƒ q˜ W| j | d | d d	 | ƒ q~ W| | | | <qC W| S(
   Ni   i   R   R   R   t   target_typei    i   i   (   R   R   R   R   R   R   R   R   R   R   R   t   d_target_d_paramsR   R   t   extend(   R   R   R   R   R   R   R   R    R!   R"   R#   t   gsR%   R&   R'   t   dp(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   d2_target_d_params_finite-   s,    	%c         C   sõ   t  d |  d | ƒ } | d It | ƒ IJt d | d |  ƒ } | j d |  d t ƒ } | d It | ƒ IJt j | | ƒ t d |  d | ƒ } | d It | ƒ IJ| j d |  d t ƒ } | d It | ƒ IJt j | j	 ƒ  | ƒ | Jd  S(	   NR   R   s
   grads_fin:R   R+   s
   grads_ana:s
   curvs_fin:s
   curvs_ana:(
   R*   t   listR   R,   R   R   t   compare_derivativesR0   t   d2_target_d_paramst   as_1d(   R   R   t   outt	   grads_finR'   t	   grads_anat	   curvs_fint	   curvs_ana(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   compare_analytical_and_finiteF   s    i   c         C   s,  | s t  ƒ  } n	 t j } x
t d d  ƒ D]ù} xðt d ƒ D]â} t j d |  d d g | d d d t d	 d d
 | d | d | d t d d d t ƒ } | j d | ƒ j d | ƒ t	 j
 d | d | d t d t | j ƒ  j ƒ  d  ƒ d ƒ ƒ }	 |	 j ƒ  j ƒ  }
 |
 | k r7|	 j t j d | ƒ |
 ƒ }	 n  t d | d |	 ƒ } |	 j d | d d d t ƒ j ƒ  } | j d | ƒ t | j ƒ  | j ƒ  ƒ s¡t ‚ |	 j d t j | j ƒ  ƒ ƒ } t d | d | d | ƒ t d | j d | j ƒ  t j  d | j ƒ  ƒ d ƒ d | d | ƒ q> Wq+ Wd  S(!   Ni   i   t   space_group_infot   elementst   constt   volume_per_atomid   t   general_positions_onlyt   random_f_prime_d_mint   random_f_double_primeR   t	   use_u_isot   random_u_isot   random_u_iso_scaleg333333Ó?t   random_occupancyR   t   crystal_symmetryt   anomalous_flagt   d_ming      @t   sizeR   R   t	   algorithmt   directt   cos_sin_tableR   R   R5   g      à?i   (!   R
   t   syst   stdoutR   R   R   t   Truet   show_summaryt   show_scatterersR   t	   build_sett   maxt   mint	   unit_cellt
   parameterst   indicesRI   t   selectR   t   random_size_tR   t!   structure_factors_from_scattererst   Falset   f_calcR	   R   R   t   AssertionErrort   arrayt   absR:   t   customized_copyt   random_double(   R;   R   RG   t   max_n_indicest   verboseR5   t   n_scattererst   i_trialR   R   t	   n_indicesR'   R\   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   exerciseW   sZ    				,		!!	)c      
   C   sm   |  j  r t g } n! |  j r* t g } n t t g } x0 | D]( } t d | d | d t d |  j ƒ q= Wd  S(   NR;   R   RG   Rc   (   t	   isotropicR[   t   anisotropicRO   Rg   t   Verbose(   R   R;   R   t   use_u_aniso_flags(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   run_call_backŒ   s    		c         C   s   t  j |  t d ƒ d  S(   NRh   Ri   (   s	   isotropics   anisotropic(   R   t   parse_options_loop_space_groupsRl   (   t   args(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   runš   s     t   __main__i   (   t
   __future__R    t   cctbxR   t-   cctbx.examples.structure_factor_derivatives_3R   R   R   t&   cctbx.examples.exp_i_alpha_derivativesR   t   cctbx.array_familyR   t   cctbx.developmentR   R   t   libtbx.test_utilsR	   t   randomt	   cStringIOR
   RM   t   seedt   set_random_seedR*   R0   R:   Rg   Rl   Ro   t   __name__t   argv(    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_3.pyt   <module>   s*   	0		