ó
ô™xTc           @   sâ   d  d l  m Z d  d l Z d  d l m Z d  d l m Z m Z d  d l m	 Z	 d  d l
 m Z m Z m Z d  d l m Z m Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z e d k rÞ d  d l m Z e ƒ  e ƒ  n  d S(   iÿÿÿÿ(   t   divisionN(   t   StringIO(   t   approx_equalt	   show_diff(   t   matrix(   t   crystalt   sgtbxt   uctbx(   t   crystal_modelt    crystal_model_from_mosflm_matrixc          C   sK   d d  l  }  d d l m } | g  t d ƒ D] } |  j d d ƒ ^ q, ƒ S(   Niÿÿÿÿ(   t   euler_angles_as_matrixi   i    ih  (   t   randomt   scitbx.mathR
   t   xranget   uniform(   R   R
   t   i(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt   random_rotation
   s    c          C   sx   t  t d j ƒ  ƒ }  |  d  } t j |  d d !ƒ } t | d | ƒ} t | j ƒ  j ƒ  | j ƒ  d d ƒst t	 ‚ d  S(   Nsp   -0.00495480 -0.01491776  0.00238445
  0.01505572 -0.00661190 -0.00149401
  0.00585043  0.00438127  0.00586415
       0.000       0.000       0.000
  -0.2932645  -0.8829514   0.3665960
   0.8911171  -0.3913446  -0.2296951
   0.3462750   0.2593185   0.9015806
     57.7822     57.7822    150.0931     90.0000     90.0000     90.0000
       0.000       0.000       0.000i	   i   i   t	   unit_cellt   epsg{®Gáz„?(
   t   mapt   floatt   splitR   R   R	   R   t   get_unit_cellt
   parameterst   AssertionError(   t   mosflm_matrixt   AR   t   cm(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt)   exercise_crystal_model_from_mosflm_matrix   s    
c    ,      C   sÄ
  t  j d< ƒ }  t  j d= ƒ } t  j d> ƒ } t d d? d d@ d dA d d	 ƒ } t | j ƒ  t j ƒ sl t ‚ | j ƒ  j ƒ  dB k sŠ t ‚ t	 | j
 ƒ  dC d d d dD d d d dE f	 ƒ sÀ t ‚ t	 | j
 ƒ  j ƒ  dF ƒ sá t ‚ t	 | j ƒ  | j
 ƒ  ƒ st ‚ t	 | j ƒ  dG ƒ st ‚ t	 | j ƒ  |  | | f ƒ sAt ‚ t	 | j ƒ  d ƒ s\t ‚ t d dH d dI d dJ d d	 ƒ } | | k s�t ‚ | j d ƒ | | k s®t ‚ t  j d d d d t j t j d ƒ t j t j d ƒ d t j t j d ƒ t j t j d ƒ f	 ƒ } t  j t j t j d ƒ d t j t j d ƒ d d d t j t j d ƒ d t j t j d ƒ f	 ƒ } t  j t j t j d ƒ t j t j d ƒ d t j t j d ƒ t j t j d ƒ d d d d f	 ƒ } | | | } | j | ƒ t	 | j ƒ  dK d d d dL d d d dM f	 ƒ s@t ‚ t	 | j ƒ  | ƒ s[t ‚ t	 | j
 ƒ  | j ƒ  | j ƒ  ƒ s†t ‚ | j ƒ  \ }	 }
 } t	 |	 | |  ƒ s´t ‚ t	 |
 | | ƒ sÍt ‚ t	 | | | ƒ sæt ‚ t ƒ  } | | IJt | j ƒ  j d d ƒ d ƒ s!t ‚ | j dN d d d dO d d d dP f	 ƒ t	 | j ƒ  j ƒ  dQ ƒ sjt ‚ t d dR d dS d dT d t j d ƒ j ƒ  d d ƒ } | j ƒ  j  ƒ  j! ƒ  d k sÄt ‚ | | k sÖt ‚ t j d d ƒ } t d dU d dV d dW d | j ƒ  ƒ } t	 | j ƒ  dX ƒ s*t ‚ t	 | j ƒ  dY d d d dZ d d d d[ f	 ƒ s`t ‚ t	 | j
 ƒ  | j ƒ  ƒ s�t ‚ t	 | j ƒ  j ƒ  d\ ƒ s¢t ‚ | j ƒ  \ } } } | j" ƒ  } | j# | ƒ } | j ƒ  j$ ƒ  j% ƒ  } | j ƒ  \ } } } t	 | d] | d^ | d_ | ƒ s(t ‚ t	 | d` | da | db | ƒ sQt ‚ t	 | dc | dd | de | ƒ szt ‚ t	 | | | ƒ s“t ‚ t	 | | | ƒ s¬t ‚ t	 | | | ƒ sÅt ‚ t	 | j ƒ  d  d! d" d# d$ d" d# d% d& g	 ƒ sût ‚ t	 | j ƒ  d' d& d& d( d) d& d* d* d+ g	 ƒ s1t ‚ t	 | j
 ƒ  d df dg dh d di dj dk d f	 ƒ sgt ‚ t	 | j ƒ  j ƒ  d, d, d, d- d- d- g ƒ sšt ‚ | | k s¬t ‚ | j# | ƒ } t	 | j ƒ  | j ƒ  ƒ sÜt ‚ t	 | j ƒ  | j ƒ  ƒ sýt ‚ t	 | j
 ƒ  | j
 ƒ  ƒ st ‚ t	 | j ƒ  j ƒ  | j ƒ  j ƒ  ƒ sKt ‚ | | k s]t ‚ t j dl ƒ } t j d4 d5 ƒ j ƒ  } t& j' d6 | d | ƒ } | j( ƒ  } t  j | j) ƒ  ƒ j* ƒ  } t+ ƒ  } | | j ƒ  }  t |  d  |  d d !|  d d7 !d | ƒ} | j, | j ƒ  ƒ s!	t ‚ | j# | ƒ }! | j# | ƒ }" |! j, |" j ƒ  ƒ sZ	t ‚ |" | k sl	t ‚ |" j- | ƒ |" | k s‹	t ‚ d d8 l. m/ }# | j
 ƒ  }$ |$ g }% d }& xE t0 |& d ƒ D]3 }' |% j1 |% d t  j |# j2 d9 d: d; ƒ ƒ ƒ qÇ	W| j3 |% ƒ | j# | ƒ }" | j4 |" j4 k o7
|& k n sB
t ‚ t  j | j5 ƒ  j6 ƒ  j* ƒ  j7 ƒ  ƒ }( |( j ƒ  }) xH t0 |& ƒ D]: }' | j8 |' ƒ }* |" j8 |' ƒ }+ |+ |* |) k s‚
t ‚ q‚
Wd  S(m   Ni
   i    i   i   t   real_space_at   real_space_bt   real_space_ct   space_group_symbols   P 1g      $@g      &@g      (@g     €V@i   g{®Gáz„?i   i   i   s   -0.0000s    0.0000sô  Crystal:
    Unit cell: (10.000, 11.000, 12.000, 90.000, 90.000, 90.000)
    Space group: P 1
    U matrix:  {{ 0.4330, -0.7500,  0.5000},
                { 0.7891,  0.0474, -0.6124},
                { 0.4356,  0.6597,  0.6124}}
    B matrix:  {{ 0.1000,  0.0000,  0.0000},
                { 0.0000,  0.0909,  0.0000},
                { 0.0000,  0.0000,  0.0833}}
    A = UB:    {{ 0.0433, -0.0682,  0.0417},
                { 0.0789,  0.0043, -0.0510},
                { 0.0436,  0.0600,  0.0510}}

iZ   t   space_groups   P 222t	   mosaicitys    P 2 2t   numberiæ   i,   iÿÿÿÿi   g3�E§yâ¿g;,p½ Ú?gÍ;fž æ?g3�E§yâ?g?,p½ Ú¿g=,p½ ê?g        gµ¾Ñð~ßš?gºNÚÅ‰ ƒ?gvÇ¨Î€œ?g9‹JÐt�?g8‹JÐt ?gµ´¼tC@g •—z(^[@gq¬‹Û M@gqà-M@gÂ†§WÊÚC@g#J{ƒ/tG@gX¨5Í;nG@g/Ý$�O@t   symbolt   P1R   i	   (   t   euler_anglesgš™™™™™¹?gš™™™™™É?g333333Ó?(   i
   i    i    (   i    i   i    (   i    i    i   (   i
   i    i    (   i    i   i    (   i    i    i   (   g      $@g      &@g      (@g     €V@g     €V@g     €V@gš™™™™™¹?gF]tÑE·?gUUUUUUµ?(	   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   gš™™™™™¹?gF]tÑE·?gUUUUUUµ?gUUUUUUµ?gUUUUUUµ?gUUUUUUµ?(   i   i   i   iZ   iZ   iZ   (   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   gF]tÑE—?gF]tÑE—?gF]tÑE—?(   i,   i,   i,   iZ   iZ   iZ   g      à¿g      à?g      à?g      à?g      à?g      à?g      à?g      à?g      à?gF]tÑE—?gF]tÑE—?gF]tÑE—?gF]tÑE—?gF]tÑE—?gF]tÑE—?(   gq¬‹Û M@gqà-M@gÂ†§WÊÚC@g#J{ƒ/tG@gX¨5Í;nG@g/Ý$�O@(9   R   t   colR   t
   isinstanceR   R   R   R   R   R   t   get_At   inverset   get_Bt   get_Ut   get_real_space_vectorst   get_mosaicityt   set_mosaicityt   sqrt   matht   cost   pit   sint   set_UR   R   t   getvaluet   replacet   set_BR   t   space_group_infot   groupt   get_space_groupt   typet   hall_symbolt'   change_of_basis_op_to_primitive_settingt   change_basist   infot'   change_of_basis_op_to_reference_settingR   t   symmetryt"   change_of_basis_op_to_minimum_cellt   fractionalization_matrixt	   transposeR   t   is_similar_tot   updateR   R&   t   ranget   appendt
   xyz_matrixt   set_A_at_scan_pointst   num_scan_pointst   c_invt   rt	   as_doublet   get_A_at_scan_point(,   R   R   R   t   modelt   model2t   R1t   R2t   R3t   Rt   a_t   b_t   c_t   st   model3t   sgi_reft	   model_reft   a_reft   b_reft   c_reft   cb_op_to_primitivet   model_primitivet   cb_op_to_referencet   a_primt   b_primt   c_primt   model_ref_recycledt   uct   sgt   cst   cb_op_to_minimumt   Bt   Ut   direct_matrixt
   uc_minimumt   model_minimumR&   t   A_statict   A_as_scan_pointsRL   R   t   Mt   M_invt   A_origt   A_min(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt   exercise_crystal_model   s   	6!!	*2/	30)6+	
(	$6!)))				3	!!!	

		+('c          C   s}  t  d d d d d d d d	 d
 d ƒ }  t  d d d d d d d d	 d
 d ƒ } |  j | ƒ sc t ‚ |  j d ƒ | j d ƒ |  j | ƒ s’ t ‚ |  j d ƒ | j d ƒ |  j | ƒ sÂ t ‚ | j d ƒ |  j | ƒ sä t ‚ | j ƒ  } t j d ƒ j d d t ƒ} t j d ƒ j d d t ƒ} | j	 | | ƒ |  j | ƒ sSt ‚ | j	 | | ƒ |  j | ƒ syt ‚ d  S(   NR   i
   i    R   i   R   i   R    s   P 1R"   g      à?iÿÿÿÿg      à¿g)\�Âõ(ä?g      ä?i   gM„O¯„?t   deggõÛ×�sF„?(   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   RF   R   R/   R,   R   R'   t$   axis_and_angle_as_r3_rotation_matrixt   TrueR5   (   t   model_1t   model_2RV   t   dr1t   dr2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt   exercise_similarityÆ   s6    		c           C   s   t  ƒ  t ƒ  t ƒ  d  S(   N(   Rw   R   R   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt   runê   s    t   __main__(   t   show_times_at_exit(   t
   __future__R    R1   t	   cStringIOR   t   libtbx.test_utilsR   R   t   scitbxR   t   cctbxR   R   R   t   dxtbx.model.crystalR   R	   R   R   Rw   R   R€   t   __name__t   libtbx.utilsR‚   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_crystal_model.pyt   <module>   s   			§	$	