ó
O™xTc           @   sh  d  d l  m Z d  d l m Z m Z m Z m Z d  d l Z d  d l m	 Z	 m
 Z
 d  d l m Z d  d l Z e j j e j j d d ƒ ƒ Z e j j e j j d d	 ƒ ƒ Z e j j e j j d d
 ƒ ƒ Z e j j e j j d d ƒ ƒ Z e j j e j j d d
 ƒ ƒ Z e	 j d d ƒ j Z d „  Z d „  Z d „  Z d „  Z e d k rde ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   adp_restraintst   uctbxt   adptbxt   sgtbxN(   t   linalgt   matrix(   t   approx_equali    i   gü©ñÒMb@?gú~j¼t“h?i
   gš™™™™™¹?i   c         C   s   t  j |  j ƒ  ƒ j ƒ  S(   N(   R   t   sqrt   matrix_packed_u_as_symmetrict   as_sym_mat3(   t   packed_u(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_hirshfeld.pyR
      s    c         C   sš  |  j  r t j j d ƒ n  x6t | ƒ D](} t j t d ƒ ƒ } t j t d ƒ ƒ } t j t t	 t
 d ƒ ƒ ƒ ƒ } t j t t	 t
 d ƒ ƒ ƒ ƒ } t t	 t d ƒ ƒ ƒ } t j d | ƒ } t j | | | ƒ }	 t j | | | | | ƒ }
 ~ |	 j st ‚ |	 | ƒ j } |	 | ƒ j } t t | | ƒ |
 j ƒ  d d ƒs) t ‚ q) Wt j j ƒ  } | j } x&t | ƒ D]} t d ƒ } | | t d ƒ ƒ } t j | ƒ } t j | ƒ } t
 d ƒ } | | t d ƒ ƒ } t j t t	 | ƒ ƒ ƒ } t j t t	 | ƒ ƒ ƒ } t d ƒ } | | t d ƒ ƒ } t j t t	 | ƒ ƒ ƒ } t j t t	 | ƒ ƒ ƒ } t j d | ƒ } t j | | ƒ | ƒ } t j d | | ƒ } t j | | | ƒ | | ƒ j } t j d | | ƒ } t j | | | ƒ | | ƒ j } | | d } t j | j ƒ j | ƒ t j | j ƒ j | ƒ t j | j ƒ j | ƒ } t | | d d | j  ƒszt | | f ƒ ‚ qzWd  S(   Ni    i   t   metrical_matrixt   epsgê-�™—q=i   i   (!   t   fix_random_seedst   scitbxt   randomt   set_random_seedt   xrangeR   t   colt
   site_coordR
   t   symm_matt
   u_eigenvalt
   g_eigenvalR   t	   unit_cellR   t   mean_square_displacementR   t   rigid_bond_pairt   well_definedt   AssertionErrort   valueR   t   abst   delta_zt   matht   finite_difference_computationt
   best_deltat	   directiont   grad_ut   dott   grad_zt   grad_gt	   precision(   t   optionst   n_trialst   it   x1t   x2t   u1t   u2t   gt   uct	   hirshfeldt   rigidt   h1t   h2R!   R"   t   zt   dzt   u_eigent   du_eigent   ut   dut   g_eigent   dg_eigent   dgt   ht   uc_pt   h_pt   uc_mt   h_mt   finite_difft   taylor_diff(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_hirshfeld.pyt!   exercise_mean_square_displacement   sT    	!!/	##Mc   *      C   sí  |  j  r t j j d ƒ n  t j ƒ  t j d ƒ t j d ƒ g } xP| D]H} x?t | ƒ D]1} t j t	 d ƒ ƒ } t j t	 d ƒ ƒ } t j t
 t t d ƒ ƒ ƒ ƒ } t j t
 t t d ƒ ƒ ƒ ƒ } t
 t t d ƒ ƒ ƒ }	 t j d |	 ƒ }
 t j |
 | t j | | ƒ ƒ ƒ } | | ƒ j } | | | ƒ ƒ j } t j |
 | | | | | ƒ j } t | d | | | | d d ƒs] t ‚ q] WqJ Wt j j ƒ  } | j } xy| D]q} x:t | ƒ D],} t	 d ƒ } | | t	 d ƒ ƒ } t j | ƒ } t j | ƒ } t	 d ƒ } | | t	 d ƒ ƒ } t j | ƒ } t j | ƒ } t d ƒ } | | t d ƒ ƒ } t j t
 t | ƒ ƒ ƒ } t j t
 t | ƒ ƒ ƒ } t d ƒ } | | t d ƒ ƒ } t j t
 t | ƒ ƒ ƒ } t j t
 t | ƒ ƒ ƒ } t d ƒ } | | t d ƒ ƒ } t j t
 t | ƒ ƒ ƒ }	 t j t
 t | ƒ ƒ ƒ } t j d |	 ƒ }
 t j |
 | | | | | ƒ } t j d |	 | ƒ } t j | | | | | | | | | | ƒ j } t j | j ƒ  ƒ t j |
 j ƒ  ƒ } t j d |	 | ƒ } t j | | | | | | | | | | ƒ j }  t j | j ƒ  ƒ t j |
 j ƒ  ƒ }! | |  d }" t j | j ƒ j | ƒ t j | j ƒ j | ƒ t j | j ƒ j | ƒ t j | j ƒ j | ƒ t j | j  ƒ j | |! d ƒ }# qÈWt |# |" d d	 | j! ƒsµt |# |" f ƒ ‚ qµWx¼| D]´} x«t | ƒ D]�} t j t	 d ƒ ƒ } t j t	 d ƒ ƒ } t j t
 t t d ƒ ƒ ƒ ƒ } t j t
 t t d ƒ ƒ ƒ ƒ } t j t
 t t d ƒ ƒ ƒ ƒ }	 t j |
 | | | | | ƒ } d d d	 }$ t" j# |$ |$ ƒ j$ t% |$ ƒ ƒ }% | j& d |% d d d d	 d d d d d d ƒ }& |& d }' t j d | j d | j d | j d | j ƒ }	 t j' |% j( ƒ  |$ |$ f ƒ }( |	 j |( |	 ƒ }) t |' |) d d ƒsDt ‚ qDWq1Wd  S(   Ni    s	   -x, y, -zs   y, z, xi   R   i   R   gê-�™—q=i   i   t)   crystallographic_variance_matrix_packed_ut   index_x1i   t   index_u1t   index_x2i   t   index_u2i   t   a_b_c_alpha_beta_gamma_sigmasi	   (   i    i    i    i    i    i    (   i    (   i    (   i    i    (   i    ()   R   R   R   R   R   t   rt_mxR   R   R   R   R
   R   R   R   R   R   R   R   R   t   relative_hirshfeld_differenceR   R   R    R!   R"   R#   t
   parameterst   grad_x1R%   t   grad_x2t   grad_u1t   grad_u2t   grad_unit_cell_paramsR(   R   t   random_normal_matrix_generatort!   symmetric_matrix_with_eigenvaluest   variance_eigenvalt   esdt   recR	   (*   R)   R*   t	   operatorst   opR+   R,   R-   R.   R/   R0   R1   R2   R4   R5   t   rR!   R"   t   dx1t   dx2t   u1_eigent	   du1_eigent   du1t   u2_eigent	   du2_eigent   du2R<   R=   R>   R@   t   r_pt   duc_p_paramsRB   t   r_mt   duc_m_paramsRD   RE   t   nt   vt   sigmat   sigma_sqt   vvt
   sigma_sq_0(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_hirshfeld.pyt&   exercise_hirshfeld_relative_differenceK   s¢    		!!%!3		(	(u!!!	
1c          C   s¬   d d  l  }  |  j ƒ  } | j d d d ƒ| j d d d d d  ƒ| j d	 d d ƒ| j ƒ  \ } } t j j ƒ  t | d
 | j	 p‹ d ƒt
 | d
 | j	 p¤ d ƒd  S(   Niÿÿÿÿs   --fix-random-seedst   actiont
   store_trues
   --n-trialst   typet   intt   defaults	   --VerboseR*   i2   (   t   optparset   OptionParsert
   add_optiont   Nonet
   parse_argst   libtbxt   utilst   show_times_at_exitRF   R*   Ro   (   Ru   t   cmd_linet   optst   args(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_hirshfeld.pyt   run¬   s    		t   __main__(   t
   __future__R    t   cctbxR   R   R   R   t   scitbx.randomR   R   R   t   libtbx.test_utilsR   t   libtbx.utilsRz   R   t   variatet   uniform_distributionR   R   R   R#   RW   RU   RV   R   R
   RF   Ro   R€   t   __name__(    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adptbx/boost_python/tst_hirshfeld.pyt   <module>   s,   "							3	a	