ó
J™xTc           @   s�  d  d l  m Z d  d l m Z d  d l 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 d  d l m Z d  d l m Z d  d l m Z d  d l Z d  d l Z d  d l Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d d „ Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% e& d k r‹e% ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   crystalN(   t   xray(   t   sgtbx(   t   reference_table(   t   facet_analysis(   t   random_structure(   t   debug_utils(   t   flex(   t   matrix(   t   approx_equal(   t   format_cpu_times(   t   rationalc          C   s  x\ t  d d ƒ D]K }  t j d |  ƒ } t j |  ƒ } t j | j ƒ | j ƒ  k s t ‚ q Wx± t  d d	 ƒ D]  }  t j |  ƒ } d } xa | j	 D]V } t
 | ƒ } | j d ƒ d k } |  d k r× | sê t ‚ q” | r” | d 7} q” q” W|  d k ro | d k st ‚ qo qo Wd  S(
   Ni   iæ   t   numberi    t   cutiÕ   i   iç   iç   (   t   xrangeR   t   space_group_infoR   t   get_asut   space_groupt   hall_symbolt   groupt   AssertionErrort   cutst   strt   find(   t   space_group_numberR   t   asut   n_long_cutsR   t   st   have_long_cut(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_reference_table   s     (c         C   s6   x/ |  D]' } | j  ƒ  j | j ƒ  ƒ s t ‚ q Wd  S(   N(   t   stript	   is_insidet   get_point_in_planeR   (   t
   cut_planest	   cut_plane(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_cut_planes&   s    c         C   ss  |  j  ƒ  } |  j ƒ  } t | ƒ d k s0 t ‚ t j |  ƒ } t | ƒ t | ƒ k s] t ‚ | j ƒ  | j ƒ  | | k sƒ t ‚ xG t |  j d | ƒ |  j d | ƒ ƒ D] \ } } | | k  s« t ‚ q« W| d  k rÝ d  S|  j
 d | d d ƒ } | j
 d d ƒ } |  j | ƒ j ƒ  }	 t j |	 j ƒ  ƒ }
 |	 j ƒ  } d } xÆ | D]¾ } | j | ƒ set ‚ g  | D] } t | ƒ ^ ql} | j | ƒ s™t ‚ | j | ƒ s¯t ‚ t t j | j | ƒ ƒ |
 ƒ } | | d k  sçt ‚ | | | d	 k  rJ| d
 7} qJqJW| d k st ‚ | j ƒ  } t | ƒ t | ƒ k sHt ‚ d } x• | D]� } | j d | ƒ sst ‚ | j | ƒ s‰t ‚ t t j | j | ƒ ƒ |
 ƒ } | | d k  sÁt ‚ | | | d	 k  rU| d
 7} qUqUW| | k søt ‚ t j |  ƒ } | j d d g d t ƒt | j ƒ t |  j ƒ d k sHt ‚ | j d j | j d j k sot ‚ d  S(   Ni   t   shape_verticest	   unit_cellt	   thicknessi    t   relative_thicknessgñhãˆµøä¾gñhãˆµøä>g{®Gáz„?i   i   t   pointt   both_directionsiþÿÿÿiÿÿÿÿ(   i    i    i   (   i   i   i   (   t
   shape_onlyR%   t   lenR   R   t   sortt   zipt   box_mint   box_maxt   Nonet
   add_buffert   define_metrict   minimum_covering_sphereR	   t   colt   centert   radiusR    t   floatt   abst   orthogonalizet   copyt
   add_planest   TrueR   t   n(   R   R&   t
   volume_asut   asu_shape_verticest   facet_analysis_shape_verticesR/   R0   t	   float_asut
   asu_shrunkt   mcsR6   R7   t   n_near_sphere_surfacet   vertext   et   float_vertext   rt   float_asu_shape_verticest   m_near_sphere_surfacet   line_asu(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_shape_vertices*   sX    

""(i   c         C   s  |  j  d d ƒ } t j |  j ƒ  j ƒ  ƒ } t | j ƒ |  j ƒ  } t j	 | j
 ƒ |  j ƒ  k sj t ‚ t | j ƒ t | | ƒ | j d | d d ƒ } |  j ƒ  j ƒ  j ƒ  j ƒ  } | } xÒt j | d | d | d f | | | f t ƒ D]š} t j g  | D] }	 t j |	 | ƒ ^ q
ƒ }
 | |
 } | j |
 j ƒ | j | j ƒ k s_t ‚ | j } g  | D] } t | ƒ ^ qo} xÝ | j D]Ò } | j ƒ  } | j | ƒ } x® d d d g d  D]™ } | j ƒ  j d | d | ƒ } | j | ƒ } | d	 k  r#| | k r_| s t ‚ q_qÆ| d
 k  rD| | k s_t ‚ qÆ| | k rÆ| s_t ‚ qÆqÆWq‘W| j | ƒ | j ƒ  j | ƒ k s÷ t ‚ q÷ W| j | ƒ } | j
 | j
 k s¼t ‚ t  | j ƒ t  | j ƒ k sàt ‚ | j! | k sõt ‚ | j" ƒ  } | j d d ƒ } | j d d ƒ } t# j$ | ƒ } x) | D]! } | j ƒ  j | ƒ s;t ‚ q;Wx5 | D]- } | j t j | ƒ j% ƒ  j ƒ sgt ‚ qgWx5 | D]- } | j t j | ƒ j% ƒ  j ƒ sŸt ‚ qŸWx6 | D]. } | j t j | ƒ j% ƒ  j ƒ s×t ‚ q×Wd  S(   Nt   volumeiè  R&   R'   gü©ñÒMbP?i   i   iÿÿÿÿi    g{®Gáz„?R(   gñhãˆµøä¾(&   t   any_compatible_unit_cellR   R   t   typeR   R$   R   t   direct_space_asuR   R   R   R   R   RM   R2   t   cb_opt   c_invt   as_rationalR   t   nested_loopt   FalseR	   R5   R   t   intR    t   elemsR8   R   t   as_float_cut_planeR+   R3   R,   R&   t   as_float_asuR   R%   t   as_float(   R   t   n_gridR&   t   ref_asut   inp_asuRB   t   cb_mx_ref_inpR>   t   ref_nt   gt   ref_rt   inp_rRI   t   inp_fR   t   r_cutt   r_insidet   buffer_thicknesst   f_cutt   f_insidet   asu_with_metrict	   asu_tightt
   asu_bufferRC   t   verticesRF   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_float_asuX   s`    $=.
*		.$++i
   c      
   C   s[  t  j |  d d g | d d d d d t ƒ} t j j d | j ƒ  d	 | j ƒ  j ƒ  d
 d ƒ } | j | j	 ƒ  j
 ƒ  ƒ x' | j	 ƒ  D] } | j d | j ƒ q‡ W| j ƒ  j
 ƒ  | j	 ƒ  j
 ƒ  k sÎ t ‚ | j ƒ  j } xw | j ƒ  D]i } | j ƒ  j | | d j ƒ  ƒ ƒ st ‚ x5 | D]- } | j ƒ  j | | j ƒ  ƒ ƒ s"t ‚ q"Wqê Wd  S(   Nt   elementst   Sit   volume_per_atomiè  t   min_distanceg      @t   general_positions_onlyR   R   Rg   i   t   original_sitei    (   R   t   xray_structureRV   R   RQ   t   asu_mappingsR   RZ   t   reservet
   scattererst   sizet   processt   sitet   mappingsR   R&   t   fractionalizeR   R    t   mapped_siteRl   (   R   t
   n_elementst	   structureRv   t	   scatterert   fracR|   t   mapping(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_asu_mappings�   s&    		*+i    c   "      C   sæ  d s | r  |  j  ƒ  j ƒ  Hn  x¿d d d g D]®} t j j d |  j ƒ  d |  j ƒ  j ƒ  d | ƒ } | j |  j ƒ  j	 ƒ  ƒ x$ |  j ƒ  D] } | j
 | j ƒ q� W| j ƒ  } x&t t g D]} g  } xut | j	 ƒ  ƒ D]a} | | }	 t j |	 d j ƒ  ƒ }
 x5t | | j	 ƒ  ƒ D]} | | } | | k rEd } n d } x_ t | t | ƒ ƒ D]H } t j | | j ƒ  ƒ } | |
 j ƒ  } | j | | | | f ƒ qaW| r | | k r t j | d j ƒ  ƒ } xb t d t |	 ƒ ƒ D]H } t j |	 | j ƒ  ƒ } | | j ƒ  } | j | | | | f ƒ qïWq q Wqá Wx‘t j t j g D]}} | d	 | d
 d d | ƒ } | j ƒ  } |  j ƒ  } |  j ƒ  } |  j ƒ  } t j } t g  | D] } | d  | d f ^ q½ƒ } xÛ| D]Ó} | j d | ƒ st ‚ | j | j | j f } t | | | j  ƒ s9t ‚ | | =| | j d } | | j | j } | | | j! ƒ  ƒ | | j j ƒ | | j" ƒ  ƒ j# } | | | j! ƒ  ƒ | | j j ƒ | | j" ƒ  ƒ j# }  t | j$ | ƒ | j ƒ  ƒ sût ‚ t | j$ |  ƒ | j ƒ  ƒ st ‚ t | j% | |  ƒ d | j  ƒ sGt ‚ | j& d | ƒ | | j j } | j' d | ƒ | | j j }  t | j$ | ƒ | j ƒ  ƒ s«t ‚ t | j$ |  ƒ | j ƒ  ƒ sÏt ‚ | j( | j ƒ  ƒ }! t | j' d | ƒ j) ƒ  |! | | j j ƒ st ‚ t | j* d | j ƒ  j$ | | j j ƒ d | j d d ƒ | j ƒ  ƒ sht ‚ t | j* d | j ƒ  j$ | | j j ƒ d | j d | j ƒ | j ƒ  ƒ sçt ‚ qçWt | ƒ d k sYt ‚ qYWqÂ Wq0 Wd  S(   Ni    gñhãˆµøä>i   i   R   R   Rg   i   Rv   t   distance_cutoffg    €„.At   minimali   t   pairt   moved_original_sitet   i_seqt   i_sym(+   t   show_summaryt   show_scatterersR   RQ   Rv   R   RZ   Rw   Rx   Ry   Rz   R{   R|   RV   R=   R   R	   R5   R~   R,   t   norm_sqt   appendt   neighbors_simple_pair_generatort   neighbors_fast_pair_generatorR&   t   dictt	   is_activeR   R‰   t   j_seqt   j_symR
   t   dist_sqt   i_sym_opt   unit_shiftsRX   R:   t   distancet   get_rt_mx_it   get_rt_mx_jR}   t   inverset   map_moved_site_to_asu("   R€   t   verboseRg   Rv   R�   t   array_of_array_of_mappingsR†   t	   pair_listR‰   t   array_of_mappings_it   site_0R“   t   array_of_mappings_jt   j_sym_startR”   t   site_1R•   RŠ   t   site_2t   pair_generator_typet   pair_generatort   mpst   sct   uct   sgR5   R‡   t	   pair_dictt   keyt   mp_it   mp_jt   site_it   site_jt   j_frac(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt"   exercise_neighbors_pair_generators¢   sž    	

	(			-##$$(  $$					c         C   sW   |  j  ƒ  j } | d | j ƒ r% t S| d | j ƒ r; t S|  j | ƒ |  j | ƒ k S(   NR‰   (   t   site_symmetry_tablet   is_special_positionR‰   RV   R“   R™   Rš   (   Rv   R‡   Rµ   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt,   asu_mappings_is_simple_interaction_emulationö   s      c    	      C   së  xäd d g D]Ö}  xÍt  j d d t ƒ D]¶} t j | ƒ } t j d t j d d d
 |  ƒ d t  j	 t j
 d d d | t j d ƒ ƒ t j
 d d d | t j d ƒ ƒ t j
 d d d | t j d ƒ ƒ g ƒ ƒ } | j d d ƒ } t j d | d d ƒ } i  } x‘ t | ƒ D]ƒ \ } } | j | ƒ r�t | | ƒ sDt ‚ | j | j f } | j | d  ƒ d  k stt ‚ d | | <qt | | ƒ st ‚ qWt | ƒ d k s³t ‚ | d d k sÉt ‚ | d  d k s) t ‚ q) Wq Wd  S(!   Nt   P1t   P41iþÿÿÿi   t   crystal_symmetryR&   i
   i   iZ   t   space_group_symbolRx   t   labelt   OR{   i    t   Ng      à?t   Cg      Ð?Rg   i   Rv   R…   i   (   iþÿÿÿiþÿÿÿiþÿÿÿ(   i   i   i   (   i
   i
   i   iZ   iZ   iZ   (   i    i    i    (   g      à?g      à?i    (   g      Ð?g      Ð?i    (   i    i   (   i   i   (   R   RU   RV   R	   R5   R   R€   R   t   symmetryt   xray_scattererR�   Rv   R�   t	   enumeratet   is_simple_interactionR¶   R   R‰   R“   t   getR1   R,   (	   Rº   t   shiftsR€   Rv   R§   t   simple_interactionst   i_pairR‡   R­   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_is_simple_interactionü   s8    			"".		c       	   C   sô  t  j j d t j ƒ  ƒ }  t |  j ƒ  j ƒ  d ƒ s< t ‚ t  j j d t j d g ƒ ƒ }  t |  j ƒ  j ƒ  d ƒ s~ t ‚ xot	 d ƒ D]a} t
 j d d	 ƒ } t j ƒ  } xN t	 d ƒ D]@ } | j g  t	 d
 ƒ D]  } t
 j d | d | ƒ ^ qÕ ƒ q¼ Wt  j j d | ƒ }  x’ t | |  j ƒ  ƒ D]{ \ } } t | ƒ d k sOt ‚ | d j ƒ  d k skt ‚ | d j ƒ  d k s‡t ‚ t | d j ƒ  | ƒ s+t ‚ q+Wt |  j ƒ  | j ƒ  ƒ sËt ‚ t |  j ƒ  | j ƒ  ƒ s‹ t ‚ q‹ Wd  S(   Nt
   sites_carti   iZ   i   iýÿÿÿi   i
   iœÿÿÿid   i   iöÿÿÿi    (   i   i   i   iZ   iZ   iZ   (   i   iýÿÿÿi   (   i   i   i   iZ   iZ   iZ   (   i    i    i    (   R   RQ   t!   non_crystallographic_asu_mappingsR   t   vec3_doubleR
   R&   t
   parametersR   R   t   randomt   uniformRŽ   R.   R|   R,   R–   R—   R~   t   mapped_sites_mint   mint   mapped_sites_maxt   max(   Rv   t   i_trialt   offsRÈ   t   i_sitet   iR{   t   asu_mapping(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt*   exercise_non_crystallographic_asu_mappings  s(    !!>	"#!c         C   sV   t  | ƒ t | ƒ t d t j | d d g d d d d d d	 t ƒd
 |  j ƒ d  S(   NR€   Ro   Rp   i   Rq   id   Rr   g      @Rs   R�   (   Rn   R„   R³   R   Ru   RV   t   Verbose(   t   flagsR   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   exercise_all1  s    

	c         C   s?   t  |  | ƒ | j ƒ  j ƒ  d k r; t  |  | j ƒ  ƒ n  d  S(   Ni   (   RÚ   R   t   n_ltrt   primitive_setting(   RÙ   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   run_call_back=  s    c          C   sz   t  ƒ  x9 t d d ƒ D]( }  t j |  ƒ } t d | d d  ƒ q Wt j t j	 d t
 d t ƒt ƒ  t ƒ  t ƒ  GHd  S(   Ni   iæ   R   R&   t   show_cpu_timesiç   (   R   R   R   R   RM   R1   R   t   parse_options_loop_space_groupst   syst   argvRÝ   RV   RÇ   R×   R   (   R   R   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   runB  s    t   __main__('   t
   __future__R    t   cctbxR   t   cctbx.crystal.direct_space_asuR   R   t   cctbx.sgtbx.direct_space_asuR   R   t   cctbx.developmentR   R   t   cctbx.array_familyR   t   scitbxR	   t   libtbx.test_utilsR
   t   libtbx.utilsR   t   boostR   RÌ   R;   Rà   R   R$   RM   Rn   R„   R³   R¶   RÇ   R×   RÚ   RÝ   Râ   t   __name__(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_direct_space_asu.pyt   <module>   s<   			.5T						