ó
u™xTc           @   s`   d  d l  m Z d  d l m Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z	 d S(	   iÿÿÿÿ(   t   division(   t   matrixc   	      C   sr   d } | j  | j | j } | d  k	 r6 | | } n  x5 t |  | ƒ D]$ \ } } | | | | j ƒ  7} qF W| S(   Ni    (   t   Tb0t   Tspt   T0bt   Nonet   zipt   dot(	   t   sitest   wellst   At   Jt   AJA_treet   resultt   AJAt   st   w(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   potential_energy   s     c         C   sÜ   | j  | j | j } | d  k	 r0 | | } n  g  t |  | ƒ D] \ } } d | | | ^ q@ } t j d ƒ }	 t j d ƒ }
 x> t |  | ƒ D]- \ } } |	 | 7}	 |
 | | j | ƒ 7}
 q’ Wt j |
 |	 f ƒ j ƒ  S(   Niþÿÿÿi    (   i    i    i    (   i    i    i    (	   R   R   R   R   R   R   t   colt   crosst   resolve_partitions(   R   R	   R
   R   R   R   R   R   t	   f_cart_fft   ft   nct   force_ff(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   potential_f_ext_ff   s     4
c   	      C   sx   d } | j  | j } | d  k	 r5 | | j ƒ  9} n  x< t |  | ƒ D]+ \ } } | | j | | | j ƒ  7} qE W| S(   Ni    (   t   TpsR   R   t   inverse_assuming_orthogonal_rR   R   (	   R   R	   R
   R   R   R   t   JAR   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   potential_energy_bf   s     #c         C   s!  | j  | j | j } | d  k	 r0 | | } n  g  t |  | ƒ D] \ } } d | | | ^ q@ } | j j | j j }	 | d  k	 rœ |	 | j j ƒ  9}	 n  t j	 d ƒ }
 t j	 d ƒ } xK t |  | ƒ D]: \ } } |	 | } |
 | 7}
 | | j | j
 | ƒ 7} qÊ Wt j	 | |
 f ƒ j ƒ  S(   Niþÿÿÿi    (   i    i    i    (   i    i    i    (   R   R   R   R   R   R   t   rt	   transposeR   R   R   R   (   R   R	   R
   R   R   R   R   R   R   t   JArR   R   R   t   force_bf(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   potential_f_ext_bf   s     4 

c         C   sš   | d k r$ t j | j ƒ  ƒ } n  t j | j d d ƒ d ƒ } g  } xJ |  D]B } | t j | j d d ƒ d ƒ d } | j | | | ƒ qP W| S(   s/   overall random rotation and translation + noiset   sizei   g      à?gš™™™™™É?N(   R   R   t   sqrt    random_double_r3_rotation_matrixR   t   random_doublet   append(   R   t   mersenne_twisterR   t   tR	   t   sitet   t_noise(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   create_wells-   s    'N(
   t
   __future__R    t   scitbxR   R   R   R   R   R"   R,   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/proto/test_utils.pyt   <module>   s   