ó
0™xTc           @   sž   d  d l  m Z d  d l m Z d  d l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d S(   iÿÿÿÿ(   t   division(   t   flexNt   amplitude_unit_weightingc           B   s   e  Z d  Z d „  Z RS(   s    Mere unit weights for F c         C   s+   |  j  j ƒ  s t ‚ d  |  _ d  |  _ d  S(   N(   t   observedt   is_xray_amplitude_arrayt   AssertionErrort   Nonet   weightst   derivatives_wrt_f_c(   t   self(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   compute	   s    	(   t   __name__t
   __module__t   __doc__R
   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR      s   t   intensity_quasi_unit_weightingc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s©    Quasi-unit  weights 1/(4 Fo^2) for F^2.

      The weights are replaced by 1/(4 sigma(Fo^2)^2)
      for weak Fo^2, which are defined as Fo^2 < n_sigma * sigma(Fo^2)
  g      ð?c         C   s   | |  _  d  S(   N(   t   n_sigma(   R	   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   __init__   s    c         C   s  |  j  j ƒ  s t ‚ |  j  j ƒ  } |  j  j ƒ  } t j | j ƒ  ƒ } | d  k ro t j	 | j ƒ  t
 ƒ } n1 |  j d k r� | | k } n | |  j | k } | } | j | d | j | ƒ ƒ | d  k	 rù | j | d t j | j | ƒ ƒ ƒ n  | |  _ d  |  _ d  S(   Ni   g      Ð?(   R   t   is_xray_intensity_arrayR   t   datat   sigmasR   t   doublet   sizeR   t   boolt   TrueR   t   set_selectedt   selectt   pow2R   R   (   R	   t   f_sqrt	   sig_f_sqrt   wt   strongst   weaks(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR
      s    )	(   R   R   R   R   R
   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR      s   t   pure_statistical_weightingc           B   s   e  Z d  Z d „  Z RS(   s    1/sigma^2 weights c         C   s\   |  j  d  k	 s t ‚ t j |  j  j ƒ  ƒ } | j d ƒ sB t ‚ d | |  _ d  |  _ d  S(   Ni    i   (	   R   R   R   R   R   R   t   all_gtR   R   (   R	   t   sigmas_squared(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR
   0   s
    (   R   R   R   R
   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR    -   s   t   simple_shelx_weightingc           B   s)   e  Z d  Z d d d „ Z d d „ Z RS(   s¹    As the WGHT instruction in ShelXL with only a and b terms.
      The implementation is straightforward without any attempt to save
      space or time: mostly a reference for tests.
  gš™™™™™¹?i    c         C   s   | | f |  _  d  S(   N(   t   _params(   R	   t   at   b(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR   >   s    c         C   sj  | |  _  |  j j ƒ  s t ‚ |  j  j ƒ  s3 t ‚ |  j \ } } |  j  j ƒ  } | d  k r{ |  j j |  j  d d ƒ} n  | |  _ | t	 j
 | ƒ } t j |  j j ƒ  ƒ } |  j j ƒ  j ƒ  } |  j j ƒ  d k  } | j | d ƒ | d t j | ƒ d }	 d | t j | |	 ƒ | |	 }
 d | | |	 | t j |
 ƒ d | } |
 | |  _ |  _ d  S(	   Nt   cutoff_factorg®Gáz®ï?i    i   i   i   g      @gUUUUUUõ?(   t
   calculatedR   R   R   t   is_complex_arrayR$   R   R   t   scale_factort   matht   sqrtR   R   R   t	   deep_copyR   t   normR   R   (   R	   t   f_calcR*   R%   R&   t   f_ct   sigmas_squaret   f_obs_square_plust	   negativest   pR   t   dw_dfc(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR
   A   s$    			#,N(   R   R   R   R   R   R
   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR#   8   s   t   shelx_weightingc           B   sh   e  Z d  Z d d d d d d	 d
 d „ Z d „  Z e e ƒ  �  Z d „  Z e e ƒ  �  Z d
 d „ Z	 RS(   s#    As the WGHT instruction in ShelXL gš™™™™™¹?i    g      ð?i   c         C   sX   | d k s | d  k	 s t ‚ | | | | | | f |  _ | |  _ t |  _ t |  _ d  S(   Ni    (   R   R   R$   t   _wavelengthR   t   _obs_part_dirtyt   Falset   computing_derivatives_wrt_f_c(   R	   R%   R&   t   ct   dt   et   ft
   wavelength(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR   Y   s
    		c          C   s   d „  }  d „  } t  ƒ  S(   Nc         S   s$   y |  j  SWn t k
 r d  SXd  S(   N(   t	   _observedt	   ExceptionR   (   R	   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   fgeta   s      c         S   s(   | j  ƒ  s t ‚ | |  _ t |  _ d  S(   N(   R   R   R@   R   R8   (   R	   t   obs(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   fsetd   s    	(   t   locals(   RB   RD   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   _propdef`   s    		c          C   s   d „  }  d „  } t  ƒ  S(   Nc         S   s$   y |  j  SWn t k
 r d  SXd  S(   N(   t   _calculatedRA   R   (   R	   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyRB   l   s      c         S   s   | j  ƒ  s t ‚ | |  _ d  S(   N(   R)   R   RG   (   R	   R/   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyRD   o   s    (   RE   (   RB   RD   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyRF   k   s    		c         C   s*  | |  _  |  j \ } } } } } } |  j r�| d k rB d  }	 nh |  j j ƒ  j ƒ  }
 | d k rr |
 j ƒ  } n  |
 | 9}
 t j	 |
 ƒ } | d k r  | }	 n
 d | }	 |	 |  _
 |  j j ƒ  d  k	 r9t j |  j j ƒ  ƒ |  _ | d k r|  j | 7_ n  | d k rB| } | | |  j 9} |  j | 7_ qBn	 d  |  _ |  j j ƒ  d k  } |  j j ƒ  j ƒ  |  _ |  j j | d ƒ |  j | 9_ t |  _ n  |  j
 }	 |  j  j ƒ  } t j | ƒ } | d  k rî|  j j |  j  d d ƒ} n  | |  _ | | 9} | d | 9} | |  j 7} | j ƒ  } | | | 9} d  } |  j rRd | } n  | | 7} |  j rr| | 7} n  | | 9} |  j d  k	 r›| |  j 7} n  |	 d  k r´d | } n
 |	 | } |  j r| d  k	 ré| t j | ƒ } n  | t j | ƒ 9} | d 9} | | } n  | |  _ | |  _ d  S(	   Ni    i   R'   g®Gáz®ï?i   g      @i   gUUUUUUõ?(   R(   R$   R8   R   R   t   sin_theta_over_lambda_sqR   R-   R   t   expt   _qR   R   t   _den_obsR7   t   _p_obsR   R9   R.   R*   R:   R+   R,   R   R   (   R	   R/   R*   R%   R&   R;   R<   R=   R>   t   qt   exp_argst   k_sqrt   exp_valst   e_times_sin_theta_sqR3   R0   R4   t   dent   derR   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR
   u   sx    			 
	
					
	 
	 
 
	
	gUUUUUUÕ?N(
   R   R   R   R   R   RF   t   propertyR   R(   R
   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyR6   V   s   			(   t
   __future__R    t   cctbx.array_familyR   R+   t   objectR   R   R    R#   R6   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/weighting_schemes.pyt   <module>   s   	