ó
Ã™xTc           @   s\  d  d l  m Z d  d l Z d  d l m Z d  d l m Z d  d l Z d  d l Z d  d l 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  d l Z d  d l Z e j d	 ƒ e
 j d	 ƒ d
 „  Z d e f d „  ƒ  YZ d	 d „ Z d	 d „ Z d	 d „ Z d	 d „ Z d „  Z e  d k rXe ƒ  n  d S(   iÿÿÿÿ(   t   divisionN(   t	   constants(   t   cartesian_dynamics(   t   flex(   t   approx_equal(   t   format_cpu_times(   t   StringIOi    c   
      C   s�  t  t j d ƒ d k  s t ‚ t  t j d ƒ d k  s> t ‚ t j j d d d d ƒ } t | d	 ƒ sn t ‚ t j j	 d d d
 | ƒ } t | d ƒ sž t ‚ t
 j d d ƒ d d } t
 j ƒ  } x¶ t d ƒ D]œ } xQ t d ƒ D]C } t j d | d d ƒ } t j j | | ƒ } | j | j ƒ qä W| j ƒ  }	 |  rJ|	 j ƒ  n  d |	 j k  odd k  n rÑ PqÑ qÑ Wt d ƒ ‚ d  S(   NgZ‚Œ€
G`?g�íµ ÷Æ°>gòï3.©?gñhãˆµøä>t   dofi   t   egÍÌÌÌÌÌô?gÒn6NÙZp@t   tt   sizei
   i   i   id   t   massest   target_temperaturei,  i'  i1  s$   Failure reaching target_temperature.(   t   absR   t   boltzmann_constant_akmat   AssertionErrort   akma_time_as_pico_secondst   mmtbxt   dynamicst   kinetic_energy_as_temperatureR   t   temperature_as_kinetic_energyR   t   random_doublet   doublet   xrangeR   t   random_velocitiest   kinetic_energy_and_temperaturet   appendt   temperaturet   min_max_meant   showt   mean(
   t   verboseR	   R   R   t   tempst   i_passt   it
   velocitiest   ktt   mmm(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   exercise_basic   s(    	 t
   get_inputsc           B   s   e  Z d  „  Z RS(   c   
      C   s  t  j j d d d t j j ƒ } | d  k rC d  |  _ d  |  _ d  S| rU t	 j
 } n	 t ƒ  } t j j j j ƒ  } d | _ t j j j d | d | d | d | d	 | ƒ } | j ƒ  } | j ƒ  j ƒ  d
 k sÖ t ‚ t j j d | j ƒ  ƒ }	 | |  _ |	 |  _ d  S(   Nt   relative_paths   phenix_regression/pdb/phe.pdbt   testi   t   mon_lib_srvt   paramst   ener_libt	   file_namet   logi   t   geometry(   t   libtbxt   envt   find_in_repositoriest   ost   patht   isfilet   Nonet   xray_structuret   restraints_managert   syst   stdoutR   R   t   monomer_libraryt   pdb_interpretationt   master_paramst   extractt   nonbonded_weightt   processt
   scatterersR
   R   t
   restraintst   managert   geometry_restraints_manager(
   t   selfR*   R,   R   t   pdb_fileR.   R+   t   processed_pdbR7   R8   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   __init__.   s.    		 				(   t   __name__t
   __module__RH   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyR'   ,   s   c         C   s¾  |  j  d  k r d GHd  S|  j  j ƒ  } | r9 t j } n	 t ƒ  } t j d |  j d | j	 ƒ  d d ƒ } t j
 d | d | d d	 d
 d d d d | d d ƒ |  j  j | ƒ } | j |  j  ƒ } | | k sÓ t ‚ | } | rë d G| GHn  t j | j |  j  ƒ j ƒ  ƒ } | r,Hx | D] }	 |	 GHqWn  d }
 | |
 | k } |
 d k rl| j t ƒ d k slt ‚ n  | r‡d G| j t ƒ GHn  | j | ƒ } | rºd GHx | D] } | GHq¨Wn  d  S(   Ns0   Skipping exercise_00(): input file not availableR8   t
   sites_cartt   wci   t   gradients_calculatorR7   R   i,  t   n_stepsiÈ   t	   time_stepgü©ñÒMb@?R.   R   s3   rms between structures before and after dynamics = g      @g      ð?i    s   number of outliers = s   list of outliers : (   R7   R6   t   deep_copy_scatterersR9   R:   R   R   t%   gradients_calculator_reciprocal_spaceR8   RK   t   runt   rms_differenceR   R   t   sqrtt   difference_vectors_cartt   dott   countt   Truet   select(   t   inputsR   t
   structure_R.   RM   t   rms1t   rms2t   rmst$   array_of_distances_between_each_atomt   dt   n_rmst   selected_by_rmst   selectedt   s(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   exercise_00F   sT     					c         C   s  |  j  d  k r d GHd  S| r* t j } n	 t ƒ  } xÚ d | | f g D]Æ \ } } |  j  j ƒ  } t j d |  j d | j	 ƒ  d d ƒ } t j
 d | d | d	 d
 d d d d d | d | ƒ } |  j  j | ƒ | j |  j  ƒ k sè t ‚ t | j |  j  ƒ d d ƒ sF t ‚ qF Wd  S(   Ns0   Skipping exercise_01(): input file not availableiÿÿÿÿR8   RK   RL   i   R7   RM   R   i    RN   iÈ   RO   gü©ñÒMb@?R.   R   g        g�íµ ÷Æ°>(   Niÿÿÿÿ(   R7   R6   R9   R:   R   RP   R   RQ   R8   RK   RR   RS   R   R   (   RZ   R   R.   t   lt   vR[   RM   t   inst(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   exercise_01u   s0     						c         C   sï   |  j  d  k r d GHd  S|  j  j ƒ  } | r9 t j } n	 t ƒ  } t j d |  j d | j	 ƒ  d d ƒ } t j
 d | d | d d	 d
 d d d d | d d ƒ |  j  j | ƒ | j |  j  ƒ k sÇ t ‚ t | j |  j  ƒ d d ƒ së t ‚ d  S(   Ns0   Skipping exercise_02(): input file not availableR8   RK   RL   i   R7   RM   R   i,  RN   i    RO   gü©ñÒMb@?R.   R   g        g�íµ ÷Æ°>(   R7   R6   RP   R9   R:   R   R   RQ   R8   RK   RR   RS   R   R   (   RZ   R   R[   R.   RM   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   exercise_02‘   s.     					c         C   sU  t  j j d d d t j j ƒ } | d  k r6 d GHd  S| rH t j } n	 t	 ƒ  } t
 j j j j ƒ  } d | _ t
 j j j d |  d | d | d	 | d
 | ƒ } | j ƒ  } t
 j j d | j ƒ  ƒ } | j ƒ  }	 t j d | d | j ƒ  d d ƒ }
 t j d | d |
 d d d d d d d
 | d d ƒ | j |	 ƒ } |	 j | ƒ } | | k sZt ‚ | } | rrd G| GHn  t j |	 j | ƒ j ƒ  ƒ } | r»t j  d | d d ƒ j! d d ƒ n  d } | | | k } | j" ƒ  j# | ƒ } | j$ ƒ  d  k rQd! G| j$ ƒ  GH| j# | ƒ } x) t% | | ƒ D] \ } } | j& G| GHq&Wt' d" ƒ ‚ n  d  S(#   NR(   s"   phenix_regression/pdb/2ERL_noH.pdbR)   s.   Skipping exercise_03: input file not availablei   R*   R+   R,   R-   R.   R/   R8   RK   RL   i   R7   RM   R   i,  RN   iÈ   RO   gü©ñÒMb@?R   s3   rms between structures before and after dynamics = t   datat   n_slotsi   t   format_cutoffss   %6.4fg333333@i    s   number of rms outliers:s   rms outliers.((   R0   R1   R2   R3   R4   R5   R6   R9   R:   R   R   R;   R<   R=   R>   R?   R@   R7   RB   RC   RD   RP   R   RQ   RK   RR   RS   R   R   RT   RU   RV   t	   histogramR   RA   RY   R
   t   zipt   labelt   RuntimeError(   R*   R,   R   RF   R.   R+   RG   R7   R8   R[   RM   R\   R]   R^   R_   Ra   Rb   t
   outlier_sct	   outlier_dt   scR`   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   exercise_03¬   sj     							
c          C   s½   d t  j d k }  t d |  ƒ t j j j ƒ  } t j j j ƒ  } t d | d | d |  ƒ } t d | d |  ƒ t	 d | d |  ƒ t
 d | d |  ƒ t d | d | d |  ƒ t ƒ  GHd  S(   Ns	   --verbosei   R   R*   R,   RZ   (   R9   t   argvR&   R   R;   t   serverR,   R'   Re   Ri   Rj   Ru   R   (   R   R*   R,   RZ   (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyRR   æ   s    t   __main__(!   t
   __future__R    t   mmtbx.dynamicsR   R   R   t   mmtbx.restraintst(   mmtbx.monomer_library.pdb_interpretationt   mmtbx.monomer_library.servert   cctbx.array_familyR   t   libtbx.test_utilsR   t   libtbx.utilsR   t   libtbx.load_envR0   t	   cStringIOR   t   randomR9   R3   t   seedt   set_random_seedR&   t   objectR'   Re   Ri   Rj   Ru   RR   RI   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/dynamics/tst_cartesian_dynamics.pyt   <module>   s0   	/:	