ó
Ô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  d l	 Z	 d  d l
 Z d Z d   Z d e j j f d     YZ e   j   e	 j d  Z d	   Z d
 e f d     YZ d S(   i˙˙˙˙(   t   divisionN(   t   geometry_restraintssŕ     alternate_nonbonded_off_on=False
    .type = bool
  restrain_c_alpha_positions=False
    .type = bool
  max_iterations=500
    .type = int
  macro_cycles=1
    .type = int
  show_geometry_restraints=False
    .type = bool
c           C   s   t  j j t  S(   N(   t   iotbxt   philt   parset   master_params_str(    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyt   master_params   s    t   lbfgsc           B   s,   e  Z d d d  d  d d d  Z d   Z RS(   i    c         C   sb   | |  _  | |  _ |	 |  _ t j j j |  d | d | d | d | d | d | d |
 d |	 d  S(	   Nt
   sites_cartt   geometry_restraints_managert   geometry_restraints_flagst   lbfgs_termination_paramst   sites_cart_selectiont   lbfgs_exception_handling_paramst   site_labelst   states_collector(   t   rmsd_bonds_termination_cutofft   rmsd_angles_termination_cutoffR   R   R   t   __init__(   t   selfR   R	   R
   R   R   R   R   R   R   R   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyR      s    			c         C   sZ   |  j    |  j |  j g j d   d k rV |  j |  j k  rV |  j |  j k  rV t Sn  d  S(   Ni    (   t   apply_shiftst   rmsd_anglest
   rmsd_bondst   countt   NoneR   R   t   True(   R   t	   minimizer(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyt   callback_after_step3   s
    
!N(   t   __name__t
   __module__R   R   R   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyR      s   c         C   s{  | } t  j j d t  } |  j } d  } | j r d d l m } | j j	   } | j
 j   j |  }	 | j   } | j d |	 d |  n  |  j d t d |  }
 | j } | j   j   } g  | j D] } | j   ^ qĚ } |
 j j d | d	 | d
 | j
 d | d | d d  | j r@|
 j d | d | d	 |  n  |
 j d | j
 d |  } | j j d d d | d	 | d | d d  | j d  k	 rĂ| j j d d d | d	 | d | d d  n  ~ | J| j   | j r| j d d k r| j d 7_ | d IJ| d IJ| Jn  xKt | j  D]:} | j rbt  | d  | _! | d I| j! IJn  t" d | d |
 d | d t# j" j$ d | j%  d  t# j" j& d! t   } | d" IJ| j' j( d |  | J| d# I| j) j*   IJ| d$ | j
 j+ |  IJ| J| d% IJ| j, j( d |  | J|
 j d | d |  j j d d d | d	 | d | d d  | Jq*W| j! swt-  | S(&   Nt   defaulti˙˙˙˙(   t	   referenceR   t	   selectiont   show_energiest   reference_managert   special_position_settingsR   t   sites_cart_originalt   sites_cart_exactt   outt   prefixs     t   flagst   by_valuet   residualt   ft	   max_itemsi
   t   deltai   i    i   s>   INFO: Number of macro cycles increased by one to ensure use ofs1         nonbonded interactions in last macro cycle.s,   Use nonbonded interactions this macro cycle:R	   R
   R   t   max_iterationsR   t-   ignore_line_search_failed_step_at_lower_bounds"   Energies at start of minimization:s"   Number of minimization iterations:s,   Root-mean-square coordinate difference: %.3fs    Energies at end of minimization:(.   R   R(   R   t   all_chain_proxiesR   t   restrain_c_alpha_positionst   mmtbx.geometry_restraintsR   t   pdb_hierarchyt   get_peptide_c_alpha_selectionR   t	   deep_copyt   selectt   managert   add_coordinate_restraintsR	   t   FalseR#   R%   t	   pdb_atomst   id_strt   site_symmetry_tablet   show_special_position_shiftst   show_geometry_restraintst   show_sortedt   pair_proxiest   bond_proxiest   nonbonded_proxiest   flusht   alternate_nonbonded_off_ont   macro_cyclest   xranget   boolt	   nonbondedR   t   scitbxt   termination_parametersR.   t   exception_handling_parameterst   first_target_resultt   showR   t   itert   rms_differencet   final_target_resultt   AssertionError(   t   processed_pdb_filet   paramst   logt   coR
   R0   R"   R   t   ca_selectiont   ca_sites_cartR	   R#   R   t   atomt   atom_labelsR@   t   i_macro_cyclet	   minimized(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyt   run:   s°    			
			"			
			



	


	c      	   C   s{   t  j j d |  d | d |  }  | j j j j d |   | j j j j d |  d |  j   j	   d t
 d |  |  | f S(   NR3   t   modeR    R   t   chi_angles_onlyt   sigma(   t   mmtbxt   utilst   switch_rotamerst   geometryt   generic_restraints_managerR"   t   remove_chi_angle_restraintst   add_torsion_restraintst   atomst   extract_xyzR   (   R3   t   restraints_managerR    R_   R]   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyt   add_rotamer_restraints   s    	t   run2c           B   sh   e  Z d  d d e e e e e e e e d d e e e e d d d  Z d d  Z d   Z d   Z RS(   iô  i   i    c         C   sÔ  | |  _  |  j  d  k r' t j |  _  n  | |  _ d  |  _ | |  _ | | d k sX t  | | | |	 |
 | | g j t	  d k  s t  d  |  _
 | rź d d l m } | | j  |  _
 n  | |  _ | rč | d d k rč | d 7} n  d d  l } | j j d |  } | j j d t  } t j j d	 | d
 | d | d |	 d |
 d | d | d t d t d t  
} |  j   |  j   xPt |  D]B} |  j  d I| IJ| rĎ| | d k rĎt | d  | _ n  |  j |  |  j d |  | r.t d |  j d |  j d | d d d d  \ |  _ |  _ n  |  j j   j   } t d | d | j d | d | d  | d! | d" | d# | d$ | d% d   
|  _ |  j j   j |  |  j   | | _ | j j d |  } qWd  S(&   Ni    i   i˙˙˙˙(   t   setup_restraintsi   i   R.   R/   t   bondRH   t   anglet   dihedralt	   chiralityt	   planarityt   parallelityt   reference_dihedralt   bond_similarityt   generic_restraintss     macro-cycle:t   macro_cycleR3   Ri   R    R_   i
   R]   t   fix_outliersR   R	   R
   R   R   R   R   R   R   R   (    RT   R   t   syst   stdoutR3   R[   Ri   RQ   R   R9   t   cdl_proxiest$   mmtbx.conformation_dependent_libraryRl   Rc   t   correct_hydrogenst   scitbx.lbfgsR   RJ   RK   R   R   R(   t   update_cdl_restraintsRM   RF   RG   RH   t   correct_hydrogen_geometriesRj   Rg   Rh   t   set_xyz(   R   Ri   R3   t   max_number_of_iterationst   number_of_macro_cyclesR    Rm   RH   Rn   Ro   Rp   Rq   Rr   Ru   R   R   RD   t   cdlR|   t   fix_rotamer_outliersR   RT   Rl   RI   R   t   exception_handling_paramsR
   RZ   R   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyR   Ż   s    									

			
	c         C   sš   |  j  d  k	 rľ d d l m } | d  k r^ | |  j |  j j d |  j  d |  j d t } qľ | d k rľ | |  j |  j j d |  j j	   j
   d |  j  d |  j d t } qľ n  d  S(   Ni˙˙˙˙(   t   update_restraintsRz   RT   t   verbosei    R   (   Rz   R   R{   R   R3   Ri   Rc   RT   R9   Rg   Rh   (   R   Rv   R   t   rc(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyR~     s"    				c         C   sĎ   |  j  rË d d l m } | |  j d |  j d |  j j   j   \ } } t |  r§ | d t |  IJ|  j j   } x) | D] } | d | | j   IJq Wn  | rË | d | t |  IJqË n  d  S(   Ni˙˙˙˙(   R   Ri   R   s&       Number of hydrogens corrected : %ds         %ss&       Number of uncorrected         : %d(	   R|   t1   mmtbx.monomer_library.correct_hydrogen_geometriesR   R3   Ri   Rg   Rh   t   lenR;   (   R   RT   R   t   bad_hydrogen_countt   corrected_hydrogen_countRg   RX   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyR     s    			c         C   sJ   |  j  j j d |  j j   j   d t  } | j d d d |  j  d  S(   NR   t   compute_gradientsR'   s       R+   (	   Ri   Rc   t   energies_sitesR3   Rg   Rh   R9   RM   RT   (   R   t   es(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyRM   +  s    	N(	   R   R   R   R9   R   R   R~   R   RM   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyRk   Ž   s,   B	(   t
   __future__R    t
   iotbx.philR   t   cctbxR   t   cctbx.geometry_restraints.lbfgsR}   RI   Rx   t   mmtbx.utilsR`   R   R   R   t   extractRy   R\   Rj   t   objectRk   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/geometry_minimization.pyt   <module>   s   	!_	