ó
G™xTc           @   s?  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z d  d	 l m Z m Z m Z d  d
 l m Z d  d l m Z d  d l Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z e  d k r;e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   crystal(   t   sgtbx(   t   uctbx(   t   random_structure(   t   debug_utils(   t   flex(   t   matrix(   t   Exception_expectedt   approx_equalt	   show_diff(   t   Sorry(   t   StringIONc          C   sV  t  j ƒ  }  t  j t j d8 ƒ ƒ }  t  j d9 d ƒ }  t  j d d ƒ }  t  j d d d g d |  j ƒ  ƒ}  t  j d d d g d |  j ƒ  ƒ}  t  j d d d g d t |  j ƒ  ƒ ƒ}  t |  j ƒ  ƒ d	 k sØ t ‚ |  j ƒ  j t j d: ƒ ƒ sü t ‚ t |  j ƒ  ƒ d k st ‚ |  j ƒ  |  j ƒ  j	 ƒ  k s>t ‚ |  j
 ƒ  sPt ‚ y t  j d; d
 ƒ }  Wn t k
 ryn Xt ‚ y t  j d< d
 d t ƒ}  Wn t k
 r¯n Xt ‚ t  j d= d
 d t d t ƒ}  |  j
 ƒ  sçt ‚ t  j d> d
 d t ƒ}  |  j
 ƒ  st ‚ t  j d? d ƒ }  |  j ƒ  } | j ƒ  j t j d@ ƒ ƒ sSt ‚ t | j ƒ  ƒ d k sqt ‚ | j ƒ  } | j ƒ  j |  j ƒ  ƒ sžt ‚ t | j ƒ  ƒ d k s¼t ‚ |  j ƒ  } |  j ƒ  } | j | j ƒ  ƒ } | j ƒ  j |  j ƒ  ƒ s
t ‚ | j ƒ  |  j ƒ  k s(t ‚ |  j ƒ  } t | j ƒ  ƒ d k sRt ‚ |  j ƒ  } | j ƒ  j t j dA ƒ ƒ s‚t ‚ t | j ƒ  ƒ d k s t ‚ | j ƒ  j ƒ  s¸t ‚ | j | j ƒ  ƒ } | j ƒ  j |  j ƒ  ƒ sît ‚ | j ƒ  |  j ƒ  k st ‚ t  j dB d ƒ }  |  j ƒ  } | j ƒ  j |  j ƒ  ƒ sKt ‚ t | j ƒ  ƒ d k sit ‚ t  j dC d ƒ }  |  j ƒ  }	 |	 j ƒ  j t j dD ƒ ƒ s«t ‚ |	 j ƒ  j ƒ  d k sÉt ‚ |  j d t ƒ }
 |
 j ƒ  j |  j ƒ  ƒ süt ‚ t |
 j ƒ  ƒ d k st ‚ |  j d t ƒ }
 |
 j ƒ  j |  j ƒ  ƒ sMt ‚ t |
 j ƒ  ƒ d k skt ‚ |  j ƒ  } | j ƒ  j |  j ƒ  ƒ s˜t ‚ t | j ƒ  ƒ d k s¶t ‚ | j ƒ  } | j ƒ  j t j dE ƒ ƒ sæt ‚ t | j ƒ  ƒ d k st ‚ t  j dF d  ƒ }  |  j ƒ  } | j ƒ  j t j dG ƒ ƒ sFt ‚ t | j ƒ  ƒ d  k sdt ‚ |  j  ƒ  } t | j ƒ  ƒ dH k sŽt ‚ | j d# ƒ j ƒ  j | j d$ ƒ j ƒ  ƒ sÁt ‚ |  j! ƒ  } | j" d% k sât ‚ t# | j$ ƒ d k sýt ‚ | j |  j ƒ  k st ‚ |  j% d& d' ƒ } t& | j' ƒ  d' ƒ sEt ‚ t& |  j( dI ƒ dJ ƒ sct ‚ t  j d* dK d/ d0 ƒ } t& | j) d1 d d( d g ƒ d d( d) g ƒ s®t ‚ x¡ t t g D]“ } | j* d | d2 d3 d4 d5 ƒ } | j+ ƒ  | k s÷t ‚ | s$t, | j- ƒ  ƒ dL dM g k sNt ‚ q»t, | j- ƒ  ƒ dN dO dP dQ g k s»t ‚ q»Wd  S(R   Ni   i   i   s   P 2 2 2s   3,4,5i   t   space_group_infot   space_groups   (4, 5, 6, 90, 90, 90)s   P 4 2 2t%   raise_sorry_if_incompatible_unit_cellt   assert_is_compatible_unit_cellt   force_compatible_unit_celli   iZ   ix   s   R 3gZd;ßO-$@güs×²<@s   R 3 :Rs   R 3 :Hs   y-z,-x-z,3*zgàœ¥½éR@i<   s   R 3 :H (x+z,-y+z,-3*z)s   P 31s   P 32i   t   anomalous_flags   P m m mi‚   s   P 1 2 1gdÌ]KÈG@gƒÀÊ¡EfY@s   x,-y,x-zs
   -x,-y,-x+zs    P 2yt   buffer_thicknessg¶óýÔxé@i   i    t	   unit_celli
   i   i   iP   t   space_group_symbols   A 1 1 2t   translation_cartt   d_ming333333 @t   d_maxg      !@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   iZ   iZ   ix   (   gZd;ßO-$@gZd;ßO-$@gZd;ßO-$@güs×²<@güs×²<@güs×²<@(   i   i   gZd;ßO-$@gàœ¥½éR@gàœ¥½éR@i<   (   i   i   i   iZ   iZ   ix   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   iZ   i‚   iZ   (   gdÌ]KÈG@i   i   iZ   gƒÀÊ¡EfY@iZ   (   s   x,-y,x-zs
   -x,-y,-x+z(   i   i   i   i   i   i   (   i   i   i   i    i   i    (   i
   i   i   iZ   iZ   iP   (   i   i    i   (   i    i   i   (   i   i    i   (   iÿÿÿÿi    iþÿÿÿ(   i    i   i   (   i    iþÿÿÿiþÿÿÿ(.   R   t   symmetryR   R   R   R   t   strt   AssertionErrort   is_similar_tot   groupt   is_compatible_unit_cellt	   ExceptionR   t   TrueR   t   Falset   primitive_settingt   as_reference_settingt"   change_of_basis_op_to_minimum_cellt   minimum_cellt   change_basist   inverset!   change_of_basis_op_to_niggli_cellt   ct   niggli_cellt   is_niggli_cellt   inverse_handt   cell_equivalent_p1t   order_zt   reflection_intensity_symmetryt   patterson_symmetryt	   best_cellt   change_of_basis_op_to_best_cellt   direct_space_asut   hall_symbolt   lent   cutst   asu_mappingsR	   R   t   average_b_cartt)   subtract_continuous_allowed_origin_shiftst   build_miller_setR   t   listt   indices(   t   xst   pst   rst   cbt   mct   cmt   nct   cnt   iht   p1t   rit   bct   asuR7   t   sR   t   m(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt   exercise_symmetry   sÌ    $$*$$   	!!!!$!!!$			'c       	   C   s  xÆ t  j D]» }  x² d d g D]¤ \ } } t j | ƒ } t j d | d |  d | d t ƒ } | j ƒ  j | ƒ sy t ‚ i d d 6d d 6| } t	 | j
 ƒ  j ƒ  j ƒ  |  d	 | ƒ s t ‚ q Wq
 Wt j d d
 d d d t d t ƒ } t ƒ  } | j d | ƒ t	 | j ƒ  d ƒ s"t ‚ t j d d d d d t d t ƒ } t ƒ  } | j d | ƒ t	 | j ƒ  d ƒ s{t ‚ d  S(   Ns   20 20 21 90 90 120t   Rs   31 31 31 85 85 85t   HR   R   t   :t)   correct_rhombohedral_setting_if_necessarys    :s   20 20 21 90 89 120s   R3:RR   t   fs`   Unit cell: (20.3388, 20.3388, 20.3388, 98.9315, 98.9315, 98.9315)
Space group: R 3 :R (No. 146)
s   31 31 31 85 85 86s   R3:HsM   Unit cell: (36.4146, 36.4146, 31, 90, 90, 120)
Space group: R 3 :H (No. 146)
(   s   20 20 21 90 90 120RM   (   s   31 31 31 85 85 85RN   (   R   t$   rhombohedral_hermann_mauguin_symbolsR   R   R   R   R    R   R   R
   R   t   typet   lookup_symbolR!   R   t   show_summaryt   getvalue(   t   symbolt   pt   zt   uct   cst   other_zt   sio(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt2   exercise_correct_rhombohedral_setting_if_necessaryv   s@    		 						c       	   C   s\  t  j d d d d ƒ }  t  j d d d d ƒ } t  j d d  d d  d	 |  g d
 | g ƒ } t | j ƒ  j ƒ  ƒ t | j ƒ  j ƒ  ƒ k s� t ‚ t  j d d  d d  d	 | g d
 |  g ƒ } t |  j ƒ  j ƒ  ƒ t | j ƒ  j ƒ  ƒ k sð t ‚ d  } y. t  j d d  d d  d	 d  g d
 d  g ƒ } Wn+ t k
 rQ} t | ƒ d k sXt ‚ n Xt	 ‚ d  S(   NR   s   23,30,40,90,90,90R   t   P212121s   20,30,40,90,90,90t   P222t   from_command_linet   from_parameter_filet   from_coordinate_filest   from_reflection_filess.   No unit cell and symmetry information supplied(
   R   R   t   select_crystal_symmetryt   NoneR;   R   t
   parametersR   R   R   (   t   xs1t   xs2t   resulting_symmetryt   e(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt    exercise_select_crystal_symmetryœ   s.    			6	6	c       	   C   sz  d }  d } t  j |  d d d d ƒ} t  j | j ƒ  j ƒ  j ƒ  ƒ j d d ƒ | k s` t ‚ d	 |  } d	 | } t  j d
 | ƒ } t  j d
 | ƒ } | j ƒ  | j ƒ  k s¶ t ‚ t	 j
 d | d d g d d d t ƒ } t | j ƒ  ƒ | k sû t ‚ | j ƒ  } | j d | ƒ }	 t |	 j ƒ  ƒ d k s7t ‚ |	 j ƒ  d j }
 | |
 } t | | j ƒ  d j ƒ svt ‚ d  S(   Ns	   x-y,x+y,zs   1/2*a-1/2*b,1/2*a+1/2*b,ct   r_deni   t   t_deni�   t   symbol_letterst   abcs   C 1 2 1 (%s)RW   R   t   elementst   Ct   volume_per_atomid   t   general_positions_onlyt   cb_ops   C 1 2 1i    (   R   t   rt_mxt   rR'   t	   transposet   as_xyzR   R   R   R   t   xray_structureR    R   t'   change_of_basis_op_to_reference_settingR&   t
   scattererst   siteR	   (   t   cb_symbol_xyzt   cb_symbol_abct	   cb_mx_xyzt   uhmxt   uhmat   sxt   sat   structure_unconvRu   t   structure_referencet   site_referencet   site_unconv_direct(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt&   verify_definitions_in_paper_zwart_2007¶   s.    $

			
c          C   s*  t  j d d d g ƒ }  t j d
 |  ƒ } t | j ƒ  j ƒ  d ƒ sK t ‚ | j ƒ  j	 ƒ  j
 ƒ  d k so t ‚ t j d
 |  d d ƒ } t | j ƒ  j ƒ  d ƒ s¨ t ‚ t  j d g ƒ }  t j d
 |  ƒ } t | j ƒ  j ƒ  d ƒ sí t ‚ t j d
 |  d d ƒ } t | j ƒ  j ƒ  d ƒ s&t ‚ d  S(   Ng#c’ß"cÒ?g®Ô’Q®ÔÂ?g?®?®À?gv»�½u»Ð?gãP¶ãÐ?g¢Ýp¢ÝÎ?g¸@™J¸@É?gëÞ]¡êÞí?gñ^ýñ^í?t
   sites_cartgÇ�çé¤ú?grÖLc ä@g¢�òˆæ@iZ   i   t   min_unit_cell_lengthi   t   default_buffer_layerg      ø?i   (   g#c’ß"cÒ?g®Ô’Q®ÔÂ?g?®?®À?(   gv»�½u»Ð?gãP¶ãÐ?g¢Ýp¢ÝÎ?(   g¸@™J¸@É?gëÞ]¡êÞí?gñ^ýñ^í?(   gÇ�çé¤ú?grÖLc ä@g¢�òˆæ@iZ   iZ   iZ   (   i   grÖLc ä@g¢�òˆæ@iZ   iZ   iZ   (   g#c’ß"cÒ?g®Ô’Q®ÔÂ?g?®?®À?(   i   i   i   iZ   iZ   iZ   (   i   i   i   iZ   iZ   iZ   (   R   t   vec3_doubleR   t   non_crystallographic_symmetryR	   R   Rg   R   R   RS   t   number(   RŠ   t   n(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt&   exercise_non_crystallographic_symmetryÛ   s&    $	!	c    
      C   s  t  j d d ƒ }  t  j |  d d t ƒ } | j ƒ  d k sB t ‚ | j ƒ  d k sZ t ‚ | j ƒ  t k sr t ‚ | j d ƒ j	 ƒ  d k s“ t ‚ | j d d ƒ j	 ƒ  d k s· t ‚ | j d	 d ƒ j	 ƒ  d k sÛ t ‚ t
 | j d ƒ j ƒ  ƒ d
 k st ‚ t j d d g ƒ } | j d | ƒ } t | j ƒ  ƒ d g k sJt ‚ t | j d |  j ƒ  d | ƒ | ƒ swt ‚ xY d d g D]K \ } } t  j d |  d | ƒ } t
 | j d ƒ j ƒ  ƒ | k s„t ‚ q„Wt j d g ƒ } |  j ƒ  } | j d d d | ƒ } t | j ƒ  j ƒ  ƒ d g k s0t ‚ | j d d d | ƒ } | j ƒ  d k s`t ‚ |  j d d ƒ } | j d d d | ƒ } | j ƒ  d k s¢t ‚ | j d d d | ƒ }	 |	 j ƒ  d j ƒ  d k sÜt ‚ | j d d d | ƒ }	 |	 j ƒ  d d j ƒ  d k st ‚ d  S(   Ni   i   i   s   P 2 2 2i   i   i    R}   t	   site_carts   0,0,0RŠ   R   g�íµ ÷Æ°>s   x,y,zt   crystal_symmetryt   min_distance_sym_equivR   t   distance_cutoff(   i   i   i   (   i    i    i    (   i    i    i    (   i    i    i    (   i    i    i    (   i   i   i   (   i    i    i    (   g�íµ ÷Æ°>s   0,0,0(   i    s   x,y,z(   i    i    i    (   i    i    i    (   R   R   t   special_position_settingsR!   R”   R   t   u_star_tolerancet   assert_min_distance_sym_equivt   site_symmetryt   multiplicityR   t   sym_equiv_sitest
   special_opR   R�   t   site_symmetry_tableR;   t   special_position_indicesR	   t   apply_symmetry_sitesR   R7   t   pair_generatort   count_pairst   pair_asu_tablet   tablet   size(
   R=   t   spRŠ   t   tR”   Rœ   R7   R    t   sp0R¢   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt"   exercise_special_position_settingsð   sD    !$$'!		+"c         C   s�  t  j d |  j d d ƒ ƒ } |  j ƒ  j ƒ  } t  j d | j | ƒ d | j ƒ  d ƒ } |  j ƒ  } xt | j	 ƒ  ƒ D]} | j
 d | d | ƒ } | j ƒ  } | j | ƒ | k s¿ t ‚ x/ | j ƒ  D]! } | j | ƒ | k sÌ t ‚ qÌ Wt j ƒ  }	 |	 j | ƒ |	 j d ƒ }
 |
 j ƒ  | j ƒ  k s7t ‚ |
 j ƒ  |
 j ƒ  | j ƒ  j ƒ  k set ‚ | j ƒ  | j ƒ  } | j | ƒ } |
 j | ƒ } | j ƒ  | j ƒ  k s·t ‚ | j ƒ  | j ƒ  k sÕt ‚ | j ƒ  | j ƒ  | j ƒ  j ƒ  k st ‚ g  | j ƒ  D] } t | ƒ ^ q} g  | j ƒ  D] } t | ƒ ^ q5} | j ƒ  | j ƒ  d	 j | ƒ d	 j | ƒ k sz t ‚ qz Wd  S(
   NR“   t   volumeiè  R”   g®Gáz®ï?R–   t
   i_positioni    t    (   R   R–   t   any_compatible_crystal_symmetryR   t   z2p_opR&   R”   t   wyckoff_tablet   xrangeR¤   t   random_site_symmetryRœ   t   multiplyR   t   matricesR   R�   t   processt   getRš   t
   n_matricesR   R.   R)   t
   exact_siteR™   R   t   sortt   join(   R   R–   R­   t   special_position_settings_pR®   Rª   R™   RJ   RK   t   tabt   ss_opst   site_pt   site_symmetry_pt   ss_ops_pt
   referencest   testees(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt   exercise_site_symmetry  sD    					%%

i   c   
   
   C   s3  t  j |  d d g | d d d d d t ƒ} | rC | j ƒ  } n  t | j d d	 d
 d ƒ j ƒ  ƒ } | j ƒ  j ƒ  d k s… t	 ‚ t
 j t j ƒ  ƒ d } t
 j | j d | ƒ ƒ } | | } | j d | j ƒ  j | ƒ d t ƒ } t | j d | d
 d ƒ j ƒ  ƒ }	 t |	 j ƒ  | j ƒ  ƒ s/t	 ‚ d  S(   NRq   t   SiRs   i,  t   min_distanceg      @Rt   R   i   t	   algorithmt   directi
   gÃõ(\�Â@R   t   shiftt   recompute_site_symmetriesRz   (   R   Rz   R!   R*   t   abst   structure_factorst   f_calcR<   R¤   R   R   t   colR   t   random_double_point_on_sphereR9   t   apply_shiftR   t   fractionalizeR    t!   structure_factors_from_scatterersR	   t   data(
   R   t   use_niggli_cellt
   n_elementst	   structuret   f_obst   translt   transl_no_contt   transl_contt   structure_translt   f_transl(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt2   exercise_subtract_continuous_allowed_origin_shifts=  s,    		
		c         C   s8   t  | ƒ x' t t g D] } t d | d | ƒ q Wd  S(   NR   RÑ   (   RÁ   R!   R    RÚ   (   t   flagsR   RÑ   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt   run_call_backX  s
    
c           C   sE   t  ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t j t j	 d t
 ƒ d  S(   Ni   (   RL   R^   R‘   R¨   Rl   R‰   R   t   parse_options_loop_space_groupst   syst   argvRÜ   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt   run_  s    t   __main__(!   t
   __future__R    t   cctbxR   R   R   t   cctbx.developmentR   R   t   cctbx.array_familyR   t   scitbxR   t   libtbx.test_utilsR   R	   R
   t   libtbx.utilsR   t	   cStringIOR   RÞ   RL   R^   Rl   R‰   R‘   R¨   RÁ   RÚ   RÜ   Rà   t   __name__(    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_crystal.pyt   <module>   s.   	h	&		%		(	(			