ó
9™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 m Z 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 „  Z e d k re e j d ƒ n  d	 S(   iÿÿÿÿ(   t   division(   t   xray(   t   miller(   t   crystal(   t   scatterer_as_listt   scatterer_from_listt   structure_factors(   t   least_squares(   t   flex(   t   approx_equalN(   t   StringIOi    g:Œ0âŽyE>c      	   C   sd  t  j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } x-t t | ƒ ƒ D]} g  } xü t d ƒ 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 | ƒ qv W| j |
 d |
 d d | ƒ q\ W| | | | <qC W| S(	   Ni   t   xray_structuret
   miller_seti    t   obst   calci   i   (   R   t   doublet
   scattererst   deep_copy_scattererst   xranget   lenR   R   R   t   zipt   datat   fsR   t   ft   append(   t   f_obsR   t   epst   resultR   t   xray_structure_epst   scatterers_epst   i_scatterert   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_2.pyt   d_target_d_params_finite   s,    (%c         C   s  t  j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } xè t t | ƒ ƒ D]Ô } x½ t d ƒ D]¯ } g  }	 x | | g D]p }
 t | | ƒ } | | c |
 7<t | ƒ | | <t d | d |  ƒ } | j	 d |  d t
 ƒ } |	 j | ƒ qp W| j |	 d |	 d d | ƒ qV W| | | | <qC W| S(	   Ni   R   R   R   t   target_typei    i   i   (   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    t   gsR"   R#   R$   t   dp(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_2.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 | | ƒ sƒ t ‚ t d |  d | ƒ } | d It | ƒ IJ| j d |  d t ƒ } | d It | ƒ IJt | | d	 ƒ sô t ‚ | Jd  S(
   NR   R   s
   grads_fin:R   R(   s
   grads_ana:s
   curvs_fin:s
   curvs_ana:gñhãˆµøä>(	   R'   t   listR   R)   R   R	   t   AssertionErrorR-   t   d2_target_d_params(   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_2.pyt   compare_analytical_and_finite=   s    c         C   s?  d |  k } | s t  ƒ  } n	 t j } t j d d) d	 d
 ƒ } t j d | d t j d* d+ d, g ƒ d t	 ƒ } xÄt
 d d- ƒ D]³} xªt
 d ƒ D]œ} t j ƒ  } x– t
 | ƒ D]ˆ } | j t j d g  t
 d ƒ D] } t j ƒ  ^ qÓ d t j ƒ  d d t j ƒ  d d d t j ƒ  d d d t j ƒ  d d ƒ ƒ q± Wt j d | d | ƒ }	 t d |	 d  | ƒ }
 | j d |	 d! d" d# t	 ƒ j ƒ  } 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( GHd  S(.   Ns	   --verboset	   unit_celli   i	   i
   iS   ia   iq   t   space_group_symbolt   P1t   crystal_symmetryt   indicesi   i   i   i   iÿÿÿÿiþÿÿÿt   anomalous_flagi   t   sitet   ugš™™™™™¹?t	   occupancyt   scattering_typet   constt   fpg      à?t   fdpR   R   R   t	   algorithmt   directt   cos_sin_tableR   R   R1   t   sizet   OK(   i   i	   i
   iS   ia   iq   (   i   i   i   (   i   i   i   (   iÿÿÿÿi   iþÿÿÿi   (   R
   t   syst   stdoutR   t   symmetryR   t   setR   t   miller_indext   FalseR   t   xray_scattererR   R   t	   scatterert   randomt	   structureR   t!   structure_factors_from_scattererst   f_calcR	   R   R   R/   t   arrayt   absR6   t   customized_copyt   random_doubleRG   (   t   argst   verboseR1   R:   R   t   n_scattererst   i_trialR   t   iR   R$   RT   R   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_2.pyt   exerciseN   sX    					%				!!	)t   __main__i   (   t
   __future__R    t   cctbxR   R   R   t-   cctbx.examples.structure_factor_derivatives_2R   R   R   t&   cctbx.examples.exp_i_alpha_derivativesR   t   cctbx.array_familyR   t   libtbx.test_utilsR	   RQ   t	   cStringIOR
   RI   t   seedt   set_random_seedR'   R-   R6   R^   t   __name__t   argv(    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_2.pyt   <module>   s$   		/