ó
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 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 d  d l Z d  d l Z e j d ƒ e
 j d ƒ d „  Z d „  Z d d „ Z d „  Z  d „  Z! d Z" d e# d „ Z$ d „  Z% e& d k rxe% e j' d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   xray(   t   miller(   t   structure_factors(   t   least_squares(   t   flex(   t   random_structure(   t   debug_utils(   t   strudat(   t   approx_equalN(   t   count(   t   StringIOi    c         C   sh   |  j  j ƒ  r8 t |  j ƒ |  j |  j |  j |  j g St |  j ƒ t |  j ƒ |  j |  j |  j g S(   N(	   t   flagst   use_u_iso_onlyt   listt   sitet   u_isot	   occupancyt   fpt   fdpt   u_star(   t   self(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   scatterer_as_list   s    )c         C   s™   t  |  ƒ d k rT t j d |  d  d |  d d |  d d d d	 |  d
 d |  d ƒ St j d |  d  d |  d d !d |  d d d d	 |  d d |  d ƒ S(   Ni   R   i   t   uR   i   t   scattering_typet   ?R   i   R   i   i	   i
   i   (   t   lenR   t	   scatterer(   t   l(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   scatterer_from_list   s    	



	


g:Œ0âŽyE>c      
   C   sw  |  d k s t  ‚ t j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  } x"t | ƒ D]\ }	 }
 | j |	 ƒ s© d  } |
 j	 j
 ƒ  sš t d ƒ } qDt d ƒ } n› | j |	 ƒ } | j ƒ  } t | j ƒ } |
 j	 j
 ƒ  sû | j t d d ƒ ƒ nI | j ƒ  } | j g  | j D] } | d ^ qƒ | j t d d ƒ ƒ g  } x| D]} g  } x¾| | g D]¯} t |
 ƒ } | | c | 7<| d  k	 r@| d k  rÞ| j d | j d | d  ƒ ƒ } t | ƒ | d } q@|
 j	 j
 ƒ  r@| d k  r@| j d | j d | d d !ƒ ƒ } | d  t | ƒ | d } q@n  t | ƒ | |	 <|
 j | |	 _ | j |	 ƒ t d	 | d
 | ƒ } |  d k rõd } xN t | j ƒ  | j ƒ  ƒ D]1 \ } } t d | d | ƒ } | | j ƒ  7} q°W| j | ƒ qk| j d | d t ƒ } | j | ƒ qkW| d | d d | } |  d k rT| j | ƒ qQ| j | ƒ qQW|
 | |	 <q[ W| S(   Ni   i   i   i   i   i	   t   independent_paramst
   all_paramst   xray_structuret
   miller_seti    t   obst   calct   f_obst   target_type(   i   i   (    t   AssertionErrorR   t   doublet
   scattererst   site_symmetry_tablet   deep_copy_scattererst	   enumeratet   is_special_positiont   NoneR   t   use_u_anisot   ranget   gett   site_constraintsR   t   independent_indicest   extendt   adp_constraintsR   R   R   R   R   t   re_apply_symmetryR   t   zipt   datat   fsR   t   ft   appendt   d_target_d_params(   t   d_orderR$   R    t   epst   resultR(   R)   t   xray_structure_epst   scatterers_epst   i_scattererR   t   site_symmetry_opst   ipsR1   R4   t   it   dxt   ipt   vst
   signed_epst   si_epsR   t   sft   sum_target_fR"   R9   t   targett   dpt   diff(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   d_target_d_params_finite+   sp    '				"(c         C   s  t  d d d |  d | ƒ } | d It | ƒ IJt d | d |  ƒ } | j d |  d t ƒ } | d It | ƒ IJ| r¢ t j | t j | j ƒ  d	 ƒ | ƒ n t j | | | ƒ t  d d
 d |  d | ƒ } | d It | ƒ IJ| j	 d |  d t ƒ }	 | d It |	 ƒ IJt j |	 j
 ƒ  | | ƒ |	 j d d ƒ sEt ‚ | Jx° t | j | j g ƒ D]– \ }
 } | d |  d t ƒ } |
 d	 k r´t j | | j d d ƒ| j } n  | j ƒ  |	 j ƒ  d	 k sÖt ‚ t j |	 j ƒ  j
 ƒ  | d d ƒqbW| rt j t j | ƒ ƒ Sd  S(   NR<   i   R$   R    s
   grads_fin:R!   R%   s
   grads_ana:i    i   s
   curvs_fin:s
   curvs_ana:t   relative_epsilong»½×Ùß|Û=R=   gê-�™—q=(   RO   R   R   R;   R   R   t   compare_derivativesR'   t   sizet   d2_target_d_paramst   as_1dt   matrix_is_symmetricR&   R+   t   d2_target_d_params_diagt   d2_target_d_params_diag_cppt   gradst   curvst   focust   matrix_diagonalt   maxt   abs(   R$   R    t   gradients_should_be_zeroR=   t   outt	   grads_finRJ   t	   grads_anat	   curvs_fint	   curvs_anat   i_methodt   curvs_methodt   curvs_diag_ana(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   compare_analytical_and_finitej   s<    (" c   
      C   s­  |  j  d | ƒ j d | ƒ t j d |  d | d t d t |  j ƒ  j ƒ  d  ƒ d ƒ ƒ } | j ƒ  j	 ƒ  } | | k r� | 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 d d | ƒ }	 t d | j d | j ƒ  t j d | j	 ƒ  ƒ d ƒ d	 |  d t d t d |	 ƒ d | ƒ d  S(   NR9   t   crystal_symmetryt   anomalous_flagt   d_mini   i   g      @RR   R    R!   t	   algorithmt   directt   cos_sin_tableR7   R$   R^   R=   gñhãˆµøä>R_   g      à?(   t   show_summaryt   show_scatterersR   t	   build_setR\   t   mint	   unit_cellt
   parameterst   indicesRR   t   selectR   t   random_size_tR   t!   structure_factors_from_scattererst   Falset   f_calcR	   R8   R7   R&   t   arrayR]   Rg   t   Truet   customized_copyt   random_double(
   R    Ri   t   max_n_indicesR_   R!   t	   n_indicesRJ   Ry   R$   t	   noise_fin(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   exercise’   s@    	,		!!		)s�   *EDI
Code: EDI

P-4m2
 6.926 6.926 6.410 90.000 90.000 90.000
SI1 0.2680 0.0000 0.1184 4
SI2 0.0000 0.0000 0.5000 4
----------------------------------------
i   c         C   sP  |  j  s t ƒ  } n	 t j } |  j r[ g  |  j j d ƒ D] } t | ƒ ^ q: \ } } n d } d } |  j r7|  j d k r  t j	 t t
 ƒ ƒ } | j }	 q7t j j d d d t j j ƒ }
 |
 d  k	 sÓ t ‚ t j	 t |
 ƒ ƒ } t |  j t ƒ s| j }	 q7| j d |  j ƒ g }	 |	 d d  k	 s7t ‚ n  |  j rLt g } n! |  j rat g } n t t g } |  j s"xÆt d	 d! ƒ D]• } xŒ | D]„ } t j d | d | d d d d d t d d d | d | d | d t d d d t ƒ } t d | d | d | d | ƒ | j  ƒ  q“Wq†Wnt! ƒ  } x|	 D]	} | j" ƒ  | | k rTq2n  t j# d I| j IJt j# j  ƒ  | d I| j IJ| j  ƒ  x¤ | D]œ } | j$ ƒ  } t j d | j% ƒ  d | j& ƒ  d  | j' ƒ  d d d d d | d | d | d t d d d t ƒ } t d | d | d | d | ƒ | j  ƒ  q›Wq2W|  j rLt Sd  S("   Nt   ,i   i    t   internalt   relative_paths,   phenix_regression/misc/strudat_zeolite_atlast   testt   tagi   i   t   space_group_infot   n_scattererst   elementst   randomt   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    Ri   R~   R_   s   strudat tag:Rr   t
   sites_fraci   ((   t   VerboseR   t   syst   stdoutt   chunkt   splitt   intR†   R   t   read_all_entriest   zeolite_edit   entriest   libtbxt   envt   find_in_repositoriest   ost   patht   isfileR-   R&   t   opent
   isinstancet   strR0   t	   isotropicRx   t   anisotropicR{   t   xrangeR   R    R�   t   flushR
   t   nextt   stderrt   as_xray_structureR‡   Rr   R“   (   R   R‡   R~   Ri   R_   RD   t   chunk_nt   chunk_it   strudat_contentst   strudat_entriest
   atlas_filet   use_u_aniso_flagsRˆ   R.   R    t   i_structuret   entry(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   run_call_backÃ   sš    			4							 
			c         C   s   t  j |  t d ƒ d  S(   NR—   R¦   R§   R†   (   s   chunks	   isotropics   anisotropics   tag(   R   t   parse_options_loop_space_groupsRµ   (   t   args(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   run  s
       t   __main__i   ((   t
   __future__R    t   cctbxR   R   t-   cctbx.examples.structure_factor_derivatives_4R   t&   cctbx.examples.exp_i_alpha_derivativesR   t   cctbx.array_familyR   t   cctbx.developmentR   R   t   iotbx.kriberR   t   libtbx.test_utilsR	   t   libtbx.load_envR�   RŠ   t	   itertoolsR
   t	   cStringIOR   R•   R    t   seedt   set_random_seedR   R   RO   Rg   R�   R›   R{   Rµ   R¸   t   __name__t   argv(    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives_4.pyt   <module>   s6   		?	(	/T	