ó
)™xTc           @   sv   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
 Z
 d e f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   division(   t   adp_restraints(   t   flex(   t   adopt_init_args(   t   mathNt   energiesc           B   se   e  Z d d d d d d e d d e e d  „ Z d „  Z d „  Z d „  Z d d d „ Z	 d „  Z
 RS(   c         C   sg  t  |  t ƒ  ƒ d |  _ d |  _ d  |  _ | d  k	 rX | d  k	 rO | d  k	 sX t ‚ n  | d  k	 ry | d  k	 sy t ‚ n  | d  k	 r¦ | j ƒ  | j ƒ  k s¦ t ‚ n  | d  k	 rÓ | j ƒ  | j ƒ  k sÓ t ‚ n  | d  k	 r | j ƒ  | j ƒ  k s t ‚ n  | rÒ|  j d  k rEt	 j
 | j ƒ  d d d d d d g ƒ |  _ n! |  j j ƒ  | j ƒ  k sft ‚ | d  k	 rŸ|  j d  k rŸt	 j | j ƒ  d ƒ |  _ qÒ| d  k	 rÒ|  j j ƒ  | j ƒ  k sÏt ‚ qÒn  | d  k ród  |  _ d |  _ np t | ƒ |  _ t j d | d | d | d | d |  j d |  j ƒ |  _ |  j d |  j 7_ |  j |  j 7_ | d  k r„d  |  _ d |  _ n] t | ƒ |  _ t j d	 | d | d | d |  j ƒ |  _ |  j |  j 7_ |  j |  j 7_ | d  k rd  |  _ d |  _ nW t | ƒ |  _ t j d | d | d |  j ƒ |  _ |  j |  j 7_ |  j |  j 7_ |  j ƒ  d  S(
   Ni    t   u_cartt   u_isot   use_u_anisot   proxiest   gradients_aniso_cartt   gradients_isoi   t
   sites_cart(   R   t   localst   number_of_restraintst   residual_sumt   Nonet   normalization_factort   AssertionErrort   sizeR
   R   t   sym_mat3_doubleR   t   doublet   n_adp_similarity_proxiest   adp_similarity_residual_sumt   lenR   t   n_rigid_bond_proxiest   rigid_bond_residual_sumt   n_isotropic_adp_proxiest   isotropic_adp_residual_sumt   finalize_target_and_gradients(   t   selfR   R   R   R   t   adp_similarity_proxiest   rigid_bond_proxiest   isotropic_adp_proxiest   compute_gradientsR
   R   t   disable_asu_cachet   normalization(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   __init__
   st    			!  ! ! !*!'							c      	   C   s«   |  j  d  k	 r§ t j d |  j d |  j d |  j d |  j ƒ } | | } t j	 t
 j | d ƒ ƒ } t j	 t
 j | d ƒ ƒ } t j	 t
 j | d ƒ ƒ } | | | f Sd  S(   NR   R   R   R	   i    (   R   R   R   t   adp_similarity_deltas_rmsR   R   R   R   R   t   sqrtR   t   mean_defaultt   max_defaultt   min_default(   R   R&   t   a_sqt   a_avet   a_maxt   a_min(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   adp_similarity_deviationQ   s    				
c         C   s¢   |  j  d  k	 rž t j d |  j d |  j d |  j ƒ } | | } t j t	 j
 | d ƒ ƒ } t j t	 j | d ƒ ƒ } t j t	 j | d ƒ ƒ } | | | f Sd  S(   NR   R   R	   i    (   R   R   R   t   rigid_bond_deltasR   R   R    R   R'   R   R(   R)   R*   (   R   R0   t   r_sqt   r_avet   r_maxt   r_min(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   rigid_bond_deviation^   s    			
c         C   s™   |  j  d  k	 r• t j d |  j d |  j ƒ } | | } t j t j	 | d ƒ ƒ } t j t j
 | d ƒ ƒ } t j t j | d ƒ ƒ } | | | f Sd  S(   NR   R	   i    (   R   R   R   t   isotropic_adp_deltas_rmsR   R!   R   R'   R   R(   R)   R*   (   R   R6   t   i_sqt   i_avet   i_maxt   i_min(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   isotropic_adp_deviationj   s    		
t    c         C   sÁ   | d  k r t j } n  | | d |  j IJ|  j d  k	 r] | | d |  j |  j f IJn  |  j d  k	 r� | | d |  j |  j f IJn  |  j d  k	 r½ | | d |  j |  j	 f IJn  d  S(   Ns   target: %.6gs*     adp_similarity_residual_sum (n=%d): %.6gs&     rigid_bond_residual_sum (n=%d): %.6gs)     isotropic_adp_residual_sum (n=%d): %.6g(
   R   t   syst   stdoutt   targetR   R   R   R   R   R   (   R   t   ft   prefix(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   showu   s     


c         C   s�   |  j  |  _ |  j r‹ d t d |  j ƒ |  _ |  j |  j 9_ |  j d  k	 rd |  j |  j 9_ n  |  j d  k	 r‹ |  j |  j 9_ q‹ n  d  S(   Ng      ð?i   (	   R   R?   R$   t   maxR   R   R
   R   R   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyR   ‚   s    	N(   t   __name__t
   __module__R   t   Truet   FalseR%   R/   R5   R;   RB   R   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyR      s    <			(   t
   __future__R    t   cctbxR   t   cctbx.array_familyR   t   libtbxR   t   stdlibR   R=   t   objectR   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/adp_restraints/energies.pyt   <module>   s   