ó
¦™xTc           @   sF  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 m Z d  d	 l Z d  d l m Z d  d l m Z d  d l m Z d d „ Z d „  Z d d „ Z d „  Z d d „ Z d „  Z d „  Z e d k rBe ƒ  d Ge ƒ  GHn  d	 S(   iÿÿÿÿ(   t   division(   t   flex(   t   uctbx(   t   crystal(   t   xray(   t   maptbx(   t   random_structure(   t   eltbxN(   t   miller(   t   approx_equal(   t   sgtbx(   t   format_cpu_timest   Cc         C   sÈ   i t  j j | g | g ƒ | 6} t j d |  d | ƒ } t j d | j d d ƒ } | j ƒ  j ƒ  |  } t	 j
 t j | d | d d d	 ƒg ƒ }	 t j d
 d  d |	 d | ƒ }
 |
 j d | ƒ |
 S(   Nt
   sites_cartt   buffer_layert	   unit_cellt   space_group_symbols   p 1t   sitei    t   ug        t   special_position_settingst
   scattererst   crystal_symmetryt   custom_dict(   R   t   xray_scatteringt   gaussianR   t;   non_crystallographic_unit_cell_with_the_sites_in_its_centerR   t   symmetryR   t   fractionalization_matrixR   t   xray_scattererR   t	   scatterert	   structuret   Nonet   scattering_type_registry(   t	   site_cartR   t   at   bt   scatterer_chemical_typeR   t   boxR   t	   site_fracR   t   xray_structure(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt   xray_structure_of_one_atom   s    "			%	c         C   s~  t  d | d | d | d | ƒ } t j j d | d |  ƒ } | j ƒ  j ƒ  | }	 t t j | j	 ƒ  ƒ | j	 ƒ  j
 |	 d ƒ ƒ s‰ t ‚ t j j d | j ƒ  d	 | j	 ƒ  d
 | d | d t | j ƒ  ƒ d ƒ }
 |
 j	 ƒ  } |
 j ƒ  } t j d | d | d t d t ƒ } t | j ƒ  d d ƒ s,t ‚ t | j ƒ  d d ƒ sJt ‚ | j ƒ  d k  sbt ‚ | j ƒ  | k  szt ‚ d  S(   NR!   R   R"   R#   R'   t	   grid_stepi    R   t   map_datat   radiust   shellR&   t   data_at_grid_pointst	   distancest   use_weightst   optimize_cutoff_radiusg      @gü©ñÒMbP?g      @g333333Ó?(   R(   t   mmtbxt
   real_spacet   sampled_model_densityR   R   R	   R   t   maxt   datat   value_at_closest_grid_pointt   AssertionErrort   around_atomt   listt
   sites_fracR.   R   t   one_gaussian_peak_approximationt   Falset   Truet   a_reciprocal_spacet   b_reciprocal_spacet   goft   cutoff_radius(   R)   R+   R,   R"   R#   R   R!   R'   t   sampled_densityR&   t   around_atom_objt
   data_exactt
   dist_exactt
   approx_obj(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt
   exercise_1'   s6    		"		c         C   sò  t  j d t j d ƒ d | d d | d d d t ƒ } i t j j | g | g ƒ | 6} | j d	 | ƒ t	 j
 j d
 | d |  ƒ }	 | j ƒ  }
 t t t j |	 j ƒ  ƒ ƒ t |	 j ƒ  j |
 d ƒ ƒ ƒ t t j |	 j ƒ  ƒ ƒ d } | d k  sý t ‚ t	 j
 j d | j ƒ  d |	 j ƒ  d | d | d t | j ƒ  ƒ d ƒ } | j ƒ  } | j ƒ  } t j d | d | d t d t ƒ } t | j ƒ  d d ƒ s t ‚ t | j ƒ  d d ƒ s¾t ‚ | j ƒ  d k  sÖt ‚ | j ƒ  | k  sît ‚ d  S(   Nt   space_group_infos   P 1t   elementsi   t   volume_per_atomt   min_distanceg      ø?t   general_positions_onlyR   R'   R)   i    g      Y@g      $@R   R*   R+   R,   R&   R-   R.   R/   R0   g      @g{®Gáz„?g      @g333333Ó?(   R   R'   R
   RH   R=   R   R   R   R    R1   R2   R3   R:   t   absR   R4   R5   R6   R7   R8   R   R9   R.   R   R;   R<   R	   R>   R?   R@   RA   (   R)   R+   R,   R"   R#   RJ   R$   R'   R   RB   R&   t   rRC   RD   RE   RF   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt
   exercise_2K   s>    	
	"	[		c         C   s
  t  d | d | d | d | ƒ } t j d | j ƒ  d t d | d d  ƒ }	 |	 j d	 | d
 d d t d t ƒ j ƒ  }
 |
 j d |  d d  ƒ } | j	 ƒ  } | j
 ƒ  } t t t j | j ƒ  ƒ ƒ t | j ƒ  j | d ƒ ƒ ƒ t t j | j ƒ  ƒ ƒ d } t | d ƒ st ‚ t j j d | j ƒ  d | j ƒ  d | d | d t | j
 ƒ  ƒ d ƒ } | j ƒ  } | j ƒ  } t j d | d | d t d t ƒ } t | j ƒ  d d ƒ s¸t ‚ t | j ƒ  d d ƒ sÖt ‚ | j ƒ  d  k  sît ‚ | j ƒ  | k  st ‚ d  S(!   NR!   R   R"   R#   R   t   anomalous_flagt   d_mint   d_maxR'   t	   algorithmt   directt   cos_sin_tablet   exp_table_one_over_step_sizeR)   t   symmetry_flagsi    g      Y@g        R   R*   R+   R,   R&   R-   R.   R/   R0   g      @gš™™™™™¹?g      @g{®Gáz„?g333333ã?(    R(   R   t	   build_setR   R<   R   t!   structure_factors_from_scattererst   f_calct   fft_mapt   apply_volume_scalingR:   RM   R   R4   t   real_map_unpaddedR6   R	   R7   R1   R2   R8   R   R9   R5   R.   R   R;   R=   R>   R?   R@   RA   (   R)   R+   R,   R"   R#   RQ   R!   R   R'   t
   miller_setRZ   R[   R&   RN   t   around_atom_obj_R5   t   distt   approx_obj_(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt
   exercise_3v   sH    				[		c
         C   sB  t  j d t j d ƒ d |	 d d | d d d t ƒ }
 i t j j | g | g ƒ |	 6} |
 j d	 | ƒ t	 j
 d
 |
 j ƒ  d t d | d d  ƒ } | j d |
 d d d t d t ƒ j ƒ  } | j d |  d d  ƒ } | j ƒ  } |
 j ƒ  } | j ƒ  } t t j | ƒ ƒ } t | t | j | d ƒ ƒ ƒ | } | d k  sMt | ƒ ‚ t j j d |
 j ƒ  d | j ƒ  d | d | d t |
 j ƒ  ƒ d ƒ } | j ƒ  } | j ƒ  } t  j! d | d | d | d | ƒ } t" | j# ƒ  d  d! ƒ sðt ‚ t" | j$ ƒ  d" d! ƒ st ‚ | j% ƒ  d# k  s&t ‚ | j& ƒ  | k  s>t ‚ d  S($   NRH   s   P 1RI   i   RJ   RK   g      ø?RL   R   R   RP   RQ   RR   R'   RS   RT   RU   RV   R)   RW   i    g333333Ã?R   R*   R+   R,   R&   R-   R.   R/   R0   g      @gš™™™™™¹?g      @g      ð?('   R   R'   R
   RH   R=   R   R   R   R    R   RX   R   R<   R   RY   RZ   R[   R\   R:   R]   RM   R   R4   R6   R7   R1   R2   R8   R   R9   R5   R.   R   R;   R	   R>   R?   R@   RA   (   R)   R+   R,   R"   R#   RQ   RJ   R/   R0   R$   R'   R   R^   RZ   R[   R&   t   mt   ammRN   R_   R5   R`   Ra   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt
   exercise_4¥   sT    
	
	"			'		c      	   C   sÐ   t  d | d | d | d | ƒ } t j d | j ƒ  d t d | d d  ƒ }	 |	 j d	 | d
 d d t d t ƒ j ƒ  }
 |
 j d |  d d  ƒ } | j	 d d | j
 ƒ  d ƒ } t | j
 ƒ  d d ƒ sÌ t ‚ d  S(   NR!   R   R"   R#   R   RP   RQ   RR   R'   RS   RT   RU   RV   R)   RW   t   scaleg      Y@i    (   R(   R   RX   R   R<   R   RY   RZ   R[   t   apply_scalingR]   R	   R7   (   R)   R+   R,   R"   R#   RQ   R!   R   R'   R^   RZ   R[   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt
   exercise_5Û   s"    				 c          C   s	  xŸ d d d g d d d g d d d g d d d g d d d g d d d g d d d g f D]C }  t  d d d	 d
 d d d d d d d t j |  g ƒ d d ƒ q[ WxI t d d d ƒ d D]1 } t d d d	 d
 d d d d d d d | ƒ q¹ Wx¥ d d d g d d d g d d d g d d d g d d d g d d d g d d d g f D]I }  t d d d	 d d d d d d d d d d t j |  g ƒ d d ƒ qIWx[ t d d d ƒ d D]C } t d d d	 d d d d d d d d d d | d t d t ƒ 	q­Wxf t	 t t g t t g ƒ D]I \ } } t d d d	 d d d d d d d d d d d d | d | ƒ 	qWx¥ d d d g d d d g d d d g d d d g d d d g d d d g d d d g f D]I }  t
 d d d	 d d d d d d d d d d t j |  g ƒ d d ƒ q¸Wd  S(   Ni    gš™™™™™¹?i   i   gš™™™™™¹¿iúÿÿÿiýÿÿÿR)   R+   g      ð?R,   g        R"   g      @R#   g      @R!   R   id   i&  i
   g{®Gáz´?RJ   gÍÌÌÌÌÌì?RQ   i   R/   R0   i,  (   RG   R   t   vec3_doublet   rangeRO   Rb   Re   R<   R=   t   zipRh   (   R   RJ   R/   R0   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt   runõ   sp    ?"?"(?"t   __main__s   OK: real_space: (   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   R   R   R   t   cctbx.developmentR   R   t   cctbx.eltbx.xray_scatteringR   t   mmtbx.real_spaceR1   t   libtbx.test_utilsR	   R
   t   libtbx.utilsR   R(   RG   RO   Rb   Re   Rh   Rl   t   __name__(    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/real_space/tst.pyt   <module>   s.   	*%	8-		: