ó
®™xTc           @   sÐ   d  d l  m Z d  d l Z d  d l m Z d  d l Z d  d l Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z e d k rÌ d e j k r¨ e ƒ  qÌ e	 ƒ  e ƒ  e ƒ  e ƒ  d GHn  d S(   iÿÿÿÿ(   t   divisionN(   t   approx_equalc          C   s+   d d  l  }  |  j j d d  d d ƒ } | S(   Niÿÿÿÿt   source_infot   liness´  ATOM      1  N   ALA A   1       4.288  62.025  -3.678  1.00 27.96           N
ATOM      2  CA  ALA A   1       3.119  62.736  -4.184  1.00 28.04           C
ATOM      3  C   ALA A   1       2.683  63.793  -3.199  1.00 28.16           C
ATOM      4  O   ALA A   1       2.311  64.910  -3.605  1.00 28.25           O
ATOM      5  CB  ALA A   1       1.962  61.780  -4.504  1.00 27.64           C
ATOM      6  H   ALA A   1       4.150  61.050  -3.504  1.00 27.96           H
ATOM     25  N   ALA A   5       2.586  67.940  -3.614  1.00 29.64           N
ATOM     26  CA  ALA A   5       1.415  68.721  -3.231  1.00 30.71           C
ATOM     27  C   ALA A   5       1.799  69.877  -2.302  1.00 29.77           C
ATOM     28  O   ALA A   5       1.213  70.964  -2.365  1.00 30.52           O
ATOM     29  CB  ALA A   5       0.345  67.845  -2.558  1.00 30.05           C
ATOM     30  H   ALA A   5       2.547  66.981  -3.333  1.00 29.64           H
(   t	   iotbx.pdbt   pdbt   inputt   None(   t   iotbxt   pdb_in(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt
   simple_pdb   s    	c          C   sÕ  d d l  m }  d d  l } d d l m } d d  l } t ƒ  } | j ƒ  } | j ƒ  j	 ƒ  | j ƒ  j
 ƒ  } | j ƒ  } | j d ƒ j ƒ  } | j d ƒ j ƒ  }	 | j d ƒ j ƒ  }
 | j ƒ  |	 j ƒ  k oî |
 j ƒ  k oî d k n sù t ‚ |  j ƒ  } | j d | d	 |	 d	 g d
 d d d d d d& ƒ | j j d | | d	 | |	 d	 g d
 d d d d' ƒ } | j | j ƒ  d( ƒ } |  j d | j d | d | ƒ } t | | j ƒ  ƒ sÈt ‚ t | d d d ƒsãt ‚ |  j ƒ  } | j d | d	 |
 d	 g d
 d d d d d d) ƒ |  j d | j d | d | ƒ } | j j d | | d	 | |
 d	 g d
 d d d d* ƒ } t | | j ƒ  ƒ sšt ‚ |  j | j ƒ } | j ƒ  d k sÄt ‚ t | d	 ƒ d d g k sæt ‚ |  j ƒ  } | j d d	 d g d
 d d d d d ƒ | j d d d g d
 d d d d d ƒ | j d d  d! g d
 d d d d d ƒ | j } | j d	 d d d d" d  d! g ƒ } | j d# d$ d% | ƒ } | j ƒ  d k sÇt ‚ | d } d  S(+   Niÿÿÿÿ(   t   hbond(   t   flexs   resseq 1 and name Os   resseq 5 and name Hs   resseq 5 and name Ni   t   i_seqsi    t   distance_idealgš™™™™™ÿ?t   distance_cutt   weightgš™™™™™©?i   t   sitesg        t   proxiest
   sites_cartt   gradient_arraygk¼IÖ@t   epsgñhãˆµøä>g333333@g      @g      à?i   i   id   i   i   i   i	   i   t   n_seqi
   t
   iselectiong|®Gázd?g|®Gázd?(   g        g        g        g|®Gázd?g|®Gázd?(   t   mmtbx.geometry_restraintsR   t   cctbx.geometry_restraintst   scitbx.array_familyR   R   R
   t   construct_hierarchyt   atomst   reset_i_seqt   extract_xyzt   atom_selection_cachet	   selectionR   t   sizet   AssertionErrort   build_simple_hbond_proxiest	   add_proxyt   geometry_restraintst   bondt   vec3_doublet   target_and_gradientsR   R   t   residualt   get_simple_bondst   listt   size_tt   proxy_select(   R   t   cctbxR   R   R	   t	   hierarchyR   t   cachet   i_seq_1t   i_seq_2t   i_seq_3t   build_proxiest
   cctbx_bondt   gradsR)   t   simple_bondsR   t   iselR    t   proxy(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   exercise_simple   sŠ    	?								"				$c      
   C   s  d d l  m } d d l m } g  } x) t d ƒ D] } | j d | d ƒ q3 Wxº| D]²} | j d | d f d d g ƒ } | j d
 d ƒ } | j d |  d | d | d t ƒ } | j d
 d ƒ }	 | j d |  d | d |	 d t	 ƒ }
 |
 | k sþ t
 ‚ | d k sY | d k rqY n  xì t | |	 ƒ D]Û \ \ } } } \ } } } | d k r¶| d k r¶t | | d d ƒs}t
 ‚ t | | d d ƒs˜t
 ‚ t | | d d ƒst
 ‚ q,t | | d d ƒsÑt
 ‚ t | | d d ƒsìt
 ‚ t | | d d ƒs,t
 ‚ q,WqY Wd  S(   Niÿÿÿÿ(   R   (   R   iú   g       @g{®Gáz„?g        g™»–�zâ?g      ð¿i   R   R   R   t   use_finite_differencesg      @gffffff@R   gš™™™™™¹?gñhãˆµøä>(   g        g        g        (   g™»–�zâ?g      ð¿g        (   g        g        g        (   g        g        g        (   R   R   R   R   t   ranget   appendR'   R(   t   Truet   FalseR"   t   zipR   (   R   R   R   t	   distancest   it   distR   t   g1t   r1t   g2t   r2t   dx1t   dy1t   dz1t   dx2t   dy2t   dz2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   compare_analytical_and_fde   s>    				.c          C   sF  d d l  m }  d d  l } d d l m } |  j ƒ  } | j d d d g d d d	 d
 ƒ | j d d d g ƒ } | j d d  ƒ } |  j d | j	 d | d | d t
 ƒ } t | d d d ƒsÆ t ‚ xh | D]` \ } } }	 t | d d d ƒs÷ t ‚ t | d d d ƒst ‚ t |	 d d d ƒsÍ t ‚ qÍ Wd! | d <| j d d" ƒ } |  j d | j	 d | d | d t
 ƒ } t | d d d ƒs�t ‚ t | j	 ƒ | j d d# ƒ } |  j d | j	 d | d | d t
 d d ƒ } t | d d d ƒsöt ‚ |  j | j	 ƒ }
 |
 j ƒ  d k s t ‚ t |
 d ƒ d d g k sBt ‚ d  S($   Niÿÿÿÿ(   R   (   R   R   i    i   R   g333333@R   g      @g        g™»–�zâ?g      ð¿i   R   R   R   R;   gÊf/¡MÀR   g-Cëâ6?g•Ö&è.>g      @g¯žî—ªCMÀt   lennard_jones_potentialt   6_12g+ß¯Ùü0NÀgñhãˆµøä>(   g        g333333@g        (   g        g        g        (   g™»–�zâ?g      ð¿g        (   i    i    i    (   g        g      @g        (   i    i    i    (   i    i    i    (   R   R   R   R   R   t   build_lennard_jones_proxiesR$   R'   R(   R   R?   R   R"   RN   R*   R!   R+   (   R   R.   R   R4   R   R6   R)   t   dxt   dyt   dzR7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   exercise_lennard_jones‡   sR    				
						c          C   s`  d d l  m }  d d  l } d d l m } t ƒ  } | j ƒ  } | j ƒ  j ƒ  | j ƒ  j	 ƒ  } | j
 ƒ  } | j d t ƒ } |  j j ƒ  } d | j _ d | j _ |  j d | d | d	 | d
 d  ƒ }	 t |	 j ƒ d k sç t ‚ | j | j ƒ  dG ƒ }
 |  j d |	 j d | d |
 ƒ } t | d d d ƒs;t ‚ dH t |
 d d d d d ƒsbt ‚ t |
 d d d d d ƒs…t ‚ t |
 d d d d d ƒs¨t ‚ |  j ƒ  }	 |	 j d d d d g d d d d  d! d d" d# d$ d% ƒ | j dI dJ dK g ƒ } dL | d <| j | j ƒ  dM ƒ } |  j d |	 j d | d | ƒ } t | d) d d ƒsat ‚ dN | d <| j | j ƒ  dO ƒ } |  j d |	 j d | d | ƒ } t | d+ d d, ƒs¿t ‚ t | d d d- d d ƒsât ‚ t | d d d. d d ƒst ‚ t | d d d/ d d ƒs(t ‚ |  j |	 j ƒ } | j ƒ  d k sRt ‚ t | d ƒ d d g k stt ‚ t j  j! d0 d1 d2 t" j# j$ ƒ } | d  k	 r#d d3 l% m& } | j' | d4 d5 ƒj( } | j ƒ  } | j ƒ  } |  j d | d | d	 | d
 d  ƒ }	 t |	 j ƒ d6 k s#t ‚ n  |  j ƒ  }	 |	 j d d d d g d d d d  d! d d" d# d$ d% ƒ |	 j d d7 d8 d9 g d d d d  d! d d" d# d$ d% ƒ |	 j d d: d; d< g d d d d  d! d d" d# d$ d% ƒ | j) d d d d d= d> d? d@ d: d; d< dA dB g ƒ } |	 j } | j* dC dD dE | ƒ } | j ƒ  d k sCt ‚ | d j+ dP k s\t ‚ d  S(Q   Niÿÿÿÿ(   R   (   R   t   unit_cube_pseudo_crystalg     €[@g      d@t   pdb_hierarchyt   xray_structuret   paramst   logi   g        R   R   R   g ˆE;BKÀR   gñhãˆµøä>g°jšS]5@göˆ†D*ª*@g§ŸÿLà1@i   i    gRá[šS]5@g½­þLà1@i   g9‚¯C�=ÀR   R   g333333@R   g      @t	   theta_lowt
   theta_highg     Àb@R   g      ð?g™»–�zâ?g      ð¿g      @gA�ê–ªCMÀgffffff@g€4f#MÀg�íµ ÷Æ°>gùñ×è<?5Àg8•V�oi?g¥v³Ô´z?t   relative_paths   phenix_regression/pdb/1ywf.pdbt   test(   t   file_readert
   force_typeR   iè   i   i   i	   i   i   i   i   i   i   i   i   i   R   i   R   i
   (   g        g        g        (   g°jšS]5@göˆ†D*ª*@g§ŸÿLà1@(   g        g333333@g        (   g        g        g        (   g™»–�zâ?g      ð¿g        (   g        g      @g        (   g        g        g        (   g        gffffff@g        (   g        g        g        (   i   i	   i
   (,   R   R   R   R   R   R
   R   R   R   R   R   t   xray_structure_simpleR>   t   master_philt   extractt   implicitR[   R\   t   find_implicit_hydrogen_bondsR   t   lenR   R"   R'   R!   R(   R   t   build_implicit_hbond_proxiesR$   R*   R+   t   libtbxt   envt   find_in_repositoriest   ost   patht   isfileR   R_   t   any_filet   file_objectR,   R-   R   (   R   R.   R   R	   R/   R   R0   t   xrsRY   R4   t   grads_ant   residual_anRD   RE   RF   RG   R7   t   pdb_fileR_   R   R   t   selected(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   exercise_implicit²   sÆ    						###	
			
			###"					6	c          C   sK  d d l  m }  d d l m } d d l m } d d  l } | j j d ƒ } d d d g d d d g g } g  } g  } g  } g  }	 g  }
 xºt	 d ƒ D]¬} | d	 d
 c d 7<| | ƒ } | j
 | j d d ƒ } | j | j d d ƒ } | j | j d d ƒ } | j | j ƒ | j | ƒ | j | ƒ |	 j | ƒ | d	 d
 c d 8<| | ƒ } | j | j d d ƒ } | d	 d
 c d 7<| | ƒ } | j | j d d ƒ } | | d } | d	 d
 c d 8<|
 j | ƒ | d	 d
 d k  s+| d	 d
 d k r| d	 d
 d k  s+| d	 d
 d k r— t | | ƒ sCt ‚ q— q— Wd  S(   Niÿÿÿÿ(   R   (   R   (   t   distancet   mmtbx_hbond_restraints_extg        gìQ¸…ë@iè  i   i    g-Cëâ6?g      @gffffff@gH¯¼šò×z>gH¯¼šò×Š>g½7†  @gl#žìff@(   R   R   t   cctbx.array_familyR   t   cctbx.geometryRv   t   boost.pythont   pythont
   import_extR<   t	   switch_fnt   distance_modelt   d_switch_d_distancet   d2_switch_d_distance2R=   R   R"   (   R   R   Rv   t   boostt   extR   t   xt   y0t   y1t   y2t   y3RB   t   dt   swt   dsw_drt   d2sw_dr2t   dsw_dr_1t   dsw_dr_2t   d2sw_dr2_fd(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   exercise_switching_function  sB    ((c       
   C   så  d d l  m }  d d l m } |  j ƒ  } | j d d d g d d d	 d
 ƒ g  } x) t d ƒ D] } | j d | d ƒ qa Wg  } g  } g  } xÒ | D]Ê } | j d | d f d d g ƒ }	 | j d d ƒ }
 |  j	 d | j
 d |	 d |
 ƒ } | j | ƒ | j |
 d d ƒ | j d d ƒ } |  j	 d | j
 d |	 d | d t ƒ } | j | d d ƒ q™ Wd d  l j } | j ƒ  } | j d ƒ } | j | | d ƒ | j | | d ƒ | j | | d ƒ | j d ƒ | j ƒ  d  S(   Niÿÿÿÿ(   R   (   R   R   i    i   R   g333333@R   g      @iÈ   g      @g{®Gázt?g        g™»–�zâ?g      ð¿i   R   R   R   R;   io   t   -s   Lennard-Jones H-bond potential(   g        g        g        (   g™»–�zâ?g      ð¿g        (   g        g        g        (   g        g        g        (   R   R   R   R   RQ   R$   R<   R=   R'   R(   R   R>   t   matplotlib.pyplott   pyplott   figuret   add_subplott   plott	   set_titlet   show(   R   R   t
   lj_proxiesRA   RB   t   y_valst   y2_valst   y3_valsRC   R   t   gt   rRF   t   pltt   figt   ax(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   plot_potentialsF  sL    							t   __main__s   --plott   OK(   t
   __future__R    t   libtbx.load_envRh   t   libtbx.test_utilsR   Rk   t   sysR
   R:   RN   RU   Ru   R�   R¡   t   __name__t   argv(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/tst_hbond.pyt   <module>   s&   		K	"	+	h	,	(
