ó
s™xTc           @   sW  d  d l  m Z y d  d l Z Wn e k
 r? d  d l Z n Xd  d l m Z d  d l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ	 d e f d	 „  ƒ  YZ
 d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   divisionN(   t   matrixt   zero_dof_alignmentc           B   s   e  Z d  „  Z RS(   c      
   C   s(   t  j d d f ƒ |  _ |  j |  _ d  S(   Ni   i    (	   i   i    i    i    i   i    i    i    i   (   i    i    i    (   R   t   rtt   cb_0bt   cb_b0(   t   O(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   __init__	   s    (   t   __name__t
   __module__R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR      s   t   zero_dofc           B   sn   e  Z d  Z e j d e ƒ Z e Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z RS(
   i    t   nc      
   C   sL   d |  _  t j d d f ƒ |  _ |  j |  _ t j d d d d	 ƒ |  _ d  S(
   Ni    i   t   elemsR   i   (	   i   i    i    i    i   i    i    i    i   (   i    i    i    (    (   i   i    (   t   q_sizeR   R   t   cb_pst   cb_spt   rect   motion_subspace(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR      s    	c         C   s   d  S(   N(   t   None(   R   t   qd(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   get_linear_velocity   s    c         C   s   d  S(   N(   R   (   R   R   t   value(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   new_linear_velocity   s    c         C   s   t  ƒ  S(   N(   R
   (   R   R   t   delta_t(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   time_step_position   s    c         C   s   t  j S(   N(   R
   t   qd_zero(   R   R   t   qddR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   time_step_velocity"   s    c         C   s   t  j S(   N(   R
   R   (   R   t   tau(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   tau_as_d_e_pot_d_q%   s    c         C   s   d S(   N(    (    (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   get_q(   s    c         C   s   t  ƒ  S(   N(   R
   (   R   t   q(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   new_q+   s    (   R   R	   t   degrees_of_freedomR   t   zerosR   t   qdd_zeroR   R   R   R   R   R   R   R    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR
      s   							t   six_dof_alignmentc           B   s   e  Z d  „  Z RS(   c      
   C   s5   t  j d | f ƒ |  _ t  j d | f ƒ |  _ d  S(   Ni   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   center_of_mass(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   0   s    (   R   R	   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR$   .   s   t   six_dofc           B   sn   e  Z d  Z e j d e ƒ Z e Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z RS(
   i   R   c         C   sŸ   | |  _  | |  _ d |  _ | j ƒ  |  _ t d |  j ƒ |  _ | |  _ t j	 |  j |  j |  j f ƒ |  _
 t j	 |  j j ƒ  |  j f ƒ |  _ d  |  _ d  S(   Ni   R   (   t   qet   qrR   t	   normalizet   unit_quaterniont   rbda_eq_4_12t   et   rR   R   R   t	   transposeR   R   R   (   R   R'   R(   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   :   s    				&$c         C   s   t  j | j d ƒ S(   Ni   (   R   t   colR   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   E   s    c         C   s)   t  j t  j | j d  ƒ | f ƒ j ƒ  S(   Ni   (   R   R/   R   t   resolve_partitions(   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   H   s    c   	      C   s�   t  j | j d  | j d g ƒ \ } } t d |  j ƒ | } |  j | | j ƒ  } |  j j ƒ  | } |  j	 | | } t
 d | d | ƒ S(   Ni   R   R'   R(   (   R   t   col_listR   t   rbda_eq_4_13R*   R'   R)   R,   R.   R(   R&   (	   R   R   R   t   w_body_framet   v_body_framet   qedt   new_qet   qrdt   new_qr(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   K   s    )c         C   s   | | | S(   N(    (   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   S   s    c         C   s   t  d |  j ƒ } | d t d |  j ƒ } t j | j d  | j d g ƒ \ } } t j | | |  j j	 ƒ  | f ƒ j
 ƒ  S(   NR   i   i   (   t   d_unit_quaternion_d_qe_matrixR'   R2   R*   R   R1   R   R/   R,   R.   R0   (   R   R   t   dt   cR   t   f(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   V   s    )c         C   s   |  j  j |  j j S(   N(   R'   R   R(   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   \   s    c         C   s6   t  j | d  | d f ƒ \ } } t d | d | ƒ S(   Ni   R'   R(   (   R   R1   R&   (   R   R   R6   R8   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR    _   s    #(   R   R	   R!   R   R"   R   R#   R   R   R   R   R   R   R   R    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR&   4   s   							t   spherical_alignmentc           B   s   e  Z d  „  Z RS(   c      
   C   s5   t  j d | f ƒ |  _ t  j d | f ƒ |  _ d  S(   Ni   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   pivot(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   e   s    (   R   R	   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR=   c   s   t	   sphericalc           B   sn   e  Z d  Z e j d e ƒ Z e Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z RS(
   i   R   c         C   s…   | |  _  d |  _ | j ƒ  |  _ t d |  j ƒ } t j | d f ƒ |  _ t j | j ƒ  d	 f ƒ |  _	 t j
 d
 d d ƒ|  _ d  S(   Ni   R   i    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   (   R'   R   R)   R*   R+   R   R   R   R.   R   R   R   (   R   R'   R,   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   o   s    		     c         C   s   d  S(   N(   R   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ~   s    c         C   s   d  S(   N(   R   (   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   �   s    c         C   s@   | } t  d |  j ƒ | } |  j | | j ƒ  } t d | ƒ S(   NR   R'   (   R2   R*   R'   R)   R?   (   R   R   R   R3   R5   R6   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   „   s    c         C   s   | | | S(   N(    (   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   Š   s    c         C   s:   t  d |  j ƒ } | d t d |  j ƒ } | } | | S(   NR   i   (   R9   R'   R2   R*   (   R   R   R:   R;   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   �   s    c         C   s
   |  j  j S(   N(   R'   R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   “   s    c         C   s   t  d t j | ƒ ƒ S(   NR'   (   R?   R   R/   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR    –   s    (   R   R	   R!   R   R"   R   R#   R   R   R   R   R   R   R   R    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR?   i   s   							t   revolute_alignmentc           B   s   e  Z d  „  Z RS(   c         C   sK   | j  ƒ  } t j | | | f ƒ |  _ t j | j ƒ  | f ƒ |  _ d  S(   N(   t   vector_to_001_rotationR   R   R   R.   R   (   R   R>   t   normalR-   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ›   s    (   R   R	   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR@   ™   s   t   revolutec           B   sn   e  Z d  Z e j d e ƒ Z e Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z RS(
   i   R   c      
   C   s¶   | |  _  t | ƒ |  _ t j | d ƒ t j | d ƒ } } t j | | d | | d d d d f	 ƒ } t j | d f ƒ |  _	 t j | j
 ƒ  d f ƒ |  _ t j d ƒ |  _ d  S(   Ni    i   (   i    i    i    (   i    i    i    (   i    i    i   i    i    i    (   R'   t   lenR   t   matht   cost   sinR   t   sqrR   R   R.   R   R/   R   (   R   R'   R;   t   sR,   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ¦   s    	'+c         C   s   d  S(   N(   R   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ±   s    c         C   s   d  S(   N(   R   (   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ´   s    c         C   s   |  j  | | } t d | ƒ S(   NR'   (   R'   RC   (   R   R   R   R6   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ·   s    c         C   s   | | | S(   N(    (   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   »   s    c         C   s   | S(   N(    (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ¾   s    c         C   s
   |  j  j S(   N(   R'   R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   Á   s    c         C   s   t  d t j | ƒ ƒ S(   NR'   (   RC   R   R/   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR    Ä   s    (   R   R	   R!   R   R"   R   R#   R   R   R   R   R   R   R   R    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyRC       s   							t   translational_alignmentc           B   s   e  Z RS(    (   R   R	   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyRJ   Ç   s    t   translationalc           B   sn   e  Z d  Z e j d e ƒ Z e Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z RS(
   i   R   c         C   s_   | |  _  d |  _ t j d | f ƒ |  _ t j d | f ƒ |  _ t j d d d	 ƒ|  _ d  S(
   Ni   i   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    i    i   i    i    i    i   (   i   i   (   R(   R   R   R   R   R   R   R   (   R   R(   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   Ï   s    		     c         C   s   | S(   N(    (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   Ü   s    c         C   s   | S(   N(    (   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ß   s    c         C   s   |  j  | | } t d | ƒ S(   NR(   (   R(   RK   (   R   R   R   R8   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   â   s    c         C   s   | | | S(   N(    (   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   æ   s    c         C   s   | S(   N(    (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   é   s    c         C   s
   |  j  j S(   N(   R(   R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR   ì   s    c         C   s   t  d t j | ƒ ƒ S(   NR(   (   RK   R   R/   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR    ï   s    (   R   R	   R!   R   R"   R   R#   R   R   R   R   R   R   R   R    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyRK   É   s   							c         C   s¶   |  \ } } } } t  j | d | d d | | | | | | | | | | | | | d | d d | | | | | | | | | | | | | d | d d f	 ƒ d S(   Ni   g      à?(   R   RH   (   R   t   p0t   p1t   p2t   p3(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR+   ò   s
    11c         C   sS   |  \ } } } } t  j | | | | | | | | | | | | f d d ƒd S(   NR   i   i   g      à?(   i   i   (   R   R   (   R   RL   RM   RN   RO   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR2   ù   s    

c         C   s  |  \ } } } } | d | d | d | d f \ } } } } | | | | d }	 | | | }
 | | | } | | | } | | | } | | } | | } | | } | | } | | } | | } t  j |
 | | | | | | | | | | | | | | | f ƒ |	 S(   s5  
  Coefficent matrix for converting gradients w.r.t. normalized Euler
  parameters to gradients w.r.t. non-normalized parameters, as produced
  e.g. by a minimizer in the line search.
  Mathematica code:
    nsq = p0^2+p1^2+p2^2+p3^2
    p0p = p0 / Sqrt[nsq]
    p1p = p1 / Sqrt[nsq]
    p2p = p2 / Sqrt[nsq]
    p3p = p3 / Sqrt[nsq]
    n3 = (p0^2+p1^2+p2^2+p3^2)^(3/2)
    FortranForm[FullSimplify[D[p0p,p0]*n3]]
    FortranForm[FullSimplify[D[p1p,p0]*n3]]
    FortranForm[FullSimplify[D[p2p,p0]*n3]]
    FortranForm[FullSimplify[D[p3p,p0]*n3]]
    FortranForm[FullSimplify[D[p0p,p1]*n3]]
    FortranForm[FullSimplify[D[p1p,p1]*n3]]
    FortranForm[FullSimplify[D[p2p,p1]*n3]]
    FortranForm[FullSimplify[D[p3p,p1]*n3]]
    FortranForm[FullSimplify[D[p0p,p2]*n3]]
    FortranForm[FullSimplify[D[p1p,p2]*n3]]
    FortranForm[FullSimplify[D[p2p,p2]*n3]]
    FortranForm[FullSimplify[D[p3p,p2]*n3]]
    FortranForm[FullSimplify[D[p0p,p3]*n3]]
    FortranForm[FullSimplify[D[p1p,p3]*n3]]
    FortranForm[FullSimplify[D[p2p,p3]*n3]]
    FortranForm[FullSimplify[D[p3p,p3]*n3]]
  i   i   g       @g      ø?(   R   RH   (   R   RL   RM   RN   RO   t   p0st   p1st   p2st   p3st   n3t   c00t   c11t   c22t   c33t   c01t   c02t   c03t   c12t   c13t   c23(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyR9     s$    .(   t
   __future__R    t   scitbxt   ImportErrort   scitbx_matrixR   RE   t   objectR   R
   R$   R&   R=   R?   R@   RC   RJ   RK   R+   R2   R9   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/joint_lib.pyt   <module>   s&     !/0')		