ó
?™xTc           @   s—   d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l m	 Z	 d e
 f d „  ƒ  YZ d „  Z d	 „  Z d
 „  Z d e
 f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   maptbx(   t   flexN(   t   adopt_init_argst   target_and_gradientsc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   t   locals(   t   selft	   unit_cellt   density_mapt
   sites_cartt   real_space_gradients_deltat	   selection(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt   __init__	   s    c      
   C   s2   d t  j d |  j d |  j d |  j d |  j ƒ S(   Ng      ð¿R   R   R	   R   (   R   t   real_space_target_simpleR   R   R	   R   (   R   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt   target   s
    			c         C   s;   d t  j d |  j d |  j d |  j d |  j d |  j ƒ S(   Ng      ð¿R   R   R	   t   deltaR   (   R   t   real_space_gradients_simpleR   R   R	   R
   R   (   R   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt	   gradients   s    				(   t   __name__t
   __module__R   R   R   (    (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyR      s   		c   	   
   C   sÒ   | d  k r. t j d |  d | d | d | ƒ St j d |  d | d | ƒ } t j t j d |  d | d | d | ƒ ƒ } d } | j | | k  | ƒ d | } | d  k	 rÊ | d k s½ t ‚ | | 9} n  | | S(   NR   R   R	   t
   site_radiig{®Gáz„?g      ð?i    (   t   NoneR   t    standard_deviations_around_sitest!   real_space_target_simple_per_siteR   t   pow2t   set_selectedt   AssertionError(	   R   R   t
   weight_mapt   weight_map_scale_factorR	   R   t   dt   wt   w_min(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt)   local_standard_deviations_target_per_site    s,    			
c         C   s"   t  j t |  | | | | | ƒ ƒ S(   N(   R   t   sumR    (   R   R   R   R   R	   R   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt    local_standard_deviations_target:   s    	c         C   sÃ   g  } x­ d d d g D]œ } d d d g }	 g  }
 x] | | g D]N } | |	 | <| |	 } |
 j  t d |  d | d | d | d | d	 | ƒ ƒ q? W| j  |
 d |
 d d | ƒ q Wt j | Œ  S(
   Ni    i   i   R   R   R   R   R	   R   (   t   appendR    R   t   vec3_double(   R   R   R   R   R	   R   R   t	   grad_colst   i_dimt   shiftt   targetst   signed_deltat   sites_cart_shifted(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt#   local_standard_deviations_gradientsA   s     

%t   lbfgsc           B   sA   e  Z d d d d d d d  d d d d d d d „ Z d „  Z RS(   i   c         C   s  | | g j  d  ƒ d k s! t ‚ |
 d  k	 s3 t ‚ | d  k rQ | j j ƒ  } n  | d  k	 r~ | j ƒ  | j ƒ  k s– t ‚ n t j | j ƒ  t ƒ } | |  _	 | |  _
 | |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _ |
 |  _ | |  _ | |  _ |  j d  k rd  |  _ n! t j |  j j ƒ  |  j ƒ |  _ | |  _ | |  _ |  j d  k rq| |  _ | j ƒ  |  _ n* | j ƒ  |  _ | j |  j ƒ j ƒ  |  _ d |  _ |  j ƒ  \ |  _ |  _ t j  j! d |  d | d | ƒ |  _" |  j ƒ  \ |  _# |  _$ |  ` |  ` d  S(   Ni   iÿÿÿÿt   target_evaluatort   termination_paramst   exception_handling_params(%   t   countR   R   t   crystal_symmetryR   t   sizeR   t   boolt   Truet   states_collectorR   R   R	   t   geometry_restraints_managert   energies_sites_flagst   real_space_target_weightR
   t    local_standard_deviations_radiust   selection_variable_real_spaceR   t   doubleR   t   selection_variablet	   as_doublet   xt	   deep_copyt   selectt   number_of_function_evaluationst    compute_functional_and_gradientst   f_startt   g_startt   scitbxR,   t   runt	   minimizert   f_finalt   g_final(   t   OR	   R   R   R   R<   R:   R6   R7   R8   R
   R9   R   t   lbfgs_termination_paramst   lbfgs_exception_handling_paramsR5   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyR   Z   sL    !!															c         C   s•  |  j  d k r. |  j  d 7_  |  j |  j f S|  j  d 7_  t j |  j ƒ |  _ |  j d k r… d } t j |  j j ƒ  d ƒ } n|  j	 d  k r t j d |  j d |  j d |  j d |  j ƒ } t j d |  j d |  j d |  j d |  j d |  j ƒ } n‡ t d |  j d |  j d	 |  j d
 |  j d |  j d |  j ƒ } t d |  j d |  j d	 |  j d
 |  j d |  j d |  j d |  j ƒ } | |  j 9} | |  j 9} |  j d  k rÁ| } | } nÄ |  j d  k rß|  j |  _ nA |  j j |  j |  j ƒ |  j d  k	 r |  j j d |  j ƒ n  |  j j d |  j d t ƒ } | j } |  j d  k	 rn| j j  |  j ƒ } n  | | j! } | | } | | j" ƒ  f S(   Ni    i   g        R   R   R	   R   R   R   R   R   t   compute_gradients(   i    i    i    (#   RA   RC   RD   R   R$   R>   t   sites_cart_variableR8   R2   R9   R   R   R   R   R   R:   R   R
   R"   R   R   R   R+   R6   R<   R	   R   R5   t   addt   energies_sitesR4   R   R@   R   R=   (   RJ   t   rs_ft   rs_gt   ft   gt   gr_et   gr_e_gradients(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyRB   ”   sl    																								
N(   R   R   R   R   RB   (    (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyR,   X   s   +(   t
   __future__R    t   cctbxR   t   cctbx.array_familyR   t   scitbx.lbfgsRE   t   libtbxR   t   objectR   R    R"   R+   R,   (    (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/real_space_refinement_simple.pyt   <module>   s   			