ó
±™xTc           @   sg  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  d l m Z d  d l Z d  d l Z d e j Z d	 „  Z d
 „  Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d „  Z d „  Z e d k rce	 ƒ  Z e j Z e e j d d e ƒZ e j  ƒ  Z! e j d e! IJe" e! e j# ƒ d k  sct$ ‚ n  d S(   iÿÿÿÿ(   t   division(   t   geometry_minimizationN(   t   flex(   t   user_plus_sys_timet   Usage(   t   runtime_utils(   t   make_headers  
%s
dynamics_type = *cartesian
  .type = choice
stop_at_diff = None
  .type = float
  .help = stop after reaching specified cutoff value
cartesian_dynamics
  .short_caption = Cartesian dynamics
{
  include scope mmtbx.dynamics.cartesian_dynamics.master_params
}c           C   s   t  j j t d t ƒS(   Nt   process_includes(   t   iotbxt   philt   parset   master_params_strt   True(    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyt   master_params   s    c         C   sñ   d d l  m } t d d | ƒ|  j ƒ  j ƒ  } | j d | d |  j ƒ  d d ƒ } | j d	 |  d
 | d | j d | d | j d | j	 d | j
 d | j d | j d | d | d d ƒ |  j ƒ  }	 |	 j | ƒ }
 | d IJ| d |
 IJd  S(   Niÿÿÿÿ(   t   cartesian_dynamicss   Simple cartesian dynamicst   outt   restraints_managert
   sites_cartt   wci   t   xray_structuret   gradients_calculatort   temperaturet   states_collectort   n_stepst	   time_stept    initial_velocities_zero_fractiont   n_printt   stop_cm_motiont   stop_at_difft   logt   verboset    s"   RMSD from starting structure: %.3f(   t   mmtbx.dynamicsR   R   R   t	   deep_copyt%   gradients_calculator_reciprocal_spacet   runR   t   number_of_stepsR   R   R   R   t   rms_difference(   R   R   R   t   paramsR   R   R   t   sites_cart_startR   t   sites_cart_endt   rmsd(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyt   run_cartesian_dynamics   s0    									
R#   c           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   t   shakenc         C   s   t  ƒ  S(   N(   R   (   t   self(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyR   @   s    c         C   s   t  d ƒ ‚ d  S(   Ns�   phenix.dynamics: perform simple dynamics to perturb a model
Usage examples:
  phenix.dynamics model.pdb
  phenix.dynamics model.pdb ligands.cif
(   R   (   R,   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyt   format_usage_messageC   s    c         C   s¦   |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j  |  j d ƒ |  j	 ƒ  d  S(	   Ns   Initialization, inputss   Processing inputss   Atom selections   Geometry Restraintss   Add reference restraintst   Dynamicss   Write PDB files   Write GEO file(
   t   callert
   initializet   process_inputst   atom_selectiont   get_restraintst   reference_restraintst   dynamicst   write_pdb_filet   write_geo_filet
   show_times(   R,   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyt	   __executeK   s    c         C   sK   t  j |  j j ƒ  j ƒ  t ƒ |  _ t j d | d |  j	 ƒ |  j
 ƒ  d  S(   Nt   mR   (   R   t   boolR   R   t   sizeR   t	   selectionR   t	   broadcastR   t'   generate_reference_restraints_selection(   R,   t   prefix(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyR2   X   s    $c         C   s¢   t  j d | d |  j ƒ |  j j ƒ  |  _ |  j j d k rƒ t d |  j d |  j d |  j	 d |  j j
 d |  j j d |  j ƒ n	 t ƒ  ‚ |  j j ƒ  |  _ d  S(	   NR:   R   t	   cartesianR   R   R   R&   R   (   R   R>   R   R   R   R&   t   dynamics_typeR*   t   grmR   R   R   t   NotImplementedError(   R,   R@   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyR5   ]   s    				(   t   __name__t
   __module__t   _pdb_suffixR   R-   t   _run__executeR2   R5   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyR#   >   s   				t   launcherc           B   s   e  Z d  „  Z RS(   c         C   sB   t  j |  j ƒ t  j |  j ƒ t d |  j d t j d t ƒ j	 S(   Nt   argsR   t   use_directory_prefix(
   t   ost   mkdirt
   output_dirt   chdirR#   RJ   t   syst   stdoutt   Falset   output_file_name(   R,   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyR#   m   s    (   RE   RF   R#   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyRI   l   s   c         C   s   t  j |  ƒ S(   N(   R   t   validate_params(   R&   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyRT   s   s    c         C   s   t  j |  ƒ S(   N(   R   t
   finish_job(   t   result(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyRU   v   s    t   __main__i   R   s   Overall runtime: %-8.3fgš™™™™™¹?(%   t
   __future__R    t   mmtbx.command_lineR   t
   iotbx.philR   t   scitbx.array_familyR   t   libtbx.utilsR   R   t   libtbxR   t   libtbx.str_utilsR   RL   RP   t   base_params_strR   R   R*   R#   t   target_with_save_resultRI   RT   RU   RE   t   timerRQ   R   t   argvt   ot   elapsedt   ttt   abst
   total_timet   AssertionError(    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/dynamics.pyt   <module>   s,   		!.				