ó
E™xTc           @   sv  d  d l  m Z d  d l m 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 Z d  d l m Z d  d l Z d  d	 l m Z d  d l Z d  d l Z e j d
 ƒ e
 j d
 ƒ d e f d „  ƒ  YZ d „  Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z e d k rrd  d l  m Z e d e j! d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   xray(   t   random_structure(   t   debug_utils(   t   b_as_u(   t   flexN(   t   matrix(   t   easy_picklei    t   curv_filterc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s�   | j  | d k ƒ } t j | d d ƒ| |  _ |  j d k rU d |  _ d |  _ n t j | ƒ d |  _ d |  _ d |  _ d  S(   Ni    t   defaulti   g      à?(   t   selectR   t   max_defaultt   c_limt   c_rmst   mean_sqt   n_below_limitt   n_above_limit(   t   Ot   curvst   lim_epst   c_pos(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   __init__   s    		c         C   sg   t  j ƒ  } xT | D]L } | |  j k  rC |  j } |  j d 7_ n |  j d 7_ | j | ƒ q W| S(   Ni   (   R   t   doubleR   R   R   R   t   append(   R   t
   some_curvst   resultt   c(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   apply    s    	(   t   __name__t
   __module__R   R   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR      s   	c         C   s=  |  j  d | d d d t ƒ j ƒ  } t j d t d d d t | ƒ j ƒ  d	 | d
 d  d | j ƒ  d d d d ƒ } | j d |  j	 ƒ  d | j
 ƒ  d | j ƒ  ƒ } | j } t j ƒ  } t j ƒ  }	 d }
 | j ƒ  } xÂ t | j ƒ  ƒ D]® \ } } | j j ƒ  s	t ‚ | j j ƒ  st ‚ | j | ƒ } | j ƒ  rCd } n | j ƒ  j ƒ  } | j | |
 |
 | !ƒ |	 j | |
 | ƒ | d 7} |
 | 7}
 qè W|
 | j ƒ  k s²t ‚ t d | d | ƒ } t d |	 d | ƒ } t j ƒ  } d }
 | j ƒ  } xß t | j ƒ  ƒ D]Ë \ } } | j j ƒ  s.t ‚ | j j ƒ  sDt ‚ | j | ƒ } | j ƒ  rhd } n | j ƒ  j ƒ  } | j | j | |
 |
 | !ƒ ƒ | j | j | |
 | |
 | d !ƒ ƒ | d 7} |
 | 7}
 qW|
 | j ƒ  k sôt ‚ d | j | j | j  f GHd | j | j | j  f GHt! j" j# ƒ  | S(   Nt   xray_structuret	   algorithmt   directt   cos_sin_tablet   compute_scale_using_all_datat   obs_typet   Ft   obst   weightst   r_free_flagst   f_calct   derivatives_depthi   t   scale_factori   t   miller_indicest   da_dbt   daa_dbb_dabi    i   i   R   R   s   curv site below limit: %d of %ds    curv u_iso below limit: %d of %d($   t!   structure_factors_from_scattererst   FalseR(   R   t   targets_least_squarest   abst   datat   Nonet   grads_and_curvs_target_simplet   indicest   gradients_workt   hessians_workR   R   R   t   site_symmetry_tablet	   enumeratet
   scattererst   flagst	   use_u_isot   AssertionErrort   use_u_anisot   gett   is_point_group_1t   site_constraintst   n_independent_paramst   extendR   t   sizeR   R   R   R   t   syst   stdoutt   flush(   t   f_obsR&   R   R   R(   t   lst   gactt   c_allt   c_active_sitet   c_active_u_isot   i_allt   sstabt   i_sct   sct   site_symmetryt   npt   cf_sitet   cf_u_isoR   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   get_curvs_work+   sv    						
	!)
t   refinement_statsc           B   s,   e  Z d  d d d d d d g Z d „  Z RS(   t   itert   nfunt   ft   gnormt   crmsdt   armsdt   urmsdc         K   s,   x% |  j  D] } t |  | | | ƒ q
 Wd  S(   N(   t	   __slots__t   setattr(   R   t   kwt   slot(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR   p   s    (   R   R   R_   R   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyRW   l   s   t   ls_refinementc           B   s•   e  Z d d d d  „ Z d „  Z d „  Z d d e d ƒ d „ Z d „  Z d d	 „ Z	 d d
 „ Z
 d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   c      	   C   s‘  | |  _  t j | j ƒ  j ƒ  d ƒ |  _ | |  _ | |  _ | |  _ t	 d |  j  d |  j d |  j d |  j j
 ƒ |  _ |  j j rœ t j |  j ƒ |  _ n t j |  j j ƒ  d ƒ |  _ |  j ƒ  d |  _ d |  _ |  j ƒ  \ |  _ |  _ g  |  _ |  j d d  ƒ | j d k r=t j j d	 |  d
 | d | ƒ |  _ n8 | j d k rY|  j ƒ  n | j d k ru|  j ƒ  n  |  j ƒ  \ |  _ |  _ d  S(   Ni   RH   R&   R   R   iÿÿÿÿt	   minimizert   lbfgst   target_evaluatort   termination_paramst   exception_handling_paramst	   lbfgs_rawt   lbfgsb(    RH   R   R   R2   RD   R&   R   t   paramst   reference_structureRV   t   curv_filter_lim_epst
   curvs_workt   curvature_rescalingt   sqrtt   p_as_xt   pack_parameterst   number_of_function_evaluationst   number_of_lbfgs_iterationst    compute_functional_and_gradientst   f_startt   g_startt   historyt   callback_after_stepR3   Rd   t   scitbxRe   t   runt   run_lbfgs_rawt
   run_lbfgsbt   f_finalt   g_final(   R   RH   R   Rk   t   lbfgs_termination_paramst   lbfgs_exception_handling_paramsRl   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR   v   s:    	!						
			c         C   s¤  t  j ƒ  |  _ t  j ƒ  |  _ t  j ƒ  |  _ t  j ƒ  |  _ |  j j ƒ  } x@t	 |  j j
 ƒ  ƒ D])\ } } | j j ƒ  s‚ t ‚ | j j ƒ  s˜ t ‚ | j | ƒ } | j ƒ  r¿ | j } n | j ƒ  j d | j ƒ } |  j j t  j | ƒ ƒ |  j j |  j j ƒ  d ƒ |  j j |  j j ƒ  d ƒ |  j j |  j j ƒ  d ƒ |  j j | j ƒ |  j j d ƒ |  j j d ƒ |  j j d ƒ qa W|  j |  j 9_ d  S(   Nt
   all_paramsi    i   (   R   R   t   xt   lt   ut   intt   nbdR   R8   R9   R:   R;   R<   R=   R>   R?   R@   t   siteRA   t   independent_paramsRC   t   resizeRD   R   t   u_isoRq   (   R   RO   RP   RQ   RR   t   p(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyRr   œ   s,    "c   	      C   s  |  j  |  j } d } |  j j ƒ  } xÄ t |  j j ƒ  ƒ D]­ \ } } | j | ƒ } | j ƒ  r‰ t | | | d !ƒ | _	 | d 7} nH | j
 ƒ  } | j ƒ  } | j d t | | | | !ƒ ƒ | _	 | | 7} | | | _ | d 7} q; W| |  j  j ƒ  k st ‚ d  S(   Ni    i   R‰   i   (   Rƒ   Rq   R   R8   R9   R:   R?   R@   t   tupleRˆ   RA   RB   R‚   R‹   RD   R=   (	   R   RŒ   t   ixRO   RP   RQ   RR   t   constrRS   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   unpack_parameters·   s    "&
gš™™™™™¹?g      à?i   c         C   s  d G| GH| j  ƒ  |  j j  ƒ  k s* t ‚ d } d } |  j j ƒ  } |  j j ƒ  }	 xst |  j j ƒ  ƒ D]\\ }
 } |	 j |
 ƒ } | j	 ƒ  rd } x¢ t | j
 ƒ  d  ƒ D]c \ } } | | |  j | | } t | | | | ƒ | k r® t | t | | | ƒ ƒ } q® q® Wn$ | j ƒ  } | j ƒ  } t d ƒ ‚ | | 7} |  j | |  j | } t | t | ƒ | ƒ |  j | } t | | | ƒ | k r¼t | t | | | ƒ ƒ } n  | d 7} qj W| |  j j  ƒ  k såt ‚ d G| GHt j j ƒ  |  j j rt | | ƒ S| S(   Nt
   adjust_stpid   i    i   s-   SPECIAL POSITION LARGE SHIFT NOT IMPLEMENTED.i   s   max_stp:(   RD   Rƒ   R=   R   t	   unit_cellR8   R9   R:   R?   R@   t
   parametersRq   R1   t   minRA   RB   t   RuntimeErrort   maxRE   RF   RG   Rk   t   use_max_stp(   R   t   stpt   csdt   large_shift_sitet   large_shift_u_iso_factort   min_large_shift_u_isot   max_stpRŽ   t   ucRO   RP   RQ   RR   RS   t   it   ucpt   lsxR�   R‹   t   lux(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR‘   É   s<    	!"#'
 	c         C   sL  |  j  d 7_  |  j ƒ  y. |  j j d |  j d d d t ƒ j ƒ  } Wn5 t k
 r~ } d G| GHt j	 j
 ƒ  t d ƒ ‚ n Xt j d t d	 d
 d |  j j ƒ  d |  j d d  d | j ƒ  d d d d ƒ } |  j j d |  j j ƒ  d | j ƒ  d | j ƒ  ƒ } | j } t j ƒ  } d } |  j j ƒ  } x´ t |  j j ƒ  ƒ D]� \ }	 }
 |
 j j ƒ  sdt ‚ |
 j j ƒ  szt ‚ | j |	 ƒ } | j ƒ  ržd } n | j  ƒ  j! ƒ  } | j" | | | | d !ƒ | d 7} | | 7} qCW| | j# ƒ  k süt ‚ | j# ƒ  |  j$ j# ƒ  k st ‚ | j% ƒ  |  _& | |  j' |  _( |  j& |  j( f S(   Ni   R   R   R    R!   s   RuntimeError f_calc:R(   R"   R#   R$   R%   R&   R'   R)   i   R*   R+   R,   R-   i    i   i   ()   Rs   R�   RH   R.   R   R/   R(   R•   RE   RF   RG   R   R0   R2   R&   R3   R4   R5   R6   R7   t   gradsR   R   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   Rƒ   t   target_workt   f_lastRq   t   g_last(   R   R(   t   eRI   RJ   t   g_allt   g_activeRN   RO   RP   RQ   RR   RS   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyRu   î   sV    
						"	
!t    c         C   s#   |  j  d 7_  |  j d | ƒ d  S(   Ni   t   suffix(   Rt   t   callback_after_step_no_counting(   R   Rd   R«   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyRy     s    c         C   sç   |  j  d d k r= d } |  j d  k	 r5 | d 7} n  | GHn  d |  j  |  j |  j |  j j ƒ  f } | |  j ƒ  7} | | GH|  j j	 t
 d |  j  d |  j d |  j d	 |  j j ƒ  d
 |  j d |  j d |  j ƒ ƒ t j j ƒ  d  S(   Ni
   i    s   step  fun    f        |g|s        cRMSD aRMSD uRMSDs   %4d %4d %9.2e %9.2eRX   RY   RZ   R[   R\   R]   R^   (   Rt   Rl   R3   Rs   R¥   R¦   t   normt   format_rms_infoRx   R   RW   R\   R]   R^   RE   RF   RG   (   R   R«   t   s(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR¬      s(    						c   	      C   s  |  j  d  k r d  S|  j } |  j  } | j ƒ  } | j ƒ  } t j | | j ƒ  ƒ } t j | j ƒ  j d | ƒ ƒ } | | } | j	 ƒ  j
 ƒ  } | | | j ƒ  |  _ | | | | j ƒ  |  _ t j | j ƒ  j ƒ  | j ƒ  j ƒ  ƒ d |  _ |  j |  j |  j f S(   Nt   translation_fracg      à?(   Rl   R3   R   t
   sites_fracR   t   colt   meant   space_group_infot)   subtract_continuous_allowed_origin_shiftsR’   t   orthogonalization_matrixt
   rms_lengthR\   R]   R   R   R:   t   extract_u_isoR^   (	   R   t   xst   rst   xft   rft   ave_csht   ave_csh_perpt
   caosh_corrt   omx(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   get_rms_info6  s"    		
c         C   sD   d } |  j  ƒ  } | d  k	 r@ x | D] } | d | 7} q% Wn  | S(   NRª   s    %5.3f(   RÁ   R3   (   R   R¯   t   infot   r(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR®   J  s    c         C   s<   |  j  ƒ  } t | ƒ d k r8 d GH| GHt j j ƒ  n  d  S(   Ni    s    cRMSD aRMSD uRMSD(   R®   t   lenRE   RF   RG   (   R   R¯   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   show_rms_infoR  s
    c         C   sÞ  t  j j t  j j g |  j j } |  j j } | d k s@ t ‚ |  j j	 ƒ  } d } |  j j
 } d } d } | d | d d | } t j | ƒ }	 d  }
 d  } d } xÇt rq| d k rx|  j ƒ  \ } } | d k rñ| d k rü t j | d ƒ }
 qu|  j j	 ƒ  |  j j	 ƒ  k s t ‚ |  j j d ƒ s8t ‚ |  j j rYt j | d ƒ } n d |  j } | j ƒ  }
 qñny | d k rž|
 j ƒ  |
 j | ƒ nS | d k rá|  j d	 | j ƒ  d
 | j ƒ  ƒ } | j d | ƒ n t d | ƒ ‚ | d k r
|  j ƒ  n  | d | d | d |  j d | d | d | d |
 d | d | d | d |	 d | ƒ } | d k r« Pq« q« W|  j j d k rÊd G| j ƒ  G| j ƒ  GH|  j | j ƒ  k s¸t ‚ | j ƒ  |  _ n  |  j  d d ƒ d  S(   Ni    i   i   i   gñhãˆµøä>g¼‰Ø—²Òœ<g@Œµx¯Äid   R˜   R™   t   values   invalid iflag value: %dt   nt   mRƒ   RZ   t   gt   diagcot   diagt   iprintt   epst   xtolt   wt   iflags   iter, nfun:R«   s    FINAL(   i    i   i   (   i    i   (   i    i   (!   Rz   Re   t   raw_referencet   rawRk   t   lbfgs_impl_switchRÊ   R=   Rƒ   RD   RÌ   R   R   R3   t   TrueRu   Rn   t   all_gtRo   t	   deep_copyt   clearRC   R‘   R˜   t   current_search_directiont   set_stpR•   RÅ   RX   RY   Rs   Rt   R¬   (   R   t
   lbfgs_implRÊ   RÇ   RÈ   RÌ   RÍ   RÎ   t   size_wRÏ   RË   t   diag0RÐ   RZ   RÉ   t   new_stp(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR|   Y  s^    		$
	-! c         C   s'  |  j  j ƒ  } t j j d | d d d |  j d |  j d |  j d t d d	 d
 d d | ƒ 	} d t	 j
 | d ƒ } } xª t r"| j |  j  | | ƒ r¬ |  j ƒ  \ } } qy | j ƒ  rï |  j d | j ƒ  d | j ƒ  ƒ } | j d | ƒ qy | j ƒ  r|  j d d ƒ Pqy |  j d d  ƒ qy Wd  S(   NRÇ   RÈ   i   R„   R…   R‡   t   enable_stp_initt   factrg    ÐcAt   pgtolgñhãˆµøä>RÌ   g@Œµx¯ÄR˜   R™   RÆ   R«   s    FINALRd   (   Rƒ   RD   Rz   Rj   Rd   R„   R…   R‡   RÔ   R   R   t   processRu   t   requests_stp_initR‘   t    relative_step_length_line_searchRØ   t$   set_relative_step_length_line_searcht   is_terminatedR¬   Ry   R3   (   R   RÌ   RÇ   Rd   RZ   RÉ   RÝ   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR}   �  s0    						N(   R   R   R3   R   Rr   R�   R   R‘   Ru   Ry   R¬   RÁ   R®   RÅ   R|   R}   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyRc   t   s     		"	.				4c      
   C   só   d GH|  j  ƒ  j ƒ  Hd GH| j  ƒ  j ƒ  Hd G|  j d | ƒ GHHd GH| j d d ƒ Ht |  j d t d	 d
 d d d t ƒ j ƒ  ƒ } y# t d | d | d | d |  ƒ SWnA t	 k
 rî } d G| GHt
 j j ƒ  t | ƒ d k rï ‚  qï n Xd  S(   Ns   Ideal structure:s   Modified structure:s   rms difference:t   others'   structure_shake inter-atomic distances:t   distance_cutoffi   t   anomalous_flagt   d_mini   R   R    R!   RH   R   Rk   Rl   s   RuntimeError run_id:R(   (   t   show_summaryt   show_scattererst   rms_differencet   show_distancesR1   t   structure_factorsR/   R(   Rc   R•   RE   RF   RG   t   str(   t   structure_idealt   structure_shakeRk   t   run_idRH   R§   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   run_refinement¨  s8    	c         C   s…  t  j | d d d d d	 d
 d | j d t ƒ} | j ƒ  } | j d | j ƒ | j d | j ƒ d } | j	 d  k	 r‹ | | j	 d 7} n  | t | ƒ j d d ƒ j d d ƒ j ƒ  7} | j	 d  k	 r| d } d G| GHt j d | d | | f ƒ Ht j j ƒ  n  t d | d | d | d | ƒ } | d  k	 r�| j	 d  k	 r�| d } d G| GHt j d | d | j ƒ Ht j j ƒ  n  d  S(   Nt   elementst   Nt   CR   t   St   Ybt   volume_per_atomiÈ   t   min_distanceg       @t   general_positions_onlyt   random_u_isoRì   t   spreadRª   t   _t    t   /s   _ideal_shake.pickles   writing file:t	   file_namet   objRð   Rñ   Rk   Rò   s   _ls_history.pickle(   Rõ   Rö   R   R÷   Rø   (   R   R   Rû   RÔ   t   deep_copy_scattererst   shake_sites_in_placet   shake_sites_rmsdt	   shake_adpt   shake_adp_spreadt   pickle_root_nameR3   Rï   t   replacet   lowerR   t   dumpRE   RF   RG   Ró   Rx   (   R;   R´   Rk   Rñ   Rð   Rò   t   pickle_file_namet	   ls_result(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   run_call_backÆ  sF    		.
			
		
c   
   	   C   s  t  j j d ƒ } | j ƒ  } g  } g  } xL |  D]D } | j d ƒ d k rh | j | j d | ƒ ƒ q1 | j | ƒ q1 W| j d | ƒ } | j ƒ  H| j	 ƒ  } | j
 d  k rÐ t j d | d t d | ƒ n= t j d	 | j
 ƒ \ } }	 t d
 | d |	 d | d | j
 ƒ d  S(   NsF  
    general_positions_only = True
      .type = bool
    curvature_rescaling = True
      .type = bool
    minimizer = *lbfgs lbfgs_raw lbfgsb
      .type = choice
      .optional = False
    diagco = 0
      .type = int
    lbfgs_impl_switch = 1
      .type = int
    iprint = 1, 0
      .type = ints(size=2)
    curv_filter_lim_eps = 1e-3
      .type = float
    use_max_stp = True
      .type = bool
    shake_sites_rmsd = 0.5
      .type = float
    shake_adp_spread = 20
      .type = float
    pickle_root_name = None
      .type = str
    unpickle = None
      .type = path
t   =i    t   argt   sourcest   argvt	   call_backRk   R  Rð   Rñ   Rò   (   t   libtbxt   philt   parset!   command_line_argument_interpretert   findR   Rá   t   fetcht   showt   extractt   unpickleR3   R   t   parse_options_loop_space_groupsR  R   t   loadRó   (
   t   argst   master_philt   argument_interpretert   phil_objectst   remaining_argsR  t	   work_philRk   Rð   Rñ   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyR{   í  s.    		
		t   __main__(   R{   R  i   ("   t
   __future__R    t   cctbxR   t   cctbx.developmentR   R   t   cctbx.adptbxR   t   cctbx.array_familyR   t   scitbx.lbfgsRz   t   scitbx.lbfgsbR   t   libtbx.philR  R   t   randomRE   t   seedt   set_random_seedt   objectR   RV   t   slots_getstate_setstateRW   Rc   Ró   R  R{   R   t&   cctbx.regression.tst_refine_xray_curvsR  (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_refine_xray_curvs.pyt   <module>   s2   	Aÿ 5		'	4