ó
-™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 d  d
 l m Z d  d l m Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   gradients_base(   t   expensive_function_call_message(   t   global_counters(   t   ext(   t   maptbx(   t   adptbx(   t   flex(   t   matrix(   t   user_plus_sys_time(   t   introspectiont   gradients_fftc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s'  t  ƒ  } } t j |  | | | d d ƒ| |  _ | j ƒ  t  ƒ  } t j d | j ƒ  d | j ƒ  d | j	 ƒ  d | j
 ƒ  d | j ƒ  d | j ƒ  d	 | j ƒ  ƒ |  _ |  j ƒ  }	 | j ƒ  } t  ƒ  }
 |  j |	 ƒ } |
 j ƒ  }
 t  ƒ  } |	 j ƒ  s| j ƒ  j | j ƒ  ƒ } n | j ƒ  j | j ƒ  ƒ } | j ƒ  } t  ƒ  } |  j j d | j ƒ  d
 | d | j	 ƒ  d | j ƒ  d | d | d | j ƒ  ƒ | j ƒ  } t j ƒ  j ƒ  | j j d | j ƒ  j ƒ  d | j  ƒ  j ƒ  d | d | d |
 d | ƒ t! |  _" t! |  _# t$ j% j& | j ƒ  ƒ d  S(   Nt	   algorithmt   fftt	   unit_cellt
   scattererst   scattering_type_registryt   u_baset   wing_cutofft   exp_table_one_over_step_sizet   tolerance_positive_definitet   u_iso_refinable_paramst   site_symmetry_tablet   ft_d_target_d_f_calct   n_parameterst    sampled_density_must_be_positivet   n_scattererst   n_miller_indicest   time_samplingt   time_fftt   time_from_or_to_mapt   time_apply_u_extra('   R	   R   t   __init__t   _d_target_d_f_calct	   setup_fftR   t   fast_gradientsR   R   R   R   R   R   R   t   _resultst   _gradient_map_coefft   elapsedt   _gradient_map_coeff_to_mapt   anomalous_flagt   rfftt   backwardt   complex_mapt   cfftt   samplingR   R   R
   t   virtual_memory_infot
   update_maxt   estimate_time_fftt   registert   sizet   indicest   Falset   d_target_d_site_frac_was_usedt   d_target_d_u_star_was_usedR   R   t   process(   t   selft   managert   xray_structureR   t
   miller_sett   d_target_d_f_calcR   t   time_allR   t   coeffR   t	   coeff_mapR   t   gradient_mapR   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyR       sZ    		
							c         C   sâ   |  j  ƒ  j d |  j ƒ  j ƒ  ƒ } |  j ƒ  j ƒ  j ƒ  t j |  j ƒ  j	 ƒ  j
 ƒ  ƒ j ƒ  |  j ƒ  j ƒ  j ƒ  } | j ƒ  r¤ | j ƒ  j ƒ  r¤ | d } n  t j |  j ƒ  j ƒ  |  j j ƒ  | j ƒ  | j ƒ  | ƒ | S(   Nt   datai   (   R;   t   arrayR<   t	   deep_copyR9   R   t   volumeR   t   rowR)   t   n_realt   productt   space_groupt   n_ltrR(   t
   is_centricR   t   apply_u_extraR$   t   u_extraR3   RA   (   R8   R>   t
   multiplier(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyR%   E   s    $S		c         C   s¯   | j  ƒ  s' |  j ƒ  j ƒ  j ƒ  } n |  j ƒ  j ƒ  j ƒ  } t j j d | j ƒ  d | j  ƒ  d | j	 ƒ  d | j
 ƒ  d |  j ƒ  j ƒ  j ƒ  d t j | ƒ d t d t ƒ S(	   NRH   R(   t   miller_indicest   structure_factorsRF   t   map_gridt   conjugate_flagt   treat_restricted(   R(   R9   R)   t	   n_complexRF   R   RO   t   to_mapRH   R3   RA   R   t   gridt   TrueR4   (   R8   R>   RS   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyR'   U   s    c         C   s   |  j  |  j j ƒ  ƒ S(   N(   t
   check_sizeR$   t   d_target_d_site_cart(   R8   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyRX   d   s    c         C   sA   |  j  r t t ƒ ‚ n  t |  _  |  j ƒ  |  j ƒ  j ƒ  j ƒ  S(   N(   R5   t   RuntimeErrorR   RV   RX   R:   R   t   orthogonalization_matrix(   R8   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyt   d_target_d_site_fracg   s
    			c         C   s   |  j  |  j j ƒ  ƒ S(   N(   RW   R$   t   d_target_d_u_cart(   R8   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyR\   n   s    c         C   sC   |  j  r t t ƒ ‚ n  t |  _  t j |  j ƒ  j ƒ  |  j ƒ  ƒ S(   N(	   R6   RY   R   RV   R   t   grad_u_cart_as_u_starR:   R   R\   (   R8   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyt   d_target_d_u_starq   s
    		(	   t   __name__t
   __module__R    R%   R'   RX   R[   R\   R^   (    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyR      s   	6					N(   t
   __future__R    t+   cctbx.xray.structure_factors.gradients_baseR   t!   cctbx.xray.structure_factors.miscR   t   cctbx.xray.structure_factorsR   t
   cctbx.xrayR   t   cctbxR   R   t   cctbx.array_familyR   t   scitbxR   t   libtbx.utilsR	   t   libtbxR
   R   (    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/structure_factors/gradients_fft.pyt   <module>   s   