ó
@™xTc           @   sR  d  Z  d d l m Z d d l Z d d l Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z	 d	 „  Z
 d
 d „ Z d „  Z d e f d „  ƒ  YZ d d „ Z d d „ Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z 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' e f d( „  ƒ  YZ d d) „ Z d d* „ Z  d+ e f d, „  ƒ  YZ! d- e f d. „  ƒ  YZ" d/ „  Z# d0 „  Z$ e% d1 k rNd d l& Z& d2 „  Z' d3 „  Z( d4 „  Z) d5 „  Z* d6 „  Z+ d7 „  Z, e, ƒ  n  d S(8   sû  Module for rotation parameter conversions.

Example usage:

import rotation_parameters
a = rotation_parameters.amore_alpha_beta_gamma(params=(30,40,50))
print a.params
print a.matrix
c = rotation_parameters.cns_theta1_theta2_theta3(matrix=a.matrix)
print c.params
print c.matrix

To see a list of all available converters:

import rotation_parameters
for conv in rotation_parameters.get_converters():
  print conv.__doc__

With kind permission of A.G. Urzhumtsev, some functions are
based on the FORTRAN program CONVROT:
  Urzhumtseva, L.M. & Urzhumtsev, A.G. (1997).
  Tcl/Tk-based programs. II.
  CONVROT: a program to recalculate different rotation descriptions.
  J. Appl. Cryst. 30, 402-410.

Revision history:
  2002 Jan: Created (Ralf W. Grosse-Kunstleve)
iÿÿÿÿ(   t   divisionNt   matrix33c           B   sG   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s1   Minimal class for the handling of (3x3) matrices.c      	   C   sA   | d  k	 r | |  _ n$ d d d d d d d d d g	 |  _ d  S(   Ni   i    (   t   Nonet   elems(   t   selfR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   __init__$   s
    		c         C   s   | d d | d S(   Ni    i   i   (    (   R   t   key(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   index1d,   s    c         C   s   |  j  |  j | | f ƒ S(   N(   R   R   (   R   t   it   j(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   __call__/   s    c         C   s   d d t  |  j ƒ S(   Ns    %.6f %.6f %.6f
i   (   t   tupleR   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   __repr__2   s    c         C   s!   |  j  } | d | d | d S(   Ni    i   i   (   R   (   R   t   m(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   trace5   s    	c         C   s�   |  j  } | d | d | d | d | d | d | d | d | d | d | d	 | d | d | d | d S(
   Ni    i   i   i   i   i   i   i   i   (   R   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   det9   s    	N(
   t   __name__t
   __module__t   __doc__R   R   R   R
   R   R   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR   !   s   				c         C   sO   t  |  ƒ t j t j f k r@ g  |  D] } | t j d ^ q% S|  t j d S(   Ni´   (   t   typet   typest	   TupleTypet   ListTypet   matht   pi(   t   anglest   a(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   degree_as_radians?   s    "c         C   sO   t  |  ƒ t j t j f k r@ g  |  D] } | t j d ^ q% S|  t j d S(   Ni´   (   R   R   R   R   R   R   (   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   degree_from_radiansD   s    "c         C   s$   |  d k r d S|  d k  r  d S|  S(   Ng      ð?g      ð¿(    (   t   c(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   adjust_cosineI   s
      c         C   s,   |  d k r | d k r d St  j |  | ƒ S(   Ng        (   R   t   atan2(   t   yt   x(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt
   safe_atan2N   s     g     €v@c         C   s/   t  j |  | ƒ }  |  d k  r+ |  | }  n  |  S(   Ng        (   R   t   fmod(   t   phit   period(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   fmod_positiveR   s     c         C   sZ   t  |  ƒ } g  | D] } t j | ƒ ^ q } g  | D] } t j | ƒ ^ q5 } | | f S(   N(   R   R   t   cost   sin(   t   paramst   a_radR   R   t   s(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   preprocess_anglesW   s    ""t   converter_basec           B   s    e  Z d  Z d d d d „ Z RS(   s  Base class for conversions of rotation parameters.
    m = self.matrix is a (3x3) matrix that transforms
    cartesian coordinates of the search body according to:

    (x')   (m(0,0),m(0,1),m(0,2)) (x)
    (y') = (m(1,0),m(1,1),m(1,2)) (y)
    (z')   (m(2,0),m(2,1),m(2,2)) (z)g�íµ ÷Æ°>c         C   sª   | d  k | d  k k r$ t d ‚ n  | d  k	 rQ | |  _ |  j | | ƒ |  _ nU t | j ƒ  d ƒ | k ry t d ‚ n  | |  _ |  j | | ƒ |  _ |  j	 ƒ  |  _ d  S(   Ns%   Either parameters or matrix required.i   s(   Determinant of matrix is not equal to 1.(
   R   t   ArgumentErrorR)   t   params_to_matrixt   matrixt   absR   t
   ValueErrort   matrix_to_paramst	   normalize(   R   R)   R0   t	   tolerance(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR   f   s    		N(   R   R   R   R   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR-   ]   s   g�íµ ÷Æ°>c         C   sþ   t  |  ƒ \ } } t | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d | d f	 ƒ S(   s,   Core routine for conversion of Euler angles.i    i   i   (   R,   R   (   R)   R5   R   R+   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt    amore_alpha_beta_gamma_as_matrixs   s    '('(c         C   sT  d d d g } d d d g } t  |  d d ƒ ƒ d | k rI t d ‚ n  t |  d d ƒ ƒ | d <t j | d ƒ | d <| d d k r¼ t |  d d ƒ |  d d ƒ ƒ | d <d | d <nŽ | d d k rÿ t |  d d ƒ |  d d ƒ ƒ | d <d | d <nK t |  d d ƒ |  d d ƒ ƒ | d <t |  d d ƒ |  d d ƒ ƒ | d <t | ƒ S(   s,   Core routine for conversion of Euler angles.i    i   g      ð?s   Corrupt matrix.i   g        g      ð¿(   R1   R2   R   R   t   acosR"   R   (   R0   R5   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt"   amore_alpha_beta_gamma_from_matrix‚   s    &&%&c         C   sn   |  \ } } } t  | ƒ } | d k | d k k rU t  | d ƒ t  | ƒ | d g St  | ƒ t  | ƒ | g S(   Ng     €f@i    (   R&   (   R)   t   alternativeR   t   bt   g(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt    amore_alpha_beta_gamma_normalize–   s
    "c         C   sâ  t  |  d ƒ } t j | ƒ } t j | ƒ } |  d d !} | d | d | d | d | d | d } t | d ƒ | k r� t d ‚ n  g  | D] } | t j | ƒ ^ q– } t d | | d | d | d | | d | d | | d d | | d | d | | d d | | d | d | | d d | | d | d | d | | d | d | | d d | | d | d | | d d | | d | d | | d d | | d | d | f	 ƒ S(   s1   Core routine for conversion of direction cosines.i    i   i   i   g      ð?sF   Corrupt direction cosines: the sum of their squares is not equal to 1.(   R   R   R'   R(   R1   R2   t   sqrtR   (   R)   R5   t   kt   ckt   skR   t   sc2R!   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   amore_kappa_l_m_n_as_matrix�   s&    2	&######c      
   C   sà  |  j  ƒ  d d } d | | k o3 d | k n rD t d ‚ n  | d k r` d d d d g S| d k  ru d } n  t j | ƒ } t j | ƒ } g  t d ƒ D]! } |  | | ƒ | d | ^ q  } xe t d ƒ D]W } | | | k  r÷ t d ‚ n  | | d k rd | | <qÔ t j | | ƒ | | <qÔ Wd } d } d d d g }	 xjd D]b|	 d <xUd D]M|	 d <x@d D]8|	 d
 <g  t d ƒ D] } |	 | | | ^ qŠ}
 d } d } xÇ d d d f D]¶ \ } } } t |  | | ƒ d | |
 | |
 | | |
 | ƒ } t |  | | ƒ d | |
 | |
 | | |
 | ƒ } t	 | | ƒ | k rdd } Pn  | | | | | 7} qÄW| rs| d k sœ| | k rs|
 } | } qsqsWqbWqQW| d k rÏt d ‚ n  t
 | ƒ g | S(   s1   Core routine for conversion of direction cosines.g      ð?g       @g      ð¿s   Corrupt matrix.g        i   i    i   iÿÿÿÿi   N(   i   iÿÿÿÿ(   i   iÿÿÿÿ(   i   iÿÿÿÿ(   i    i   i   (   i   i   i    (   i   i    i   (   R   R2   R   R7   R(   t   xrangeR=   R   R1   t   maxR   (   R0   R5   R?   t   kappaR@   R   R   t   best_fct   best_sum_d2t   ft   fct   okt   sum_d2R	   R>   t   dijt   dji(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   amore_kappa_l_m_n_from_matrix´   sL    $ 	4 +99c         C   sK   t  |  ƒ }  |  d k | d k k r; d |  | | | g S|  | | | g S(   Ng     €f@i    g     €v@(   R&   (   RE   t   lR   t   nR9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   amore_kappa_l_m_n_normalizeá   s    c         C   sc   t  | ƒ } | d k | d k k rJ t  |  d ƒ t  | d ƒ d | g St  |  ƒ t  | ƒ | g S(   Ng     €f@i    g     €v@(   R&   (   t   a1t   a2RE   R9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   generic_polar_normalizeç   s    &t   amore_alpha_beta_gammac           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s)   AMoRe alpha, beta, gamma (Crowther, 1972)g�íµ ÷Æ°>c         C   s   t  | | ƒ S(   N(   R6   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   ð   s    c         C   s   t  | | ƒ S(   N(   R8   (   R   R0   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   ó   s    i    c         C   s   t  |  j | ƒ S(   N(   R<   R)   (   R   R9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   ö   s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRU   í   s   t   amore_kappa_l_m_nc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s4   AMoRe kappa, l, m, n (Diamond, 1993; Rossmann, 1993)g    €„.Ac         C   s   t  | | ƒ S(   N(   RB   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   ü   s    g�íµ ÷Æ°>c         C   s   t  | | ƒ S(   N(   RN   (   R   R0   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   ÿ   s    i    c         C   s+   |  j  \ } } } } t | | | | | ƒ S(   N(   R)   RQ   (   R   R9   RE   RO   R   RP   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4     s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRV   ù   s   c         C   s)   |  d |  d |  d |  d |  d g S(   Ni    i   i   (    (   R)   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   cns_theta_123_as_p2m  s    c         C   s1   |  d |  d d |  d |  d |  d d g S(   Ni    i   g       @i   (    (   R)   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   cns_theta_123_from_p2m	  s    t   cns_theta1_theta2_theta3c           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s+   CNS theta1, theta2, theta3 (Rossmann, 1962)g�íµ ÷Æ°>c         C   s+   t  d | d | d d | d g | ƒ S(   Ng     àp@i   i   g     €V@i    (   R6   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/     s    c         C   s.   t  | | ƒ \ } } } d | | d | g S(   Ng     €V@g     àp@(   R8   (   R   R0   R5   R   R:   R;   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3     s    i    c         C   s   t  |  j | ƒ S(   N(   R<   R)   (   R   R9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4     s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRY     s   t!   cns_theta_plus_theta2_theta_minusc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s*   CNS theta+, theta2, theta- (Lattman, 1972)g�íµ ÷Æ°>c         C   s7   t  |  j ƒ \ } } } t d | | d | g | ƒ S(   Ng     àp@g     €V@(   RX   R)   R6   (   R   R)   R5   t   t1t   t2t   t3(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/     s    c         C   s4   t  | | ƒ \ } } } t d | | d | g ƒ S(   Ng     €V@g     àp@(   R8   RW   (   R   R0   R5   R   R:   R;   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   "  s    i    c         C   s„   t  |  j d d ƒ } t  |  j d ƒ } t  |  j d d d ƒ d } | d k | d k k rw | d t  | ƒ | g S| | | g S(   Ni    g     €†@i   i   g     €v@(   R&   R)   (   R   R9   t   tpR\   t   tm(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   &  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRZ     s   t   cns_psi_phi_kappac           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s$   CNS psi, phi, kappa (Rossmann, 1962)g�íµ ÷Æ°>c         C   sb   t  d | d | d d f ƒ \ } } t | d | d | d | d | d | d g | ƒ S(   Ng     €f@i    i   i   (   R,   RB   (   R   R)   R5   R   R+   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   1  s    (c   	      C   s_   t  | | ƒ \ } } } } t j | ƒ } t | | ƒ } t t j | t j | g ƒ | g S(   N(   RN   R   R7   R"   R   R   (	   R   R0   R5   RE   RO   R   RP   t   psiR$   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   6  s    i    c         C   s=   |  j  \ } } } t | | | | ƒ \ } } } | | | g S(   N(   R)   RT   (   R   R9   Ra   R$   RE   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   <  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR`   .  s   t#   cns_axis_x_axis_y_axis_z_axis_kappac           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s6   CNS axis_x, axis_y, axis_z, axis_kappa (Brunger, 1992)g    €„.Ac         C   s,   t  | d | d | d | d g | ƒ S(   Ni   i    i   i   (   RB   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   D  s    g�íµ ÷Æ°>c         C   s.   t  | | ƒ \ } } } } | | | | g S(   N(   RN   (   R   R0   R5   RE   RO   R   RP   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   H  s    i    c         C   sI   |  j  \ } } } } t | | | | | ƒ \ } } } } | | | | g S(   N(   R)   RQ   (   R   R9   t   axt   ayt   azRE   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   L  s    !(   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRb   A  s   t    ccp4_alpha_beta_gamma_fobs_fcalcc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s4   CCP4 alpha, beta, gamma, Fobs/Fcalc (Crowther, 1972)g�íµ ÷Æ°>c         C   s   t  | | ƒ S(   N(   R6   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   U  s    c         C   s   t  | | ƒ S(   N(   R8   (   R   R0   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   X  s    i    c         C   s   t  |  j | ƒ S(   N(   R<   R)   (   R   R9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   [  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRf   R  s   t    ccp4_alpha_beta_gamma_fcalc_fobsc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s4   CCP4 alpha, beta, gamma, Fcalc/Fobs (Crowther, 1972)g�íµ ÷Æ°>c         C   s%   t  | d | d | d g | ƒ S(   Ni   i   i    (   R6   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   a  s    c         C   s(   t  | | ƒ \ } } } | | | g S(   N(   R8   (   R   R0   R5   R   R:   R;   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   e  s    i    c         C   s   t  |  j | ƒ S(   N(   R<   R)   (   R   R9   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   i  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRg   ^  s   c         C   sO   t  |  d  ƒ \ } } t |  d | d | d | d | d | d g | ƒ S(   Ni   i   i    (   R,   RB   (   R)   R5   R   R+   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt0   ccp4_phi_omega_kappa_fcalc_fobs_params_to_matrixl  s    c         C   sP   t  |  | ƒ \ } } } } t j | ƒ } t | | ƒ } t | | g ƒ | g S(   N(   RN   R   R7   R"   R   (   R0   R5   RE   RO   R   RP   t   omegaR$   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt0   ccp4_phi_omega_kappa_fobs_fcalc_matrix_to_paramsr  s    t   ccp4_phi_omega_kappa_fobs_fcalcc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s3   CCP4 phi, omega, kappa, Fobs/Fcalc (Crowther, 1972)g�íµ ÷Æ°>c         C   s   t  | | ƒ S(   N(   Rh   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   |  s    c         C   s   t  | | ƒ S(   N(   Rj   (   R   R0   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   €  s    i    c         C   s%   |  j  \ } } } t | | | | ƒ S(   N(   R)   RT   (   R   R9   R$   Ri   RE   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   „  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRk   y  s   t   ccp4_phi_omega_kappa_fcalc_fobsc           B   s2   e  Z d  Z d d „ Z d d „ Z d d „ Z RS(   s3   CCP4 phi, omega, kappa, Fcalc/Fobs (Crowther, 1972)g�íµ ÷Æ°>c         C   s*   t  | d d d | d | d g | ƒ S(   Ni    g     €f@i   i   (   Rh   (   R   R)   R5   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR/   ‹  s    c         C   s-   t  | | ƒ \ } } } d | d | | g S(   Ng     €f@(   Rj   (   R   R0   R5   R$   Ri   RE   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR3   �  s    i    c         C   s%   |  j  \ } } } t | | | | ƒ S(   N(   R)   RT   (   R   R9   R$   Ri   RE   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyR4   ”  s    (   R   R   R   R/   R3   R4   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyRl   ˆ  s   c       
   C   sx   t  t t t t t t t t t	 f
 }  xM t
 ƒ  j ƒ  D]< } t | d ƒ r4 t | j k rp | |  k sm t ‚ qp q4 q4 W|  S(   Nt	   __bases__(   RU   RV   RY   RZ   R`   Rb   Rf   Rg   Rk   Rl   t   globalst   valuest   hasattrR-   Rm   t   AssertionError(   t
   converterst   global_attr(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   get_converters˜  s    	c         C   s+   x$ t  ƒ  D] } | j |  k r
 | Sq
 Wd  S(   N(   Rt   R   R   (   t	   docstringt   conv(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   get_converter_by_docstring«  s     t   __main__c         C   sÑ   d GHd d d |  j  GHd GHx§ d t f d t f d t f d	 t f f D]{ \ } } | d	 k rj d
 } n d } | t | g | d |  ƒ j ƒ GHd GH| t | g | d |  ƒ j d ƒ ƒ GHd GHqI Wd GHd  S(   Nt   rotmans   matrix=s   (%.10g %.10g %.10g)i   t   copyt   eulet   lattt   sphet   axiss   %s=(%.10g %.10g %.10g) %.10gs   %s=(%.10g %.10g %.10g)R0   s
   ? distancei   t   end(   R   RY   RZ   R`   Rb   R   R)   R4   (   R0   t   labelRv   t   fmt(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt	   cns_input¿  s    		 	"(	c         C   sq   xj t  t |  ƒ ƒ D]V } t |  | | | ƒ d k r d d t |  ƒ GHd d t | ƒ GHt d ‚ q q Wd  S(   Ngñhãˆµøä>s    %.5f %.5f %.5f
i   s   Matrix mismatch.(   RC   t   lenR1   R   t   RuntimeError(   t   list1t   list2R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   compare_listsÏ  s
    c         C   s¾   d t  j d k r! t | ƒ d  S|  d | ƒ } |  d | j ƒ } |  d | j d ƒ ƒ } d t  j d k rˆ d G| j GHd G| j GHn  t | j j | j j ƒ t | j j | j j ƒ d  S(   Ns   --CNSi   R0   R)   s   -vt   rot1t   rot2(   t   syst   argvR‚   R)   R4   R‡   R0   R   (   Rv   R0   t   rot0Rˆ   R‰   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   check_conversionÖ  s    
c         C   sË   xÄ t  d d d ƒ D]° } x§ t  d d d ƒ D]“ } xŠ t  d d d ƒ D]v } d t j d k rr d G| G| G| GHn  t d | | | f ƒ j } y t |  | ƒ WqE t k
 rº } | GHHd  SXqE Wq, Wq Wd  S(   Ni    ii  i-   s   -vi   s   Angles:R)   (   RC   RŠ   R‹   RY   R0   R�   R„   (   Rv   RR   RS   t   a3R0   t   e(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   check_45deg_incrã  s    c          C   s9   d d  l  }  |  j  } g  t d ƒ D] } | ƒ  d ^ q" S(   Niÿÿÿÿi   i´   (   t   randomRC   (   R‘   t   rngR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   random_anglesñ  s    	c          C   s«   x¤ t  ƒ  D]™ }  d t j d k r. |  j GHn  x6 t d ƒ D]( } t d t ƒ  ƒ j } t |  | ƒ q; Wd t j d k r‡ t	 |  ƒ n  d t j d k r
 d GHPq
 q
 Wd  S(   Ns   --CNSi   i
   R)   s   --RandomOnlyt   stop(
   Rt   RŠ   R‹   R   RC   RY   R“   R0   R�   R�   (   Rv   t   trialR0   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   runö  s    (-   R   t
   __future__R    R   R   t   objectR   R   R   R   R"   R&   R,   R-   R6   R8   R<   RB   RN   RQ   RT   RU   RV   RW   RX   RY   RZ   R`   Rb   Rf   Rg   Rh   Rj   Rk   Rl   Rt   Rw   R   RŠ   R‚   R‡   R�   R�   R“   R–   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/macro_mol/rotation_parameters.pyt   <module>   sT   						-												