ó
*™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 Z	 d  d l
 m Z d  d l Z d e	 j j f d „  ƒ  YZ d S(	   iÿÿÿÿ(   t   division(   t   adopt_init_args(   t   geometry_restraints(   t   flexN(   t   matht   energiesc           B   sÚ   e  Z d d d d d d d d d d d d d d e d e e g  d d  „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z RS(   c         C   se  t  |  t ƒ  ƒ t j j j |  d | d | d | j ƒ  d t j d | ƒd  |  _
 d |  _ | d  k	 r} | d  k	 s} t ‚ n  | rÝ |  j d  k r¹ t j | j ƒ  d d d g ƒ |  _ qÝ |  j j ƒ  | j ƒ  k sÝ t ‚ n  | d  k rþ d  |  _ d |  _ n] | j ƒ  |  _ t j d | d | d	 |  j d
 | ƒ |  _ |  j |  j 7_ |  j |  j 7_ | d  k r|d  |  _ d |  _ nc | j ƒ  |  _ t j d | d | d	 |  j d | d
 t ƒ |  _ |  j |  j 7_ |  j |  j 7_ | d  k r d  |  _ d |  _ n� t | ƒ |  _ | d  k rBt j d | d | d	 |  j ƒ |  _ n* t j d | d | d | d	 |  j ƒ |  _ |  j |  j 7_ |  j |  j 7_ | d  k r±d  |  _ d |  _ n� t | ƒ |  _ | d  k rót j d | d | d	 |  j ƒ |  _ n* t j d | d | d | d	 |  j ƒ |  _ |  j |  j 7_ |  j |  j 7_ | d  k rbd  |  _ d |  _ n� t | ƒ |  _ | d  k r¤t j d | d | d	 |  j ƒ |  _ n* t j d | d | d | d	 |  j ƒ |  _ |  j |  j 7_ |  j |  j 7_ |	 d  k rd  |  _ d |  _ n� t |	 ƒ |  _ | d  k rUt j d | d |	 d	 |  j ƒ |  _ n* 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_ | d  k r<d  |  _" d |  _# n� t | ƒ |  _" | d  k r~t j# d | d | d	 |  j ƒ |  _# n* t j# d | d | d | d	 |  j ƒ |  _# |  j |  j" 7_ |  j |  j# 7_ | d  k ríd  |  _$ d |  _% n� t | ƒ |  _$ | d  k r/t j% d | d | d	 |  j ƒ |  _% n* t j% d | d | d | d	 |  j ƒ |  _% |  j |  j$ 7_ |  j |  j% 7_ | d  k ržd  |  _& d |  _' n� t | ƒ |  _& | d  k ràt j' d | d | d	 |  j ƒ |  _' n* t j' d | d | d | d	 |  j ƒ |  _' |  j |  j& 7_ |  j |  j' 7_ | d  k rXd |  _( d |  _) d |  _* n– | j+ ƒ  |  _) | j, d | d	 |  j ƒ |  _* |  j |  j) 7_ |  j |  j* 7_ |  j- j. ƒ  |  _( |  j( d k rî|  j- j/ d | d	 |  j ƒ |  _0 n  | d  k	 r*| d | d	 |  j ƒ |  _1 |  j |  j1 7_ n	 d |  _1 x! |  j2 D] } | j3 d |  ƒ q=W|  j4 ƒ  d  S(   Nt   compute_gradientst	   gradientst   gradients_sizet   gradients_factoryt   normalizationi    t
   sites_cartt   sorted_asu_proxiest   gradient_arrayt   disable_cachet   functiont   proxiest	   unit_cellt   energies_obj(5   R   t   localst   scitbxt
   restraintsR   t   __init__t   sizeR   t   vec3_doublet   Nonet   n_dihedral_restraintst    dihedral_restraints_residual_sumt   AssertionErrorR   t   n_bond_proxiest   bond_residual_sumt   n_totalR   t   number_of_restraintst   residual_sumt   n_nonbonded_proxiest   nonbonded_residual_sumt   Falset   n_angle_proxiest   angle_residual_sumt   lent   n_dihedral_proxiest   dihedral_residual_sumt   n_reference_dihedral_proxiest   reference_dihedral_residual_sumt   n_ncs_dihedral_proxiest   ncs_dihedral_residual_sumt   n_chirality_proxiest   chirality_residual_sumt   n_planarity_proxiest   planarity_residual_sumt   n_parallelity_proxiest   parallelity_residual_sumt   n_bond_similarity_proxiest   bond_similarity_residual_sumt   n_hbond_proxiest   n_generic_proxiest   generic_restraint_residual_sumt   get_n_proxiest   restraints_residual_sumt   generic_restraints_managert   get_n_hbondst   get_hbonds_residual_sumt   hbond_residual_sumt   external_energyt   extension_objectst   energies_addt   finalize_target_and_gradients(   t   selfR   R   t   bond_proxiest   nonbonded_proxiest   nonbonded_functiont   angle_proxiest   dihedral_proxiest   reference_dihedral_proxiest   ncs_dihedral_proxiest   chirality_proxiest   planarity_proxiest   parallelity_proxiest   bond_similarity_proxiesR;   t   external_energy_functionR   R   t   disable_asu_cacheR
   R@   t   hbonds_in_bond_listt   extension_obj(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyR      sp   			 '$																																	c         C   s.   |  j  d  k	 r# |  j t |  j  ƒ S|  j Sd  S(   N(   RQ   R   R   R'   (   RC   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   get_filtered_n_bond_proxiesù   s    c         C   sÐ   |  j  d  k	 rÈ |  j  d k rÁ |  j d  k	 rœ |  j j d d d |  j d d  d d  d |  j ƒ \ } } | d k sx t ‚ t j g  | D] } | d ^ q… ƒ St	 j
 d |  j d	 |  j ƒ } | SqÌ d  Sn d  Sd  S(
   Ni    t   by_valuet   residualR   t   site_labelst	   max_itemst   excludei   R   (   R   R   RQ   RD   t
   get_sortedR   R   R   t   doubleR   t   bond_deltas(   RC   t   sorted_tablet   n_not_shownt   xR[   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   get_filtered_bond_deltasÿ   s"    	$		c   
      C   s	  |  j  d k	 r|  j j d |  j d |  j ƒ } | d k	 rþ g  |  j j D] } t j | j	 ƒ ^ qI } t
 j g  t | | ƒ D] \ } } | | ^ q} ƒ } t j t
 j | | d ƒ ƒ } t
 j t
 j | ƒ d ƒ } t
 j t
 j | ƒ d ƒ }	 |	 | | f Sd Sn  d S(   sa  
    Calculate rmsz of bond deviations

    Compute rmsz, the Root-Mean-Square of the z-scors for a set of data
    using z_i = {x_i - mu / sigma}  and rmsz = sqrt(mean(z*z))
    x_i: atcual bond length
    mu: geometry restraints mean
    sigma:  geometry restraints standard deviation
    z_i: z-score for bond i
    z: array of z_i

    The sigma and the (x_i - mu) are model constrains, geometry restraints. They function extracts
    from self, not calculated from data.

    :returns:
    b_rmsz: rmsz, root mean square of the z-scors of all bonds
    b_z_min/max: min/max abolute values of z-scors
    R   RX   i    N(   i    i    i    (   R   R   RD   t   get_filtered_deltasR   RQ   t   simpleR   t   weight_as_sigmat   weightR   RZ   t   zipR   t   sqrtt   mean_defaultt   max_defaultt   abst   min_default(
   RC   R[   R^   t   sigmast
   bond_deltat   sigmat   z_scorest   b_rmszt   b_z_maxt   b_z_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   bond_deviations_z  s    	+5c         C   s¯   |  j  d  k	 r« |  j j d |  j d |  j ƒ } | d  k	 r¤ | | } t j t j	 | d ƒ ƒ } t j t j
 | d ƒ ƒ } t j t j | d ƒ ƒ } | | | f Sd Sn  d  S(   NR   RX   i    (   i    i    i    (   R   R   RD   R`   R   RQ   R   Re   R   Rf   Rg   Ri   (   RC   R[   t   b_sqt   b_avet   b_maxt   b_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   bond_deviations:  s    	
c   
      C   sð   |  j  d k	 rì t j d |  j d |  j ƒ } g  |  j D] } t j | j ƒ ^ q7 } t j	 g  t
 | | ƒ D] \ } } | | ^ qk ƒ } t j t j | | d ƒ ƒ } t j t j | ƒ d ƒ } t j t j | ƒ d ƒ }	 |	 | | f Sd S(   sã  
    Calculate rmsz of angles deviations

    Compute rmsz, the Root-Mean-Square of the z-scors for a set of data
    using z_i = {x_i - mu / sigma}  and rmsz = sqrt(mean(z*z))

    Compute rmsz, the Root-Mean-Square of the z-scors for a set of data
    using z_i = {x_i - mu / sigma}  and rmsz = sqrt(mean(z*z))
    x_i: atcual bond angle
    mu: geometry restraints mean
    sigma:  geometry restraints standard deviation
    z_i: z-score for bond i
    z: array of z_i

    The sigma and the (x_i - mu) are model constrains, geometry restraints. They function extracts
    from self, not calculated from data.

    :returns:
    a_rmsz: rmsz, root mean square of the z-scors of all angles
    a_z_min/max: min/max values of z-scors
    R   R   i    N(   R%   R   R   t   angle_deltasR   RG   Rb   Rc   R   RZ   Rd   R   Re   Rf   Rg   Rh   Ri   (
   RC   Rw   R^   Rj   t   angle_deltaRl   Rm   t   a_rmszt   a_z_maxt   a_z_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   angle_deviations_zL  s    		(5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   Rw   R   RG   R   Re   R   Rf   Rg   Ri   (   RC   Rw   t   a_sqt   a_avet   a_maxt   a_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   angle_deviationsm  s    		
c         C   s   t  j d |  j d |  j ƒ S(   NR   R   (   R   t   nonbonded_deltasR   RE   (   RC   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   nonbonded_distancesx  s    		c         C   s‡   |  j  d  k	 rƒ |  j ƒ  } | | } t j t j | d ƒ ƒ } t j t j | d ƒ ƒ } t j t j | d ƒ ƒ } | | | f Sd  S(   Ni    (	   R"   R   Rƒ   R   Re   R   Rf   Rg   Ri   (   RC   R‚   t   r_sqt   r_avet   r_maxt   r_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   nonbonded_deviations}  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   dihedral_deltasR   RH   R   Re   R   Rf   Rg   Ri   (   RC   R‰   t   d_sqt   d_avet   d_maxt   d_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   dihedral_deviations†  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   reference_dihedral_deltasR   RI   R   Re   R   Rf   Rg   Ri   (   RC   R�   RŠ   R‹   RŒ   R�   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   reference_dihedral_deviations‘  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   ncs_dihedral_deltasR   RJ   R   Re   R   Rf   Rg   Ri   (   RC   R‘   RŠ   R‹   RŒ   R�   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   ncs_dihedral_deviationsœ  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   chirality_deltasR   RK   R   Re   R   Rf   Rg   Ri   (   RC   R“   t   c_sqt   c_avet   c_maxt   c_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   chirality_deviations§  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    (   R0   R   R   t   planarity_deltas_rmsR   RL   R   Re   R   Rf   Rg   Ri   (   RC   t   planarity_deltast   p_sqt   p_avet   p_maxt   p_min(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   planarity_deviations²  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    (   R2   R   R   t   parallelity_deltasR   RM   R   Re   R   Rf   Rg   Ri   (   RC   R    R›   Rœ   R�   Rž   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   parallelity_deviations½  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  |  j
 d  k	 rí | | d |  j
 |  j f IJn  |  j d  k	 r| | d |  j |  j f IJn  |  j d  k	 rM| | d |  j |  j f IJn  |  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  |  j d k r| | d |  j |  j f IJn  |  j d  k	 r=| | d |  j |  j f IJn  x- |  j D]" } | j d |  d | d | ƒ qGW|  j d  k	 rš| | d |  j j ƒ  IJn  d  S(   Ns   target: %.6gs      bond_residual_sum (n=%d): %.6gs%     nonbonded_residual_sum (n=%d): %.6gs!     angle_residual_sum (n=%d): %.6gs$     dihedral_residual_sum (n=%d): %.6gs.     reference_dihedral_residual_sum (n=%d): %.6gs(     ncs_dihedral_residual_sum (n=%d): %.6gs%     chirality_residual_sum (n=%d): %.6gs%     planarity_residual_sum (n=%d): %.6gs'     parallelity_residual_sum (n=%d): %.6gi    s"     hbonds_residual_sum (n=%d): %.6gs+     bond_similarity_residual_sum (n=%d): %.6gR   t   ft   prefixs     norm of gradients: %.6g(   R   t   syst   stdoutt   targetR   R   R"   R#   R%   R&   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R6   R>   R4   R5   R@   t   energies_showR   t   norm(   RC   R£   R¤   RR   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   showÈ  sP     










 N(   t   __name__t
   __module__R   t   TrueR$   R   RS   R_   Rq   Rv   R|   R�   Rƒ   Rˆ   RŽ   R�   R’   R˜   RŸ   R¡   Rª   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyR   	   sF   Ú			%		!										(   t
   __future__R    t   libtbxR   t   cctbxR   t   cctbx.array_familyR   t   scitbx.restraintsR   t   stdlibR   R¥   R   R   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/energies.pyt   <module>   s   