ó
µ™xTc           @   s`  d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l	 m
 Z
 d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d	 l m Z d  d
 l Te j d ƒ e j d ƒ d „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d d „ Z d „  Z d „  Z  e! d k r\e  ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   flexN(   t   approx_equal(   t   format_cpu_times(   t   sgtbx(   t   adptbx(   t   random_structure(   t   tools(   t   *i    c          C   s—  d  }  d  } d } xèt d ƒ D]Ú} g  } g  } xg t d ƒ D]Y } t j ƒ  } t j ƒ  } t j ƒ  } | d k r} | } n  | j | ƒ | j | ƒ q> Wd | d | d t j d | d | d	 | d | d d	 ƒ }	 d | d | d t j d | d | d	 | d | d d	 ƒ }
 d | d | d t j d | d | d	 | d | d d	 ƒ } d | d | d t j d | d | d	 | d | d d	 ƒ } t |	 |
 ƒ d
 k r t | | ƒ d
 k r t j ƒ  } | d k r| } | } n  | d | d | | d d d g }  | d | d | | d d d g } t j |  ƒ t j | ƒ g j	 t
 ƒ d	 k rùt j |  ƒ } t j | ƒ } | j ƒ  } | j ƒ  } t j t j | ƒ ƒ } t j t j | ƒ ƒ } t t | ƒ t | ƒ ƒ | k  rç| d
 k rç| d
 k rçx: t | ƒ D], \ } } t t | ƒ | ƒ | k  r*Pq*q*Wx: t | ƒ D], \ } } t t | ƒ | ƒ | k  rgPqgqgWt j | j | ƒ ƒ } t j | j | ƒ ƒ } t j | | ƒ | k  róPqóqöd  }  d  } qùq q W|  | g d  d  g k st ‚ t j |  ƒ t j | ƒ g j	 t
 ƒ d	 k sNt ‚ t j ƒ  } | d k r�t j d |  ƒ }  t j d | ƒ } n  |  | f S(   NgVçž¯Ò<i'  i   gš™™™™™¹?g      à?i    i   i   i   g        t   u_cart(   t   Nonet   xranget   randomt   appendt   matht   sqrtt   minR   t   is_positive_definitet   countt   Truet   eigensystemt   valuesR   t   doublet   abst	   enumeratet   vectorst   meant   AssertionErrort   random_rotate_ellipsoid(   t   mt   nt   smallt   it   m2t   n2t   r1t   r2t   r3t   p1t   p2t   q1t   q2t   rt   esmt   esnt   vnt   vmt   mmint   nmint   vt   jt   vecnt   vecm(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   branch_3_mn   sl    	GGGG*	$$!:   'c         C   s¸  g  } g  } x`t  | ƒ d k s3 t  | ƒ d k rnt j ƒ  } t j ƒ  } t j ƒ  } | | k rá | | k rá | d k rá t j ƒ  } | d k r® | | | d d d g } n | | | d d d g } t j | |  ƒ sá t ‚ n  | | k r | | k r | d k r t j ƒ  } | d k r8| | | d d d g } n | | | d d d g } t j | |  ƒ skt ‚ q q Wt j ƒ  } | d k r®t j d | ƒ } t j d | ƒ } n  | | f S(   Ni    g        g      à?R	   (   t   lenR   R   R   R   R   (   R   R   R   R#   R$   R%   R*   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   branch_2_mnI   s.    '$$c         C   s@   x9 t  |  ƒ D]+ \ } } t | ƒ d k  r d |  | <q q W|  S(   Ng-Cëâ6?g        (   R   R   (   t   xt   i_seqR1   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   zero_matd   s     c         C   sJ   | d k  r d } n d } x( t  |  ƒ D] \ } } | | |  | <q( W|  S(   NiPÃ  g{®Gáz„?g      $@(   R   (   R8   R    t   scaleR9   R1   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   factori   s     	g•Ö&è.>c      	   C   s  d d d d d d g } d d d d d d g } d } d } d } d } d } d } d }	 d }
 d } d } d } d } xŸ| | k  r| d 7} d d d d d d g } d d d d d d g } | d 7} t  j j g  t d ƒ D] } t j d d ƒ ^ qá d t ƒj } t j ƒ  } | d k  rJt j	 | | ƒ } t j	 | | ƒ } n+| d k rw| d	 k  rwt j	 | | ƒ } nþ| d	 k r¤| d
 k  r¤t j	 | | ƒ } nÑt j ƒ  } d } x¼| d k rt| d 8} t j ƒ  } | d k  rt j	 | | ƒ } t j	 | | ƒ } n? | d k r;| d k  r;t j	 | | ƒ } n t j	 | | ƒ } t j	 | | ƒ } t j	 | | ƒ } | d | d | d | d t j
 d ƒ | d t j
 d ƒ | d t j
 d  ƒ g } | d | d | d | d t j
 d! ƒ | d t j
 d" ƒ | d t j
 d# ƒ g } t t | ƒ | ƒ } t t | ƒ | ƒ } t j | |  ƒ r¹t j | |  ƒ r¹Pq¹q¹Wt j | ƒ } t j | ƒ } t j | | |  ƒ } | j ƒ  rÁ| d 7} n  | j ƒ  rÚ| d 7} n  | j ƒ  ró| d 7} n  | j ƒ  r|	 d 7}	 n  | j ƒ  r%|
 d 7}
 n  | j ƒ  r>| d 7} n  | j ƒ  rW| d 7} n  | j ƒ  rp| d 7} n  | j ƒ  r‰| d 7} n  | d k r{ d } d d GHd G| Gd G| GHd G| GHd G| GHd G| GHd G|	 GHd G|
 GHd G| GHd G| GHd G| GHd G| GHt j j ƒ  q{ q{ Wd  S($   Ni   i   i    i † i   ih  t   degg      Ð?g      à?g      è?iè  g…ëQ¸Õ?g…ëQ¸å?i   i   i'  t   .i   s   i= s   out of s   branch_0       = s   branch_1       = s   branch_1_1     = s   branch_1_2     = s   branch_1_2_1   = s   branch_1_2_2   = s   branch_1_2_3   = s   branch_1_2_3_1 = s   branch_1_2_3_2 = (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   i    i   (   t   scitbxR   t   euler_angles_as_matrixR   R   t   uniformR   t   elemsR   t   c_u_c_transposet   choiceR<   t   listR   t   copyt   deepcopyR   t   commont   branch_0t   branch_1t
   branch_1_1t
   branch_1_2t   branch_1_2_1t   branch_1_2_2t   branch_1_2_3t   branch_1_2_3_1t   branch_1_2_3_2t   syst   stdoutt   flush(   R   R   R   t   countert   trialsR    RI   RJ   RK   RL   RM   RN   RO   RP   RQ   R2   t   cR*   t   run_awayt   m_dct   n_dct   qq(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   exercise_branch_2_1p   s¨    

	7
WW          										c         C   s©   d d d d d d g } d d d d d d g } t  j | ƒ } t  j | ƒ } t j | | |  ƒ } t | | ƒ sx t ‚ t | | ƒ s� t ‚ | j ƒ  d k s¥ t ‚ d  S(   Ni   i   i    g       @g      ð?g        (   g       @g      ð?g      ð?g        g        g        (   RF   RG   R   RH   R   R   t   t(   R   R   R   RY   RZ   R[   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt
   exercise_2Å   s    c         C   sõ  xîd g D]ã} t  j d | ƒ } t j d | d d g d d d d	 t d
 t j d ƒ ƒ } | j ƒ  } | j ƒ  } | G| GHHt	 j
 j ƒ  d } d } d } d }	 d }
 d } d } d } d } d } d } d } x| | k  rì| d 7} | d 7} t j ƒ  } | d k  rÞt j d d t j ƒ  d d ƒ } t j d d t j ƒ  d d ƒ } xÅ xL t d ƒ D]> } t j ƒ  } t j | ƒ } | d k rb| | | | <qbqbWt | ƒ } t j | d ƒ rUt j | d ƒ rUPqUqUn< | d k r| d k  rt ƒ  \ } } n t d ƒ \ } } t j | ƒ } t j | ƒ } t t | ƒ | ƒ } t t | ƒ | ƒ } t j | | |  ƒ } | j ƒ  r�|	 d 7}	 n  | j ƒ  r©|
 d 7}
 n  | j ƒ  rÂ| d 7} n  | j ƒ  rÛ| d 7} n  | j ƒ  rô| d 7} n  | j ƒ  r| d 7} n  | j  ƒ  r&| d 7} n  | j! ƒ  r?| d 7} n  | j" ƒ  rX| d 7} n  | d k rÖ d } d d G| GHd G| Gd G| GHd G|	 GHd G|
 GHd G| GHd G| GHd G| GHd G| GHd  G| GHd! G| GHd" G| GHt	 j
 j ƒ  qÖ qÖ Wq
 Wd  S(#   Ns   P 1t   symbolt   space_group_infot   elementst   Ni
   t   volume_per_atomg      I@t   random_u_isot   u_isog      4@i    i † i   gZd;ßOÕ?t   u_scalet   u_mini   g      à?g…ëQ¸å?i'  R>   i   s   i= s   out of s   branch_0       = s   branch_1       = s   branch_1_1     = s   branch_1_2     = s   branch_1_2_1   = s   branch_1_2_2   = s   branch_1_2_3   = s   branch_1_2_3_1 = s   branch_1_2_3_2 = (#   R   R`   R   t   xray_structuret   FalseR   t   b_as_ut   space_groupt	   unit_cellRR   RS   RT   R   t   random_u_cartR   R   R   RE   R   R5   R7   RF   RG   R<   R   RH   RI   RJ   RK   RL   RM   RN   RO   RP   RQ   (   R   R_   R`   t   random_xray_structuret   sgt   ucRU   RV   R    RI   RJ   RK   RL   RM   RN   RO   RP   RQ   R*   R   R   t   indRY   RZ   R[   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   exerciseÐ   s¤    		

"" 
         									c          C   sˆ   t  j d d d d d g ƒ }  t j |  d ƒ } | d
 k sB t ‚ t  j d d d d	 d g ƒ }  t j |  d ƒ } | d k s„ t ‚ d  S(   Ng      ð?g       @g      @g      @g      @g•Ö&è.>g        g      @g      "@(   g      ð?g      ð?g      ð?g        g        g        (   g       @g       @g       @g        g        g        (   R   R   R   t   t_from_u_cartR   (   Re   R]   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   exercise_x1!  s    c           C   s,   t  ƒ  t ƒ  t ƒ  t ƒ  d Gt ƒ  GHd  S(   Ns   OK: (   Rt   Rr   R\   R^   R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   run)  s
    t   __main__("   t
   __future__R    t   cctbx.array_familyR   R   RR   R   t   libtbx.test_utilsR   t   libtbx.utilsR   RF   t   cctbxR   R   t   cctbx.developmentR   t   scitbx.mathR?   t	   mmtbx.tlsR   t   mmtbx_tls_extt   seedt   set_random_seedR5   R7   R:   R<   R\   R^   Rr   Rt   Ru   t   __name__(    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/tls/tst_get_t_scheme.pyt   <module>   s0   $
	6			UQ		