ó
s™xTc           @   sÂ   d  d l  m Z d  d l Z d  d l Z e j Z d e f d „  ƒ  YZ d „  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 S(   iÿÿÿÿ(   t   divisionNt   mass_pointsc           B   s8   e  Z d  „  Z d „  Z d „  Z d „  Z d d „ Z RS(   c         C   sF   t  | ƒ t  | ƒ k s t ‚ | |  _ | |  _ d  |  _ d  |  _ d  S(   N(   t   lent   AssertionErrort   sitest   massest   Nonet   _sum_of_massest   _center_of_mass(   t   OR   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   __init__   s
    			c         C   sF   |  j  d  k r? d } x |  j D] } | | 7} q W| |  _  n  |  j  S(   Ni    (   R   R   R   (   R	   t   smt   mass(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   sum_of_masses   s    c         C   s¢   |  j  d  k r› t |  j ƒ d k s* t ‚ |  j ƒ  d k sB t ‚ t j d ƒ } x1 t |  j |  j	 ƒ D] \ } } | | | 7} qg W| |  j ƒ  |  _  n  |  j  S(   Ni    (   i    i    i    (
   R   R   R   R   R   R   t   matrixt   colt   zipR   (   R	   t   smsR   t   site(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   center_of_mass   s    "c         C   s%  d g d } xÞ t  |  j |  j ƒ D]Ç \ } } | | \ } } } | d c | | | | | 7<| d c | | | | | 7<| d c | | | | | 7<| d c | | | 8<| d c | | | 8<| d c | | | 8<q# W| d | d <| d | d	 <| d | d
 <t j | ƒ S(   Ni    i	   i   i   i   i   i   i   i   i   (   R   R   R   R   t   sqr(   R	   t   pivott   mR   R   t   xt   yt   z(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   inertia!   s    "   c         C   sp   |  j  ƒ  } |  j d | ƒ } | d  k	 rQ | | } | j | | j j ƒ  } n  t j d |  j d | d | ƒ S(   NR   R   t   ct   i(   R   R   R   t   rt	   transposet   spatial_libt   mciR   (   R	   t   alignment_cb_0bR   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   spatial_inertia0   s    
N(   t   __name__t
   __module__R
   R   R   R   R   R"   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR      s
   			
	c         C   sV   xO |  D]G } | j  d k r. | j j | _ q | j j |  | j  j j | _ q Wd S(   s5   Computes Xtree (RBDA Fig. 4.7, p. 74) for all bodies.iÿÿÿÿN(   t   parentt	   alignmentt   cb_0bt   cb_treet   cb_b0(   t   bodiest   body(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   set_cb_tree8   s    t   zero_dofc           B   s   e  Z d  „  Z RS(   c         C   sh   t  | ƒ |  _ t | ƒ |  _ t j ƒ  |  _ t j d g d ƒ |  _	 t j
 ƒ  |  _ |  j j |  _ d  S(   Ni    i$   (   R   t   number_of_sitest   sumR   t	   joint_libt   zero_dof_alignmentR&   R   R   t	   i_spatialR-   t   jointt   qd_zerot   qd(   R	   R   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR
   B   s    (   R#   R$   R
   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR-   @   s   t   six_dofc           B   s   e  Z d  „  Z RS(   c         C   sµ   t  | ƒ |  _ t d | d | ƒ } | j ƒ  |  _ t j d | j ƒ  ƒ |  _ | j d |  j j	 ƒ |  _
 t j d	 ƒ } t j d
 ƒ } t j d | d | ƒ |  _ |  j j |  _ d  S(   NR   R   R   R!   i   i    t   qet   qr(   i   i    i    i    (   i    i    i    (   R   R.   R   R   R0   t   six_dof_alignmentR   R&   R"   R'   R2   R   R   R6   R3   R4   R5   (   R	   R   R   t   mpR7   R8   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR
   L   s    	(   R#   R$   R
   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR6   J   s   t	   sphericalc           B   s   e  Z d  „  Z RS(   c         C   sš   t  | ƒ |  _ t d | d | ƒ } | j ƒ  |  _ t j d | ƒ |  _ | j d |  j j ƒ |  _	 t
 j d ƒ } t j d | ƒ |  _ |  j j |  _ d  S(	   NR   R   R   R!   i   i    R7   (   i   i    i    i    (   R   R.   R   R   R0   t   spherical_alignmentR&   R"   R'   R2   R   R   R;   R3   R4   R5   (   R	   R   R   R   R:   R7   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR
   [   s    (   R#   R$   R
   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR;   Y   s   t   revolutec           B   s   e  Z d  „  Z RS(   c         C   s�   t  | ƒ |  _ t d | d | ƒ } | j ƒ  |  _ t j d | d | ƒ |  _ | j d |  j j ƒ |  _	 t j
 d t j d g ƒ ƒ |  _ |  j j |  _ d  S(   NR   R   R   t   normalR!   R7   i    (   R   R.   R   R   R0   t   revolute_alignmentR&   R"   R'   R2   R=   R   R   R3   R4   R5   (   R	   R   R   R   R>   R:   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR
   h   s    !(   R#   R$   R
   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR=   f   s   t   translationalc           B   s   e  Z d  „  Z RS(   c         C   s    t  | ƒ |  _ t d | d | ƒ } | j ƒ  |  _ t j d | j ƒ  ƒ |  _ | j d |  j j	 ƒ |  _
 t j d ƒ } t j d | ƒ |  _ |  j j |  _ d  S(   NR   R   R   R!   i    R8   (   i    i    i    (   R   R.   R   R   R0   t   translational_alignmentR   R&   R"   R'   R2   R   R   R@   R3   R4   R5   (   R	   R   R   R:   R8   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR
   t   s    	(   R#   R$   R
   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyR@   r   s   (   t
   __future__R    R0   R   R   t   objectR   R,   R-   R6   R;   R=   R@   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/rigid_body/essence/body_lib.pyt   <module>   s   	2	
