ó
8™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
 Z
 d  d l Z d „  Z d „  Z d	 d d
 „  ƒ  YZ d „  Z d e j d Z d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   xray(   t'   tensor_rank_2_gradient_transform_matrix(   t   matrix(   t   flexNc         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/structure_factor_derivatives_3.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   constR   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/structure_factor_derivatives_3.pyt   scatterer_from_list   s    	



	


t	   gradientsc           B   s   e  Z d  „  Z RS(   c         C   sn   | |  _  | |  _ | |  _ t j ƒ  |  _ |  j j d | d  k	 d | d  k	 ƒ | |  _ | |  _	 | |  _
 d  S(   Nt   isot   aniso(   R   R	   R   R   t   scatterer_flagsR   t	   set_use_ut   NoneR
   R   R   (   R   R   R	   R   R
   R   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   __init__"   s    					(   t   __name__t
   __module__R   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR       s   c         C   s.   g  } x! |  D] } | j  t | ƒ ƒ q W| S(   N(   t   extendR   (   t   gradst   resultt   g(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   pack_gradients.   s    iþÿÿÿi   t   structure_factorc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sO   | j  ƒ  |  _  | j ƒ  |  _ | j ƒ  |  _ | |  _ |  j  j | ƒ |  _ d  S(   N(   t	   unit_cellt   space_groupt
   scattererst   hklt	   d_star_sq(   R   t   xray_structureR)   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR   8   s
    	c         C   sŸ  d } d t  j t j |  j ƒ } xu|  j D]j} | j d k sH t ‚ | j } | j	 j
 ƒ  s† | j |  j } t  j t | ƒ } n  d | j } | j } | d | }	 xê |  j D]ß }
 |
 | j } t j | ƒ j | ƒ } | j	 j
 ƒ  rj|
 j ƒ  j ƒ  j ƒ  } | t j d | j ƒ | j ƒ  } t j |  j ƒ | j t j |  j ƒ ƒ } t  j t | ƒ } n  t j d | ƒ } | | | |	 | 7} q´ Wq- W| S(   Ni    i   R   i   y              ð?t   sym_mat3(   t   matht   piR   t   colR)   R(   R   t   AssertionErrorR
   R   t   use_u_anisoR	   R*   t   expt   mtpsR   R   R'   R   t   dott   rt   as_rationalt   as_floatt   symR   t	   transposet   rowt   cmath(   R   R"   t   tphklR   t   wt   huht   dwt   ffpR   t   fft   st   s_sitet   alphaR5   t
   s_u_star_st   e(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   f?   s,    		#+c         C   sU  g  } d t  j t j |  j ƒ } |  j \ } } } t j | d | d | d d | | d | | d | | g ƒ } xÔ|  j D]É} | j d k sŸ t ‚ | j } | j	 j
 ƒ  sÝ | j |  j }	 t  j t |	 ƒ }
 n  d | j } | j } | d | } t j d d d g ƒ } | j	 j
 ƒ  s7d } d  } n' d  } t j d d d d d d g ƒ } d } d } d } x¦|  j D]›} | j ƒ  j ƒ  j ƒ  } | | j } t j | ƒ j | ƒ } | j	 j
 ƒ  r0| t j d | j ƒ | j ƒ  } t j |  j ƒ | j t j |  j ƒ ƒ }	 t  j t |	 ƒ }
 n  t j d | ƒ } | j ƒ  } | | | |
 | | d | 7} | j	 j
 ƒ  s¤| | |
 | | t |  j 7} n7 t j t | ƒ ƒ } | | | |
 | | t | 7} | |
 | | 7} | | |
 | 7} | | |
 | d 7} qzW| j t  d | d | d	 | d
 | d | d | ƒ ƒ q„ W| S(   Ni   R   i   y              ð?i    R,   R   R	   R   R
   R   R   (!   R-   R.   R   R/   R)   R(   R   R0   R
   R   R1   R	   R*   R2   R3   R   R   R   R'   R5   R6   R7   R   R4   R8   R   R9   R:   R;   t   sqrR   t   appendR   (   R   R"   R<   t   ht   kR   t   d_exp_huh_d_u_starR   R=   R>   R?   R@   R   RA   t   d_sitet   d_u_isot   d_u_start   d_occt   d_fpt   d_fdpRB   R5   RC   RD   RE   RF   t	   site_gtmxt   u_star_gtmx(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   df_d_paramsW   sd    E			!#+$c   -      c   s�  d t  j t j |  j ƒ } | j ƒ  } |  j \ } } } t j | d | d | d d | | d | | d | | g ƒ } | j ƒ  } xü|  j D]ñ} | j d k s± t ‚ | j	 }	 | j
 j ƒ  sï | j |  j }
 t  j t |
 ƒ } n  d | j } | j } | d | } t j t j d d ƒ d ƒ } | j
 j ƒ  sgt j t j d d ƒ d ƒ } d  } n$ d  } t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } | j
 j ƒ  sd } d } d } d } nx t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } t j t j d d ƒ d ƒ } d } d } x�|  j D]‚} | j ƒ  j ƒ  j ƒ  }  | | j }! t j |! ƒ j | ƒ }" | j
 j ƒ  rS|  t j d | j ƒ |  j ƒ  }# t j |  j ƒ |# j t j |  j ƒ ƒ }
 t  j t |
 ƒ } n  t  j d |" ƒ }$ |  j ƒ  }% | t j |% |	 | | |$ d	 | |% j ƒ  ƒ 7} | j
 j ƒ  sï| t j |% |	 | | |$ d t |  j | ƒ 7} nW t j! t" |  ƒ ƒ }& | t j |% |	 | | |$ d | j t | ƒ |& j ƒ  ƒ 7} | t j |% | | |$ d | ƒ 7} | t j |% |	 | |$ d | ƒ 7} | t j |% |	 | |$ d	 | ƒ 7} | j
 j ƒ  sM| |	 | | |$ t |  j d 7} | | | |$ t |  j 7} | |	 | |$ t |  j 7} | d |	 | |$ t |  j 7} n² | t j |& |	 | | |$ t d | |& j ƒ  ƒ 7} | t j |& | | |$ t | ƒ 7} | t j |& |	 | |$ t | ƒ 7} | t j |& |	 | d |$ t | ƒ 7} | | |$ 7} | | |$ d 7} q�W| j
 j ƒ  sGd \ }' }( }) }* n d \ }' }( }) }* t j t j |* |* ƒ d ƒ }+ |+ j# }, |, | d d ƒ | j
 j ƒ  sÈ|, | d d ƒ |, | j$ ƒ  d d ƒ n& |, | d d ƒ |, | j$ ƒ  d d ƒ |, | d |' ƒ |, | j$ ƒ  |' d ƒ |, | d |( ƒ |, | j$ ƒ  |( d ƒ |, | d |) ƒ |, | j$ ƒ  |) d ƒ | j
 j ƒ  s¸| |+ d <| |+ d <| |+ d <| |+ d <| |+ d <| |+ d <| |+ d! <n‚ |, | d d ƒ |, | d d ƒ |, | j$ ƒ  d d ƒ |, | d d ƒ |, | j$ ƒ  d d ƒ |, | d d ƒ |, | j$ ƒ  d d ƒ | |+ |' |* |( <| |+ |( |* |' <| |+ |' |* |) <| |+ |) |* |' <|+ Vq– Wd  S("   Ni   R   i   y              ð?i   y                i   R,   iÿÿÿÿi   i   i   i	   i
   i   i   i    (   i   i   i   i   (   i	   i
   i   i   i   i   i   i   i   i   i   i   i#   i&   i   i   i*   i-   (%   R-   R.   R   R/   R)   t   outer_productR(   R   R0   R
   R   R1   R	   R*   R2   R3   R   R   R   t   complex_doublet   gridR   R'   R5   R6   R7   R   R4   R8   R   R9   R:   R;   RH   R   t   matrix_paste_block_in_placet   matrix_transpose(-   R   R<   t   tphkl_outerRJ   RK   R   RL   t   d2_exp_huh_d_u_star_u_starR   R=   R>   R?   R@   R   RA   t   d2_site_sitet   d2_site_u_isot   d2_site_u_start   d2_site_occt
   d2_site_fpt   d2_site_fdpt   d2_u_iso_u_isot   d2_u_iso_occt   d2_u_iso_fpt   d2_u_iso_fdpt   d2_u_star_u_start   d2_u_star_occt   d2_u_star_fpt   d2_u_star_fdpt	   d2_occ_fpt
   d2_occ_fdpRB   R5   RC   RD   RE   RF   RS   RT   t   i_occt   i_fpt   i_fdpt   npt   dpt   paste(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   d2f_d_params�   sÜ    E				#+	,-	9%$	0	





c         C   sj   | j  ƒ  | j ƒ  } } t j g  |  j ƒ  D]7 } g  t | ƒ D] } | | j | | j ^ q? ^ q, ƒ S(   N(   t   dat   dbR   t   doubleRU   R   t   realt   imag(   R   t   targetRt   Ru   t   d_scatterert   d(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   d_target_d_params  s    	c      	   C   sr  g  } | j  ƒ  | j ƒ  } } | j ƒ  | j ƒ  | j ƒ  } } } |  j ƒ  } |  j ƒ  }	 xt | |	 ƒ D]ô \ }
 } t | ƒ } xÙ t	 |
 ƒ D]Ë } g  } x¯ | D]§ } xž t	 | ƒ D]� } | | j
 | j
 | | j | j | | j
 | j | j | j
 } |
 | k r;| j ƒ  } | | | j
 | | j 7} n  | j | ƒ q¸ Wq¥ W| j | ƒ q’ Wqm Wt j | ƒ S(   N(   Rt   Ru   t   daat   dbbt   dabRU   Rs   t   zipt   iterR   Rw   Rx   t   nextRI   R   Rv   (   R   Ry   R"   Rt   Ru   R}   R~   R   t   dst   d2st   di0t   d2it	   d2ij_itert   diR:   t   dj0t   djt   sumt   d2ij(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   d2_target_d_params  s$    &F(   R   R   R   RG   RU   Rs   R|   R�   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR%   6   s   			6	~	t   structure_factorsc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s}   | j  | ƒ s t ‚ | |  _ | j ƒ  |  _ d } x: | j ƒ  D], } | j j ƒ  sb | d 7} q@ | d 7} q@ W| |  _ d  S(   Ni    i   i   (	   t   is_similar_symmetryR0   R+   t   indicest   miller_indicesR(   R   R1   t   number_of_parameters(   R   R+   t
   miller_setRp   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR   )  s    	c         C   sI   t  j ƒ  } x6 |  j D]+ } | j t d |  j d | ƒ j ƒ  ƒ q W| S(   NR+   R)   (   R   RW   R‘   RI   R%   R+   RG   (   R   R"   R)   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   fs5  s
    c         C   s   t  j |  j ƒ  ƒ S(   N(   R   R‹   R”   (   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyRG   <  s    c         C   s‹   t  j |  j d ƒ } xo t |  j | j ƒ  ƒ D]U \ } } t d |  j d | ƒ } | d | d | j ƒ  ƒ } | | j	 d | ƒ 7} q. W| S(   Ni    R+   R)   t   obst   calcRy   (
   R   Rv   R’   R€   R‘   t   dataR%   R+   RG   R|   (   R   t   f_obst   target_typeR"   R)   R•   t   sfRy   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR|   ?  s    %c   	      C   s�   |  j  } t j t j | | ƒ d ƒ } xo t |  j | j ƒ  ƒ D]U \ } } t d |  j d | ƒ } | d | d | j	 ƒ  ƒ } | | j
 d | ƒ 7} q@ W| S(   Ni    R+   R)   R•   R–   Ry   (   R’   R   Rv   RX   R€   R‘   R—   R%   R+   RG   R�   (	   R   R˜   R™   Rp   R"   R)   R•   Rš   Ry   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyR�   G  s    	%(   R   R   R   R”   RG   R|   R�   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyRŽ   '  s
   				(    (    (    (   t
   __future__R    t   cctbxR   t   scitbx.mathR   t   scitbxR   t   scitbx.array_familyR   R;   R-   R   R   R   R$   R.   R3   R%   RŽ   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_3.pyt   <module>   s   			ñ