ó
Ÿ™xTc           @   s¾   d  d l  m Z d  d l m Z d  d l Z d  d l m Z d  d l m Z m	 Z	 d  d l
 m Z d „  Z d „  Z d	 „  Z d
 d „ Z d „  Z d „  Z d „  Z e d k rº e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   ncsN(   t   flex(   t   Exception_expectedt   approx_equal(   t   format_cpu_timesc       #   C   sø
  t  j j d d ƒ }  |  j ƒ  d k s- t ‚ |  j d k sB t ‚ |  j ƒ  } t | ƒ d k sf t ‚ t | d Œ  g  k s‚ t ‚ t | d Œ  g  k sž t ‚ t  j j d d ƒ }  |  j	 d d d d d	 d ƒ d, k sÝ t ‚ |  j	 d d d d d	 d ƒ d- k st ‚ |  j	 d d d d d	 d ƒ d. k s1t ‚ |  j	 d d d d d	 d ƒ d/ k s[t ‚ |  j	 d d
 d d d	 d ƒ d0 k s…t ‚ |  j	 d d
 d d d	 d ƒ d1 k s¯t ‚ |  j	 d d d d d	 d ƒ d2 k sÙt ‚ |  j	 d d d d d	 d ƒ d3 k st ‚ |  j	 d d d d d	 d ƒ d4 k s-t ‚ |  j	 d d d d d	 d ƒ d5 k sWt ‚ |  j ƒ  } t | ƒ d k s{t ‚ t | d Œ  d6 d7 g k s�t ‚ t | d Œ  d8 g k s¼t ‚ t
 j d t ƒ } |  j d | j ƒ  ƒ } | j ƒ  } t | ƒ d k s
t ‚ t | d Œ  g  k s&t ‚ t | d Œ  g  k sBt ‚ t
 j d t ƒ } |  } x‘ t d ƒ D]ƒ } | j d | j ƒ  ƒ } | j ƒ  } t | ƒ d k s©t ‚ t | d Œ  d9 d: g k sËt ‚ t | d Œ  d; g k sgt ‚ qgWt | d <|  j d | j ƒ  ƒ } | j ƒ  } t | ƒ d k s4t ‚ t | d Œ  d< g k sSt ‚ t | d Œ  g  k sot ‚ t | d <t | d <|  j d | j ƒ  ƒ } | j ƒ  } t | ƒ d k s¿t ‚ t | d Œ  d= g k sÞt ‚ t | d Œ  d> g k sýt ‚ t | d <t | d <t | d <|  j d | j ƒ  ƒ } | j ƒ  } t | ƒ d k sWt ‚ t | d Œ  d? d@ g k syt ‚ t | d Œ  dA g k s˜t ‚ | j d t
 j d d d d d d d g ƒ ƒ } | j ƒ  } t | ƒ d k sìt ‚ t | d Œ  dB dC g k st ‚ t | d Œ  dD g k s-t ‚ | j	 d d d d d	 d ƒ dE k sWt ‚ | j	 d d d d d	 d ƒ dF k s�t ‚ | j	 d d d d d	 d ƒ dG k s«t ‚ | j	 d d d d d	 d ƒ dH k sÕt ‚ | j	 d d d d d	 d ƒ dI k sÿt ‚ | j ƒ  } t | ƒ d k s#t ‚ t | d Œ  dJ dK dL g k sHt ‚ t | d Œ  dM g k sgt ‚ | j d t
 j d d d d g ƒ ƒ } | j ƒ  } t | ƒ d k s²t ‚ t | d Œ  dN g k sÑt ‚ t | d Œ  dO g k sðt ‚ |  j d d ƒ |  j d k st ‚ |  j d d ƒ |  j d k s:t ‚ | j d t ƒ |  j d | j ƒ  ƒ } | j d k swt ‚ t | d <|  j d | j ƒ  ƒ } | j d k s®t ‚ t | d <t | d <|  j d | j ƒ  ƒ } | j d k sït ‚ | j ƒ  } t | ƒ d k s	t ‚ t | d Œ  dP dQ g k s5	t ‚ t | d Œ  dR g k sT	t ‚ t
 j d d d d d d d d  d d d! d d d d d" d# d d d$ d d d d% d d& d' d( d) d d d* d d g" ƒ } |  j d | ƒ } | j d k sð	t ‚ | j ƒ  } t | ƒ d k s
t ‚ t | d Œ  dS g k s3
t ‚ t | d Œ  dT g k sR
t ‚ t
 j d d d g ƒ } |  j d | ƒ } | j d k s‘
t ‚ t
 j d d d g ƒ } y |  j d | ƒ Wn. t k
 rí
} t | ƒ j d+ ƒ sô
t ‚ n Xt ‚ d  S(U   Ni   i   i    i   i   t   i_seqt   j_seqi   t   j_ncsi   i
   i   t
   iselectioni   i	   i   i   i   i   i   i   i   t   numberi   i+   i#   i&   i*   i   i   i   i   i   i   i   i   i   i    i%   i"   i)   i!   sZ   ): MMTBX_ASSERT(result_i_seq < result_n_seq || iselection[result_i_seq] >= n_seq) failure.(   i    i    (   i    i   (   i   i   (   i   i   (   i    i    (   i   i   (   i   i   (   i    i    (   i   i
   (   i    i   (   i    i   (   i   i   (   i    i
   (   i    i   (   i   i   (   i    i
   (   i   i    (   i    i   (   i    i	   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i    i    (   i    i   (   i   i   (   i   i   (   i    i   (   i   i   (   i    i   (   i    i   (   i   i   (   i    i   (   i   i   (   i   i   (   R   t
   restraintst   pair_registryt   n_seqt   AssertionErrort#   number_of_additional_isolated_sitest   selection_pairst   lent   zipt   enterR   t   boolt   Falset   proxy_selectR	   t   Truet   xranget   size_tt"   register_additional_isolated_sitest   resizet   RuntimeErrort   strt   endswithR   (   t   registryR   t	   selectiont   sel_registryt   iR	   t   e(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   exercise_pair_registry_basic   sè    **********""#





"	'"*****%	


"$'$ c         C   sB   | j  ƒ  } t j | ƒ | } | | } |  t j | ƒ | | S(   N(   t   sizeR   t   sumt   sum_sq(   t   weightt   average_powert   u_isost   nt   u_avet   u_diff(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   adp_iso_residual_sum„   s    
c         C   sq   | j  ƒ  } t j | ƒ | } | | } | | | } |  d | | | t j | ƒ | | | t j | ƒ S(   sÛ   
um = (u1 + u2)/2
r=w*((u1-um)^2+(u2-um)^2)/um^mp
D[r,u1]

um = (u1 + u2 + u3)/3
r=w*((u1-um)^2+(u2-um)^2+(u3-um)^2)/um^mp
D[r,u1]

um = (u1 + u2 + u3 + u4)/4
r=w*((u1-um)^2+(u2-um)^2+(u3-um)^2+(u4-um)^2)/um^mp
D[r,u1]
i   (   R%   R   R&   R'   (   R(   R)   R*   R+   R,   R-   t	   n_ave_pow(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   adp_iso_analytical_gradientsŠ   s    
g�íµ ÷Æ°>c   
   	   C   s°   t  j ƒ  } x� t | j ƒ  ƒ D]‰ } g  } xY | | g D]J } | j ƒ  } | | c | 7<t d |  d | d | ƒ }	 | j |	 ƒ q9 W| j | d | d d | ƒ q W| S(   NR(   R)   R*   i    i   i   (   R   t   doubleR   R%   t	   deep_copyR.   t   append(
   R(   R)   R*   t   epst   resultt   i_u_isot   rst
   signed_epst
   u_isos_epst   r(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt#   adp_iso_finite_difference_gradientsŸ   s    %c          C   sÖ   t  j d d ƒ }  x½ d d g D]¯ } x¦ d d g D]˜ } x� t d d ƒ D]~ } xu t d	 ƒ D]g } |  j d
 | ƒ d } t d | d | d | ƒ } t d | d | d | ƒ } t | | ƒ s[ t ‚ q[ WqH Wq2 Wq Wd  S(   Nt   seedi    gX9´Èv¾ó?gßO�—n@g®GázÖ?g+‡Ùâ?i   i   i
   R%   gü©ñÒMbP?R(   R)   R*   (   R   t   mersenne_twisterR   t   random_doubleR0   R;   R   R   (   R=   R(   R)   R%   R"   R*   t   at   f(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   exercise_adp_iso_analytical°   s    c          C   s¦  t  j d d ƒ }  x�t d d ƒ D]|} t j j d | d | ƒ } xA t d | ƒ D]0 } | j d d d	 | d
 | ƒ d k sS t ‚ qS W| j ƒ  } x@ t d | ƒ D]/ } t	 | | d Œ  d | f g k s£ t ‚ q£ Wd } d } |  j
 d | ƒ d } |  j
 d | ƒ }	 |	 j ƒ  }
 | j d | d | d | d d d |
 ƒ } |
 |	 8}
 t | t d | d | d | ƒ ƒ stt ‚ t |
 t d | d | d | ƒ ƒ s" t ‚ q" Wd  S(   NR<   i    i   i   R   t   n_ncsi   R   R   R   gßO�—n@g+‡Ùâ?R%   gü©ñÒMbP?R(   R)   R*   t   u_average_ming�íµ ÷Æ°>t	   gradients(   i    i    (   R   R=   R   R   R   R   R   R   R   R   R>   R2   R.   R   R0   (   R=   R   R   R   R   t   jR(   R)   R*   t   gradients_inRD   t   registry_residual_sum(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   exercise_pair_registry_adp_iso½   s8    .-		
c           C   s!   t  ƒ  t ƒ  t ƒ  t ƒ  GHd  S(   N(   R$   RA   RH   R   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   exerciseÛ   s    t   __main__(   t
   __future__R    t   mmtbxR   t   mmtbx.ncs.restraintst   cctbx.array_familyR   t   libtbx.test_utilsR   R   t   libtbx.utilsR   R$   R.   R0   R;   RA   RH   RI   t   __name__(    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints.pyt   <module>   s   	|					