ó
Õ™xTc           @   sy  d  d l  m Z d  d l Z e j j d d ƒ s: d Z n d  d l Z d  d l	 m
 Z
 d  d l m Z d  d l Z d  d l m Z m Z d  d l m Z d  d	 l m Z d  d
 l m Z e j j d ƒ Z d Z d Z d Z d Z d Z d a d Z d Z  d Z! d Z" d Z# d e$ f d „  ƒ  YZ% i e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d ƒ d 6e% d d  ƒ d! 6e% d d" ƒ d# 6Z& d$ e$ f d% „  ƒ  YZ' d& e$ f d' „  ƒ  YZ( d( e$ f d) „  ƒ  YZ) d* e) f d+ „  ƒ  YZ* d, „  Z+ d- „  Z, d S(.   iÿÿÿÿ(   t   divisionNt   namet   phaser(   t   flex(   t   xray(   t   Sorryt   user_plus_sys_time(   t   wk1995(   t   adptbx(   t   adopt_init_argst   mmtbx_f_model_extg        t   target_attributesc           B   s&   e  Z d d  „ Z d „  Z d „  Z RS(   c         C   s&   t  |  t ƒ  ƒ |  j ƒ  s" t ‚ d  S(   N(   R	   t   localst   validatet   AssertionError(   t   selft   familyt   specialization(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   __init__    s    c         C   si   |  j  d k r$ d |  _  t |  _ n	 t |  _ |  j  d k rI |  j d  k S|  j  d k re |  j d k St S(   Nt   lsmt   lst   mlt   hlt   sad(   NR   R   (   R   t   Truet	   pseudo_mlt   FalseR   t   None(   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR   $   s    		c         C   s   |  j  d k o |  j d k S(   NR   R   (   R   R   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   requires_experimental_phases0   s    N(   t   __name__t
   __module__R   R   R   R   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR      s   	R   t   ls_wunit_k1t   ls_wunit_kunitt   ls_wunit_k1_fixedt   ls_wunit_k1ask3_fixedt
   ls_wexp_k1t   ls_wexp_kunitt	   ls_wff_k1t   ls_wff_kunitt   ls_wff_k1_fixedt   ls_wff_k1ask3_fixedR   t   lsm_k1t	   lsm_kunitt   lsm_k1_fixedt   lsm_k1ask3_fixedR   R   t   mlhlR   t   ml_sadt   phaser_sad_target_functorc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c      	   C   sÖ  | |  _  | |  _ | |  _ | |  _ | d  k r|  j  j ƒ  } t j |  j j ƒ  ƒ } t j | | ƒ } t j | | ƒ }	 | d k r˜ t	 d ƒ ‚ n  |	 | }
 d } d  } t
 j j j d | d | d t ƒ } | j d | d |
 d	 | d
 | ƒ |  _ |  j j d | ƒ |  j ƒ  } n  t | ƒ d k s3t ‚ | d d k sIt ‚ | d }
 | d } | d } t
 j j j d | d | d t ƒ } | j d | d |
 d	 | d
 | ƒ |  _ |  j j d | ƒ |  j j ƒ  d  S(   Ni    s&   Zero denominator in scale calculation.g        t   f_obst   r_free_flagst   verboset   xray_structuret   previous_overall_scaleKt   previous_overall_scaleUt   previous_variancest   f_calci   R.   i   i   i   (   R0   R1   R3   R7   R   t   dataR   t   abst   sumt   RuntimeErrorR   t   phenix_adaptorst
   sad_targett   data_adaptorR   t   targett   refine_sad_objectt
   set_f_calct   target_memoryt   lenR   t   reject_outliers(   R   R0   R1   R3   R7   RB   t   dent   numt   denomt	   numeratorR4   R5   R6   t   adaptor(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR   H   sR    				
		


		c         C   sB   |  j  } | j ƒ  t j | j j ƒ  ƒ |  _ | j j d ƒ d  S(   Ng        (   R@   t   refine_variance_termsR   t   u_as_bt   refine_sad_instancet   get_refined_scaleUt   refined_overall_b_isot
   set_scaleU(   R   t   rso(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   prepare_for_minimizationy   s
    	
c         C   s.   |  j  j } d | j ƒ  | j ƒ  | j ƒ  f S(   NR.   (   R@   RL   t   get_refined_scaleKRM   t   get_variance_array(   R   t   rsi(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRB   €   s    c         C   s’   |  j  j d | ƒ |  j  } | j d t ƒ } | j d t ƒ \ } } | j d t ƒ } t j d t j	 ƒ  d | d | d | j
 ƒ  d | j
 ƒ  ƒ S(	   NR7   t   use_working_sett   curvst   target_per_reflectiont   target_workt   target_testt   gradients_workt   hessians_work(   R@   RA   t
   functionalR   t   derivativesR   R   t   targets_common_resultsR   t   doubleR8   (   R   R7   t   compute_gradientsRP   RX   t   da_dbt   daa_dbb_dabRY   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   __call__…   s    		(   R   R   R   RQ   RB   Rc   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR/   F   s   	1		t   target_functorc           B   s2   e  Z d d  „ Z d „  Z d „  Z e d „ Z RS(   c   	      C   sŽ  | |  _  | j } | d  k	 s$ t ‚ | j ƒ  } | d k r® t d  k rW t d ƒ ‚ n  t d | j ƒ  d | j	 ƒ  d | j
 d | j ƒ  d | j ƒ |  _ |  j j ƒ  | _ nÜ| j d k rD| j ƒ  rØ | j ƒ  } n d  } | d  k rù | j ƒ  } n  t j j d | j ƒ  d | j	 ƒ  d	 | d
 | d | j ƒ  d d ƒ |  _ nF| j rÔ| j ƒ  \ } } | j ƒ  } | d k r€d } qT| d k r›| j ƒ  } qT| d k r¶| j ƒ  } qT| d k rËd } qTt ‚ n€| j ƒ  } | j d ƒ rvt j | j ƒ  j  ƒ  d ƒ } | d k r"d } qT| d k r=| j ƒ  } qT| d k rRd } qT| d k rm| j ƒ  } qTt ‚ nÞ | j d ƒ rÄt! | ƒ } | d k r¦d } qT| d k r»d } qTt ‚ n� | j d ƒ rNt" | d d ƒ } | d k rúd } qT| d  k r| j ƒ  } qT| d! k r0| j ƒ  } qT| d" k rEd } qTt ‚ n t ‚ t j j# d# t$ d | d | j	 ƒ  d$ | d | ƒ |  _ d  S(%   NR.   sU   ml_sad target requires phaser extension, which is not available in this installation.R0   R1   R3   R7   RB   R   t   experimental_phasest
   alpha_betat   scale_factort   integration_step_sizeg      @R)   i    R,   R+   R*   g      ð?t	   ls_wunit_R   R!   R    R"   t   ls_wexp_R#   R$   t   ls_wff_t   Ng      9@R%   R'   R(   R&   t   compute_scale_using_all_datat   weights(%   t   managert   target_nameR   R   R   R   R   R/   R0   R1   R3   t   f_modelt   _target_memoryt   coreRB   R   R   t	   hl_coeffsRf   R   t   target_functorst   max_liket   scale_ml_wrapperR   t   f_star_w_starR8   t
   scale_k3_wt
   scale_k1_wR;   t
   startswithR   R_   t   sizet   ls_sigma_weightst   ls_ff_weightst   least_squaresR   (	   R   Ro   Rf   Rp   t   attrRe   R0   Rn   Rg   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR   ”   sš    			 													c         C   s&   |  j  j d k r" |  j j ƒ  n  d  S(   NR.   (   Ro   Rp   Rs   RQ   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRQ   ë   s    c         C   s   |  j  j d k S(   NR-   (   Ro   Rp   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt8   target_function_is_invariant_under_allowed_origin_shiftsï   s    c      	   C   sj   t  d |  j d |  j d |  j j ƒ  d | ƒ ƒ } t |  j d d  ƒ } | d  k	 rf | ƒ  |  j _ n  | S(   NRo   t   core_resultR7   R`   RB   (   t   target_resultRo   Rs   Rq   t   getattrR   Rr   (   R   R`   t   resultRB   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRc   ò   s    		N(   R   R   R   R   RQ   R�   R   Rc   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRd   ’   s   W		t   target_result_mixinc           B   s/   e  Z d e e e e d d d  „ Z d „  Z RS(   c         C   s©  | d  k	 r' | d k r' t d ƒ ‚ n  t ƒ  } |  j }	 |	 j }
 | d  k	 r` |
 j | ƒ }
 n  |  j ƒ  } d  } | r½ |	 j d d  d | j ƒ  d |
 d d d | d |	 j	 j
 ƒ j ƒ  } nØ | r|	 j d d  d | j ƒ  d |
 d d d | d |	 j	 j
 ƒ j ƒ  } n� | rS|	 j d d  d | j ƒ  d |
 d d d | d |	 j	 j
 ƒ j ƒ  } nB |	 j d | d | j ƒ  d |
 d |
 j ƒ  d | d |	 j	 j
 ƒ } t | j ƒ  7a | S(	   Ni    sp   Not implemented:
  See CVS revision 1.87, 2007/03/03 01:53:05
  method: manager.gradient_wrt_atomic_parameters()t   u_iso_refinable_paramst   d_target_d_f_calcR3   t   n_parameterst
   miller_sett	   algorithm(   R   R;   R   Ro   R3   t   selectt   d_target_d_f_calc_workt   structure_factor_gradients_wR8   t
   sfg_paramsR‹   t   d_target_d_u_cartt   d_target_d_u_isot   d_target_d_occupancyR‰   t$   time_gradients_wrt_atomic_parameterst   elapsed(   R   t	   selectiont   sitet   u_isot   u_anisot	   occupancyt   tan_b_iso_maxR‡   t   timerRo   R3   Rˆ   R…   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   gradients_wrt_atomic_parametersÿ   sT    							c         C   sA   |  j  } t j d | j j ƒ  d t ƒ t j |  j ƒ  j	 ƒ  ƒ S(   Nt
   scatterersR–   (
   Ro   R   t   set_scatterer_grad_flagsR3   R�   R   R   t   vec3_doubleRœ   t   packed(   R   Ro   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   d_target_d_site_cart6  s    		N(   R   R   R   R   Rœ   R¡   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR†   ý   s   0Rƒ   c           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   Ro   R‚   (   R   Ro   R‚   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR   @  s    	c         C   s   |  j  j ƒ  S(   N(   R‚   RW   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRW   D  s    c         C   s   |  j  j ƒ  S(   N(   R‚   RX   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRX   G  s    c         C   s   |  j  j ƒ  S(   N(   R‚   RY   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRY   J  s    c         C   s"   |  j  j ƒ  j d |  j j ƒ  ƒ S(   NR8   (   Ro   t
   f_obs_workt   arrayR‚   RZ   (   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   d_target_d_f_model_workM  s    c         C   s<   |  j  j ƒ  j d |  j j ƒ  |  j  j ƒ  |  j  j ƒ  ƒ S(   NR8   (   Ro   R¢   R£   R‚   RZ   t   k_anisotropic_workt   k_isotropic_work(   R   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR�   Q  s    (   R   R   R   RW   RX   RY   R¤   R�   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyRƒ   >  s   					c         C   s`   |  j  ƒ  j ƒ  } t | ƒ j ƒ  } | j | ƒ t j | d | ƒ } d t j | ƒ } | S(   Ng      @g      ð?(   t	   d_star_sqR8   R   t   fetcht   at_d_star_sqR   t   expt   pow2(   R0   t   atomt   Bt   d_star_sq_datat   tablet   ffRn   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR~   V  s
    %c         C   sk   |  j  ƒ  d  k	 r* t j |  j  ƒ  ƒ } n t j |  j ƒ  j ƒ  d ƒ } | j d ƒ s] t ‚ d | } | S(   Ng      ð?i    i   (	   t   sigmasR   R   R«   R_   R8   R|   t   all_gtR   (   R0   t   sigmas_squaredRn   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyR}   ]  s    
(-   t
   __future__R    t   libtbx.load_envt   libtbxt   envt
   has_moduleR   R   t!   phaser.phenix_adaptors.sad_targett   cctbx.array_familyR   t   cctbxR   t   boost.pythont   boostt   libtbx.utilsR   R   t   cctbx.eltbx.xray_scatteringR   R   R	   t   pythont
   import_extt   extt   time_bulk_solvent_and_scalet	   time_maskt   time_f_calct   time_alpha_betat   time_targetR“   t   time_fmodel_core_datat   time_r_factorst   time_phase_errorst	   time_fomst	   time_showt   objectR   t   target_namesR/   Rd   R†   Rƒ   R~   R}   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/targets.pyt   <module>   s`   	LkA	