ó
I™xTc           @   sQ  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 e d d „ Z d „  Z d d d d d d „ Z d d d d d „ Z d d d d d „ Z d „  Z d „  Z e d k rMe ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   translation_search(   t   crystal(   t   miller(   t   xray(   t   maptbx(   t   random_structure(   t   debug_utils(   t   flex(   t   approx_equal(   t   matrixNi
   i    c         C   s˜  | d  k r t j ƒ  } n | j ƒ  } t j ƒ  } x3 t | j ƒ  j ƒ  ƒ D] } | j t	 j	 ƒ  ƒ qL W| j
 ƒ  | j
 ƒ  k s‡ t ‚ t j d | d | j
 ƒ  d | j ƒ  d | j ƒ  ƒ } xÔt t f D]Æ} | j d | j ƒ  d | j ƒ  d | d | d	 | ƒ j ƒ  j ƒ  } | j ƒ  | k s*t ‚ t j | ƒ } d
 sE|
 rR| j ƒ  n  | j | j ƒ  j ƒ  | ƒ | j ƒ  d
 k s†t ‚ | j | ƒ s›t ‚ xòt | ƒ D]ä} d
 } x| d 7} | d k  sÓt ‚ | d
 k r÷|	 r÷d
 d
 d
 g } n" g  | D] } t	 j | ƒ ^ qþ} g  t | | ƒ D] \ } } t | ƒ | ^ q)} |  j  ƒ  } | j! ƒ  j ƒ  d
 k sut ‚ | j" d | j# | ƒ j$ ƒ  ƒ | j! ƒ  j ƒ  d
 k r°Pn  |	 r·| d
 k sËt ‚ q·q·t j% | j& d | d d ƒ j' ƒ  j ƒ  ƒ } | r
d } n d } | | | j ƒ  j( ƒ  | } | sJt j) | | ƒ } n t j) | t j* | ƒ ƒ } d | d | k s¨t | | f ƒ ‚ q¨WqÊ Wd  S(   Nt   griddingt   anomalous_flagt   miller_indices_p1_f_calct	   p1_f_calct   space_groupt   miller_indices_f_obst   mt   f_partt   squared_flagi    i   iè  t
   scattererst   xray_structuret	   algorithmt   directi   i   s   %.6g(+   t   NoneR   t   complex_doublet   datat   doublet   xranget   indicest   sizet   appendt   randomR   t   AssertionErrorR   t
   fast_termst   Falset   Truet	   summationR   t   fftt   accu_real_copyt   allR   t
   statisticst   show_summaryt   buildt   space_group_infot   typet   n_grid_missest   verifyt	   randranget   zipt   floatt   deep_copy_scattererst   special_position_indicest   add_scattererst   apply_shiftR   t   normt!   structure_factors_from_scattererst   f_calct   n_ltrt   sumt   pow2(   t   structure_fixedt   structure_p1t   f_obst   f_calc_fixedt	   f_calc_p1t   symmetry_flagsR   t	   grid_tagst   n_sample_grid_pointst   test_origint   verboseR   R   t   iR"   R   t   mapt	   map_statst   i_samplet   run_away_countert
   grid_pointt   gt   xt	   grid_sitet   structure_shiftedt   i_gridt   pt	   map_valuet   sum_m_i_grid(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   run_fast_terms   sl    		
"2	 	c         C   sú  | d  k r t j ƒ  } n | j ƒ  } |  j ƒ  | j ƒ  k sE t ‚ t j d | d |  j ƒ  d |  j ƒ  d |  j	 ƒ  d |  j ƒ  d | d | j	 ƒ  d | j ƒ  ƒ } | j
 ƒ  j ƒ  | k sÃ t ‚ t j | j
 ƒ  ƒ }	 d	 sä | rñ |	 j ƒ  n  | j |  j ƒ  j ƒ  | ƒ | j ƒ  d	 k s%t ‚ | j | j
 ƒ  ƒ s@t ‚ t j d
 | j
 ƒ  d | j ƒ  d d d d d t ƒ }
 d	 s‚| rÌd G| GHx> t |
 j ƒ  ƒ D]' \ } } d | Gd |
 j ƒ  | GHqžWn  t |	 j ƒ  t j |
 j ƒ  ƒ ƒ söt ‚ |
 S(   NR   R   R   R   R?   R   R   R   i    R   t   tagst   peak_search_leveli   t	   max_peaksi
   t   interpolates	   gridding:s   (%.4f,%.4f,%.4f)s   %.6g(   R   R   R   R   R   R!   R   t   fast_nv1995R   R   t
   target_mapR(   R   R)   R*   R+   R,   R-   R.   R/   t	   peak_listt	   tag_arrayR$   t	   enumeratet   sitest   heightsR	   t   maxt   grid_heights(   R?   R@   RA   RB   R   RC   RF   R   RZ   RI   R\   RG   t   site(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   run_fast_nv1995N   s@    				"*i   g      @g¸…ëQ¸Þ?i   c         C   s›  | r |  j  ƒ  }  n  t j |  d | d d d d d t ƒ} t j d | d t j ƒ  d	 k  d
 | ƒ } t j d t d | d k ƒ }	 | j	 d |	 d | d | ƒ j
 ƒ  }
 | j d d g | d |
 ƒ d sÑ | rä | j ƒ  j ƒ  n  t | j d | d d ƒ j ƒ  ƒ } d s| r!| j ƒ  n  d s-| r:| j ƒ  n  t j j | ƒ } t j d | ƒ } t j d | ƒ } x| j ƒ  D]ú} t j d | ƒ } | j d d ƒ } | j | ƒ d sÀ| rÓ| j ƒ  j ƒ  n  | j d | d d ƒ j ƒ  } d sý| r
| j ƒ  n  d  } | j ƒ  j ƒ  d k rI| j d | d d ƒ j ƒ  } n  t j d t d | d  k	 ƒ }	 | j ƒ  j ƒ  d k rµ| j	 d |	 d | d | ƒ j
 ƒ  }
 t j |
 ƒ } n  t | | | | | |	 |
 | d | ƒt  | | | |	 |
 | | ƒ } | j | ƒ d s| r$| j ƒ  j ƒ  n  | j ƒ  j ƒ  | k  r[| j! ƒ  d d k  swt" ‚ q}| j! ƒ  d d k s}t" ‚ q}W| j! ƒ  d d k s—t" ‚ d  S(   Nt   n_scattererst   volume_per_atomi–   t   min_distanceg      ð?t   general_positions_onlyt   crystal_symmetryR   g      à?t   d_mint   is_isotropic_search_modelt   have_f_parti   RB   t   resolution_factort	   max_primet   elementst   Set   gridi    R   R   R   t   special_position_settingsRc   i   RF   g®Gáz®ï?(   i    i    i    (#   t   primitive_settingR   R   R$   R   t	   build_setR    R   RB   t   crystal_griddingt   n_realt   build_scatterersR*   t   show_scattererst   absR8   R9   t
   show_arrayt   sett   expand_to_p1R   Rr   R   t	   structureR   t   customized_copyt   add_scattererR   R   R   RC   RU   Rd   R`   R!   (   R,   t   use_primitive_settingt
   n_elementsRj   t   grid_resolution_factorRn   RF   R}   t   miller_set_f_obsRB   R   R?   t   miller_set_p1t   special_position_settings_p1R=   t	   scattererR>   t   scatterer_at_originRA   R@   RC   R\   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt	   test_atomr   s˜    																 c         C   sÎ  | r |  j  ƒ  }  n  d } t j |  d | d d d d d	 t d
 t d t ƒ} d sZ | rm | j ƒ  j ƒ  n  t j d | d t j ƒ  d k  d | ƒ }	 t	 |	 j
 d | d d ƒ j ƒ  ƒ }
 d sÇ | rÔ |
 j ƒ  n  d sà | rí |
 j ƒ  n  t j j |
 ƒ } t j d | ƒ } t j d | ƒ } t j d | ƒ } x_ | j ƒ  D]Q } | r†| j ƒ  j ƒ  | j ƒ  j ƒ  d k  r†| j | ƒ qB| j | ƒ qBWd s£| rÏ| r¼| j ƒ  j ƒ  n  | j ƒ  j ƒ  n  d  } | rü|
 j
 d | d d ƒ j ƒ  } n  | j
 d | d d ƒ j ƒ  } t j d t d | ƒ } |	 j d | d | d | ƒ j ƒ  } t j | ƒ } t | | |
 | | | | | d t d | ƒt |
 | | | | | | ƒ } | j  ƒ  d d k sÊt! ‚ d  S(   Nt   Nt   Ct   ORo   Rf   i2   Rg   g      ð?Rh   t   random_u_isot   random_occupancyi    Ri   R   g      à?Rj   R   R   R   Rr   i   Rk   Rl   RB   Rm   Rn   RE   RF   g®Gáz®ï?(   R‰   RŠ   RŠ   R‹   R‰   RŠ   RŠ   R‹   ("   Rs   R   R   R$   R*   Rx   R   Rt   R    Ry   R8   R9   Rz   R{   R|   R   Rr   R   R}   R   R   R   R   R   RB   R#   Ru   Rv   R   RC   RU   Rd   R`   R!   (   R,   R€   t   flag_f_partRj   R‚   Rn   RF   Ro   R}   Rƒ   R?   R„   R…   R>   R=   R†   R@   RA   RB   R   RC   R\   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   test_moleculeÃ   s‚    														gš™™™™™é?c         C   sÓ  d t  |  j ƒ  ƒ p d } t j d |  d d g | d t d t ƒ } t j d | d	 t d
 | ƒ j d | d d ƒ j ƒ  } t	 | ƒ } t j
 j | ƒ }	 | j ƒ  }
 t j d  ƒ } |
 j | ƒ } |	 j d | d d ƒ j ƒ  } t j d t d t ƒ } | j d | d | d | ƒ j ƒ  } t j | ƒ } xž | f D]“ } t d | d d  d | d | d | d | d | ƒ } | j ƒ  d d k s�t ‚ t j | j ƒ  d ƒ } | j ƒ  j | | d d ƒs8t ‚ q8Wd  S(!   Ni   i   R,   Ro   RŠ   t	   use_u_isot   use_u_anisoRi   R   Rj   R   R   R   gš™™™™™¹?gš™™™™™É?gffffffæ?Rk   Rl   RB   Rm   Rn   R?   R@   RA   R   RC   RF   i    gÍÌÌÌÌÌì?t	   toleranceg{®Gáz¤?(   gš™™™™™¹?gš™™™™™É?gffffffæ?(   t   lent   groupR   R   R#   R   Rt   R8   R9   Ry   R{   R|   R
   t   colR6   R   RB   Ru   Rv   R   RC   Rd   R   R`   R!   R_   R,   t   is_allowed_origin_shift(   R,   Rj   R‚   Rn   RF   t   nt   target_structuret   f_targetR?   t   indices_in_p1t   target_structure_in_p1t   reference_translationt   structure_in_p1t   f_structure_in_p1RB   R   RC   t   f_calc_in_p1R\   t   shift(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt
   test_shift	  sJ    							c         C   sG  | j  ƒ  j ƒ  d k r+ |  j r+ d GHd  S|  j pC |  j pC |  j s[ t |  _ t |  _ n  t g } | j  ƒ  j ƒ  d k rŒ | j	 t ƒ n  |  j r¿ x' | D] } t
 | | d |  j ƒqœ Wn  |  j rxB t t f D]0 } x' | D] } t | | | d |  j ƒqã WqÖ Wn  |  j rCx* t d ƒ D] } t | d |  j ƒq#Wn  d  S(   Ni   s"   High symmetry space group skipped.t   PRF   i   (   R”   t   order_pt   HighSymmetryt   Atomt   Moleculet   ShiftR$   R#   t!   conventional_centring_type_symbolR   Rˆ   t   VerboseR�   R   R¡   (   t   flagsR,   t   use_primitive_setting_flagsR€   RŽ   RG   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   run_call_back7  s*    "					c           C   s   t  j t j d t d ƒ d  S(   Ni   R¤   R¥   R¦   R§   (   s   HighSymmetrys   Atoms   Molecules   Shift(   R   t   parse_options_loop_space_groupst   syst   argvR¬   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   runN  s
       t   __main__(   t
   __future__R    t   cctbxR   R   R   R   R   t   cctbx.developmentR   R   t   cctbx.array_familyR   t   libtbx.test_utilsR	   t   scitbxR
   R    R®   R#   RU   Rd   Rˆ   R�   R¡   R¬   R°   t   __name__(    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_fast_nv1995.pyt   <module>   s4   :	%P	E	,		