ó
±™xTc        
   @   s†  d  d l  m Z d  d l 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 d  d l 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 m Z d  d	 l m Z m Z d  d l Z d  d l Z d  d l Z e j Z  d
 d d „ Z! d e" f d „  ƒ  YZ# d e" f d „  ƒ  YZ$ d „  Z% d „  Z& e' d „ Z( d „  Z) d Z* d Z+ d e, ƒ  Z- d „  Z. d „  Z/ d e" f d „  ƒ  YZ0 d „  Z1 d e" f d „  ƒ  YZ2 d „  Z3 d  „  Z4 d! „  Z5 d" „  Z6 d d d d# „ Z8 d d g  d d d d d d d$ „	 Z9 d d% „ Z: e; d& k r‚e: d' e j< d( d) d ƒ n  d S(*   iÿÿÿÿ(   t   divisionN(   t   maptbx(   t   miller(   t   flex(   t   matrix(   t   show_string(   t   Sorryt   null_out(   t   Autot
   group_argsg{®Gáz„?g333333Ó?c   	         s•   t  j ƒ  ‰ ˆ j ƒ  ‰ ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } x' t d ƒ D] } | d | d | ƒ qF Wx+ t d ƒ D] } | d | d d | ƒ qp Wˆ S(   Nc            sÆ   g  } x˜ | | g D]‰ } ˆ |  | ˆ |  <t  j t j j d ˆ  d ˆ ƒ ƒ } | ˆ } t j d ˆ d ˆ d | d t j | j	 ƒ  t
 ƒ ƒ } | j | ƒ q Wˆ j | d | d d	 | ƒ d  S(
   Nt   center_of_masst   qt	   unit_cellt   density_mapt
   sites_cartt	   selectioni    i   i   (   R   t   rtt   scitbxt
   rigid_bodyt    joint_lib_six_dof_aja_simplifiedR   t   real_space_target_simpleR   t   boolt   sizet   Truet   append(   t   it   deltat   fst   signed_deltat   ajat   sites_cart_deltat   rs_f(   R
   R   R   t   q_deltat   resultt   sites_cart_0R   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   get    s    
	i   R   R   i   (   R   t   doublet	   deep_copyt   xrange(	   R   R   R"   R
   R   t   unit_quaternion_deltat   translation_deltaR#   R   (    (   R
   R   R   R    R!   R"   R   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt&   real_space_rigid_body_gradients_simple   s    !  t   residue_refine_constrainedc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c   	      C   sê  | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | j j ƒ  |  _ | j ƒ  j	 ƒ  |  _
 | j ƒ  j ƒ  |  _ |  j
 j d |  j ƒ |  _ |  j j ƒ  |  _ t j j j d |  j j ƒ  d d ƒ j ƒ  j d d  ƒ } t j j d d  d |  j d t j |  j j ƒ  d ƒ d	 | d
 |  ƒ |  _ |  j j ƒ  |  _ |  j j ƒ  d k sMt  ‚ d |  _! |  j" ƒ  \ |  _# |  _$ |  j% |  _& t j' j( d |  d | ƒ |  _) |  j" ƒ  \ |  _* |  _+ |  j% |  _, |  `% |  ` |  ` |  ` |  ` |  `
 |  ` d  S(   Nt   indicest
   n_verticest	   edge_listt   all_in_one_rigid_bodyt   sitest   labelst   massesi   t
   tardy_treet   potential_obji   iÿÿÿÿt   target_evaluatort   termination_params(-   t   pdb_hierarchyt   residueR   t   geometry_restraints_managert   real_space_gradients_deltat   real_space_target_weightt   crystal_symmetryR   t   atomst   extract_xyzt   sites_cart_allt   extract_i_seqt   residue_i_seqst   selectt   sites_cart_residue_0t   meant   residue_center_of_massR   t   graphR2   t	   constructR   t
   build_treet   fix_near_singular_hingest   NoneR   t   tardy_modelR   R$   t   residue_tardy_modelt   pack_qt   xt   AssertionErrort   number_of_function_evaluationst    compute_functional_and_gradientst   f_startt   g_startR   t
   rs_f_startt   lbfgst   runt	   minimizert   f_finalt   g_finalt
   rs_f_final(	   t   OR6   R7   R   R8   R:   R9   t   lbfgs_termination_paramst   residue_tardy_tree(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   __init__5   sL    									c         C   s¢  |  j  d k r. |  j  d 7_  |  j |  j f S|  j  d 7_  |  j j d |  j ƒ |  j j ƒ  |  _ t j	 d |  j
 d |  j d |  j d t j |  j j ƒ  t ƒ ƒ } t d |  j
 d |  j d |  j d	 |  j d
 |  j ƒ } | |  _ | |  j 9} | |  j 9} |  j d  k r | } | } nr |  j j |  j |  j ƒ |  j j d |  j d t ƒ } | j j d |  j ƒ |  _ | | j } | |  j j ƒ  } | | j  ƒ  f S(   Ni    i   t   q_packedR   R   R   R   R"   R
   R   t   compute_gradientsR+   (!   RO   RQ   RR   RK   t   unpack_qRM   t   sites_movedt   sites_cart_residueR   R   R   R   R   R   R   R   R)   RB   RD   R   R:   R8   RI   R>   t   set_selectedR@   t   energies_sitest	   gradientsRA   t,   _residue_refine_constrained__d_e_pot_d_sitest   targett   d_e_pot_d_q_packedt	   as_double(   RZ   R   t   rs_gt   ft   gt   gr_e(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRP   g   s<    										c         C   s   |  j  } |  `  | S(   N(   Rf   (   RZ   Ra   R!   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   d_e_pot_d_sitesˆ   s    	(   t   __name__t
   __module__R]   RP   Rn   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR*   3   s   	2	!t   residue_refine_restrainedc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s-  | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | j j ƒ  |  _ | j ƒ  j	 ƒ  |  _
 | j ƒ  j ƒ  |  _ |  j
 j d |  j ƒ j ƒ  |  _ d  |  _ d |  _ |  j ƒ  \ |  _ |  _ |  j |  _ t j j d |  d | ƒ |  _ |  j ƒ  \ |  _ |  _ |  j |  _ |  ` |  ` |  ` |  `
 |  ` d  S(   NR+   iÿÿÿÿR4   R5   (   R6   R7   R   R8   R9   R:   R;   R   R<   R=   R>   R?   R@   RA   Ri   RM   RI   t   real_space_targetRO   RP   RQ   RR   R   RS   R   RT   RU   RV   RW   RX   RY   (   RZ   R6   R7   R   R8   R:   R9   R[   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR]   �   s0    						!		c         C   s›  |  j  d k r. |  j  d 7_  |  j |  j f S|  j  d 7_  t j |  j ƒ |  _ t j d |  j	 d |  j
 d |  j d t j |  j j ƒ  t ƒ ƒ } | |  _ t j d |  j	 d |  j
 d |  j d |  j d t j |  j j ƒ  t ƒ ƒ } | |  _ | |  j 9} | |  j 9} |  j d  k r+| } | } n` |  j j |  j |  j ƒ |  j j d |  j d t ƒ } | | j } | | j j d	 |  j ƒ } | | j ƒ  f S(
   Ni    i   R   R   R   R   R   R_   R+   (   RO   RQ   RR   R   t   vec3_doubleRM   Rb   R   R   R   R   R   R   R   Rr   t   real_space_gradients_simpleR9   R   R:   R8   RI   R>   Rc   R@   Rd   Rg   Re   RA   Ri   (   RZ   R   Rj   Rk   Rl   Rm   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRP   ²   s:    												(   Ro   Rp   R]   RP   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRq   �   s   	#c         C   s”   | j  j ƒ  } |  j ƒ  j ƒ  } | j ƒ  j ƒ  } | j d | ƒ j ƒ  } t j | ƒ }	 t	 j
 d | d | d |	 d t j |	 j ƒ  t ƒ ƒ }
 |
 S(   NR+   R   R   R   R   (   R;   R   R<   R=   R?   RA   Ri   R   Rs   R   R   R   R   R   (   R6   R7   R   R8   R:   R   R>   R@   RM   Rb   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   compute_functional_liteÒ   s    	c         C   s¹   | j  ƒ  } | d  k	 rF | j d | j  ƒ  j ƒ  ƒ j t ƒ rF d  Sn  |  j d | j d | j  ƒ  j ƒ  d | j  ƒ  j	 ƒ  ƒ } | d  k r� d  S| j
 d  k	 r¢ d  S| j d  k rµ d  S| S(   NR+   t   comp_idt
   atom_namesR   (   R<   RI   RA   R?   t   all_eqt   Falset   rotamer_iteratort   resnamet   extract_nameR=   t   problem_messaget   rotamer_info(   t   mon_lib_srvR7   t   atom_selection_boolR<   Rz   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   get_rotamer_iteratorã   s     			c	      
      s:  d }	 d }
 d } t  j j } ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡	 f d †  ‰ ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡	 f d †  ‰ ‡ ‡ ‡ f d †  } x�ˆ j ƒ  D]�} xx| j ƒ  D]j} xa| j ƒ  j ƒ  D]M‰ | ˆ j ƒ d k rÜ |	 d 7}	 q´ t d |  d ˆ d	 | ƒ } | d  k r|
 d 7}
 q´ d  } d
 ‰	 | s=t
 d ˆ	 d | ƒ  ƒ } n  | d 7} x„ | D]| \ } } ˆ j ƒ  j d | ƒ | j ‰	 t
 d | j d | ƒ  ƒ } | d  k r©| } n  | j j | j j k rN| } qNqNWˆ j ƒ  Gd G| j GHˆ j ƒ  j d | j j ƒ Hq´ Wq› Wqˆ Wd G| GHd G|
 GHd G|	 GHHt j j ƒ  d  S(   Ni    c             sY   t  d ˆ d ˆ d ˆ  d ˆ d ˆ d ˆ d ˆ ƒ }  ˆ j ƒ  Gd ˆ |  j |  j f GH|  S(	   NR6   R7   R   R8   R:   R9   R[   s!   constr. refined(%s): %.6g -> %.6g(   R*   t   id_strRS   RY   (   t   refined(   R   R8   R[   R6   R9   R:   R7   t
   rotamer_id(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   refine_constrained  s    	c             sY   t  d ˆ d ˆ d ˆ  d ˆ d ˆ d ˆ d ˆ ƒ }  ˆ j ƒ  Gd ˆ |  j |  j f GH|  S(	   NR6   R7   R   R8   R:   R9   R[   s    restr. refined(%s): %.6g -> %.6g(   Rq   R‚   RS   RY   (   Rƒ   (   R   R8   R[   R6   R9   R:   R7   R„   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   refine_restrained  s    	c              s#   ˆ j  ƒ  j d ˆ  ƒ  j ƒ ˆ ƒ  S(   Nt   new_xyz(   R<   t   set_xyzRb   (    (   R…   R†   R7   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   refine  s    t   common_amino_acidi   R   R7   R€   t   as_givenR„   Rƒ   R‡   s   best rotamer:s%   number of amino acid residues scored:s&   number of amino acid residues ignored:s   number of other residues:(   t   iotbxt   pdbt   common_residue_names_get_classt   modelst   chainst   only_conformert   residuesR{   R�   RI   R	   R<   Rˆ   t   idRƒ   RY   R‚   R„   Rb   t   syst   stdoutt   flush(   R   R   R6   R8   R€   R:   R9   R[   t   force_rotamert   n_other_residuest   n_amino_acids_ignoredt   n_amino_acids_scoredt	   get_classR‰   t   modelt   chainRz   t   bestt   rotamert   rotamer_sites_cartt   trial(    (
   R   R8   R[   R6   R9   R:   R…   R†   R7   R„   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   rotamer_score_and_choose_bestõ   sN    
$$	
					c         C   s1  t  ƒ  } | j ƒ  } t j j } t j j j ƒ  } |  j d | j	 j
 d | j	 j ƒ } | j ƒ  }	 t d | j d d d |  d | ƒ }
 d } d } d } |  j j } x…| j ƒ  D]w} xn| j ƒ  D]`} xW| j ƒ  j ƒ  D]C} | | j ƒ d	 k r| d
 7} qÞ t d | d | d |
 ƒ } | d  k r:| d
 7} qÞ d  } d  } | d
 7} x¢ | D]š \ } } | j ƒ  j d | ƒ t d | j d t d | d | d |	 d | d | j ƒ ƒ } | d  k rÐ| } | } n  | j | j k rW| } | } qWqWW| j ƒ  Gd G| j  GH| j ƒ  j d | ƒ qÞ WqÅ Wq² Wd  S(   Nt   params_editst   params_removet   scope_extractt   attrt   atom_selectiont   processed_pdb_filet   work_paramsi    RŠ   i   R   R7   R€   R‡   R„   R   R6   R   R8   R:   s   best rotamer:(!   t   get_master_philt   extractRŒ   R�   RŽ   t   mmtbxt   monomer_libraryt   serverR8   t   geometry_restraintst   editst   removet   real_mapt   get_atom_selection_boolR¢   t   all_chain_proxiesR6   R�   R�   R‘   R’   R{   R�   RI   R<   Rˆ   R	   R“   Ru   R:   R   R‚   R„   (   R¨   t   fft_mapt   d_maxt   d_mint   master_philR©   R›   R   t   grmR   R€   R˜   R™   Rš   R6   Rœ   R�   R7   Rz   Rž   t   best_sites_cartRŸ   R    R¡   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   get_best_rotamerB  s`    					
	sq   real_space_target_weight = 10
  .type = float
real_space_gradients_delta_resolution_factor = 1/3
  .type = float
sš  finishing_geometry_minimization
{
  cycles_max = 100
    .type = int
  first_weight_scale = 0.1
    .type = float
  cycle_weight_multiplier = 1.0
    .type = float
  superpose_cycle_end_with_cycle_start = False
    .type = bool
  dihedral_restraints = False
    .type = bool
  output_file = Auto
    .type = str
}
real_space_target_weights {
  first_sample = 10
    .type = float
  sampling_step = 30
    .type = float
  number_of_samples = 10
    .type = int
  bond_rmsd_target = 0.03
    .type = float
  worst_acceptable_bond_rmsd {
    pool_size = 10
      .type = int
    max_pool_average = 0.1
      .type = float
  }
}
lbfgs_max_iterations = 500
  .type = int
s^  coordinate_refinement {
  run = False
    .type = bool
  atom_selection = Auto
    .type = str
  compute_final_correlation = True
    .type = bool
  home_restraints
    .multiple = True
  {
    selection = None
      .type = str
    sigma = 0.05
      .type = float
    slack = 0
      .type = float
  }
  %(coordinate_refinement_export_phil_str)s
}
c           C   s#   t  j j d d t t f d t ƒ S(   Nt   input_stringsê  atom_selection = None
  .type = str
strict_processing = True
  .type = bool

map {
  coeff_labels {
    f = 2FOFCWT,PH2FOFCWT
      .type = str
    phases = None
      .type = str
    weights = None
      .type = str
  }
  std_dev_weight_coeff_labels {
    f = None
      .type = str
    phases = None
      .type = str
    weights = None
      .type = str
  }
  low_resolution = None
    .type = float
  high_resolution = None
    .type = float
  grid_resolution_factor = 1/3
    .type = float
}

output_file = Auto
  .type = str
final_geo_file = Auto
  .type = str

%s
local_standard_deviations_radius = None
  .type = float
weight_map_normalization = *fourier sigma
  .type = choice
weight_map_scale_factor = None
  .type = float

%s

rotamer_score_and_choose_best {
  run = False
    .type = bool
  atom_selection = Auto
    .type = str
  lbfgs_max_iterations = 50
    .type = int
  output_file = Auto
    .type = str
}

include scope mmtbx.monomer_library.pdb_interpretation.grand_master_phil_str
t   process_includes(   RŒ   t   philt   parset   real_space_params_phil_strt%   coordinate_refinement_params_phil_strR   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRª   ¼  s    ;c            s–  ‡  f d †  } ‡  ‡ f d †  } ˆ j  d  k rP | sL | d d d d ƒ n  d  S| d ˆ j  ƒ } | d  k r„ | d d d d ƒ n  | j ƒ  s  ˆ j d  k	 r¿ˆ j d  k rÅ | d d d d	 ƒ n  | d ˆ j ƒ } | d  k rù | d d
 d d	 ƒ n  | j ƒ  r9| j ƒ  j d ƒ r9t d ˆ j d d	 ƒ ƒ ‚ n  | j	 d | ƒ \ } } | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  k r¤t d | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  ƒ ‚ n  | j d | d t ƒ } n  ˆ j d  k	 r’| d ˆ j ƒ }	 |	 d  k r| d d d d ƒ n  | j	 d |	 ƒ \ } }
 | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  k rmt d | j
 ƒ  j ƒ  | j
 ƒ  j ƒ  ƒ ‚ n  | j d |
 j ƒ  | j ƒ  ƒ } n  | S(   Nc            s‘   x0 ˆ  D]( } d j  | j ƒ  j ƒ |  k r | Sq Wd  } xQ ˆ  D]I } d j  | j ƒ  j ƒ j ƒ  |  j ƒ  k r@ | d  k	 r€ d  S| } q@ q@ W| S(   Nt   ,(   t   joint   infoR0   RI   t   lower(   R0   t   miller_arrayt   matching_array(   t   miller_arrays(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   findü  s    *c            sl   |  d ˆ j  d | ƒ d g } x1 ˆ  D]) } | j d d j | j ƒ  j ƒ ƒ q& Wt d j | ƒ ƒ ‚ d  S(   Ns	     %s = %st   object_names     List of available labels:s       %sRÂ   s   
(   t   __phil_path_and_value__R   RÃ   RÄ   R0   R   (   t	   msg_introt   namet   msgRÆ   (   RÈ   t   params(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   raise_sorry  s    	'RÌ   s   Missing assignment:RÍ   Rk   R0   s   Cannot find map coefficients:t   phasess#   Cannot find map coefficient phases:i    s3   All Hendrickson-Lattman coefficient zero:
  %s = %sRÊ   t   others,   Number of missing map coefficient phases: %dt   phase_sourcet   degs$   Cannot find map coefficient weights:t   weightss-   Number of missing map coefficient weights: %dt   data(   i    i    i    i    (   Rk   RI   t   is_complex_arrayRÑ   t   is_hendrickson_lattman_arrayRÖ   Rx   R   RË   t   common_setsR+   R   t   phase_transferR   RÕ   t   customized_copy(   RÏ   t   optionalRÈ   RÉ   RÐ   Rk   RÑ   t   cft   cpRÕ   t   cw(    (   RÈ   RÏ   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   extract_map_coeffsû  sP    $)
$)%t   home_restraintsc           B   s    e  Z d  d d g Z d „  Z RS(   t
   iselectiont   weightt   slackc         C   s   | |  _  | |  _ | |  _ d  S(   N(   Râ   Rã   Rä   (   RZ   Râ   Rã   Rä   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR]   :  s    		(   Ro   Rp   t	   __slots__R]   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRá   6  s   c         C   sØ   g  } xË |  D]Ã } | j  } | d  k s | d k r: q n  | j j d d  d | d d d t d t ƒ } | d  k	 r | j } | d  k s” | d k r� d } n  | j t d | j	 ƒ  d	 d
 | d d | ƒ ƒ q q W| S(   Ni    t   cacheR¥   R¦   R   t
   allow_nonet
   allow_autoRâ   Rã   i   i   Rä   (
   t   sigmaRI   R´   t   phil_atom_selectionR   Ry   Rä   R   Rá   Râ   (   R©   R¨   R!   RÏ   Ré   t   bselRä   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   process_home_restraints_params?  s$    				+t    geometry_restraints_manager_plusc           B   s›   e  Z d  d d d d d d d d d	 d
 g Z d d d d „ Z d „  Z d „  Z d „  Z d d e d e e d „ Z	 d d d d d „ Z
 d d d „ Z RS(   t   managert   home_sites_cartt   home_restraints_listt   home_dihedral_proxiesR;   t   pair_proxiest   angle_proxiest   dihedral_proxiest   site_symmetry_tablet   plain_pair_sym_tablet   plain_pairs_radiusc         C   s|   | |  _  | |  _ | |  _ | |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j |  _ | j	 |  _	 | j
 |  _
 d  S(   N(   Rî   Rï   Rð   Rñ   R;   Rò   Ró   Rô   Rõ   Rö   R÷   (   RZ   Rî   Rï   Rð   Rñ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR]   b  s    				c         C   sz  |  j  j d  k	 r' |  j  j j ƒ  } n d  } d d l m } d } d } t j j } xm |  j	 D]b } | | d | j
 d | j d | d |  j d | j d	 | j d
 | j ƒ 7} | | j j ƒ  7} q_ W| | _ | | _ | j | 7_ | j | 7_ t j j d | j
 d |  j d | j ƒ } |  j d  k	 r@t |  j ƒ } n d } | | _ | | _ | j | 7_ | j | 7_ d  S(   Niÿÿÿÿ(   t   bondi    R   Re   t   site_symmetry_table_indicesRï   Râ   Rã   Rä   t   proxiest   gradient_array(   Rî   Rõ   RI   R+   t   cctbx.geometry_restraintsRø   t   cctbxR¯   t0   home_restraints_summation_skip_special_positionsRð   R   Re   Rï   Râ   Rã   Rä   R   t   n_home_restraintst   home_restraints_residual_sumt   number_of_restraintst   residual_sumt   dihedral_residual_sumRñ   t   lent   n_dihedral_restraintst    dihedral_restraints_residual_sum(   RZ   t   energies_objRù   Rø   t   n_restraintst   r_sumt   hr_summationt   hr(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   energies_addt  s@    												c         C   s"   | | d | j  | j f IJd  S(   Ns+     home_restraints_residual_sum (n=%d): %.6g(   Rÿ   R   (   RZ   R  Rk   t   prefix(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   energies_show™  s    
c         C   s"   | | d | j  | j f IJd  S(   Ns/     dihedral_restraints_residual_sum (n=%d): %.6g(   R  R  (   RZ   R  Rk   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   dihedral_energies_showž  s    
c         C   s@   |  j  j d | d | d | d | d | d | d | d |  g ƒ S(	   NR   t   flagst   custom_nonbonded_functionR_   Re   t   disable_asu_cachet   normalizationt   extension_objects(   Rî   Rd   (   RZ   R   R  R  R_   Re   R  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRd   £  s    c      	   C   s%   |  j  j d | d | d | d | ƒ S(   NR  R   t   site_labelsRk   (   Rî   t   show_sorted(   RZ   R  R   R  Rk   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR  µ  s
    c         C   s   |  j  j d | d | ƒ S(   NR   Râ   (   Rî   RA   (   RZ   R   Râ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRA   À  s    N(   Ro   Rp   Rå   RI   R]   R  R  R  Ry   Rd   R  RA   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRí   S  s8   		%		c   
      C   sá   t  ƒ  } | j ƒ  } t j j j ƒ  } |  j d | j j d | j j ƒ } | j	 ƒ  } | | j
 }	 t d | d | d |  j j d | d t d | j d	 d
 d |  d | ƒ d | j d |	 d t j j d | j j ƒ d t ƒ 	d  S(   NR£   R¤   R   R   R6   R8   R€   R¥   R¦   R§   R¨   R©   R:   R9   R[   t   max_iterationsR—   (   Rª   R«   R¬   R­   R®   R8   R¯   R°   R±   R²   t,   real_space_gradients_delta_resolution_factorR¢   R´   R6   R³   R:   R   RT   t   termination_parameterst   lbfgs_max_iterationsR   (
   R¨   Rµ   R¶   R·   R¸   R©   R   R¹   R   R9   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   fit_rotamers_simpleÃ  s.    					c         C   sš   g  } | j  j d d  d |  d d d t d t ƒ } | d  k sK | t k	 rO | St | ƒ d k r’ | j | j  j d d  d | d d d t ƒ ƒ n  | d S(   NRæ   R¥   R¦   R§   Rç   Rè   i    (   R´   Rê   RI   R   R   R  R   (   R¥   R¦   R¨   R©   t    common_atom_selection_bool_cacheR!   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR³   â  s"    	c         C   sH   t  j |  ƒ } | j d ƒ s- | j d ƒ r: | d  } n  | | 7} | S(   Ns   .pdbs   .entiüÿÿÿ(   t   opt   basenamet   endswith(   t   input_pdb_file_namet
   new_suffixR!   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   compose_output_file_nameú  s    
c         C   sy   |  d  k	 ru |  t k r0 t d | d | ƒ }  n  | j j } d t |  ƒ GHt j j ƒ  | j	 d |  d | j
 ƒ Hn  d  S(   NR   R!  s   Writing file: %st	   file_nameR;   (   RI   R   R"  R´   R6   R   R”   R•   R–   t   write_pdb_fileR;   (   R#  R   R¨   R¹   R!  R6   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt	   write_pdb  s    	
c         C   sZ  | d  k r t ƒ  } n  t d | j d d d |  d | ƒ } t d | j j d |  ƒ }	 | j j sl d  }
 nB |  j d t ƒ j	 ƒ  }
 | d  k rŸ |
 j
 ƒ  }
 n |
 j | ƒ }
 | d  k rÃ d  } n* | j ƒ  | j ƒ  k sá t ‚ | j ƒ  } t d |  j j d | d	 | d
 | j ƒ  d | d | d |	 d |
 d | j ƒ  d | j ƒ  d | d | d | ƒ S(   NR¥   R¦   R§   R¨   R©   t   show_summaryt	   pdb_atomsR8   t   selection_variableR   R9   Rð   t   work_scatterersR   R·   t
   weight_mapt   write_pdb_callbackt   log(   RI   R   R³   t   coordinate_refinementRì   Rá   t   compute_final_correlationt   xray_structureRy   t
   scatterersR%   RA   t   n_realRN   R²   t   run_coordinate_refinementR´   R'  R   R·   (   R¨   R8   Rµ   R9   R©   t   std_dev_weight_fft_mapR+  R,  R€   Rð   R)  R*  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt    run_coordinate_refinement_driver  sF    	 						c   -      C   sû  | | g j  d  ƒ d k s! t ‚ | d  k r9 t ƒ  } n  | d  k	 rl |	 d  k	 sW t ‚ |
 d  k	 sl t ‚ n  d  } | d  k	 r¬ | j ƒ  } g  | D] } | j ƒ  ^ q‘ } n | } d  } t d |  d | d | ƒ } | d IJ| j d | ƒ j d | ƒ | J| j	 ƒ  | j
 j } | j d  k r1| j g } n0 g  t | j ƒ D] } | j | | j ^ qA} t j j d | j
 j ƒ } t j j d	 t ƒ } g  } x“| D]‹} t j j d | d
 | d | d | d | d | d | d | j d | j d | d | ƒ } | d | IJ| j d | j ƒ j d | ƒ | j ƒ  j } | j d d d | j d | d | d d d d ƒ | J| d I| j IJ| d | j  IJ| d | j! IJ| j" d | j ƒ } t# j$ | ƒ } | j% t# j& | ƒ d t ƒ} | j' } t# j( | | j)  d  ƒ | j* k  }  | j+ ƒ  d  k r6t# j, | ƒ d! }! n d  }! | j- |! ƒ | d" |! IJ| d  k rld  }" nH t j. d# |	 d$ |
 d% | d | j/ d& t# j0 | j/ j+ ƒ  d ƒ d' | ƒ }" t$ | j1 |! ƒ }# | d  k sò| j2 |# k r%|  sò| j3 r%t4 d( | d) | d* |  d+ |# d, |" d | j ƒ } n  | JqžW| d  k	 r÷| d- IJ| d. IJx1 t5 | | ƒ D]  \ }$ }% | d/ |$ |% f IJq]W| d0 | j6 IJ| d1 | j7 j! IJ| j8 d  k	 rÉ| d2 | j8 IJn  | J| d  k	 rï| j9 d3 | j ƒ n  | d  k	 r| d4 d5 ƒ n  | j
 j: }& |& j; d  k	 râ|& j; d  k râ| d6 | j6 IJ| j d | j ƒ j d | d d ƒ | d7 IJ| d8 IJ| d9 IJd  }' | j6 |& j< } | j7 j j= ƒ  } x-t |& j; ƒ D]}( t j j d | d
 | d | d | d: t> j? j@ j@ d; t d< |& jA ƒ d | d | d | j d | j d | d | ƒ }) | jB |) j ƒ }* | d= | |) j |* f IJ|' d 7}' | |& jC 9} |* d> k  rŒPn  |& jD rÎt jE jF jG d? | j7 j d@ |) j ƒ }+ |+ jH ƒ  |) _ n  |) j j= ƒ  } qÁW| dA |' IJ| j d |) j ƒ j d | d d ƒ | d  k r)d  }, nV t j. d# |	 d$ |
 d% | d |) j/ d& t# j0 |) j/ j+ ƒ  d ƒ d' | ƒ }, | dB |, IJ| J|) | _I |, | _J | d  k	 r·| j9 d3 |) j ƒ n  |) j | _ | d  k	 rô| d4 dC ƒ qôq÷d  | _I d  | _J n  | S(D   Ni   Rî   Rï   Rð   s   Before coordinate refinement:R   Rk   R  t-   ignore_line_search_failed_step_at_lower_boundR   R*  R(  R8   R:   R9   t    local_standard_deviations_radiust   weight_map_scale_factorR[   t   lbfgs_exception_handling_paramss?   After coordinate refinement with real-space target weight %.1f:t   by_valuet   residualR  R  s     t	   max_itemsi   s!     number_of_function_evaluations:s     real+geo target start: %.6gs     real+geo target final: %.6gt   reversei    g      à?s     Bond RMSD: %.3ft   large_unit_cellt   large_d_mint   large_density_mapt
   site_radiiR)  t   rstwRƒ   t
   acceptablet	   rmsd_difft	   region_ccs1   Table of real-space target weights vs. bond RMSD:s     weight   RMSDs     %6.1f  %5.3fs#   Best real-space target weight: %.1fs$   Associated refined final value: %.6gs#   Associated region correlation: %.4fR‡   t	   situationt   after_best_weight_determinations/   As previously obtained with target weight %.1f:s*   Finishing refinement to idealize geometry:s               number of functions*       weight     evaluations      cycle RMSDt   energies_sites_flagst   defaultt   dihedrals       %6.1f     %10d          %6.3fg-Cëâ6?t   reference_sitest   other_sitess*   After %d refinements to idealize geometry:s%     Associated region correlation: %.4ft   after_finishing_geo_min(K   t   countRI   RN   R   R=   R‚   Rí   Rd   t   showR–   R-  t   real_space_target_weightst   number_of_samplesR:   R&   t   first_samplet   sampling_stepR   RT   R  R  t   exception_handling_parametersR   R   t   real_space_refinement_simpleR6  R7  R   Rò   t   bond_proxiesR  RO   RQ   RW   t   deltasR   t   absRA   t   sort_permutationt   worst_acceptable_bond_rmsdt   mean_defaultt	   pool_sizet   max_pool_averageR   t   mean_sqR   t   region_density_correlationt   sites_cart_variableR$   t   bond_rmsd_targetRC  RB  R	   t   zipRA  Rƒ   RD  Rˆ   t   finishing_geometry_minimizationt
   cycles_maxt   first_weight_scaleR%   Rý   R¯   R  t   dihedral_restraintst   rms_differencet   cycle_weight_multipliert$   superpose_cycle_end_with_cycle_startt   matht	   superposet   least_squares_fitt   other_sites_best_fitt   fgm_refinedt   fgm_region_cc(-   R8   R(  R   R9   R©   R'  R   Rð   R)  R   R·   R*  R+  R,  t	   best_infot   sites_cart_startt   atomR  t   grmpt   rstw_paramst	   rstw_listR   R[   R8  t   bond_rmsd_listRA  Rƒ   RU  RV  t
   deltas_abst   deltas_abs_sortedt   wabr_paramsRB  t	   bond_rmsdRD  RC  t   wt   dt
   fgm_paramst   number_of_fgm_cyclest   i_cycleRm  t
   cycle_rmsdt   fitRn  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR2  D  sV   ! "	

-						
						





			
								c   "         sk  ˆ d  k r t j ‰ n  t j j d d ƒ } t ƒ  } d d  l } | j j d |  d | d dM ƒ } | j	 d
 | d ƒ } | j
 ƒ  ˆ Jˆ d IJˆ J| j ƒ  ‰ t | d ƒ d k s½ t ‚ | d d j j ƒ  } t d | d ˆ j j d t ƒ ‰ t d | d ˆ j j d t ƒ } ~ t j j j ƒ  }	 t j j j ƒ  }
 x\ | d	 D]P } ˆ d t | j ƒ IJx0 |	 |
 g D]" } | j d | j d | j ƒ qrWqHWt | d	 ƒ d k r¹ˆ Jn  t | d ƒ d k sÕt ‚ | d d } | j ‰ ˆ d IJˆ j ƒ  j d d ƒ | j j ƒ  } | d  k	 rZ| j ˆ j ƒ  ƒ rZˆ d IJ| j d d ƒ n  ˆ Jt j j  j! d |	 d |
 d ˆ j  d | j d | j d ˆ j" d t d ˆ j ƒ  d  t d! t j ƒ 
‰ ˆ j" r÷ˆ j# j$ ƒ  } | d  k	 r÷t% | ƒ ‚ q÷n  ˆ j& d" ˆ j' j( d# ˆ j' j) ƒ ‰  ˆ Jt j j* ƒ  ‡ ‡ f d$ †  } | d% ƒ ˆ } ˆ j j+ } ˆ j j, } ˆ j- ƒ  \ } } dN \ } } | d  k	 r³| | k  r³| } ˆ d& | IJn  | d  k	 râ| | k râ| } ˆ d' | IJn  | d  k	 sú| d  k	 rbˆ j. d( | d) | ƒ ‰ | d  k	 r9| j. d( | d) | ƒ } n  | d  k	 rN| } n  ˆ Jt j j* ƒ  n  ˆ | k	 r{| d* ƒ n  ˆ j/ d) | d+ ˆ j j0 ƒ } | j1 ƒ  d  } | d  k	 rt2 j/ d, | d- | ƒ } ˆ j3 d. k ré| j4 ƒ  qˆ j3 d/ k r| j1 ƒ  qˆ j3 d  k st ‚ n  | ˆ j5 } ˆ d0 | IJˆ Jt j j* ƒ  ˆ j6 j7 rüt6 d |	 d1 | j8 ƒ  d2 ˆ j# j9 d3 ˆ  d4 t: d5 ˆ j6 d6 d7 d8 ˆ d9 ˆ ƒ d: ˆ j; d; | d< t< j= j> d= ˆ j6 j? ƒ ƒ t@ d ˆ j6 jA d> ˆ d8 ˆ d? ˆ  d@ dA ƒ n  d  } ˆ jB j7 re‡  ‡ ‡ ‡ f dB †  } tC d8 ˆ d3 ˆ  dC | dD | d; | d9 ˆ dE | d! t j ƒ } n( t@ d ˆ jA d> ˆ d8 ˆ d? ˆ  d@ dF ƒ ˆ jD } | d  k	 rS| tE k rÆtF d> ˆ d@ dG ƒ } n  ˆ j# jG } | jH ƒ  } g  | D] } | jI ƒ  ^ qå}  ˆ dH t | ƒ IJt j j* ƒ  tJ | dI ƒ }! ˆ  jK dJ | dK |  dL |! ƒ ~! ˆ Jn  | ƒ  t j j* ƒ  | S(O   Nt
   time_startt   nowiÿÿÿÿt   argsR¸   t   input_typest   mtzR�   t   cift   sourcesR¾   s   #phil __OFF__i   i    RÈ   RÏ   RÜ   s   Processing CIF file: %st
   cif_objectR#  s!   Crystal symmetry (from map file):R  s     s4     NOTE: Crystal symmetry from PDB file is different:s       Ignored: R   t   ener_libt   pdb_inpt   strict_conflict_handlingt6   substitute_non_crystallographic_unit_cell_if_necessaryR;   t   force_symmetryR,  R£   R¤   c            sz   ˆ  d |  IJˆ j  d t ƒ ˆ j ƒ  j ƒ  d k rI ˆ j  d d ƒ n  ˆ j d t ƒ j d d ƒ ˆ  Jt j j ƒ  d  S(   Ns$   Completeness of %s map coefficients:t   auto_binningi   t   n_binst   use_binningR  s     (	   t   setup_binnerR   t   binnert   n_bins_usedt   completenessRN  R”   R•   R–   (   t
   annotation(   R,  t
   map_coeffs(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   show_completenessW  s    t   inputs>   Applying low resolution cutoff to map coefficients: d_max=%.6gs?   Applying high resolution cutoff to map coefficients: d_min=%.6gR¶   R·   t   finalt   resolution_factort   crystal_griddingt   fourier_coefficientst   fourierRé   s    real_space_gradients_delta: %.6gR   R6   R8   R€   R¥   R¦   R§   R¨   R©   R:   R9   R[   R  R   R¹   R!  s)   _lockit_rotamer_score_and_choose_best.pdbc            s~   |  d k r7 t  d ˆ j d ˆ d ˆ d ˆ  d d ƒ nC |  d k rt t  d ˆ j j j d ˆ d ˆ d ˆ  d d	 ƒ n t ‚ d  S(
   NRF  R#  R   R¨   R¹   R!  s   _lockit_best_weight.pdbRL  s   _lockit_finishing_geo_min.pdb(   R%  t   output_fileR-  Rb  RN   (   RE  (   R¹   R   R¨   R©   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyR+  «  s    	

Rµ   R3  R+  s   _lockit_best_weight.pdbs   _lockit_final.geos   Writing file: %sRz  R   R  Rk   (   R…  s   pdbR†  (   NN(L   RI   R”   R•   t   libtbxt   utilst
   show_timesRª   t   iotbx.utilst   process_command_line_inputst   fetchRN  R«   R  RN   t   file_contentt   as_miller_arraysRà   t   mapt   coeff_labelsRy   t   std_dev_weight_coeff_labelsR   R¬   R­   R®   R‰  R   R#  t   process_cif_objectR;   R&  t   is_similar_symmetryt   pdb_interpretationt   processt   strict_processingR´   t   fatal_problems_messageR   R8   R¯   R°   R±   R–   t   low_resolutiont   high_resolutiont	   d_max_mint   resolution_filterRµ   t   grid_resolution_factort   apply_sigma_scalingR   t   weight_map_normalizationt   apply_fourier_scalingR  R¢   RU   R²   R6   R³   R:   R   RT   R  R  R%  Rž  R-  R4  t   final_geo_fileR   R"  R'  R=   R‚   t   openR  ("   Rƒ  R,  R¡  R¸   RŒ   t   input_objectst	   work_philRÈ   t   std_dev_weight_coeffsR   R‰  t   file_objt   srvt   pdb_crystal_symmetryRÎ   R—  t   map_coeffs_inputt   low_rest   high_resR¶   R·   t   d_max_applyt   d_min_applyRµ   R3  R9   Ro  R+  R#  R'  R   Rq  R  Rk   (    (   R¹   R   R,  R–  R¨   R©   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyRU     sT   		

					

						


				
					
		t   __main__Rƒ  i   R,  (=   t
   __future__R    t(   mmtbx.monomer_library.pdb_interpretationR¬   t	   iotbx.mtzRŒ   t
   iotbx.philt   libtbx.philRŸ  Rý   R   R   t)   cctbx.maptbx.real_space_refinement_simplet   cctbx.geometry_restraints.flagst   cctbx.array_familyR   t   scitbx.rigid_bodyR   t   scitbx.graph.tardy_treet   scitbx.lbfgst   scitbx.math.superposeR   t   libtbx.str_utilsR   t   libtbx.utilsR   R   R   R	   R”   t   ost   pathR  R)   t   objectR*   Rq   Ru   R�   Ry   R¢   R»   RÀ   t%   coordinate_refinement_export_phil_strt   varsRÁ   Rª   Rà   Rá   Rì   Rí   R  R³   R"  R%  RI   R4  R2  RU   Ro   t   argv(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/lockit.pyt   <module>   sl   	ZE		D	>$	?	;		p				-ºÖ