ó
Õ™xTc           @   sE  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
 d  d l
 m Z d  d l m Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z m Z d  d l Z d  d l Z d  d l Z d e f d	 „  ƒ  YZ d
 d „ Z e e d „ Z d „  Z e d „ Z  e! d k rAe  d e j" d ƒ n  d S(   iÿÿÿÿ(   t   divisionN(   t   pdb_interpretation(   t   maptbx(   t   flex(   t   Sorryt   format_cpu_times(   t   Autot
   group_argst   potential_objectc           B   s/   e  Z e Z d e d  „ Z d „  Z d „  Z RS(   c
      	   C   sÊ   | |  _  | |  _ | |  _ t | j t j j ƒ s9 t ‚ | }
 | j j	 d |
 j
 d |
 j d |
 j d |
 j ƒ |  _ | |  _ | |  _ | |  _ | |  _ |	 |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  S(   Nt   c_rept   k_rept   irexpt   rexp(   t   density_mapt   geo_managert   reduced_geo_managert
   isinstancet   nonbonded_functiont   cctbxt   geometry_restraintst   prolsq_repulsion_functiont   AssertionErrort   customized_copyR	   R
   R   R   t   custom_nonbonded_functiont   real_space_gradients_deltat   real_space_target_weightt   ideal_sites_cartt   site_labelst   orca_experimentst   Nonet   last_sites_movedt   ft   gt	   last_grms(   t   OR   R   R   t!   prolsq_repulsion_function_changesR   R   R   R   R   t   c(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   __init__   s*    
														c         C   sŠ  |  j  d  k s* |  j  j ƒ  | j ƒ  k	 rƒ| |  _  | } |  j d  k r{ d  } |  j r™ t j j j d t d t	 ƒ } q™ n t j j j d t	 d t ƒ } |  j
 j d | d | d |  j d t	 ƒ } | j |  _ | j |  _ |  j d  k	 r,|  j j d | d t	 ƒ } |  j | j 7_ |  j | j 7_ n  t d t j |  j j ƒ  ƒ d ƒ |  _ |  j d  k	 r^t j d	 |  j
 j j ƒ  d
 |  j d | d t j | j ƒ  t	 ƒ ƒ } t j d	 |  j
 j j ƒ  d
 |  j d | d |  j d t j | j ƒ  t	 ƒ ƒ } | |  j 9} | |  j 9} |  j | 7_ |  j | 7_ t j | j ƒ  ƒ d |  j _  d |  j _! n  t j |  j j ƒ  ƒ d |  j _" n  |  j S(   Nt	   nonbondedt   defaultt
   sites_cartt   flagsR   t   compute_gradientst   geog      à?t	   unit_cellR   t	   selectiont   deltat   real(#   R   R   t   idR   R   R   R   R)   t   Falset   TrueR   t   energies_sitesR   t   targetR   t	   gradientsR    R   R   t   mean_sqt	   as_doubleR!   R   R   t   real_space_target_simplet   crystal_symmetryR,   t   boolt   sizet   real_space_gradients_simpleR   R   R/   t   real_or_xrayt   total(   R"   t   sites_movedR(   R)   t   geo_energiest   reduced_geo_energiest   rs_ft   rs_g(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   e_pot6   sZ    					(					%c         C   s   |  j  d | ƒ |  j S(   NR?   (   RD   R    (   R"   R?   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   d_e_pot_d_sitesp   s    N(   t   __name__t
   __module__R1   t+   allowed_origin_shifts_need_to_be_suppressedR   R%   RD   RE   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyR      s
   
	:i
   c         C   s­   |  j  ƒ  d k s t ‚ x| t | ƒ D]h } t j t j d |  j  ƒ  d d d ƒ d ƒ } t j | j ƒ  ƒ |  j  ƒ  d } | d k r% Pq% q% Wt ‚ | | | 9} |  | S(	   Ni    R;   i   t   factori   i   g      à?g�íµ ÷Æ°>(	   R;   R   t   xrangeR   t   vec3_doublet   random_doublet   sumt   dott   RuntimeError(   R(   t   target_rmsdt
   max_trialst   it   shifts_cartt   rmsd(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   cartesian_random_displacementst   s     # c   1         sl
  | d  k r t j } n  ˆ j d  k	 rM t j ˆ j ƒ t j d ˆ j ƒ n  t | ƒ d k r‘ | d IJx | D] } | d I| IJqp W| Jn  t | ƒ d k rÕ | d IJx | D] } | d I| IJq´ W| Jn  t | ƒ dL k sí t	 ‚ t
 j j ƒ  } ˆ j | _ t
 j d | d	 | d
 | d t d t d t d | ƒ } t | ƒ d k sXt	 ‚ | J| d j ƒ  } | d j ƒ  ‰  g  | j ƒ  D] }	 |	 j ^ q‰‰ | j ƒ  }
 |
 ‰ | j ƒ  ‰ ˆ  j d ˆ ƒ ‰ ˆ j ƒ  } ˆ j d  k	 r˜‡ ‡ ‡ ‡ f d †  } ‡  ‡ ‡ ‡ ‡ f d †  } ˆ j t k r(ˆ j } ˆ j | j } ˆ j | j } | d k sft	 ‚ | d k sxt	 ‚ | d ˆ j j IJ| d ˆ j IJ| d | IJ| d | IJ| j  ƒ  d „  } ˆ j j d k rŒd } g  } x‡t! | j" ƒ D]c} t# d |
 d | | ƒ ‰ | ƒ  } | j$ d d ƒ | j% ƒ  ‰ ˆ } | | |
 ƒ } | j& | | f ƒ | d | d	 IJ| j  ƒ  | | | k  rÒ| d k rÅt' | d t( | d | | ƒ ƒ } q]| d 9} qú| | | k rF| j$ d d ƒ | j% ƒ  ‰ ˆ } | | |
 ƒ } | j& d | f ƒ | d | d	 IJ| j  ƒ  Pn  | t( d  | | ƒ 9} qúW| d! d" d# | ƒ ~ | d$ | IJ| Jq•ˆ j j d% k r| ƒ  } | j) ƒ  | j* } g  } | j" d k sÕt	 ‚ xï t! | j" ƒ D]Ë } | j+ ƒ  } | j, ƒ  } | j- d& | ƒ | j% ƒ  } | | |
 ƒ } | j& | | f ƒ | | | k  rf| d | | 9} n> | | | k rzPn  | j. d' | ƒ | j/ d( | ƒ | d  9} d  } d  } qåW| d! d& d# | ƒ ~ | d$ | IJ| d) d* j0 g  | j+ ƒ  D] } d+ | ^ qòƒ IJ| J| j% ƒ  ‰ q•t	 ‚ q˜| ƒ  } | j+ ƒ  } t ˆ j ƒ t | ƒ k rm| d, Iˆ j IJ| j1 j2 j3 } t | ƒ | j4 ƒ  k s˜t	 ‚ | j5 ƒ  } | j6 ƒ  } xq t7 | ƒ D]c \ }  \ }! }" |! d	 k räd- }# n | j8 |! }# | j8 |" }$ | d. |# |$ | |  | |  f IJq½W| d/ IJ| d) d* j0 g  | D] } t9 | ƒ ^ qBƒ IJt: d0 ƒ ‚ n  | j. d' t j; ˆ j ƒ ƒ | j% ƒ  ‰ n  ˆ j< rÒt= j> j1 j? d1 t ˆ ƒ d2 g  ƒ }% |% j@ ƒ  n ˆ }% | d3 IJ|% jA d4 ˆ d5 | d6 d7 ƒ | Jt | ƒ d k r}tB jC jD d8 | d ƒ }& |& jE ƒ  }' |' jF | d jG jH ƒ sXt	 ‚ |' jI ƒ  jJ ƒ  }
 | jK d |
 ƒ n  | jL d9 ˆ j ƒ jM ƒ  jN ƒ  }( |( jO ƒ  ˆ jP sÂˆ j< sÂt	 ‚ ˆ jP r~	d	 d: lQ mR }) |) jS d; ˆ d ˆ d< ˆ d= ˆ  ƒ }* |* j8 ‰ |* j ‰ |* jT ‰ |* jU ‰  |* j1 }% t jV ƒ  }+ x( |* jW D] \ }, }- |+ j& |
 |- ƒ qB	W|+ }
 |* j d> | ƒ } n  ˆ j< s�	ˆ jX r™	d  }. n ˆ  jY d? |% ƒ }. ˆ j ˆ jZ }/ t[ d@ |( j\ ƒ  d= ˆ  dA |. dB ˆ j] dC |/ dD ˆ j^ dE |
 dF ˆ dG ˆ jP ƒ 	}0 t= j_ j` d; ˆ d ˆ d< ˆ d? |% dH |0 ƒ } ta jb jc jd dI | d
 ˆ dJ | dK | d | ƒ | Jd  S(M   Nt   valuei    s
   PDB files:t    s   Other files:i   i   t   argsiÿÿÿÿt   paramst   strict_conflict_handlingt6   substitute_non_crystallographic_unit_cell_if_necessaryt   return_all_processed_pdb_filest   logt   sitesc              s+   t  j j d ˆ  d ˆ d ˆ d ˆ d d  ƒ S(   Nt   labelsR^   t   massest
   tardy_treet   potential_obj(   t   scitbxt
   rigid_bodyt   tardy_modelR   (    (   R_   R`   R^   t   tardy_tree_simple_connectivity(    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   get_tardy_model_no_potentialª   s    c             s�   t  j j j d t ˆ ƒ d g  ƒ }  |  j ƒ  t d d  d ˆ  d d  d ˆ j d d  d d  d	 d  ƒ } t  j	 j
 d
 ˆ d ˆ d ˆ d |  d | ƒ S(   Nt
   n_verticest	   edge_listR   R   R   R#   R   R   R   R_   R^   R`   Ra   Rb   (   Rc   t   graphRa   t	   constructt   lent
   build_treeR   R   R#   Rd   Re   (   Ra   Rb   (   R   R_   R`   RY   R^   (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   get_tardy_model_no_density±   s"    
		s   Random displacements (%s):s     high resolution: %.6gs     target rmsd: %.6gs     target rmsd tolerance: %.6gc         S   sK   d d |  g } x | D] } | j  d | ƒ q Wt d j | ƒ ƒ ‚ d  S(   Ns,   tardy_displacements_auto.max_steps exceeded:s     %        -13s  rmsds     %13.6e  %13.6es   
(   t   appendR   t   join(   t   var_namet   rmsd_historyt   msgt   var_rmsd(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   raise_max_steps_exceededÕ   s
    t	   cartesiang      ø?R(   RP   t   max_iterationsi   s$       multiplier, rmsd: %13.6e, %13.6eg333333ó?iô  g      à?Rq   t
   multiplierRr   s     actual rmsd: %.6gt   constrainedt   delta_tt   q_packedt	   qd_packeds     tardy_displacements=%st   ,s   %.6gs   tardy_displacements:t   roots   %21s - %-21s: %d dof, %d q_sizes   Zero displacements:s!   Incompatible tardy_displacements.Rh   Ri   s   tardy_tree summary:t   vertex_labelst   outt   prefixs     t	   file_namet   d_min(   t   orcaR_   R`   R   t   tardy_tree_rmsd_calculatorRa   R   R   R#   R   R   R   R   R   Rb   Re   t   rmsd_calculatort   callback(   i   i   (e   R   t   syst   stdoutt   random_seedt   randomt   seedR   t   set_random_seedRl   R   R   t   master_paramst   extractt   dihedral_function_typet   runR1   R2   t   xray_structuret   geometry_restraints_managert
   scattererst   labelR(   t   atomic_weightst   construct_tardy_treeR†   t   tardy_displacementsR   t   tardy_displacements_autot!   structure_factors_high_resolutiont   rmsd_vs_high_resolution_factort   rmsd_tolerancet   parameterizationt   flushRJ   t	   max_stepsRU   t   minimizationR?   Ro   t   mint   maxt   assign_random_velocitiest   first_delta_tt   pack_qt   pack_qdt   dynamics_stept   unpack_qt	   unpack_qdRp   Ra   t   cluster_managert   hinge_edgest   bodies_sizet   degrees_of_freedom_each_jointt   q_size_each_jointt	   enumerateR_   t   strR   t   doublet   emulate_cartesianRc   Rj   Rk   Rm   t   show_summaryt   iotbxt   pdbt   inputt   construct_hierarchyt   is_similar_hierarchyt   all_chain_proxiest   pdb_hierarchyt   atomst   extract_xyzt   set_sites_cartt   structure_factorst   f_calct   fft_mapt   apply_sigma_scalingR   t   mmtbx.refinementR„   t   expandR`   R   RK   t   indicest   keep_all_restraintst   reduce_for_tardyt,   real_space_gradients_delta_resolution_factorR   t   real_mapR#   R   Rd   Re   t   mmtbxt
   refinementt   tardyt   action(1   RY   t	   pdb_filest   other_filesR‡   R]   R‚   t   pdb_interpretation_paramst   processed_pdb_filest   xst   scR   R†   Rg   Rn   t   auto_paramsRP   t   target_rmsd_tolRu   Rx   Rr   t   i_stepRe   R?   RT   Rz   t   prev_qt   prev_qdt   vt   qR«   t   dofejt   qsejt   ibRR   t   jt   sit   sjRa   t   ideal_pdb_inpt   ideal_pdb_hierarchyRÀ   R„   t   xt   x_ideal_sites_cartt   i_orct   i_seqR   R   Rb   (    (   R   R_   R`   RY   R^   Rf   sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   run_test€   s¤    

		"	



		


	
	

'		 	
#	
	
										
			c           C   s'   t  j j d t j j j d t j ƒ S(   Nt   input_stringsŽ  structure_factors_high_resolution = 3
  .type = float
real_space_target_weight = 100
  .type = float
real_space_gradients_delta_resolution_factor = 1/3
  .type = float
orca_experiments = False
  .type = bool
keep_all_restraints = False
  .type = bool
random_seed = None
  .type = int
tardy_displacements = None
  .type = floats
tardy_displacements_auto {
  parameterization = *constrained cartesian
    .type = choice
    .optional = False
  rmsd_vs_high_resolution_factor = 1/3
    .type = float
  rmsd_tolerance = 0.1
    .type = float
  first_delta_t = 0.001
    .type = float
  max_steps = 100
    .type = int
}
%(dihedral_function_type_params_str)s
(	   R´   t   philt   parseRÉ   RÊ   RË   t   master_phil_strR   t   __dict__(    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   get_master_phil†  s    c      	   C   s°  t  ƒ  } | j ƒ  } d } t j j d | ƒ g } g  } g  } x|  D]} t j j | ƒ rì t j j	 d | ƒ r‰ | j
 | ƒ d  } qì y t j j d | ƒ }	 Wn1 t k
 r¸ ‚  n+ t k
 rÕ | j
 | ƒ n X| j
 |	 ƒ d  } n  | d  k	 rF y | j d | ƒ }
 Wn4 t k
 r$‚  qUt k
 rDt d | ƒ ‚ qUX| j
 |
 ƒ qF qF W| j d | ƒ j ƒ  } | j | ƒ j ƒ  Ht d | d | d	 | d
 | ƒ t ƒ  GHd  S(   Ns·   start_temperature_kelvin = 2500
final_temperature_kelvin = 300
number_of_cooling_steps = 44
number_of_time_steps = 1
time_step_pico_seconds = 0.001
minimization_max_iterations = None
Rç   R‚   t   args(   Command-line argument not recognized: %st   sourcesRY   RÍ   RÎ   R‡   (   Rì   t!   command_line_argument_interpreterR´   Rè   Ré   t   ost   patht   isfileRµ   t   is_pdb_fileRo   R   t   KeyboardInterruptt	   Exceptiont   processR   t   fetchR�   t   formatt   showRæ   R   (   RX   R‡   t   master_philt   argument_interpretert   master_phil_str_overridest   phil_objectsRÍ   RÎ   Rí   t   phil_objt   command_line_paramsRY   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyR‘   §  sH    		  	   t   __main__RX   i   (#   t
   __future__R    t   mmtbx.refinement.tardyRÉ   t   mmtbx.monomer_libraryR   t	   iotbx.pdbR´   t
   iotbx.philt   cctbx.geometry_restraintsR   R   t   cctbx.array_familyR   t   scitbx.rigid_bodyRc   t   scitbx.graph.tardy_treet   libtbx.utilsR   R   t   libtbxR   R   R‹   Rˆ   Rð   t   objectR   RU   R   Ræ   Rì   R‘   RF   t   argv(    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_tardy_pdb.pyt   <module>   s*   dÿ 	!+