ó
7™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 „  Z d „  Z d	 „  Z d
 d d „  ƒ  YZ d d d „  ƒ  YZ d „  Z d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   xray(   t   g_exp_i_alpha_derivatives(   t   matrix(   t   flexNc         C   s)   t  |  j ƒ |  j |  j |  j |  j g S(   N(   t   listt   sitet   u_isot	   occupancyt   fpt   fdp(   t   self(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   scatterer_as_list   s    c         C   sB   t  j d |  d  d |  d d |  d d d d |  d	 d
 |  d ƒ S(   NR   i   t   uR   i   t   scattering_typet   constR	   i   R
   i   (   R   t	   scatterer(   t   l(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   scatterer_from_list   s    	



c         C   s{   t  j d |  j t j d t j d |  j | ƒ d d |  j d |  j d d t j t	 j
 |  j ƒ j t	 j
 | ƒ ƒ ƒ S(   Nt   giþÿÿÿi   t   ffpi   R
   t   alpha(   R   t
   parametersR   t   matht   expt   piR   R	   R
   R   t   colR   t   dot(   R   t   hklt	   d_star_sq(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   scatterer_as_g_alpha   s    	&	t	   gradientsc           B   s   e  Z d  „  Z RS(   c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R   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_2.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_2.pyR      s   t
   curvaturesc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   uut   uw(   R   R$   R%   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR    '   s    	(   R!   R"   R    (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR#   %   s   c         C   s.   g  } x! |  D] } | j  t | ƒ ƒ q W| S(   N(   t   extendR   (   t   gradst   resultR   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   pack_gradients+   s    t   structure_factorc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s@   | j  ƒ  |  _  | j ƒ  |  _ | |  _ |  j  j | ƒ |  _ d  S(   N(   t	   unit_cellt
   scatterersR   R   (   R   t   xray_structureR   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR    3   s    	c      	   C   sR   g  } x9 |  j  D]. } | j t d | d |  j d |  j ƒ ƒ q Wt j d | ƒ S(   NR   R   R   t   params(   R,   t   appendR   R   R   R   t   g_exp_i_alpha_sum(   R   R.   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   as_exp_i_sum9   s
     c         C   s   |  j  ƒ  j ƒ  S(   N(   R1   t   f(   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR2   @   s    c         C   sœ   g  } d t  j d |  j } xw |  j D]l } t  j | | j ƒ } | j t d d t  j t j	 |  j
 ƒ d | j | | d | d d d d ƒ ƒ q( W| S(	   s–   Mathematica:
         alpha = 2 Pi {h,k,l}.{x,y,z}
         g = w Exp[-2 Pi^2 u dss]
         D[alpha,x]; D[alpha,y]; D[alpha,z]; D[g,u]; D[g,w]"
    iþÿÿÿi   R   R   R   R	   i   R
   (   R   R   R   R,   R   R   R/   R   R   R   R   R   (   R   R(   t   cR   t   e(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   d_g_alpha_d_paramsC   s    c         C   s{   g  } d t  j d |  j } xV |  j D]K } t  j | | j ƒ } | j t d | d | j | d | | ƒ ƒ q( W| S(   s‘  Mathematica:

         alpha = 2 Pi {h,k,l}.{x,y,z}
         g = w Exp[-2 Pi^2 u dss]
         D[alpha,x,x]; D[alpha,x,y]; D[alpha,x,z]; D[g,x,u]; D[g,x,w]"
         D[alpha,y,x]; D[alpha,y,y]; D[alpha,y,z]; D[g,y,u]; D[g,y,w]"
         D[alpha,z,x]; D[alpha,z,y]; D[alpha,z,z]; D[g,z,u]; D[g,z,w]"
         D[alpha,u,x]; D[alpha,u,y]; D[alpha,u,z]; D[g,u,u]; D[g,u,w]"
         D[alpha,w,x]; D[alpha,w,y]; D[alpha,w,z]; D[g,w,u]; D[g,w,w]"

    This curvature matrix is symmetric.
    All D[alpha, x|y|z, x|y|z|u|w] are 0.

       D[g,u,u] = (4 dss^2 Pi^4) w Exp[-2 Pi^2 u dss]
       D[g,u,w] = (-2 dss Pi^2)    Exp[-2 Pi^2 u dss]
       D[g,w,w] = 0
    iþÿÿÿi   R$   R%   (	   R   R   R   R,   R   R   R/   R#   R   (   R   R(   R3   R   R4   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   d2_g_alpha_d_paramsU   s    3c         C   s©   g  } |  j  ƒ  j d | ƒ } |  j ƒ  } xx t | | ƒ D]g \ } } | j t d | j t j | j	 ƒ d | j
 | j d | j
 | j d | j d | j ƒ ƒ q: W| S(   Nt   targetR   R   R   R	   R
   (   R1   t   d_target_d_paramsR5   t   zipR/   R   R   R   R   R   R   R   R   R   R
   (   R   R7   R(   t   dtst   dst   dtt   d(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR8   n   s    	c         C   sp  g  } |  j  ƒ  } | j d | ƒ } t | j d | ƒ ƒ } |  j ƒ  } |  j ƒ  } xt | | | ƒ D]\ } }	 }
 | j ƒ  } xÚ |	 j D]Ï } g  } | j	 } t | ƒ } xž | D]– } | j ƒ  } x# | j D] } | | | | ƒ qÐ W| j ƒ  } | | | | j
 ƒ | | | | j ƒ | | j ƒ  | ƒ | | j ƒ  | ƒ q´ W| j	 | ƒ qŒ Wg  } | j	 } | j ƒ  } t | ƒ } xÿ | D]÷ } | j ƒ  } x& | j D] } | | | |	 j
 ƒ q©W| j ƒ  } | | |	 j
 | j
 ƒ |	 | k r| d c | j |
 j 7<n  | | |	 j
 | j ƒ |	 | k rV| d c | j |
 j 7<n  | | j ƒ  |	 j
 ƒ | | j ƒ  |	 j
 ƒ q�W| j	 | ƒ g  } | j	 } t | ƒ } xÖ | D]Î } | j ƒ  } x& | j D] } | | | |	 j ƒ qÓW| j ƒ  } | | |	 j | j
 ƒ |	 | k r?| d c | j |
 j 7<n  | | |	 j | j ƒ | | j ƒ  |	 j ƒ | | j ƒ  |	 j ƒ q·W| j	 | ƒ xÏ d d g D]Á } g  } | j	 } t | j ƒ  ƒ } xŠ | D]‚ } | j ƒ  } x | j D] } | | | ƒ qíW| j ƒ  } | | | j
 ƒ | | | j ƒ | | j ƒ  ƒ | | j ƒ  ƒ qÑW| j	 | ƒ q£Wqg W| S(   s¡  Combined application of chain rule and product rule.
       d_target_d_.. matrix:

         aa ag a' a"
         ga gg g' g"
         'a 'g '' '"
         "a "g "' ""

       Block in resulting matrix:

         xx xy xz xu xw x' x"
         yx yy yz yu yw y' y"
         zx zy zz zu zw z' z"
         ux uy uz uu uw '' '"
         wx wy wz wu ww "' ""
         'x 'y 'z 'u 'w '' '"
         "x "y "z "u "w "' ""
    R7   iÿÿÿÿi    i   (   R1   R8   t   itert   d2_target_d_paramsR5   R6   R9   t   nextR   R/   R   R   R   R$   R%   (   R   R7   R(   t	   exp_i_sumR:   t   d2tiR;   t   d2sR<   t   dit   d2t   d2ti0t   dxit   rowt   rat   d2tijt   djt   d2tt   dxjt   ip(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR?   {   sŒ    " 	 	   	  	(	   R!   R"   R    R1   R2   R5   R6   R8   R?   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR*   1   s   						t   structure_factorsc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sJ   | j  | ƒ s t ‚ | |  _ | j ƒ  |  _ | j ƒ  j ƒ  d |  _ d  S(   Ni   (   t   is_similar_symmetryt   AssertionErrorR-   t   indicest   miller_indicesR,   t   sizet   number_of_parameters(   R   R-   t
   miller_set(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR    Ô   s    	c         C   sI   t  j ƒ  } x6 |  j D]+ } | j t d |  j d | ƒ j ƒ  ƒ q W| S(   NR-   R   (   R   t   complex_doubleRS   R/   R*   R-   R2   (   R   R(   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   fsÚ   s
    c         C   s   t  j |  j ƒ  ƒ S(   N(   R   t   sumRX   (   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR2   á   s    c         C   sš   t  j |  j d ƒ } x~ t |  j | j ƒ  ƒ D]d \ } } t d |  j d | ƒ } | d | d | j ƒ  ƒ } | t  j t	 | j
 d | ƒ ƒ ƒ 7} q. W| S(   Ni    R-   R   t   obst   calcR7   (   R   t   doubleRU   R9   RS   t   dataR*   R-   R2   R)   R8   (   R   t   f_obst   target_typeR(   R   RZ   t   sfR7   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR8   ä   s    %	 c         C   s˜   t  j |  j d d ƒ } xx t |  j | j ƒ  ƒ D]^ \ } } t d |  j d | ƒ } | d | d | j ƒ  ƒ } | t  j | j	 d | ƒ ƒ 7} q2 W| S(   Ni   i    R-   R   RZ   R[   R7   (
   R   R\   RU   R9   RS   R]   R*   R-   R2   R?   (   R   R^   R_   R(   R   RZ   R`   R7   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyR?   í   s    %#(   R!   R"   R    RX   R2   R8   R?   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyRO   Ò   s
   					(    (    (    (    (   t
   __future__R    t   cctbxR   t   cctbx.examplesR   t   scitbxR   t   scitbx.array_familyR   R   R   R   R   R   R#   R)   R*   RO   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/structure_factor_derivatives_2.pyt   <module>   s   						¡