ó
²™xTc           @   s5  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
 m Z d  d l m Z d  d l Z e j j d ƒ Z e j j d	 ƒ Z d
 e f d „  ƒ  YZ d e e e d „ Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d S(   iÿÿÿÿ(   t   division(   t   bulk_solventN(   t   flex(   t   lbfgs(   t   adopt_init_args(   t   adptbxt   mmtbx_f_model_exts9    bulk_solvent = True
    .type = bool
  anisotropic_scaling = True
    .type = bool
  k_sol_b_sol_grid_search = True
    .type = bool
    .expert_level=2
  minimization_k_sol_b_sol = True
    .type = bool
    .expert_level=2
  minimization_b_cart = True
    .type = bool
    .expert_level=2
  target = ls_wunit_k1 *ml
    .type = choice
  symmetry_constraints_on_b_cart = True
    .type = bool
    .expert_level=2
  k_sol_max = 0.6
    .type = float
    .expert_level=2
  k_sol_min = 0.0
    .type = float
    .expert_level=2
  b_sol_max = 300.0
    .type = float
    .expert_level=2
  b_sol_min = 0.0
    .type = float
    .expert_level=2
  k_sol_grid_search_max = 0.6
    .type = float
    .expert_level=2
  k_sol_grid_search_min = 0.0
    .type = float
    .expert_level=2
  b_sol_grid_search_max = 80.0
    .type = float
    .expert_level=2
  b_sol_grid_search_min = 20.0
    .type = float
    .expert_level=2
  k_sol_step = 0.2
    .type = float
    .expert_level=2
  b_sol_step = 20.0
    .type = float
    .expert_level=2
  number_of_macro_cycles = 2
    .type = int
    .expert_level=2
  max_iterations = 25
    .type = int
    .expert_level=3
  min_iterations = 25
    .type = int
    .expert_level=3
  fix_k_sol = None
    .type = float
    .expert_level=2
  fix_b_sol = None
    .type = float
    .expert_level=2
  fix_b_cart
    .expert_level=2
    .style = box
  {
    b11 = None
      .type = float
    b22 = None
      .type = float
    b33 = None
      .type = float
    b12 = None
      .type = float
    b13 = None
      .type = float
    b23 = None
      .type = float
  }
t   kbu_minimizerc        
   B   sG   e  Z d d e d  d d d d  d d „	 Z d „  Z d „  Z d „  Z RS(	   g     @@g     @Àg      $@g      $Àc         C   s¤  t  |  t ƒ  ƒ | d k r= d  } d  |  _ d  } d  |  _ n  | | g j d  ƒ d k s^ t ‚ |  j j j	 ƒ  |  _	 |  j d  k	 r¦ |  j j j	 ƒ  |  j	 k s¦ t ‚ n  |  j	 d k rÄ |  j	 d k sÊ t ‚ |  j
 |  _ t |  j ƒ |  j	 k sô t ‚ |  j |  _ |  j |  _ |  j j j ƒ  d |  _ |  j rÐ|  j j ƒ  j ƒ  |  _ |  j j ƒ  j d |  j ƒ } |  j j ƒ  |  _ |  j d k s‹t ‚ |  j j | ƒ } |  j d | d |  j d	 |  j d
 |  j ƒ |  _ nc t |  j ƒ |  _ |  j d k s÷t ‚ |  j d t j |  j ƒ d |  j d	 |  j d
 |  j ƒ |  _ t  j! d t" d t" d t" ƒ } t  j# d |  d t  j$ ƒ  d t  j% d |	 d |
 ƒ d | ƒ |  _& |  j' ƒ  |  ` d  S(   Ni    i   i
   g      @t   u_stari   t   ut   kt   bt   u_factort-   ignore_line_search_failed_step_at_lower_boundt-   ignore_line_search_failed_step_at_upper_boundt    ignore_line_search_failed_maxfevt   target_evaluatort   core_paramst   termination_paramst   min_iterationst   max_iterationst   exception_handling_params(   i    i   gUUUUUUå?((   R   t   localst   Nonet   twin_fractiont   fmodel_core_data_twint   countt   AssertionErrort   fmodel_core_datat   datat   n_shellst	   k_initialt   k_mint   lent	   b_initialt   b_mint	   u_initialt   u_mint   uct   volumeR   t   symmetry_constraints_on_b_cartt   f_obst   space_groupt   adp_constraintst   average_u_start   n_independent_paramst   dim_ut   independent_paramst   packt   xR   t   doubleR   t   exception_handling_parameterst   Truet   runt   core_parameterst   termination_parameterst	   minimizert    compute_functional_and_gradients(   t   selfR   R)   R   R"   R$   t   refine_kt   refine_bt   refine_uR   R   R   R   R(   t	   u_min_maxt	   u_min_mint	   k_sol_maxt	   k_sol_mint	   b_sol_maxt	   b_sol_minR   R/   t   lbfgs_exception_handling_params(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   __init__`   s^    	!$$												
c         C   s®   t  | ƒ } t | ƒ t  k s$ t ‚ t | ƒ |  j k s? t ‚ g  } |  j rr | g  | D] } | | ^ qX 7} n  |  j rˆ | | 7} n  |  j r¡ | j | ƒ n  t	 j
 | ƒ S(   N(   t   listt   typeR   R!   R   R=   R;   R<   t   appendR   R2   (   R:   R	   R
   R   R   t   vt   ui(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR0   ¥   s    	 $	 	 c         C   s  d } |  j  r… |  j rP t |  j j t |  j | |  j !|  j ƒ ƒ ƒ |  _	 n) t t |  j | |  j !|  j ƒ ƒ |  _	 |  j } n  |  j
 râ t t |  j | | |  j !ƒ ƒ |  _ t |  j ƒ |  j k sÒ t ‚ | |  j 7} n  |  j rþ |  j | |  _ n  d  S(   Ni    (   R=   R(   RF   R+   t
   all_paramst   iterR1   R.   R   R%   R;   R   R    R!   R   R<   R#   (   R:   t   i(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   unpack_x¯   s    		,)	&	c         C   s+  |  j  ƒ  t g  |  j D]$ } t |  j t |  j | ƒ ƒ ^ q ƒ |  _ |  j |  j k rh |  j |  _ n  |  j |  j	 k  r‰ |  j	 |  _ n  g  |  j
 D]$ } t |  j t |  j | ƒ ƒ ^ q“ |  _
 |  j d  k r<|  j j d |  j
 d |  j d |  j ƒ t j d |  j j d |  j j ƒ  d |  j d |  j d |  j ƒ } n§ |  j j d |  j
 d |  j d |  j ƒ |  j j d |  j
 d |  j d |  j ƒ t j d	 |  j j d
 |  j j d |  j d |  j j ƒ  d |  j d |  j d |  j ƒ } | j ƒ  |  _ d g |  j } d } d d d d d d g } |  j s2|  j rnt | j ƒ  ƒ } t | ƒ |  j k s_t ‚ | j  ƒ  } n  |  j rŒt | j! ƒ  ƒ } n  |  j" rí|  j rít# j$ |  j% j& d | ƒ ƒ } |  j' d | d | d | d d |  j( ƒ |  _) n. |  j' d | d | d | d d |  j( ƒ |  _) |  j |  j) f S(   Nt   k_solst   b_solR   t   fmt   fot   compute_k_sol_gradt   compute_b_sol_gradt   compute_u_star_gradt   fm1t   fm2R   g        i    t   all_gradientsR	   R
   R   R   i   (*   RN   t   tupleR%   t   maxR?   t   minR>   R#   RB   RC   R    RA   R@   R   R   R   t   updateR   t0   bulk_solvent_and_aniso_scale_target_and_grads_lsR   R)   R;   R<   R=   R   t   targett   fR   RF   t   grad_k_solsR!   R   t
   grad_b_solt   grad_u_starR(   R   R2   R+   t   independent_gradientsR0   R   t   g(   R:   RI   t   tgt   gkt   gbt   guR/   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR9   ¿   sd    
7  4
			

					 	.N(   t   __name__t
   __module__R   R4   RE   R0   RN   R9   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR   _   s   2	
	c         C   sÍ   | d  k r t j ƒ  } n  |  j j ƒ  } |  j d  k	 rK |  j j ƒ  } n d  } t d | d | d |  j d |  j j d | j	 j
 ƒ  d | j	 j d | j	 j d | d	 | d
 | d | j d | j d | j ƒ S(   NR   R   R   R)   R   R"   R$   R;   R<   R=   R   R   R(   (   R   t   master_paramst   extractt   fmodelt   core_data_workt   fmodel_twinR   R   R)   R   RO   RP   R   R   R   R(   (   t   fmodelst   paramst   refine_k_solt   refine_b_solt   refine_u_start   fmodel_core_data_workt   fmodel_core_data_work1(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   k_sol_b_sol_b_cart_minimizerò   s(     			c         C   sQ   |  } | j  | j | j | j | j | j g } | j d  ƒ d k rI d  S| Sd  S(   Ni    (   t   b11t   b22t   b33t   b12t   b13t   b23R   R   (   t   fix_b_cart_scopet   fbst   b_cart(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   _extract_fix_b_cart  s
    * t   fmodels_kbuc           B   s;   e  Z d d d  „ Z d d d d „ Z d „  Z d „  Z RS(   c         C   sS   t  |  t ƒ  ƒ |  j d  k	 rO |  j j j ƒ  j |  j j j ƒ  ƒ sO t ‚ n  d  S(   N(	   R   R   Ro   R   Rm   R)   t   indicest   all_eqR   (   R:   Rm   Ro   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRE     s    c         C   sT   |  j  j d | d | d | ƒ |  j d  k	 rP |  j j d | d | d | ƒ n  d  S(   NRO   RP   R€   (   Rm   R\   Ro   R   (   R:   RO   RP   R€   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR\     s    c         C   sW   |  j  d  k r |  j j ƒ  St j |  j j j ƒ  |  j j j |  j  j j |  j ƒ Sd  S(   N(	   Ro   R   Rm   t   r_factorR   R)   R   t   f_modelR   (   R:   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR…     s    c         C   sX   d  } |  j d  k	 r- |  j j d | ƒ } n  t d |  j j d | ƒ d | d |  j ƒ S(   Nt	   selectionRm   Ro   R   (   R   Ro   t   selectR‚   Rm   R   (   R:   R‡   Ro   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRˆ   '  s    N(   Ri   Rj   R   RE   R\   R…   Rˆ   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR‚     s   	
t   bulk_solvent_and_scalesc           B   s›   e  Z d d d d d d d  „ Z d „  Z d „  Z d „  Z d „  Z d d d „ Z d „  Z	 d d „ Z
 d „  Z d	 „  Z d
 „  Z d d „ Z d „  Z RS(   c         C   sv  t  d | d | d | ƒ |  _ |  j j ƒ  } | |  _ | |  _ |  j d  k r` t j ƒ  |  _ n  |  j j |  j j	 g j
 t ƒ d k rr|  j j s® t |  j _ t |  j _ n  |  j j	 sÉ t |  j _ n  |  j j } |  j j j ƒ  rt |  j _ t |  j _ t |  j _ n  t d |  j j d ƒ }	 |  j j j ƒ  }
 |  j j d  k	 r¦|
 r¦|  j j sdt ‚ |  j j swt ‚ |  j j sŠt ‚ |  j j d |  j j ƒ n  |  j j d  k	 r|
 r|  j j sÐt ‚ |  j j sãt ‚ |  j j söt ‚ |  j j d |  j j ƒ n  t d |  j j ƒ } | d  k	 rn|  j j	 sEt ‚ |  j j sXt ‚ |  j j d	 | ƒ n  |  j j ƒ  } xJ|	 D]B} |  j j r| |	 d k r|  j d
 | ƒ \ } } } } |  j j d | d | d	 | ƒ t | |  j j ƒ  ƒ d k  st ‚ n  |  j j rm|  j ƒ  \ } } } |  j j d | d | ƒ t | |  j j ƒ  ƒ d k  smt ‚ n  |  j j r„|  j ƒ  \ } } |  j j d	 | ƒ t | |  j j ƒ  ƒ d k  sÆt ‚ q„q„Wt |  j  ƒ  ƒ } t } xC t t! | ƒ ƒ D]/ } t | | ƒ d k  röd | | <t } qöqöW| rr| j
 d ƒ t! | ƒ k rSd } n  |  j j d | d | ƒ qrn  d  S(   NRm   Ro   R   i    i   RO   RP   R~   R€   t   nprocg�íµ ÷Æ°>g{®Gáz„?g        ("   R‚   Rp   R…   Rq   t   logR   Rk   Rl   R   t   anisotropic_scalingR   R4   t   Falset   k_sol_b_sol_grid_searcht   minimization_k_sol_b_solt   minimization_b_cartR^   Rm   t   check_f_mask_all_zerot   ranget   number_of_macro_cyclest	   fix_k_solR   R\   t	   fix_b_solR�   t
   fix_b_cartt   _ksol_bsol_grid_searcht   abst   _ksol_bsol_cart_minimizert   _b_cart_minimizerRF   RO   R!   (   R:   t
   fmodel_kbut   fmodel_kbu_twinR   Rq   R‹   RŠ   t   start_targett   params_targett   macro_cyclest   mask_okR–   R^   t   mct   ksolt   bsolR€   t   ksolst	   do_updatet   ik(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRE   2  s|    		 	((,
	c         C   s   |  j  j j | ƒ S(   N(   Rp   Rm   t   k_sol(   R:   RM   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR§   w  s    c         C   s   |  j  j j ƒ  S(   N(   Rp   Rm   RO   (   R:   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRO   z  s    c         C   s   |  j  j j ƒ  S(   N(   Rp   Rm   RP   (   R:   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRP   }  s    c         C   s   |  j  j j ƒ  S(   N(   Rp   Rm   R€   (   R:   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR€   €  s    c         C   s–   | } | d  k r! |  j ƒ  } n  | } | d  k rA | d IJd  St | ƒ d k r’ | d Id j g  | D] } t d | ƒ j ƒ  ^ qj ƒ IJn  d  S(   Ns     k_anisotropic=1i   s          b_cart(11,22,33,12,13,23):t   ,s   %8.4f(   R   R€   R!   t   joint   strt   strip(   R:   t   mR‹   t   smt   outRM   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   format_scale_matrixƒ  s     

c         C   s   |  j  j j ƒ  S(   N(   Rp   Rm   R   (   R:   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR   Ž  s    c         C   sè  |  j  j ƒ  } |  j  j j j ƒ  } |  j  j j j } |  j  j j ƒ  } | } t | ƒ |  _ t	 |  j
 j |  j
 j |  j
 j ƒ } t	 |  j
 j |  j
 j |  j
 j ƒ } g  }	 x2 | D]* }
 x! | D] } |	 j |
 | f ƒ q¿ Wq² Wg  } x* |	 D]" } |  j | ƒ } | j | ƒ qí Wxc | D][ } | j | k  r| j } | j } | j } | j } |  j  j d | d | d | ƒ qqW|  j  j d | d | d | ƒ t |  j  j ƒ  | ƒ d k  s½t ‚ |  j  j ƒ  | k sØt ‚ | | | | f S(   NRO   RP   R€   g�íµ ÷Æ°>(   Rp   R…   Rm   R   RO   RP   R€   R!   t	   _ksol_lent   kb_rangeRq   t   k_sol_grid_search_maxt   k_sol_grid_search_mint
   k_sol_stept   b_sol_grid_search_maxt   b_sol_grid_search_mint
   b_sol_stepRH   t   try_ksol_bsolR§   R\   R˜   R   (   R:   RŠ   t   start_r_factort
   final_ksolt
   final_bsolt   final_b_cartt   final_r_factorRO   t   b_solst   argsR¢   R£   t   resultst   args_t   rest   result(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR—   ‘  sF    						%c   
   	   C   sG  | \ } } xO |  j  ƒ  D]A } t | ƒ d k r |  j j d d d d d d d g ƒ Pq q W| g |  j } |  j j d | d | ƒ |  j j rÄ |  j ƒ  \ } } } |  j j d | d | ƒ n  |  j j rø |  j	 ƒ  \ }	 } |  j j d |	 ƒ n  t
 d |  j j ƒ  d |  j j j j ƒ  d |  j j j j d |  j j j  ƒ  ƒ S(   Ng     Àr@R€   i    RO   RP   R…   R§   (   R€   R˜   Rp   R\   R°   Rq   R�   R™   R�   Rš   t   ksol_bsol_resultR…   Rm   R   RO   RP   (
   R:   R¿   R¢   R£   t   bct	   ksol_listt   ksol_t   bsol_t   dummyR€   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR¸   ¶  s$    %c         C   s¿   |  j  j ƒ  } |  j  j j j ƒ  } |  j  j j j } |  j  j ƒ  } |  j ƒ  \ } } |  j  j d | d | ƒ |  j  j ƒ  } | | k  r  | } | } | } n  | | k s² t ‚ | | | f S(   NRO   RP   (	   Rp   R…   Rm   R   RO   RP   t    _k_sol_b_sol_minimization_helperR\   R   (   R:   R¹   Rº   R»   R½   R¢   R£   R…   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR™   Ê  s    	c         C   s•   |  j  j ƒ  } |  j  j j ƒ  } |  j  j ƒ  } |  j ƒ  } |  j  j d | ƒ |  j  j ƒ  } | | k  ry | } | } n  | | k s‹ t ‚ | | f S(   NR€   (   Rp   R…   Rm   R€   t   _b_cart_minimizer_helperR\   R   (   R:   R¹   R¼   R½   R€   R…   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRš   Ù  s    	i   c         C   sÓ   |  j  j ƒ  } |  j  j j ƒ  } xu t | ƒ D]g } t d |  j  d |  j d t ƒ j } t	 j
 t	 j |  j  j j j ƒ  | ƒ ƒ } |  j  j d | ƒ q. W|  j  j ƒ  } | | k rË |  j  j d | ƒ | S| Sd  S(   NRp   Rq   Rt   R€   (   Rp   R…   Rm   R€   t   xrangeRw   Rq   R4   R%   R   t   u_as_bt   u_star_as_u_cartR)   t	   unit_cellR\   (   R:   t   n_macro_cyclest   r_startt   b_startt   u_cycleR%   R€   t   r_final(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRË   æ  s    		$c   	   	   C   s~  |  j  j j j ƒ  } |  j  j j j } |  j  j ƒ  } t d |  j  d |  j d t d t ƒ } | j	 | j
 } } t | ƒ t k sˆ t ‚ t | ƒ d k s  t ‚ g  | D]* } t |  j j t |  j j | ƒ ƒ ^ q§ } | |  j j k  rø |  j j } n  | |  j j k r|  j j } n  |  j  j d | d | ƒ |  j  j ƒ  } | | k rp|  j  j d | d | ƒ | | f S| | f Sd  S(   NRp   Rq   Rr   Rs   i   RO   RP   (   Rp   Rm   R   RO   RP   R…   Rw   Rq   R4   R    R#   RG   RF   R   R!   RZ   RA   R[   R@   RC   RB   R\   (	   R:   t	   ksol_origt	   bsol_origRÑ   t   minimizer_objR¢   R£   RI   t   r_end(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRÊ   ÷  s.    			4  
N(   Ri   Rj   R   RE   R§   RO   RP   R€   R¯   R   R—   R¸   R™   Rš   RË   RÊ   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR‰   0  s$   ?					%			c         C   sO   d } g  t  t | | ƒ t |  | ƒ d t | | ƒ ƒ D] } | | ^ q; S(   Ng     @�@i   (   R’   t   int(   t   x_maxt   x_mint   stept   scRM   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR±     s    RÄ   c           B   s   e  Z d  „  Z RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R§   RP   R€   R…   (   R:   R§   RP   R€   R…   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRE     s    			(   Ri   Rj   RE   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRÄ     s   t   u_star_minimizerc           B   sS   e  Z d  d  d  d  d  d  g e d d e d d d „ Z d „  Z d „  Z d „  Z RS(   i    iô  g     @@g     @Àc
         C   s�  t  |  t ƒ  ƒ |  j |  _ |  j j j ƒ  d |  _ |  j rÎ |  j	 j
 ƒ  j ƒ  |  _ |  j	 j
 ƒ  j d |  j ƒ }
 |  j j ƒ  |  _ |  j d k s› t ‚ |  j j |
 ƒ } |  j d | d |  j ƒ |  _ nQ t |  j ƒ |  _ |  j d k sõ t ‚ |  j d t j |  j ƒ d |  j ƒ |  _ t j d t d t d	 t ƒ } t j d
 |  d t j ƒ  d t j d | d | ƒ d | ƒ |  _ |  j ƒ  |  ` d  S(   Ni   g      @R   i   R	   R   R   R   R   R   R   R   R   R   R   gUUUUUUå?(   R   R   R$   R%   R   R&   R'   R   R(   R)   R*   R+   R,   R-   R.   R   R/   R0   R1   R!   R   R2   R   R3   R4   R5   R6   R7   R8   R9   (   R:   R   R)   R$   R=   R   R   R(   R>   R?   R   R/   RD   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRE     s<    
								
c         C   s@   g  } |  j  r3 | g  | D] } | | ^ q 7} n  t j | ƒ S(   N(   R=   R   R2   (   R:   R	   R   RI   RJ   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR0   D  s    	 $c         C   s‰   d } |  j  r… |  j rP t |  j j t |  j | |  j !|  j ƒ ƒ ƒ |  _	 n) t t |  j | |  j !|  j ƒ ƒ |  _	 |  j } n  d  S(   Ni    (
   R=   R(   RF   R+   RK   RL   R1   R.   R   R%   (   R:   RM   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRN   I  s    		,)c         C   st  |  j  ƒ  t g  |  j D]$ } t |  j t |  j | ƒ ƒ ^ q ƒ |  _ |  j j d d g d d d |  j ƒ t	 j
 d |  j j d |  j j ƒ  d t d t d	 |  j ƒ } | j ƒ  |  _ d d d d d d g } |  j rí t | j ƒ  ƒ } n  |  j rB|  j rBt j |  j j d
 | ƒ ƒ } |  j d | d d |  j ƒ |  _ n" |  j d | d d |  j ƒ |  _ |  j |  j f S(   NRO   i    RP   R   RQ   RR   RS   RT   RU   RX   R	   R   i   (   RN   RY   R%   RZ   R?   R[   R>   R   R\   R   R]   R   R)   R�   R=   R^   R_   RF   Rb   R(   R   R2   R+   Rc   R0   R   Rd   (   R:   RI   Re   Rh   R/   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyR9   S  s,    
7%		 	"(   Ri   Rj   R4   RE   R0   RN   R9   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyRÞ     s   !		
(!   t
   __future__R    t   mmtbxR   t
   iotbx.philt   iotbxt   cctbx.array_familyR   t   scitbxR   t   libtbxR   t   cctbxR   t   boost.pythont   boostt   pythont
   import_extt   extt   philt   parseRk   t   objectR   R   R�   Rw   R�   R‚   R‰   R±   RÄ   RÞ   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/bulk_solvent/bulk_solvent_and_scaling.pyt   <module>   s*   	Q	•	Þ	