ó
-™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 e	 j d ƒ Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   quality_factor_from_any(   t   ext(   t   maptbx(   t   crystal(   t   math_module(   t   fftpack(   t   adopt_init_argsi   i
   t   managerc           B   sæ   e  Z d d d e d d d d d d d d d e e d d „ Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   i   g      @i   gñhãˆµøä>c         C   sE  | d  k s | d  k s t ‚ | d  k rK | d  k	 rB | d  k	 sˆ t ‚ n= | } | d  k rl | j ƒ  } n | | j ƒ  d k  sˆ t ‚ t j j |  | ƒ t | | | |	 |
 ƒ } | d  k rÈ d } n  | d  k rÝ d } n  ~ t |  t ƒ  d t	 ƒd  |  _
 d  |  _ d  |  _ d  |  _ t |  j ƒ  j ƒ  ƒ |  _ t ƒ  |  _ d  S(   Ni   g�íµ ÷Æ°>gü©ñÒMbP?iœÿÿÿt   hidegzo ð?(   t   Nonet   AssertionErrort   d_minR   t   symmetryt   _copy_constructorR   R   t   localst   Truet   _crystal_griddingt   _rfftt   _cfftt   _u_baset   _estimate_time_directt   space_groupt   order_zt   estimate_time_directt   _estimate_time_fftt   estimate_time_fft(   t   selft
   miller_sett   crystal_symmetryR   t   cos_sin_tablet   grid_resolution_factort   symmetry_flagst   mandatory_grid_factorst   quality_factort   u_baset   b_baset   wing_cutofft   exp_table_one_over_step_sizet	   max_primet   force_complext    sampled_density_must_be_positivet   tolerance_positive_definite(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   __init__   s.    !						c         C   s   |  j  S(   N(   t   _d_min(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   6   s    c         C   s   |  j  S(   N(   t   _cos_sin_table(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   9   s    c         C   s   |  j  S(   N(   t   _grid_resolution_factor(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   <   s    c         C   s   |  j  S(   N(   t   _symmetry_flags(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR    ?   s    c         C   s   |  j  S(   N(   t   _mandatory_grid_factors(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR!   B   s    c         C   s   |  j  S(   N(   t   _quality_factor(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR"   E   s    c         C   s   |  j  S(   N(   t   _wing_cutoff(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR%   H   s    c         C   s   |  j  S(   N(   t   _exp_table_one_over_step_size(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR&   K   s    c         C   s   |  j  S(   N(   t
   _max_prime(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR'   N   s    c         C   s   |  j  S(   N(   t   _force_complex(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR(   Q   s    c         C   s   |  j  S(   N(   t!   _sampled_density_must_be_positive(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR)   T   s    c         C   s   |  j  S(   N(   t   _tolerance_positive_definite(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR*   W   s    c         C   s‚   |  j  d  k r{ t j d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j	 ƒ  d |  j
 ƒ  d | ƒ |  _  n  |  j  S(	   Nt	   unit_cellR   t   resolution_factorR    t   space_group_infot   mandatory_factorsR'   t   assert_shannon_sampling(   R   R
   R   t   crystal_griddingR8   R   R   R    R:   R!   R'   (   R   R<   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR=   Z   s    	c         C   s7   |  j  d  k r0 t j |  j ƒ  j ƒ  ƒ |  _  n  |  j  S(   N(   R   R
   R   t   real_to_complex_3dR=   t   n_real(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   rfftg   s    c         C   s7   |  j  d  k r0 t j |  j ƒ  j ƒ  ƒ |  _  n  |  j  S(   N(   R   R
   R   t   complex_to_complex_3dR=   R?   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   cfftm   s    c         C   sC   |  j  d  k r< t j |  j ƒ  |  j ƒ  |  j ƒ  ƒ |  _  n  |  j  S(   N(   R   R
   R   t   calc_u_baseR   R   R"   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR#   s   s    		c         C   s"   |  j  ƒ  |  j ƒ  |  j ƒ  |  S(   N(   R@   RB   R#   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt	   setup_fft{   s    


c         C   s   |  j  j ƒ  o |  j j ƒ  S(   N(   R   t   have_good_estimateR   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   have_good_timing_estimates�   s    NgUUUUUUÕ?(   t   __name__t
   __module__R
   t   FalseR+   R   R   R   R    R!   R"   R%   R&   R'   R(   R)   R*   R   R=   R@   RB   R#   RD   RF   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR      s@   																	R   c           B   s/   e  Z d  d „ Z d „  Z d „  Z d „  Z RS(   i † c         C   s(   | |  _  | |  _ d |  _ d |  _ d  S(   Ni   i    (   R   t   min_productt   productt   time(   R   R   RJ   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR+   ‡   s    			c         C   s   |  j  |  j t |  j ƒ k S(   N(   RK   RJ   t   floatR   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRE   �   s    c         C   s(   | |  j  k r$ | |  _  | |  _ n  d  S(   N(   RK   RL   (   R   RK   RL   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   register�   s    	c         C   s   |  j  | |  j S(   N(   RL   RK   (   R   RK   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   __call__•   s    (   RG   RH   R+   RE   RN   RO   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   …   s   		c         C   s‡   | | k r | S|  | k r1 t  | | ƒ |  | S| | | |  } |  d k rX | } n# | d k rm | } n | | |  } | | | S(   Ni    (   t   max(   t   x1t   x2t   y1t   y2t   xt   slopet   y_intercept(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   _linear_estimate˜   s       	 	R   c           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s‚   d |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d |  _ d |  _ d  S(   Ni    (   t   min_n_scattererst   max_n_scattererst   min_n_miller_indicest   max_n_miller_indicest   min_time_samplingt   max_time_samplingt   min_time_from_or_to_mapt   max_time_from_or_to_mapt   min_time_apply_u_extrat   max_time_apply_u_extrat   time_samplingt   time_fftt   time_from_or_to_mapt   time_apply_u_extra(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR+   £   s    													c         C   s   |  j  d k S(   Ni    (   Rd   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRE   ³   s    c         C   sè   |  j  d k s |  j  | k r3 | |  _  | |  _ n  |  j | k rW | |  _ | |  _ n  |  j d k su |  j | k r“ | |  _ | |  _ | |  _ n  |  j | k rÀ | |  _ | |  _ | |  _	 n  | |  _
 | |  _ | |  _ | |  _ d  S(   Ni    (   RY   R]   RZ   R^   R[   R_   Ra   R\   R`   Rb   Rc   Rd   Re   Rf   (   R   t   n_scattererst   n_miller_indicesRc   Rd   Re   Rf   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRN   ¶   s(    									c         C   sm   t  |  j |  j |  j |  j | ƒ |  j t  |  j |  j |  j |  j	 | ƒ t  |  j |  j |  j
 |  j | ƒ S(   N(   RX   RY   RZ   R]   R^   Rd   R[   R\   R_   R`   Ra   Rb   (   R   Rg   Rh   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRO   Ñ   s    M(   RG   RH   R+   RE   RN   RO   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   ¡   s   			t   managed_calculation_basec           B   s8   e  Z d  „  Z d „  Z d „  Z d „  Z e d „ Z RS(   c         C   s×   t  |  t ƒ  d t ƒ| d  k	 r. | d  k	 s4 t ‚ | j ƒ  j | j ƒ  ƒ sU t ‚ | j ƒ  | j ƒ  k ss t ‚ | d  k	 rÁ | j ƒ  j | j ƒ  ƒ s  t ‚ | j ƒ  | j ƒ  k sÁ t ‚ n  | d k sÓ t ‚ d  S(   NR	   t   directt   fft(   Rj   Rk   (   R   R   R   R
   R   R8   t   is_similar_toR   (   R   R   t   xray_structureR   t	   algorithm(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR+   æ   s    !!!c         C   s   |  j  S(   N(   t   _manager(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   ð   s    c         C   s   |  j  S(   N(   t   _xray_structure(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRm   ó   s    c         C   s   |  j  S(   N(   t   _miller_set(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyR   ö   s    c         C   s$   | s |  j  S|  j  d k r  d Sd S(   NRj   s   Direct Summations   FFT Approximation(   t
   _algorithm(   R   t   verbose(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRn   ù   s
    (   RG   RH   R+   R   Rm   R   RI   Rn   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyRi   ä   s
   	
			Ni   (   t
   __future__R    t!   cctbx.xray.structure_factors.miscR   t
   cctbx.xrayR   t   cctbxR   R   R   t   scitbxR   t   libtbxR   R   t   default_cos_sin_tableR   R   t   objectR   RX   R   Ri   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/manager.pyt   <module>   s   y		C