ó
Ì™xTc           @   sj  d  d l  m Z d  d l Z d  d l m 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 m Z d  d l Z d  d	 l m Z d  d
 l m Z m Z d  d l m Z d a e d „ Z e j j d ƒ Z e j j d ƒ Z e j j d ƒ Z  e j j d ƒ Z! d e" f d „  ƒ  YZ# d e" f d „  ƒ  YZ$ d e" f d „  ƒ  YZ% d S(   iÿÿÿÿ(   t   divisionN(   t   minimization(   t   print_statistics(   t   utils(   t   tools(   t   adptbx(   t   flex(   t   approx_equal(   t   adopt_init_argst   Auto(   t   user_plus_sys_timeg        c         C   sI   |  d  k r t j }  n  t } | d k rE |  d IJ|  d t IJn  | S(   Ng{®Gáz„?s   ADP refinement:s3     time spent in adp_refinement.py          = %-7.2f(   t   Nonet   syst   stdoutt   time_adp_refinement_py(   t   outt   total(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyt
   show_times   s     
s¤    number_of_macro_cycles   = 3
    .type = int
    .expert_level = 1
  max_number_of_iterations = 25
    .type = int
    .expert_level = 1
  convergence_test         = False
    .type = bool
    .expert_level = 3
  run_finite_differences_test = False
    .type = bool
    .expert_level = 3
  use_restraints = True
    .type = bool
    .expert_level = 0
  restraints_weight = None
    .type = float
    .expert_level = 0
s1    one_residue_one_group       = None
    .type = bool
    .style = tribool
  refine_T                    = True
    .type = bool
  refine_L                    = True
    .type = bool
  refine_S                    = True
    .type = bool
  number_of_macro_cycles      = 2
    .type = int
  max_number_of_iterations    = 25
    .type = int
  start_tls_value             = None
    .type = float
  run_finite_differences_test = False
    .type = bool
    .help = Test with finite differences instead of gradients.  FOR       DEVELOPMENT PURPOSES ONLY.
    .expert_level = 3
  eps                         = 1.e-6
    .type = float
    .help = Finite difference setting.
    .expert_level = 3
  min_tls_group_size = 5
    .type = int
    .help = min number of atoms allowed per TLS group
  verbose = True
    .type = bool
s¹     iso {
    max_number_of_iterations = 25
      .type = int
    scaling {
      scale_max       = 3.0
        .type = float
      scale_min       = 10.0
        .type = float
    }
  }
s‡    iso {
    use_u_local_only = False
      .type = bool
    sphere_radius = 5.0
      .type = float
    distance_power = 1.69
      .type = float
    average_power = 1.03
      .type = float
    wilson_b_weight_auto = False
      .type = bool
    wilson_b_weight = None
      .type = float
    plain_pairs_radius = 5.0
      .type = float
    refine_ap_and_dp = False
      .type = bool
  }
t   managerc           B   sV   e  Z d d d d e j ƒ  e j ƒ  e j ƒ  d d d d d d d d d d d  „ Z RS(   c   )      C   sú  | d  k r t j ƒ  } n  | j ƒ  j j ƒ  } t ƒ  } | d  k rQ t j } n  t	 } d } | d k r~ t
 } t | ƒ } n  | d k r“ t
 } n t	 } | rt j d d d | ƒ t j ƒ  } x | D] } | j | ƒ qÈ Wt j | j ƒ  t j | ƒ ƒ } t j ƒ  } x, | D]$ } x | D] } | j | ƒ q WqW| d k s_| j ƒ  | j ƒ  k r†g  }  xŽ | D] }! |  j |! ƒ qlWnp g  }  xg | D]_ } t j ƒ  }" x( | D]  } | | r¬|" j | ƒ q¬q¬W|" j ƒ  d k r“|  j |" ƒ q“q“Wt j ƒ  }# x |  D] }$ |# j |$ ƒ q	W| j ƒ  j j ƒ  } x" |# D] }" | |" j j t
 ƒ q<Wt j j j d | j ƒ  d |  d	 | j d
 d d d d t
 d t	 d | ƒ }% | j ƒ  j j ƒ  } x3 | D]+ }& x" |& D] }' | |' j j t
 ƒ qÎWqÁW| j d t
 d | ƒ | j ƒ  j }( | j ƒ  j d d ƒ t j  | j ƒ  j | | ƒ t j! d | j ƒ  d | d | d | d | j" d | j# d | j$ d | j% d
 | j& d | j' d | j( d | j) d | d | d | j* ƒ |  _+ | j ƒ  j d |( ƒ | j, d |  j+ j- j d t
 ƒ | j ƒ  j | _ n  | rat. d | d | d  | d! |	 d" |
 d# | d | d$ | d% | ƒ 	n  | ræt j d d& d | ƒ t j j j d | j ƒ  d | d	 | j d
 | j& d | j% d | j( d | j/ d' | j0 d t
 d | ƒ 
}% n  t1 | j2 ƒ  7a1 d  S((   Ni    g        i   t   texts   TLS refinementR   t   fmodelt
   selectionst   convergence_testt   max_number_of_iterationsi2   t   number_of_macro_cyclest
   refine_adpt   use_restraintst   logt   tlst   target_namet   ls_wunit_k1t   modelt   selections_1dt   refine_Tt   refine_Lt   refine_St   start_tls_valuet   run_finite_differences_testt   epst   macro_cyclet   verboset   xray_structuret   update_f_calct   fmodelst   target_weightst   individual_adp_paramst   adp_restraints_paramst   h_paramst
   all_paramst   nprocs   group isotropic ADP refinementt   restraints_weight(3   R   t   group_adp_master_paramst   extractt   fmodel_xrayR)   t
   scatterersR
   R   R   t   Falset   Truet   intR   t   make_sub_headerR   t   size_tt   extendt   boolt   sizet   appendt   flagst   set_use_u_isot   mmtbxt
   refinementt   groupR   R   t   set_use_u_anisot   show_groupsR   t   updateR   t   split_ut   tls_refinementR!   R"   R#   R   R   R$   R%   R&   R(   t   tls_refinement_managert   update_xray_structureR   R   R   R2   R   t   elapsed()   t   selfR+   R   R0   t   group_adp_selectionst   group_adp_selections_ht   group_adp_paramst   tls_selectionst
   tls_paramsR-   R.   t   refine_adp_individualt   refine_adp_groupt
   refine_tlst   tan_b_iso_maxt   restraints_managerR,   R'   R   R/   R1   R6   t   timert	   tan_u_isot   paramt   offsett
   tls_sel_stt   tst   tls_sel_boolt
   tmp_site_tt   gst   gs_t   gbr_selectionst   st   gbr_selectiont   gbr_selections_one_arrt   gbst   group_b_managert   tls_selection_t   tls_selection__t   current_target_name(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyt   __init__q   sÖ    	 	!$
												
							N(   t   __name__t
   __module__R   t   tls_master_paramsR4   t   individual_adp_master_paramst   adp_restraints_master_paramsRk   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyR   p   s"   			R   c           B   sS   e  Z d d  „ Z e d „ Z d d e e d „ Z d d „ Z d „  Z	 d „  Z
 RS(   c
   ,      C   s{  t  |  t ƒ  ƒ | j ƒ  j ƒ  j ƒ  }
 | d  k	 r*d d  l } | j j j	 j
 ƒ  } xW | j D]L } |
 | j k r_ |
 | j k  r_ | j } | j } | j } | j } Pq_ q_ W| j j } | j d  k	 rÖ | j } n  | j d  k	 rñ | j } n  | j d  k	 r| j } n  | j d  k	 r*| j } q*n  t j d d d | ƒ | j ƒ  j | j k s^t ‚ | j ƒ  t |  j j ƒ  j ƒ  |  j j d t ƒ j ƒ  ƒ s¡t ‚ t j ƒ  } t j ƒ  } t j ƒ  } t j ƒ  } t j ƒ  } |  j d  k	 rd } |  j | IJ|  j d IJn |  j d IJ|  j j ƒ  j j  ƒ  j! ƒ  |  _" |  j d  k	 rö|  j j# j$ |  j j# j% } |  j j& j' rÏd	 d
 d d d d d d d d d d g } t( t j | ƒ |  j j# j$ ƒ } d |  _% q|  j j# j$ g } |  j j# j% |  _% n d } d g } d |  _% |  j) d | ƒ g  } |	 d  k r?| j* j+ }	 n  t } t, | ƒ d k rÎ|	 t- k so|	 d k rÎt. } d d l/ m0 } | j1 d |	 d |  j2 d | d d ƒ } g  | D] \ }  }! |! ^ q³} n3 x0 | D]( }" |  j2 |" d t. ƒ}# | j3 |# ƒ qÕWx˜ | D]� }# |# d  k	 r|# j4 d  k	 r| rE|# j) d |  j ƒ n  | j3 |# j4 ƒ | j3 |# j5 ƒ | j3 |# j6 ƒ | j3 |# j7 ƒ | j3 |# j8 ƒ qqWt, | ƒ d k r|  j9 d | d | d  | d! | d" | d# | d$ | d% | ƒ \ } } } } } |  j9 d | d | d  | d! | d" | d# | d$ t j: | ƒ | ƒ \ } } } } } t; | t j< |  j j ƒ  j j= ƒ  t> j? d ƒ ƒ | ƒ }$ | d& |$ IJ| d' | IJ| d( | IJ|  j9 d | d | d  | d! | d" | d# | d$ |$ ƒ \ } } } } } t j@ | ƒ }% |  jA d | d | d  | d! | d" | d) |% ƒ \ } } } } } | d* }& | d* }' |  j d+ |& IJ|& |  j j# _$ d |  j j# _% d  }( d  }) x= | D]5 }# tB |# j8 |& ƒ d, k r™|# jC }( |# jD }) Pq™q™W|) d  k r|  j j ƒ  j jE |  j" jF ƒ  ƒ nn |( d  k	 st ‚ |  j j ƒ  j }* |* jG d- |) ƒ |* j! ƒ  jH |( ƒ |* j! ƒ  jI ƒ  }+ |+ jJ |) ƒ sqt ‚ |  j jK d. |  j j ƒ  j d/ t. ƒ |  j d0 IJ| j ƒ  |  j jL ƒ  d  k rýt |  j j ƒ  j4 ƒ  d1 |' d2 d3 ƒsðt ‚ | j ƒ  n  |  j) d |& ƒ n  |  j j ƒ  j jM ƒ  t |  j j ƒ  j ƒ  |  j j d t ƒ j ƒ  ƒ s_t ‚ |  j j ƒ  j |  jN _ d  S(4   NiÿÿÿÿR   s   Individual ADP refinementR   t   compute_gradientss6       R-FACTORS      <Bi-Bj>  <B>   WEIGHT       TARGETSs7    work  free  delta                           data restrs   Unresrained refinement...g¸…ëQ¸ž?g      À?g      à?g      ð?g      ø?g       @g      @g      @g      @g      @g      @g      @i   t   weight(   t   easy_mpt	   processest
   fixed_funct   argst   func_wrappert   buffer_stdout_stderrt   print_statst   rwt   rft   rfrwt   deltabt   wt   score_targett   score_target_valuet   secondary_targets+     max suggested <Bi-Bj> for this run: %7.2fs$     max allowed Rfree-Rwork gap: %5.1fs"     range of equivalent Rfree: %5.1ft   seli    s   Best ADP weight: %8.3fg:Œ0âŽyE>t   valuesR)   R*   s   Accepted refinement result:id   R&   gü©ñÒMbP?(O   R   t   localsR5   t   f_obst   d_minR   t   mmtbx.refinement.weights_paramsRC   t   weights_paramst   tw_customizations_paramsR4   t   weight_selection_criteriat   d_maxt   r_free_range_widtht   r_free_minus_r_workt   mean_diff_b_iso_bonded_fractiont   min_diff_b_iso_bondedR,   R   R:   R)   t   AssertionErrort   create_target_functorsR   R+   t   target_wt   target_functor_result_xrayR7   t   target_workR   t   doubleR   t   deep_copy_scatterersR6   t   save_scattererst   adp_weights_resultt   wxt   wx_scalet   twpt   optimize_adp_weightt   listt   showt   mainR1   t   lenR	   R8   t   libtbxRs   t   pool_mapt
   try_weightR?   t   r_workt   r_freet   r_gapt   delta_bRr   t   scoret   mint   maxt   meant   extract_u_iso_or_u_equivR   t   u_as_bt   sort_permutationt   selectt   abst   u_start   u_isot   replace_scattererst	   deep_copyt	   set_u_isot
   set_u_start   extract_u_isot   all_eqRK   t   fmodel_neutront   tidy_usR   (,   RM   R   R+   R,   R-   R.   R/   R   R0   R1   R†   RB   t   wcpt   w_s_cRŒ   t   r_free_r_work_gapRŽ   R�   t   wscRz   R{   R|   R}   R~   t   fmtht   default_weightRš   t   trial_weightst   trial_resultst   parallelRs   t   stdout_and_resultst   sot   rRr   t   resultt   delta_b_targetR‚   t   w_bestt   rw_bestt   best_u_start
   best_u_isot   xrst	   new_u_iso(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRk   ü   s    				
!*"		*			"''+!'	6

		
c         C   s¯   |  j  d  k	 rz |  j j ƒ  j j |  j j ƒ  ƒ |  j j d |  j j ƒ  j d t	 ƒ | |  j  j
 _ |  j |  j  j
 _ n  |  j ƒ  } | |  j } |  j d | d | ƒ } | S(   NR)   R*   Rr   Ry   (   R,   R   R+   R5   R)   R³   R—   R´   RK   R8   R˜   R™   Rš   t   minimizeRž   (   RM   Rr   Ry   t	   minimizedt   wtRÇ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyR£   ž  s    t    c         C   sˆ  |  j  j ƒ  } |  j j ƒ  j ƒ  d } |  j j ƒ  j ƒ  d } t j |  j  j j	 ƒ  ƒ t
 j d ƒ } | d  k r� |  j d | | f IJd  Sd  }	 }
 | rê |  j j ƒ  d  k	 rê |  j j ƒ  j ƒ  d }	 |  j j ƒ  j ƒ  d }
 n  |  j j ƒ  j } t d | d | d | d | d | d	 |  j j ƒ  j ƒ  d
 |	 d |
 d | j ƒ  j ƒ  d | j ƒ  j ƒ  ƒ 
} | r„| j d |  j ƒ n  | S(   Ng      Y@i   s     r_work=%5.2f r_free=%5.2fR¤   R¥   R§   t   mean_bRr   t   xray_targett   neutron_r_workt   neutron_r_freeR±   R²   R   (   R   t   rms_b_iso_or_b_equiv_bondedR+   R5   R¤   R¥   R   R«   R)   R¬   R   R­   R   R   R¹   t   weight_resultR’   R6   t   extract_u_starR·   Rž   (   RM   Rr   t   prefixt   show_neutronRy   R}   R¤   R¥   RÓ   RÕ   RÖ   RÍ   RÇ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRž   ¬  s6    "
c	   
      C   s`  | | k  }	 |	 | d k M}	 |	 j  t ƒ d k rs |  j d | d | d | d | d | d |	 ƒ \ } } } } } nÚ | d  k r‘ t j | ƒ }	 n t j | ƒ }	 |  j d | d | d | d | d | d |	 ƒ \ } } } } } t j | d g ƒ } t j | d g ƒ } t j | d g ƒ } t j | d g ƒ } t j | d g ƒ } | | | | | f S(   Ni    Rz   R{   R|   R}   R~   R‚   (   t   countR8   R¯   R   R   R®   R•   (
   RM   Rz   R{   R|   R}   R~   R   R€   R�   R‚   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyR¨   Ê  s     	9	6c         C   s^   | j  | ƒ } | j  | ƒ } | j  | ƒ } | j  | ƒ } | j  | ƒ } | | | | | f S(   N(   R¯   (   RM   Rz   R{   R|   R}   R~   R‚   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyR¯   à  s    c         C   s-  t  j d |  j j ƒ  j d |  j j ƒ |  j j ƒ  t j j	 d |  j
 j j ƒ } t } |  j j j d k rw t } n  t j d |  j j d |  j d |  j d t d	 | d
 | d |  j j d d d |  j d |  j ƒ 
} |  j j ƒ  j |  j _ | j |  j j k s
t ‚ t  j d | j d |  j j ƒ | S(   Nt   x1t   x2t   max_iterationst   neutronRW   R+   R   R   t   is_neutron_scat_tablet   lbfgs_termination_paramst   iso_restraintsR(   i    R,   R/   (   R   t   assert_xray_structures_equalR+   R5   R)   R   t   set_refine_individual_adpt   scitbxt   lbfgst   termination_parametersR-   t   isoR   R7   R0   RŸ   t   scattering_tableR8   R   RW   R.   R,   R/   R�   (   RM   Râ   Rá   RÐ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRÏ   è  s4    								N(   Rl   Rm   R   Rk   R7   R£   R8   Rž   R¨   R¯   RÏ   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyR   ú   s   ˜		RØ   c           B   s   e  Z d  „  Z d d „ Z RS(   c         C   s!   t  |  t ƒ  ƒ | | |  _ d  S(   N(   R   R„   R¦   (   RM   R¤   R¥   R§   RÓ   Rr   RÔ   RÕ   RÖ   R±   R²   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRk     s    RÒ   c      
   C   s±   | d  k r d  St | j ƒ  ƒ d k r5 | d 7} n  | d } | | |  j |  j |  j |  j |  j |  j |  j	 f IJ|  j
 d  k	 r­ | d IJ| d |  j
 |  j f IJn  d  S(   Ni    t    s,   %5.2f %5.2f %6.2f %6.3f  %6.3f %6.3f   %6.3fRÒ   s'   Neutron data: r_work=%5.2f r_free=%5.2f(   R   R    t   stripR¤   R¥   R¦   R§   RÓ   Rr   RÔ   RÕ   RÖ   (   RM   R   RÚ   t   format(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRž   
  s      

(   Rl   Rm   Rk   Rž   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyRØ     s   	(&   t
   __future__R    t   mmtbx.refinement.groupRB   t   mmtbx.refinementR   R   R   t	   mmtbx.tlsR   t
   iotbx.philt   iotbxt   cctbxR   t   cctbx.array_familyR   t   scitbx.lbfgsRæ   t   libtbx.test_utilsR   R¡   R   R	   t   libtbx.utilsR
   R   R   R   t   philt   parseR3   Rn   Ro   Rp   t   objectR   R   RØ   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/adp_refinement.pyt   <module>   s4   								Šÿ 