ó
´™xTc           @   s  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 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 m Z d  d l m Z d  d l m Z d  d l j j 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 d  d l Z d  d l m Z d  d l  m! Z! m" Z" m# Z# d  d l$ m% Z% m& Z& d  d l' 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 m0 Z0 d  d l1 m2 Z2 d  d l m3 Z3 d  d l4 Z d  d l5 Z d  d l m6 Z6 d  d l7 Z d  d l8 Z d  d l9 Z: d  d l m; Z; d  d l< m= Z= d  d l Z e j> j? d ƒ Z@ d aA d ZB d ZC d aD d aE d ZF d ZG d aH d aI d aJ d ZK eL d „ ZM d eN f d „  ƒ  YZO d  eN f d! „  ƒ  YZP e+ jQ jR d" ƒ ZS e+ jQ jR d# d$ eT ƒZU eL eV d% „ ZW d& eN f d' „  ƒ  YZX d( eP f d) „  ƒ  YZY d* „  ZZ d+ „  Z[ d, „  Z\ d- eN f d. „  ƒ  YZ] d/ e j^ j_ f d0 „  ƒ  YZ_ d1 e j^ j` f d2 „  ƒ  YZ` d S(3   iÿÿÿÿ(   t   divisionN(   t   flex(   t   miller(   t   adptbx(   t   adopt_init_args(   t   bulk_solvent(   t   masks(   t   xray(   t   max_lik(   t   maxlik(   t   sigmaa_estimator(   t   math(   t   iround(   t   user_plus_sys_timet   date_and_timet   Sorry(   t   format_valuet   show_string(   t   StringIO(   t   outlier_rejection(   t   absolute_scaling(   t   sgtbx(   t	   map_tools(   t   deepcopy(   t
   group_args(   t   Auto(   t   maptbx(   t   approx_equalt   mmtbx_f_model_extg        c         C   sØ   |  d  k r t j }  n  t t t t t t t	 t
 t } |  d IJ|  d t IJ|  d t IJ|  d t IJ|  d t IJ|  d t IJ|  d t IJ|  d t	 IJ|  d	 t
 IJ|  d
 t IJ|  d | IJ| S(   Ns     Micro-tasks:s,       mask                            = %-7.2fs,       f_calc                          = %-7.2fs,       alpha_beta                      = %-7.2fs,       target                          = %-7.2fs,       gradients_wrt_atomic_parameters = %-7.2fs+       fmodel                         = %-7.2fs+       r_factors                      = %-7.2fs+       phase_errors                   = %-7.2fs+       foms                           = %-7.2fs+       TOTAL for micro-tasks          = %-7.2f(   t   Nonet   syst   stdoutt	   time_maskt   time_f_calct   time_alpha_betat   time_targett$   time_gradients_wrt_atomic_parameterst   time_fmodel_core_datat   time_r_factorst   time_phase_errorst	   time_foms(   t   outt   total(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   show_times=   s"     
t   arraysc           B   s5   e  Z d d d d  „ Z d „  Z d d d d „ Z RS(   c         C   s­   t  |  t ƒ  ƒ |  j j ƒ  |  _ |  j j ƒ  |  _ |  j j t ƒ rW |  j |  _ n  |  j j	 ƒ  j ƒ  |  _	 |  j	 j
 |  j ƒ |  _ |  j	 j
 |  j ƒ |  _ |  j ƒ  d  S(   N(   R   t   localst   r_free_flagst   datat   work_selt   free_selt   all_net   Truet   f_obst
   d_spacingst   selectt   d_spacings_workt   d_spacings_freet   _update_derived_arrays(   t   selft   coreR4   R.   t	   hl_coeffst	   core_twint   twin_fraction(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   __init__X   s     c      	   C   s  |  j  d  k r! |  j j |  _ n` |  j j d t j j d t	 j
 |  j j j ƒ  ƒ d t	 j
 |  j  j j ƒ  ƒ d |  j ƒ ƒ |  _ |  j j |  j ƒ |  _ |  j j |  j ƒ |  _ |  j j j j |  j ƒ |  _ |  j j j |  j ƒ |  _ |  j j |  j ƒ |  _ |  j j |  j ƒ |  _ d  S(   NR/   t   amplitude_data_part_onet   amplitude_data_part_twoR>   (   R=   R   R;   t   f_modelR4   t   arrayt   mmtbxt   utilst   apply_twin_fractionR   t   absR/   R>   R6   R0   t   f_model_workR1   t   f_model_freet   k_anisotropict   k_anisotropic_workt   k_isotropict   k_isotropic_workt
   f_obs_workt
   f_obs_free(   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR9   h   s    c         C   st   | d  k	 r | |  _ n  | d  k	 r0 | |  _ n  | d  k	 rH | |  _ n  | | g j d  ƒ d k  rp |  j ƒ  n  d  S(   Ni   (   R   R;   R=   R>   t   countR9   (   R:   R;   R=   R>   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_corex   s        N(   t   __name__t
   __module__R   R?   R9   RQ   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR,   V   s
   
	t   manager_mixinc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s8   t  ƒ  } |  j ƒ  d t ƒ j ƒ  } t | j ƒ  7a | S(   Nt   compute_gradients(   R   t   target_functort   Falset   target_workR#   t   elapsed(   R:   t   timert   result(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   target_w€   s    	c         C   s8   t  ƒ  } |  j ƒ  d t ƒ j ƒ  } t | j ƒ  7a | S(   NRU   (   R   RV   RW   t   target_testR#   RY   (   R:   RZ   R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   target_t‡   s    	c         K   s   |  j  ƒ  d t ƒ j | �  S(   NRU   (   RV   R3   t   gradients_wrt_atomic_parameters(   R:   t   keyword_args(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt(   one_time_gradients_wrt_atomic_parametersŽ   s    (   RR   RS   R\   R^   Ra   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRT   ~   s   		sS    algorithm = *fft direct
    .type = choice
  cos_sin_table = False
    .type = bool
  grid_resolution_factor=1/3.
    .type = float
  quality_factor = None
    .type = float
  u_base = None
    .type = float
  b_base = None
    .type = float
  wing_cutoff = None
    .type = float
  exp_table_one_over_step_size = None
    .type = float
s°     include scope mmtbx.max_lik.maxlik.alpha_beta_params
  sigmaa_estimator
    .expert_level=2
  {
    include scope mmtbx.scaling.sigmaa_estimation.sigmaa_estimator_params
  }
t   process_includesc         C   s¬   | d  k	 r- |  j | ƒ }  | j | ƒ } n  | j ƒ  d k rN t d ƒ ‚ n  t j | | ƒ } | d k r| t d ƒ ‚ n  | r— t j |  |  ƒ | St j |  | ƒ | S(   Ni    s   No data for scale calculation.s&   Zero denominator in scale calculation.(   R   R6   t   sizet   RuntimeErrorR   t   sum(   t   numt   dent	   selectiont   num_numt   denom(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   _scale_helper®   s     t   manager_kbuc        
   B   sÈ   e  Z d d d  g d  d d d d d d g d „ Z d d d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   g        i    c
         C   s4  | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ |	 d  k r] d d d d d d g }	 n  t | ƒ t k px | d  k s½ t | ƒ t	 k s± t | ƒ t
 k s± t t | ƒ ƒ ‚ | g } n  t | ƒ d k sÕ t ‚ t | ƒ d k r(t | ƒ d k r(t | d ƒ d k  r(d g t | ƒ } q(n  t | ƒ }
 |
 t k pI|
 d  k s^|  j g |  _ n  t | ƒ t |  j ƒ k sžt d t | ƒ t |  j ƒ f ƒ ‚ g  |  _ xK |  j D]@ } |  j j | j ƒ  ƒ |  j j ƒ  j | j ƒ  ƒ s±t ‚ q±W|  j d  k r:|  j j d t j |  j j ƒ  j ƒ  d ƒ ƒ |  _ n  |  j d  k r|  j j d t j |  j j ƒ  j ƒ  d ƒ ƒ |  _ n  t j d |  j j ƒ  d |  j d | d	 | d
 |  j j ƒ  d |  j j ƒ  d |	 d |  j j ƒ  d |  j j ƒ  d |  j ƒ 
|  _ t j d |  j d |  j j ƒ |  _ |  j j |  _ d  S(   Ni    i   g�íµ ÷Æ°>s   VALS: %d %dR/   t   f_calct   shell_f_maskst   k_solst   b_solt   f_part1t   f_part2t   u_start   hklt   uct   sst
   miller_set(   R4   Rm   t   f_masksRq   Rr   Rv   R   t   typet   listt   floatt   intt   AssertionErrort   lenRG   t   fmdatat   appendR/   t   indicest   all_eqt   customized_copyR   t   complex_doubleRc   t   extR;   t	   unit_cellR   RC   RB   Ru   (   R:   R4   Rm   Rx   Rv   Rq   Rr   Ro   Rp   Rs   t   typfmt   fm(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR?   ¼   sX    
						 $("	(**		$c         C   s  | d  k r |  j j ƒ  } n  | d  k r9 |  j j } n  | d  k rT |  j j } n  | d  k	 r‹ t j |  j j ƒ  t j	 | ƒ ƒ } } n  t
 | ƒ t k s¯ t
 | ƒ t k r» | g } n  |  j d |  j d |  j d |  j d |  j d |  j d |  j d t | ƒ d | d	 | ƒ 	}  d  S(
   NR4   Rm   Rx   Rq   Rr   Rv   Ro   Rp   Rs   (   R   R/   Ro   Rp   Rs   R   t   u_cart_as_u_starR4   R†   t   b_as_uRy   R|   R{   R?   Rm   Rx   Rq   Rr   Rv   Rz   (   R:   Ro   Rp   t   b_cartRs   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   updateô   s*       %$ 							c         C   s¿   t  d |  j j d | ƒ d |  j j d | ƒ d g  |  j D] } | j d | ƒ ^ q: d |  j j d | ƒ d |  j j d | ƒ d |  j j | ƒ d t |  j	 ƒ  ƒ d	 |  j
 ƒ  d
 |  j ƒ  ƒ 	S(   NR4   Rh   Rm   Rx   Rq   Rr   Rv   Ro   Rp   Rs   (   Rl   R4   R6   Rm   Rx   Rq   Rr   Rv   Rz   Ro   Rp   Rs   (   R:   Rh   Rˆ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR6     s    (c         C   s+   |  j  d t j |  j j ƒ  j ƒ  t ƒ ƒ S(   NRh   (   R6   R   t   boolR4   R/   Rc   R3   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt	   deep_copy  s    c         C   s   |  j  j ƒ  S(   N(   R/   Ro   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRo     s    c         C   s   |  j  j | ƒ S(   N(   R/   t   k_sol(   R:   t   i(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR�     s    c         C   s
   |  j  j S(   N(   R/   Rp   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRp     s    c         C   s
   |  j  j S(   N(   R/   Rs   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRs     s    c         C   s   t  j |  j j ƒ  |  j j ƒ S(   N(   R   t   r_factorR4   R/   RB   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR‘     s    c         C   s:   x3 |  j  D]( } t j | j ƒ  ƒ j d ƒ s
 t Sq
 Wt S(   Ni    (   Rx   R   RG   R/   R‚   RW   R3   (   R:   Rˆ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   check_f_mask_all_zero"  s    c         C   s4   |  j  j ƒ  } t j t j | |  j j ƒ ƒ } | S(   N(   R4   R†   R   t   u_as_bt   u_star_as_u_cartR/   Rs   (   R:   Ru   R‹   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR‹   (  s    c         C   s   |  S(   N(    (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   core_data_work.  s    c         C   sF   t  |  j ƒ  ƒ d k s t ‚ t j |  j |  j j d ƒ |  j ƒ  ƒ S(   Ni   i    (	   R~   Ro   R}   R…   t   k_maskRv   R/   R�   Rp   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR–   1  s    c         C   sI   g  } x< |  j  j ƒ  D]+ } | j t j |  j | |  j ƒ  ƒ ƒ q W| S(   N(   R/   Ro   R€   R…   R–   Rv   Rp   (   R:   R[   R�   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   k_masks5  s    )c         C   s   t  j |  j j ƒ  |  j ƒ  ƒ S(   N(   R…   RJ   Rm   R�   Rs   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRJ   ;  s    c         C   s=   t  j |  j j ƒ  j ƒ  t j |  j j ƒ  |  j j ƒ  ƒ ƒ S(   N(   R   t   doubleR4   R/   Rc   R   t   scaleRB   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRL   >  s    N(   RR   RS   R   R?   RŒ   R6   RŽ   Ro   R�   Rp   Rs   R‘   R’   R‹   R•   R–   R—   RJ   RL   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRl   »   s(   /													t   managerc           B   s³  e  Z d• d• d• d• d• d• d• d• d  d• d• d• e d• d• d d d• d• d• d• d• d• d• d• d• d• d d „ Z d „  Z d „  Z d „  Z d „  Z e	 e ƒ Z
 d	 „  Z d• e d• d
 „ Z d „  Z d „  Z e d• e d „ Z e d• e d „ Z e d „ Z d d „ Z d „  Z d• e e d „ Z d d d „ Z d• e e e d „ Z d „  Z d „  Z d• d• d• d• d• d• d• d• d• d• d• d• d „ Z d d• d „ Z d• e d• d d „ Z d „  Z d „  Z d „  Z d• d  e d! „ Z  d• d" „ Z! d• d# „ Z" d• d$ „ Z# d% d& „ Z$ d' „  Z% d( „  Z& d• d• e e d) „ Z' d* d+ d, „ Z( d- „  Z) d. „  Z* d/ „  Z+ e e d• d• d• e e e d0 e e e d• d• d1 „ Z, d2 d3 „ Z- d• d• d• e d e e d4 „ Z. d5 „  Z/ e	 e/ ƒ Z0 d6 „  Z1 d• d7 „ Z2 d8 „  Z3 d• d d9 d: „ Z4 d• d• d• d• d• d• d• d• d• d• d• d• d• d• d• d; „ Z5 d< „  Z6 d= „  Z7 d> „  Z8 d? „  Z9 d@ „  Z: dA „  Z; dB „  Z< dC „  Z= dD „  Z> dE „  Z? dF „  Z@ dG „  ZA dH „  ZB dI „  ZC dJ „  ZD dK „  ZE dL „  ZF dM „  ZG dN „  ZH dO „  ZI dP „  ZJ dQ „  ZK dR „  ZL dS „  ZM dT „  ZN dU „  ZO dV „  ZP dW „  ZQ dX „  ZR dY „  ZS dZ „  ZT d[ „  ZU d\ „  ZV d] „  ZW d• d^ „ ZX d• ZY d• ZZ d• Z[ e d_ „ Z\ d` „  Z] d• d• da „ Z^ e db „ Z_ dc „  Z` d• d• dd „ Za de „  Zb df d• d• d• d• dg „ Zc d• d• d• dh „ Zd d• d• d• di „ Ze dj „  Zf dk „  Zg d Zh d• dl „ Zi d• dm „ Zj d• dn „ Zk d• do „ Zl d• dp „ Zm d• dq „ Zn d• dr „ Zo d• ds „ Zp dt e du „ Zq dv dw „ Zr dx „  Zs dy „  Zt dz „  Zu d{ „  Zv d| „  Zw d} „  Zx d~ „  Zy d d€ „ Zz d� „  Z{ d9 e d‚ „ Z| d• d• dƒ „ Z} d„ „  Z~ d… „  Z d† d• d‡ „ Z€ dˆ „  Z� d‰ „  Z‚ dŠ „  Zƒ d‹ „  Z„ dŒ „  Z… d� „  Z† d• d• d• dŽ „ Z‡ d� d d• d� „ Zˆ d• d d d‘ „ Z‰ e e d’ „ ZŠ d• d“ d” „ Z‹ RS(–   t   mli    i   t   comboc   !      C   sµ  | d  k	 r d }	 n  | | | |  _ |  _ |  _ | |  _ | |  _ d  |  _ | |  _ | |  _ | |  _	 |  j
 d | ƒ |  _ d t j | j ƒ  j ƒ  ƒ d |  _ | | g j d  ƒ d k sÄ t ‚ | | g j d  ƒ d k rú t j |  j | | ƒ } n  | d  k	 rot j | j ƒ  t j | ƒ ƒ } t j | j ƒ  | ƒ } |  j d  k	 rot j |  j j ƒ  | ƒ } qon  | d  k r¨| j d t j | j ƒ  j ƒ  d ƒ ƒ } n  | d  k rá| j d t j | j ƒ  j ƒ  d ƒ ƒ } n  | d  k r| j d t j | j ƒ  j ƒ  t ƒ ƒ } n  | d  k	 rl| j ƒ  j  | j ƒ  ƒ rl| j! d	 d d
 | j" ƒ  ƒ j# | ƒ } n  | |  _$ | |  _% t& | ƒ t& | ƒ k sœt ‚ | |  _' | d  k rÀt( j) ƒ  } n  |
 d  k rÛt* j) ƒ  }
 n  t |  _+ | d  k	 rüt, |  _+ n  | d  k	 st ‚ | j- ƒ  s t ‚ | j. ƒ  s2t ‚ | j. ƒ  sDt ‚ | d  k rw| j/ ƒ  sbt ‚ | j/ ƒ  swt ‚ n  | |  _0 |
 |  _1 | |  _2 | |  _3 | |  _4 | |  _5 | d  k	 rÅ| |  _6 n t7 j8 j9 j) ƒ  |  _6 | |  _: |  j: d  k rt8 j; d | d |  j d |  j6 ƒ |  _: n  | d  k	 rL| j ƒ  j  | j ƒ  ƒ sLt ‚ n  | j ƒ  |  _< |  j2 d  k rk| | g j d  ƒ d k s‹t ‚ t& | ƒ t= k	 r©| g } n  | j> ƒ  s»t ‚ | j ƒ  j ƒ  | j ƒ  j ƒ  k såt ‚ xt | D]l } | j> ƒ  st ‚ | j ƒ  j ƒ  | j ƒ  j ƒ  k s.t ‚ | j ƒ  j ƒ  | j ƒ  j ƒ  k sìt ‚ qìWd  } d  }  nŠ | d  k rŒ|  j? d | ƒ } n  d  } |  j d  k	 r¹|  j? d |  j ƒ } n  | d  k ræ|  j: j@ d |  j2 d t, ƒ } n  |  j: jA ƒ  }  |  jB d | d | d | d |  d | d | d | d | d | j# | ƒ d | j# | ƒ ƒ 
|  jC d |	 ƒ | |  _D d  |  _E d  |  _F d  |  _G d  |  _H |  j d  k r±|  jI ƒ  jJ ƒ  |  _ n  d  S(   Nt
   twin_lsq_ft   miller_arrayg      ð?g      @i    i   R/   y                t   new_data_valuet   d_mint   miller_array_twint   mask_paramst   xray_structuret   force_updateRm   t   f_maskt   f_calc_twint   f_mask_twinR–   RL   RJ   t   k_anisotropic_twinRq   Rr   t   target_name(   i    i   y                y                (   i    i    i    i    (K   R   R�   Rp   R‹   t   bin_selectionst   scale_methodR,   t   twin_lawt   twin_law_strR>   t   _set_twin_sett   twin_setR   t   pow2R5   R/   Rv   RP   R}   R…   R–   R   R‰   R†   RŠ   RJ   R�   RC   R„   Rc   R�   RW   R‚   t   complete_arrayR    t
   common_sett   _f_obst   _r_free_flagsRy   t
   _hl_coeffst#   sf_and_grads_accuracy_master_paramst   extractt   alpha_beta_master_paramst   twinR3   t   is_real_arrayt   is_unique_set_under_symmetryt	   is_in_asut
   sfg_paramst   alpha_beta_paramsR£   t   use_f_model_scaledt   max_number_of_binst   n_resolution_bins_outputR¢   RD   R   t   mask_master_paramst   mask_managerRš   Ru   Rz   t   is_complex_arrayt   compute_f_calcRn   t   shell_f_masks_twinRQ   t   set_target_namet   _target_memoryt   _structure_factor_gradients_wt	   _wilson_bt   k_ht   b_hR4   t   log_binning(!   R:   R4   R.   R¥   Rq   Rr   Rm   t   abcdt   sf_and_grads_accuracy_paramsR©   R¾   R£   R¢   R¿   RÃ   R¬   R>   RÀ   Rª   R–   RL   RJ   R¨   R�   Rp   R‹   RÈ   RÁ   R«   Rs   Rˆ   R¦   R§   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR?   D  sØ     							&!!!	$	$	$(	!				 									$!**.	 							c         C   s   d  |  _ |  j f S(   N(   R   RÉ   t   __dict__(   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   __getstate__Ð  s    	c         C   s0   t  | ƒ d k s t ‚ |  j j | d ƒ d  S(   Ni   i    (   R~   R}   RÐ   RŒ   (   R:   t   state(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   __setstate__Ô  s    c         C   s   t  S(   N(   RW   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   is_twin_fmodel_managerØ  s    c         C   sŽ   |  j  d  k r‡ t j j j d |  j ƒ  d |  j j d |  j j	 d |  j j
 d |  j j d |  j j d |  j j d |  j j ƒ |  _  n  |  j  S(	   NRw   t   cos_sin_tablet   grid_resolution_factort   quality_factort   u_baset   b_baset   wing_cutofft   exp_table_one_over_step_size(   RÉ   R   t   cctbxR   t   structure_factorst	   gradientsRN   R½   RÕ   RÖ   R×   RØ   RÙ   RÚ   RÛ   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt!   _get_structure_factor_gradients_wÛ  s    c         C   s�   d  } |  j d  k	 r‹ t j d |  j d d d d ƒ } | j ƒ  d d !} t j j d | j ƒ  d	 | ƒ } | j	 d
 | d | j
 ƒ  ƒ } n  | S(   Nt   symbolt   r_deni   t   t_deni�   i    i	   t   miller_indicest   twin_law_matrixR�   t   crystal_symmetry(   R   R¬   R   t   rt_mxt   as_double_arrayRD   RE   t   create_twin_mateR�   Rƒ   Rå   (   R:   Rž   R[   t   twin_law_xyzRä   t   twin_mi(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR®   ì  s    !		c         C   sÙ   | } | d  k r |  j } n  | d  k r9 |  j ƒ  } n  |  j } | j ƒ  j ƒ  d k ri t d ƒ ‚ n  | j d | d | j d | j	 d | j
 d | j d | j d	 | j d
 | j d | j ƒ 	} | j ƒ  } | j ƒ  S(   Ni    s   Empty miller_array.R£   t	   algorithmRÕ   RÖ   R×   RØ   RÙ   RÚ   RÛ   (   R   R£   R4   R½   R�   Rc   Rd   t!   structure_factors_from_scatterersRë   RÕ   RÖ   R×   RØ   RÙ   RÚ   RÛ   Rš   Rm   (   R:   Rž   R¹   R£   t   xrst   pRš   t   m(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÅ   ù  s(      									c         C   sø   |  j  d  k r+ |  j j d  k s' t ‚ d  S|  j } |  j ƒ  } d } | } x• | d k rã t t j	 |  j
 ƒ  j ƒ  |  j j j j j |  j j ƒ |  j j j j j |  j j ƒ | ƒ ƒ } | | k  rÖ | } | } n  | d 7} qO W|  j d | ƒ d  S(   Ng        g      ð?g{®Gáz„?R>   (   R¯   R   R,   R=   R}   R>   t   r_workRG   R   R‘   RN   R/   R;   RB   R6   R0   RŒ   (   R:   t   tfbRð   R>   t   tf_bestt   r_work_(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_twin_fraction  s$    			c         C   s   t  d |  j |  j j ƒ ƒ S(   Nt   fmodel(   R;   R6   R,   R0   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR•   !  s    c         C   s¢  | d  k r t j } n  |  j ƒ  j ƒ  j t ƒ } |  j ƒ  } | j ƒ  t	 j
 d | d |  j d d ƒ } | j ƒ  j ƒ  } | j ƒ  j ƒ  } | j ƒ  j ƒ  }	 d  }
 | d k rë | rë | j d |  j ƒ  ƒ j ƒ  }
 | | @|	 @|
 @} n | | @|	 @} | rž| J| d I| j t ƒ IJ| d I| j t ƒ IJ| d	 I|	 j t ƒ IJ| d k r‚|
 d  k	 r‚| d
 I|
 j t ƒ IJn  | d I| j t ƒ IJn  | S(   Nt
   miller_obsR.   R)   t   silenti    RB   s   basic_wilson_outliers    =s   extreme_wilson_outliers  =s   beamstop_shadow_outliers =s   model_based_outliers     =s   total                    =(   R   R   R   R.   R/   RP   R3   R4   t#   set_observation_type_xray_amplitudeR   t   outlier_managerR´   t   basic_wilson_outlierst   extreme_wilson_outlierst   beamstop_shadow_outlierst   model_based_outliersRB   RW   (   R:   t   showt   logt	   use_modelt   n_freet   foR[   t   s1t   s2t   s3t   s4(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   outlier_selection$  s4     
			c         C   s  | d  k r t j } n  | rP | d IJt d |  j ƒ  j ƒ  d d d | ƒ n  |  j d | d | d | ƒ } | j t ƒ d k r|  j ƒ  j	 ƒ  } |  j ƒ  j ƒ  } |  j ƒ  j
 ƒ  } | j ƒ  } |  j ƒ  j ƒ  j ƒ  }	 | r¿| d	 IJ| d  k	 r`| d
 IJd }
 x¯ | D]H } | | } | |
 | d | d | d | | | | |	 | f IJqWq¿| d IJd }
 xL | D]A } | | } | |
 | d | d | d | | |	 | f IJqwWn  |  j d | d t d t ƒ } | r| d IJt d | j j j ƒ  d d d | ƒ qn  d  S(   Ns   Distribution of F-obs values:R/   t   n_slotsi
   Rÿ   Rþ   R   i    s   Discarded reflections:s3       h    k    l           f_obs       sigma   d_mins   %5d%5d%5d %15.4f %10.4f %7.4fi   i   s(       h    k    l           f_obs    d_mins   %5d%5d%5d %15.4f %7.4fRh   t   in_placet   deep_copy_xray_structures>   
Distribution of active F-obs values after outliers rejection:(   R   R   R   t   show_histogramR4   R/   R  RP   RW   R�   t   sigmast
   iselectionR5   R6   R3   R,   (   R:   Rþ   Rÿ   R   t   o_selR�   R/   R  t	   o_sel_negR5   t   fmtt   siR�   t   new(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   remove_outliers?  sD     
(

#
#	
c         C   sq   |  j  d  k	 rd |  j d  k s$ | rd t j d |  j ƒ  d |  j  j ƒ  j ƒ  d ƒ j } | |  _ n	 |  j } | S(   NRž   t
   n_residuesi   (	   R£   R   RÊ   R   t   ml_iso_absolute_scalingR4   t
   scatterersRc   t   b_wilson(   R:   R¤   R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   wilson_be  s    		i'  c         C   sk   d „  } t  j t  j |  j ƒ  j ƒ  ƒ t  j |  j ƒ  j ƒ  ƒ ƒ } | d | d | d | ƒ } | | f S(   Nc         S   sS  t  j d |  d | ƒ } | j ƒ  } |  j ƒ  } t  j ƒ  } t  j ƒ  } t | j ƒ  ƒ } xh | D]` \ }	 }
 | j ƒ  | j ƒ  |	 d } |
 d | } | j | | d ƒ | j | ƒ | } qa Wt  j ƒ  } x4 t | ƒ D]& \ } } | j t  j	 | | ƒ ƒ qÞ Wd  } x> t | | ƒ D]- \ } } | | k  r| d  k r| } qqW| S(   NR/   R  i   g      Y@i   (   R   t	   histogramt   data_minRc   R˜   t	   enumeratet   slotst
   slot_widthR€   Re   R   t   zip(   R/   R  t	   thresholdt   hmt   lc_1Rc   t   valuest   countst   s_1t   i_1t   n_1t   hc_1RP   t
   new_countsR�   t   cR[   t   v(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   build_histogramr  s(    
 R/   R  R  (   R   RG   R4   R/   t   f_model_scaled_with_k1(   R:   t   threshold_percentR  R+  t   dt   r(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt%   top_largest_f_obs_f_model_differenceso  s
    	c         C   s
   |  j  ƒ  S(   N(   R6   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRŽ   ‹  s    c      3   C   s—  | d  k r3 t j |  j ƒ  j ƒ  j ƒ  t ƒ } n  |  j ƒ  d  k	 r` |  j ƒ  j d | ƒ } n d  } |  j	 d  k	 r� |  j	 j d | ƒ } n d  } |  j
 } | d  k	 rÀ | rÀ |  j
 j ƒ  } n  g  |  j ƒ  D] } | j d | ƒ ^ qÍ } |  j j j d  k r	d  }	 n+ g  |  j j j D] }
 |
 j | ƒ ^ q}	 |  j j j d  k rRd  } n |  j j j j | ƒ } |  j j j d  k rˆd  } n |  j j j j | ƒ } d  } |  j rè|  j j j d  k rÍd  } qè|  j j j j | ƒ } n  t d |  j ƒ  j d | ƒ d |  j j d | ƒ d |  j ƒ  j d | ƒ d |  j ƒ  j d | ƒ d t |  j ƒ d |  j d | d	 t |  j ƒ d
 | d |  j ƒ  j d | ƒ d | d t |  j ƒ d | d |  j d |  j  d |  j! d |	 d | d | d | d |  j" d |  j# d |  j$ d |  j% d |  j& ƒ } |  j' | _' |  j( | _( |  j) | _) |  j* | _* | r“xF t+ |  j, j- ƒ  |  j, j. ƒ  ƒ D]  \ } } | j, | |  j, | <qlWn  | S(   NRh   R4   R.   Rq   Rr   RÏ   R©   RÎ   R¾   R£   Rm   R¥   R¢   RÃ   R¬   R>   RÀ   R–   RL   RJ   R¨   RÈ   RÁ   R�   Rp   R‹   (/   R   R   R�   R4   R/   Rc   R3   R<   R6   RÃ   R£   t   deep_copy_scatterersRx   R,   R;   R–   R—   RL   RJ   R¯   R=   Rš   R´   Rq   Rr   R   R½   R©   R¾   Rm   R¢   R¬   R>   RÀ   RÈ   RÁ   R�   Rp   R‹   R¹   R­   RË   RÌ   R  RÐ   t   keysR"  (   R:   Rh   R	  R
  t   new_hl_coeffst   new_mask_managerRí   Rˆ   t   new_f_maskst   new_k_maskst   kmRL   RJ   R¨   R[   t   kR*  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR6   Ž  sx     '	+	+												.c         C   sR   | d  k r d } n  | d  k r* d } n  |  j d |  j ƒ  j d | d | ƒ ƒ S(   Ni    Rh   t   d_maxR    (   R   R6   R4   t   resolution_filter_selection(   R:   R9  R    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   resolution_filterÑ  s     	 		c      	   C   sG  | d  k	 r | |  _ n  |  j j d  k s9 |  j d  k	 rB t } n  d  } d  } | rŠ |  j ƒ  } |  j d  k	 rŠ |  j d |  j ƒ } qŠ n  d  } d  } | rŽ|  j j	 d |  j d | ƒ }	 |  j
 ƒ  }
 |	 d  k	 rÜ |	 } n  |	 d  k	 r||
 d  k	 r|t |
 ƒ t |	 ƒ k st ‚ xg t t |
 ƒ ƒ D]P } |	 | j ƒ  j ƒ  |
 | j ƒ  j ƒ  k r%|	 | j |
 | ƒ | | <q%q%Wn  |  j j ƒ  } n  | | | | g j d  ƒ d k r¸t } n t } | d  k rë|  j j d  k	 rë|  j ƒ  } n  | d  k r|  j j d  k	 r|  j
 ƒ  } n  | rC|  j d | d | d | d | ƒ n  d  S(	   NRž   R£   R¤   i   Rm   R¥   R¦   R§   (   R   R£   R,   R;   R¯   R3   RÅ   R¬   RÃ   Rn   Rx   R~   R}   t   rangeR/   Rc   R²   RÆ   RP   RW   Rm   RQ   (   R:   R£   t   update_f_calct   update_f_maskt   force_update_f_maskRm   R¦   Rx   R§   t   mngmskst   curfmsksR�   t   set_core_flag(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_xray_structureÙ  sN    			
,%!		c         C   sL   t  d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j d |  j ƒ  d |  j ƒ  ƒ S(   NR4   Rm   Rx   Rv   Rq   Rr   (   Rl   R4   Rm   Rx   Rv   Rq   Rr   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   fmodel_kbu  s    	c         C   s†   |  j  j d  k r: |  j d k s6 |  j d  k s6 t ‚ d  St d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j	 d |  j
 ƒ  d |  j ƒ  ƒ S(   Ni    R4   Rm   Rx   Rv   Rq   Rr   (   R,   R=   R   R>   R}   Rl   R4   R¦   t   f_masks_twinRv   t   f_part1_twint   f_part2_twin(   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   fmodel_kbu_twin  s    $	c         C   s'  d  } d  } |  j d  k rwt j j d | d | d | d | d | d | d |	 ƒ } |  j d  k	 r· t j j d |  j d |  j ƒ d |  j j ƒ  d | d | d |
 d | d | ƒ } n  |  j ƒ  } |  j	 } |  j
 } | j ƒ  j ƒ  | j j j ƒ  k rA| j | j ƒ } | j | j ƒ } | d  k	 rA| j | j ƒ } qAn  t d	 | d
 | d | d | d | d |  j ƒ |  _ n¬ |  j j j d | d | d | d | d |	 d | d | ƒ } |  j d  k	 r|  j j j d | d | d | d | d |
 d | d | ƒ } n  |  j j d	 | d
 | d |  j ƒ d  S(   NRm   Rx   Rq   Rr   R—   RL   RJ   Rž   R;   R=   R4   R.   R<   R>   (   R   R,   RD   t   initR¯   RÅ   RÃ   RÆ   R4   R´   Rµ   R/   Rc   RB   R²   R>   R;   RŒ   R=   RQ   (   R:   Rm   R¥   R¦   R§   Rq   Rr   RF  RG  RJ   R¨   RL   R–   t   core_t
   core_twin_R4   R.   R<   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRQ     sl    			$	t    c      
   C   s\  | d  k r d  St d | ƒ } d | d } | d | d | d IJ| d |  j j |  j j d f IJ| d	 IJ|  j ƒ  } d
 t d d d |  j ƒ  ƒ j ƒ  t d d d |  j	 ƒ  ƒ j ƒ  t d d d | j ƒ j ƒ  t d d d | j
 ƒ j ƒ  t d d d | j ƒ j ƒ  f } d d t | ƒ } | | | d IJ| d d d d IJ| Jd  S(   Ns   |-t   |iP   i   t   -sB   | Solvent (probe) radius= %4.2f Shrink truncation radius= %4.2f%s|t    i   sO   | all data:                         500 lowest resolution reflections:        |s<   | r_work= %s r_free= %s     r_work= %s (resolution: %s-%s A)t   formats   %6.4ft   values   %6.2fs   %7.2fiN   iM   s   |-|s                    (   R   R~   R¢   t   solvent_radiust   shrink_truncation_radiust
   r_work_lowR   Rð   t   stript   r_freeR    R9  (   R:   t   prefixR)   t   line_lent   fill_lent   rwlt   fmtlt   pad(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt!   show_mask_optimization_statistics`  s,     	"i   c         C   s´  t  |  j ƒ  ƒ d k r t S| d  k r1 d } n  |  j ƒ  } |  j ƒ  } |  j j } |  j j } |  j	 d d d | ƒ d d d d d	 d
 d d d d d d d d d g }	 g  }
 g  } x9 |	 D]1 } x( |	 D]  } |
 j
 | ƒ | j
 | ƒ qÊ Wq½ W|	 } |	 } t | |
 ƒ } t } g  } | t k s3| d k r’t } d d l m } | j d | d |  j d | d d ƒ } g  | D] \ } } | ^ qw} nI xF | D]> \ } } |  j | | f ƒ } | j d | ƒ | j
 | ƒ q™Wx] | D]U } | r| j d | ƒ n  | j | k  râ| j } | j } | j } | j } qâqâW| d  k	 rN| Jn  | |  j _ | |  j _ |  j |  j _ |  j d |  j d t d t d t ƒ |  j	 d d d | ƒ t S(    Ni   RW  s   Mask optimization: startR)   g        gš™™™™™¹?gš™™™™™É?g333333Ó?gš™™™™™Ù?g      à?g333333ã?gffffffæ?gš™™™™™é?gÍÌÌÌÌÌì?g      ð?gš™™™™™ñ?g333333ó?gÍÌÌÌÌÌô?gffffffö?iÿÿÿÿ(   t   easy_mpt	   processest
   fixed_funct   argst   func_wrappert   buffer_stdout_stderrR£   R=  R>  R?  s   Mask optimization: final(   R~   Rx   RW   R   Rð   RV  R¢   RR  RS  R]  R€   R  R   R3   t   libtbxR^  t   pool_mapt   try_mask_paramsRþ   t   r_solvt   r_shrinkRÃ   RC  R£   (   R:   t   paramst   thoroughR)   t   nproct   rw_t   rf_t   r_solv_t	   r_shrink_t   trial_ranget	   r_shrinkst   r_solvst   tr1t   tr2Rg  Rh  t   trial_paramst   parallelt   mask_resultsR^  t   stdout_and_resultst   soR/  R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   optimize_maskw  sp     	3			"			 		c         C   s’   | \ } } | |  j  _ | |  j  _ |  j  |  j _  |  j d |  j d t d t d t ƒ t d | d | d |  j	 ƒ  d |  j
 ƒ  d	 |  j ƒ  j	 ƒ S(
   NR£   R=  R>  R?  Rg  Rh  Rð   RV  RT  (   R¢   RR  RS  RÃ   RC  R£   RW   R3   t   mask_resultRð   RV  RT  (   R:   Ra  Rg  Rh  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRf  ²  s    		c         C   s=   x6 |  j  ƒ  D]( } t j | j ƒ  ƒ j d ƒ s t Sq Wt S(   Ni    (   Rx   R   RG   R/   R‚   RW   R3   (   R:   Rˆ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR’   Ã  s    c         C   s;   t  j t  j |  j ƒ  j ƒ  ƒ t  j |  j ƒ  j ƒ  ƒ ƒ S(   N(   R   RG   R4   R/   R,  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_obs_f_model_abs_differencesÉ  s    t   spherec         C   sÆ  | d k s t  ‚ | d k r3 | d  k	 s3 t  ‚ n  |  j |  j |  j g j d  ƒ d k s` t  ‚ |  j d  k su t  ‚ t j |  j	 ƒ  j
 ƒ  t j |  j ƒ ƒ } t j d |  j	 ƒ  j ƒ  d |  j ƒ  d j ƒ  g d |  j g d |  j d |  j ƒ  j ƒ  d	 |  j ƒ  j ƒ  d
 | d |  j	 ƒ  j ƒ  d |  j	 ƒ  j
 ƒ  d |  j ƒ 
} t d |  j ƒ  j ƒ  d t j | j ƒ ƒ } | j | } t |  j ƒ  ƒ j ƒ  }	 t j | ƒ }
 t j |	 |
 ƒ } t | j ƒ  j ƒ  d d d g ƒ sàt  ‚ | d k rFg  | D] } | d d ^ qó} t j d |  j	 ƒ  j ƒ  d |  j ƒ  j  ƒ  d | ƒ } n6 t j d |  j	 ƒ  j ƒ  d |  j ƒ  j  ƒ  d | ƒ } | r°| j ƒ  } | j! d  ƒ | j" d | ƒ } n  t j# | j ƒ  j$ ƒ  d ƒ } |  j% d | ƒ } t& j' d | d |  j( ƒ j) d |  j* d t+ ƒ d } d t j, | j- ƒ  j ƒ  ƒ d } t j d | j ƒ  d | j ƒ  g d |  j g d |  j d | d	 | d
 | d | j ƒ  d | j
 ƒ  d | ƒ 
} | j | } t j. d | d | ƒ S(!   NR}  t   boxi    Rm   Rn   Ro   Rp   Rq   Rr   Rs   Rt   Ru   Rv   Rf   Rg   i   i   Rå   t   anomalous_flagt	   max_indexR    R�   Rž   R¢   R£   R¤   g      ð?g      @Rw   R/   (   R}  R~  (   i    i    i    (/   R}   R   R�   Rp   R‹   RP   R¬   R   R‰   Rm   R†   RŠ   R…   R;   R/   Rx   Rq   Rr   R�   Rv   Rk   R4   R   RG   RB   R,  R   t   min_max_meant   as_tupleR   t	   build_setRå   R  R€   Rƒ   R„   Rc   RÅ   R   Rš   R¢   Rn   R£   R3   R°   R5   RC   (   R:   t   n_realR    t   methodt   include_f000Rs   R;   t   k1t   fmodel_datat   fm1t   fm2R.  R�   R€  t   full_setR�   t   zerot   f_calc_full_sett   f_mask_full_sett   ss_full_sett   fmodel_data_full_set(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_model_full_setÍ  sz     -$		-*!					#				c         C   sg   d  } t j j d d ƒ s* t d ƒ ‚ n d d  l j } | d  k rQ t j } n  | j	 d |  d | ƒ S(   Nt   namet   solve_resolves.   solve_resolve not installed or not configured.iÿÿÿÿRõ   Ri  (
   R   Rd  t   envt
   has_moduleR   t   solve_resolve.masksR   R   R   t   nu(   R:   Ri  Rÿ   t   phenix_masks(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   compute_f_part1  s     c         C   s$  |  j  d  k r d  Sd „  } |  j  j ƒ  } | j t ƒ d k rD d  S|  j  j d | ƒ } | j ƒ  j ƒ  } | j d d ƒ |  j	 ƒ  j
 d | d |  j j ƒ j ƒ  } d  } |  j j d  k	 rê |  j ƒ  j
 d | d |  j j ƒ j ƒ  } n  t t j | j ƒ  t j d ƒ ƒ ƒ } |  j }	 d }
 d } d  } t j |  j ƒ  j ƒ  j ƒ  d ƒ } | d  k	 rr| j d | ƒ } n  |  j d	 | j d | ƒ d
 | ƒ |  j ƒ  } d g t | | d d ƒ } g  t d d ƒ D] } | d ^ qÎ} x¹ | D]± } x¨ | D]  } | d | d | d |	 d | ƒ } d  } | d  k	 rU| d | d | d |	 d | ƒ } n  |  j d	 | d
 | ƒ |  j ƒ  } | | k  rø| } | }
 | } qøqøWqëW| d |
 d | d |	 d | ƒ } d  } | d  k	 r÷| d |
 d | d |	 d | ƒ } n  |  j d	 | d
 | ƒ |
 | |  _ |  _  d  S(   Nc         S   s,   | j  d |  t j | | ƒ | j ƒ  ƒ S(   NR/   (   Rƒ   R   t   expR/   (   R8  t   bRv   t   f(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_k_exp_scaled  s    i    Rh   RQ  i   R£   Rë   R/   Rr   RG  i2   iõÿÿÿi   g      $@R8  R›  Rv   Rœ  (!   R£   R   t   hd_selectionRP   R3   R6   R  t   extract_occupanciest   set_occupanciesR4   Rì   R½   Rë   Rm   R,   R=   R¦   R|   R   t   mint   extract_u_iso_or_u_equivR   R“   Rv   R„   R/   Rc   Rƒ   RQ   Rð   R<  RË   RÌ   (   R:   Rÿ   R�  t   hdst   xrsht   occt   fht   fh_twint   b_minRv   t   kbestt   bbestRG  RŒ  t   rwst   b_rangeR�   t   k_rangeR›  R8  t   fh_kbt
   fh_kb_twint   rw(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_f_hydrogens_grid_search  sb     	 (	$	&!$!$c      #   C   s  |  j  d k	 r |  j ƒ  d St j |  j ƒ  j ƒ  j ƒ  d ƒ } |  j ƒ  j	 ƒ  } |  j
 d k rf d S|  j
 j ƒ  } | j t ƒ d k rŽ d S|  j
 j d | ƒ } | j ƒ  j ƒ  } | j d ƒ r× | j d d ƒ n  |  j ƒ  j d | d |  j j ƒ j ƒ  } t d |  j ƒ  d	 | d
 | g d |  j ƒ } t j d | d |  j ƒ  d d g d d d d d d d d d g d t d t d t d d d d d d d d d t d d d d d d d d  ƒ }	 d! „  }
 |  j } |	 j d |	 j } } |
 d" | d# | d | d$ | ƒ } | } t d |  j ƒ  d% |  j ƒ  d	 | d& | d' d( ƒ } | j  d) t d* t ƒ |  j! ƒ  |  j" ƒ  } | j! ƒ  | j" ƒ  } | j# d ƒ s•t$ ‚ |  j% d+ t j& | j ƒ  d ƒ d, | | d- | j' d. | j ƒ  d | | j( ƒ  d ƒ ƒ | | |  _) |  _* d S(/   s{   
    Include scattering contribution from H atoms.
    Fmodel = scale_1 * (F_atoms + scale_2 * F_mask + scale_3 * F_H)
    Ni    Rh   RQ  i   R£   Rë   R4   Rm   Rx   Rv   t   fmodel_core_datat	   k_initialt	   b_initialt	   u_initialt   refine_kt   refine_bt   refine_ut   min_iterationsi2   t   max_iterationst   fmodel_core_data_twinR>   t   symmetry_constraints_on_b_cartt	   k_sol_maxg      i@t	   k_sol_ming      iÀt	   b_sol_maxg     Àb@t	   b_sol_ming     ÀbÀc         S   s,   | j  d |  t j | | ƒ | j ƒ  ƒ S(   NR/   (   Rƒ   R   Rš  R/   (   R8  R›  Rv   Rœ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR�  z  s    R8  R›  Rœ  R.   R¥   R«   Rœ   R  t   update_f_part1RL   RJ   Rr   R/   (+   R¬   R   R±  R   R„   Rm   R/   Rc   RB   RŽ   R£   Rž  RP   R3   R6   R  RŸ  R‚   R   R4   Rì   R½   Rë   Rl   Rv   t   bsst   kbu_minimizerRW   t   k_minR¨  Rš   R.   t   update_all_scalesRL   RJ   R2   R}   RQ   R˜   Rƒ   R—   RË   RÌ   (   R:   Rÿ   RŒ  RB   R£  R¤  R¥  R¦  R²  t	   minimizedR�  Rv   R©  Rª  R®  Rˆ   t   ktt   ktp(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_f_hydrogensK  sz    
$   						!		
	&g      Àc         C   s  t  j |  j ƒ  j ƒ  j ƒ  d ƒ } |  j ƒ  j d | ƒ } |  j d | ƒ t j j	 j
 ƒ  } | j d | _ | j d | _ t j j d |  j j d t ƒ d |  j ƒ  j ƒ  d | ƒ } | j ƒ  } t j d	 |  j j ƒ  d
 |  j ƒ  j ƒ  d | j ƒ  ƒ } |  j ƒ  j d d d t d t ƒ }	 |	 j d | ƒ }
 |
 j ƒ  |
 j ƒ  } t j d | d d d d ƒ | | } t  j  | ƒ } | d k r�d  S| d k  s¢t! ‚ |	 j" d | d t d t d t ƒ } t# d |  j ƒ  d |  j$ ƒ  d |  j% ƒ  d | ƒ } | j& d t d t ƒ | j' ƒ  | j( ƒ  } } |  j) ƒ  |  j* ƒ  } | j) ƒ  | j* ƒ  } | j+ d ƒ sit! ‚ |  j d t  j, | j ƒ  d ƒ d  | | d | j d | j ƒ  d | | j- ƒ  d ƒ ƒ t. | |  j' ƒ  d! ƒ sát! ‚ t. | |  j( ƒ  d! ƒ sÿt! ‚ d  S("   Ni    R/   Rq   i   R£   t   sites_mod_positiveR    R¢   R†   t   space_group_infot   pre_determined_n_realt   map_types   mFo-DFct
   isotropizet   exclude_free_r_reflectionst   crystal_griddingt   map_dataR¡  t   maxt   mapt	   use_scaleR  t   use_sgR4   R.   Rm   R¥   R  RÁ  RL   i   RJ   g-Cëâ6?(/   R   R„   Rm   R/   Rc   Rƒ   RQ   RD   R   RÂ   R·   RR  RS  t   asu_maskR£   t   expand_to_p1R3   R4   R    t   mask_data_whole_ucR   RÐ  R†   RË  t   focust   electron_density_mapt   map_coefficientsRW   t   fft_mapt   apply_sigma_scalingt   real_map_unpaddedt   truncate_between_min_maxR¡  R}   t   structure_factors_from_mapRš   R.   RB   RÅ  Rð   RV  RL   RJ   R2   R˜   R—   R   (   R:   t   purposet   refinement_neg_cutoffRŒ  t   zero_at   mpt   mmtbx_masks_asu_mask_objt   bulk_solvent_maskRÐ  t   mcRÜ  RÑ  t   min_mapt   f_diffRˆ   R°  t   rfRÇ  RÈ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   update_f_part1_all“  sj    $			
	
 				
	&c   !   
   C   s~  t  j |  j ƒ  j ƒ  j ƒ  d ƒ } |  j ƒ  j d | ƒ } |  j d | ƒ |  j d k r_ d S|  j	 ƒ  j
 ƒ  j ƒ  } |  j ƒ  j ƒ  j ƒ  } t  j | ƒ d k rÔ | d k j t ƒ d k rÔ |  j d d ƒ } n |  j ƒ  } | j	 ƒ  j d | j	 ƒ  j ƒ  d t j d	 d% ƒ } t j j d | j j d t ƒ d | j ƒ  ƒ } t j j d ƒ } | j ƒ  }	 | j ƒ  j  d d d t d t! ƒ }
 t } | j" ƒ  j ƒ  } | rîd | j t ƒ | j t! ƒ g k rî|
 j d |
 j ƒ  j# | d& ƒ ƒ }
 n  |
 j$ d t j d | ƒ } | j% ƒ  } | |	 d } | j& | | ƒ } | j ƒ  } | j' ƒ  } t j( d | |
 j) ƒ  j* ƒ  d d ƒ } | j+ ƒ  } g  } | j, ƒ  } xt- | j. ƒ  ƒ D]ò \ } } | d k rÄq¦n  | d k r¦t j/ d | d | d | ƒ } | j& | | | j ƒ  ƒ } |
 j d | j0 |
 j1 ƒ  ƒ ƒ } t2 d | j	 ƒ  d | j" ƒ  d | j3 ƒ  d  | ƒ } | j4 d! t! d" t! ƒ | j, ƒ  | k  r˜| j5 | ƒ q˜q¦q¦W| j ƒ  } d# | k rÏ| j# | d# k d ƒ } n  x& | D] } | j# | | k d# ƒ } qÖW| j# | d# k d ƒ } | | j6 ƒ  d } | j& | | | j ƒ  ƒ } |
 j d$ |
 j1 ƒ  d | j0 |
 j1 ƒ  ƒ ƒ } t2 d | j	 ƒ  d | j" ƒ  d | j3 ƒ  d  | ƒ } | j4 d! t! d" t! ƒ | j7 ƒ  | j8 ƒ  } | j7 ƒ  | j8 ƒ  } | j d | j ƒ  d# | | j9 ƒ  d ƒ } |  j ƒ  } | j: | ƒ }  |  j d |  j ƒ  d ƒ }  | j; |  ƒ } | j< | ƒ \ } } |  j= d | ƒ d S('   s‹  
    Identify negative blobs in mFo-DFc synthesis in solvent region only,
    then leave only those blobs (set everything else to zero),
    then FT modified synthesis into f_diff s.f. and add them to Fmodel as scaled
    Fmask contribution. Finally, extract updated scales and scaled f_diff and
    update self with them. Store f_diff in F_part_1 partial contribution array
    of Fmodel, which is an arbitrary choice (could be F_part_2, for instance).
    Rationale: there should not be negative peaks in bulk-solvent region unless
               they are noise or errors of bulk-solvent model, so they are
               always good to remove.
    i    R/   Rq   Ng      @iô  R    t   symmetry_flagst   resolution_factorg      ð?i   R£   RÊ  R„  t   cctbx_asymmetric_map_extRÍ  s   mFo-DFcRÎ  RÏ  y                RÐ  g      ð¿RÑ  R  gš™™™™™É?i(   t   connectivity_mapt	   region_idR4   R.   Rm   R¥   R  RÁ  i   R�   gUUUUUUÅ?y                (>   R   R„   Rm   R/   Rc   Rƒ   RQ   R£   R   R4   t   space_groupRy   R5   RÒ  RP   R3   R;  RŽ   RÐ  R    R   t   use_space_group_symmetryRD   R   RÖ  R×  R„  t   boostt   pythont
   import_extRØ  RÚ  RÛ  RW   R.   t   set_selectedRÜ  RÞ  t   asymmetric_mapt   shift_origint   connectivityR†   t   volumeR[   RV  R  t   regionst   update_f_part1_helperRÝ   R�   Rš   RB   RÅ  R€   t	   as_doubleRL   RJ   R—   t   lone_sett   concatenatet   common_setsRŒ   (!   R:   RŒ  Rã  t   sgtR5   t   S_E_L_FRÐ  Rå  t   asu_map_extRæ  Rç  RÏ  t   r_free_flags_dataRÜ  RÑ  t   map_filtered_invertedt   asu_mapt   map_data_asut   cot   connt   goodRV  R�   R*  t   map_data_asu_Ré  Rˆ   t   FRÇ  RÈ  Rq   t   fct   fc_lp(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÁ  Í  s²    $ 0			$					 				  		.c         C   s2  |  j  ƒ  } |  j ƒ  } |  j ƒ  } |  j ƒ  } |  j ƒ  } |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } g  } xÄ|  j D]¹}	 |  j j	 j
 |	 ƒ }
 t j |
 ƒ } t j |
 ƒ } |	 | @} | j t ƒ } |	 | @j t ƒ } | j
 |	 ƒ } | j
 |	 ƒ } t j | j ƒ  ƒ } t j t j | j ƒ  ƒ ƒ } | j d | ƒ d } t j | j
 |	 ƒ ƒ } t j | j
 |	 ƒ ƒ } t j | j
 | ƒ j ƒ  | j
 | ƒ j ƒ  d ƒ } d j g  | D]" } d t j | j
 |	 ƒ ƒ ^ q­ƒ } | j t d | d | d | d | d	 | d
 | d | d | d | d | d | ƒ ƒ qq W| S(   NR9  g      Y@i   RO  s   %5.3fR    t   nwt   nft   fo_meant   fm_meant   cmplt   kit   kaR/  R7  (   R—   RL   RJ   R,  R4   R.   R/   Rª   R,   R5   R6   R   R¡  RÒ  RP   R3   t   meanRG   t   completenessR   R‘   t   joinR€   R   (   R:   R—   RL   RJ   RB   R4   t
   work_flagst
   free_flagsR[   t   selR.  R    R9  t   sel_workR  R  R  Rˆ   R  R  R  R  R  R/  t   km_R7  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   bins:  sN    
8c         C   s  | d  k r t j } n  d } | d  k	 r; | d | 7} n  d } d } d } d t | ƒ d }	 | r” | d Id	 |	 I| Id	 |	 Id IJn  | | IJ| | IJ| | IJd
 }
 | d IJxd |  j ƒ  D]V } | |
 | j | j | j | j | j	 | j
 | j | j | j | j | j f IJqÏ Wd „  } | |  ƒ \ } } | Jd } d | | f } | r{| | IJ| | IJn  d  S(   Ns   Statistics in resolution binss    %ss   Total model structure factor:s1     F_model = k_total * (F_calc + k_mask * F_mask)
s)       k_total = k_isotropic * k_anisotropiciM   i   s   
t   =s;   %7.3f-%-7.3f %6.2f %5d %5d %6.4f %9.3f %9.3f %5.3f %5.3f %ssO      Resolution    Compl Nwork Nfree R_work    <Fobs>  <Fmodel> kiso   kani kmaskc         S   st   |  j  ƒ  |  j ƒ  } |  j j ƒ  |  j  ƒ  j ƒ  k s= t ‚ t j j d t j	 |  j ƒ d | ƒ } | j
 | j f S(   Nt   xt   y(   RL   RJ   Rv   Rc   R}   t   scitbxR   t   gaussian_fit_1d_analyticalR   t   sqrtt   aR›  (   R:   t   k_totalR/  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   overall_isotropic_kb_estimates  s    ''s@     Approximation of k_total with k_overall*exp(-b_overall*s**2/4)s%       k_overall=%-8.4f b_overall=%-8.4f(   R   R   R   R~   R  R9  R    R  R  R  R/  R  R  R  R  R7  (   R:   Rÿ   t   suffixt   show_headert   show_approxt   lt   f1t   f2t   f3Rï   R  R›  R'  t	   k_overallt	   b_overallt   f4(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRþ   c  s4       -



T	
g      à?gffffffæ?c         C   sG  t  j d |  ƒ j d d d t d t ƒ } |  j ƒ  j d |  j ƒ  j ƒ  d d ƒ } t j	 d
 | d | ƒ } | j
 ƒ  | j ƒ  } t j ƒ  } x- |  j j ƒ  D] } | j | j | ƒ ƒ qž Wt j | | ƒ }	 | |	 d k }
 t j	 d
 | d |  j ƒ  ƒ } | j
 ƒ  | j ƒ  } |  j j ƒ  } x· t | ƒ D]© \ } } t j d | j ƒ  d | j ƒ  d | j ƒ  d t j | g ƒ d t j d g ƒ ƒ } t j d | j | ƒ d | j | ƒ ƒ j ƒ  } | | k  r0t |
 | <q0q0W|
 j t ƒ d |
 j  ƒ  GH|  j j |
 ƒ } |  j! ƒ  } | j" d | d t d t ƒ | j# d t ƒ | S(   sr   
    Identify and remove 'unreliably' pleaced atoms, and create a new fmodel
    with updated xray_structure.
    Rõ   RÍ  s   2mFo-DFcRÎ  t   fill_missingR    Rí  g      ð?i   RÐ  t   fourier_coefficientsg      @R†   t
   fft_n_realt
   fft_m_realt
   sites_cartt
   site_radiig      ø?R   R!  g      Y@R£   R=  R>  RÁ  gUUUUUUÕ?($   R   RÚ  RÛ  R3   RW   R4   RÐ  R    R   RÜ  RÝ  RÞ  R   R˜   R£   t
   sites_fracR€   t   eight_point_interpolationt   mean_defaultRB   R6  R  R   t   grid_indices_around_sitesR†   RÙ  t   allt   vec3_doublet   linear_correlationR6   t   coefficientRP   Rc   RŽ   RC  RÅ  (   R:   t   min_map_valuet   min_cct   coeffsRÐ  RÜ  RÑ  t	   rho_atomst	   site_fract   rho_meant   sel_excludet	   map_data2R6  t   i_seqt	   site_cartRh   t   cct   xray_structure_truncatedt   fmodel_result(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt"   remove_unreliable_atoms_and_update€  sX    					
	
	 	c   
      C   se  d d  l  } d d  l } d d l m } |  j ƒ  } t j d | ƒ j d d d t d t	 ƒ } d d  l
 } | j j d |  j ƒ j } | j j | j j ƒ j ƒ  } | d	 | _ d | _ d | _ d | _ d | _ t j d |  j ƒ  j ƒ  d |  j ƒ  j ƒ  d t	 ƒ j d |  j d d  ƒ ƒ } | j j d | d |  j ƒ  d | d | d | ƒ  d t	 ƒ }	 |	 j  S(   Niÿÿÿÿ(   t   null_outRõ   RÍ  s   2mFo-DFcRÎ  R2  R£   g333333Ã?g      ð?i   i   Rå   R�   R  R/   t   map_calculation_helperRi  R4   t   hl_coeffs_startt
   map_coeffsRÿ   t   as_gui_programgUUUUUUÕ?(!   t   mmtbx.density_modificationt
   iotbx.philt   libtbx.utilsRN  RM  R   RÚ  RÛ  R3   RW   t   mmtbx.utilsRE   t   f_000R£   t   solvent_fractiont   philt   parset   density_modificationt   master_params_strR·   RÖ   t   initial_stepst   shrink_stepst   final_stepsR   t   setR4   Rå   R�   RC   t!   f_model_phases_as_hl_coefficientsR   t   map_coeffs_in_original_setting(
   R:   RD   t   iotbxRN  t   fmodel_truncatedRB  t   solvent_contentRi  t   hl_modelt   dm(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   classical_dm_map_coefficients¸  s>    									c         C   sµ   t  j j d ƒ s! t d ƒ ‚ n  |  j ƒ  } t j d | ƒ j d d d t d t	 ƒ } d d  l
 } | j j d	 |  j ƒ j } | j j d | d
 | d d  d d d d d t d t ƒ S(   NR“  s   solve_resolve not available.Rõ   RÍ  s   2mFo-DFcRÎ  R2  iÿÿÿÿR£   RQ  t   pdb_inpt   mask_cyclesi   t   minor_cyclest   use_model_hlt   fill(   Rd  R”  R•  R   RM  R   RÚ  RÛ  R3   RW   RV  RE   RW  R£   RX  t   resolve_dm_mapR   (   R:   Rd  RB  RD   Re  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   resolve_dm_map_coefficientsÙ  s&    		c         C   s  |  j  ƒ  j ƒ  j ƒ  d k } |  j ƒ  d j | ƒ } |  j j | ƒ } t j j d t	 j
 | ƒ d | ƒ } t	 j | ƒ | j } } | d k  r› d } n  | d k r° d } n  | d k  rÅ d } n  | d k rÚ d } n  g  t d d ƒ D] } | d	 ^ qê } g  t d
 d ƒ D] }	 |	 ^ q}
 d } d \ } } xÀ | D]¸ } x¯ |
 D]§ } | | } | | } | d k  sH| d k sH| d k  sH| d k r˜qHn  | t	 j | | ƒ } | | } t	 j | | ƒ } | | k  rH| } | | } } qHqHWq;W| | f S(   Ng      @i    R   R!  g333333ã?i–   iöÿÿÿi   g      Y@iìÿÿÿi   g    eÍÍA(   NN(   R4   R5   R/   R—   R6   Rv   R"  R   R#  R   R$  RÒ  R›  R<  R   Rš  Re   (   R:   R  R–   Rv   R/  t   k_sol_0t   b_sol_0R8  R­  R›  R¬  t   tt   k_bestt   b_bestt   k_sht   b_shR�   Rp   t   k_mask_t   deltat   t_(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   k_sol_b_sol_from_k_maskî  s<    $ 	 	 	 	&"

0 
t   fastc         C   si  | d  k r t j } n  |	 d k s* t ‚ d „  } | rn | d | |  ƒ Id I|  j ƒ  j ƒ  j ƒ  IJn  t j |  j	 ƒ  j ƒ  j ƒ  d ƒ } t j
 |  j	 ƒ  j ƒ  j ƒ  d ƒ } t j
 |  j	 ƒ  j ƒ  j ƒ  d ƒ } |  j	 ƒ  j d | ƒ } |  j d	 | d
 | d | d | d | g t |  j ƒ  ƒ ƒ | rJ| d | |  ƒ IJn  | rc|  j d t ƒ n  |  j d  k sŸ|  j j ƒ  sŸ|  j j ƒ  j t ƒ d k r¨t } n  |  j j |  j g j d  ƒ d k sÒt ‚ |  j j d  k	 } |  j ƒ  pô|
 } | d  k rl| | g } | j t ƒ d k r-d } ql| j t ƒ d k rKd } ql| j t ƒ d k rld } qln  d  } x't | ƒ D]} | r¨| d k r¨| d | IJn  | r»|  j ƒ  n  | rç| rç| d | |  ƒ |  j f IJn  | sùt | _ n  |
 rI|  j d | d | d | d | d | ƒ } | rI| d | |  ƒ IJqIn  | ru|	 d k rh|  j ƒ  qu|  j  ƒ  n  | r| r| d | |  ƒ IJqqW| rÒ|  j d t ƒ | rÒ| d | |  ƒ IJqÒn  | r|  j! ƒ  | r| d | |  ƒ IJqn  | r[| d | |  ƒ Id I|  j ƒ  j ƒ  j ƒ  IJ| J| d IJ| j" d | ƒ n  |  j# ƒ  | S(    NR{  t   slowc         S   s   d |  j  ƒ  |  j ƒ  f S(   Ns   r_work=%6.4f r_free=%6.4f(   Rð   RV  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   get_r  s    s	   start: %ss   n_reflections:i    i   R/   Rq   Rr   RL   RJ   R–   s)   start: %s (reset all scales to undefined)R   i   s     cycle %d:s4       twin fraction refinement: %s twin_fraction=%4.2fRi  Rz  t   apply_back_tracet   verboses        bulk-solvent and scaling: %ss        HD scattering refinement: %ss        remove outliers:          %ss        correct solvent mask:     %ss	   final: %ss!   overall anisotropic scale matrix:Rÿ   (   s   fastR|  (   i    i   ($   R   R   R   R}   R4   R/   Rc   R   R„   Rm   R˜   Rƒ   RQ   R~   R—   R  RW   R£   t   guess_scattering_type_neutronRž  RP   R3   R,   R=   R¬   R’   t   xrangeRô   R>   R   t   update_solvent_and_scaleRÉ  R±  RÁ  t   format_scale_matrixt   apply_scale_k1_to_f_obs(   R:   RÁ  R~  Ri  Rk  t   cyclesR{  Rz  t   refine_hd_scatteringt   refine_hd_scattering_methodt   bulk_solvent_and_scalingR  Rþ   R  Rÿ   R}  RŒ  t   zero_dt   one_dRã  t   twinnedt   mask_definedt   flagst   russt   cycle(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÅ  	  s–     	 !$$$	  	* 	 	    	  
 

i
   c   	      C   sy  | d k s t  ‚ |  j ƒ  } t j |  j ƒ  j ƒ  j ƒ  d ƒ } |  j ƒ  |  j ƒ  } t j	 | | ƒ t j	 | | ƒ } | d k sË | d k sË t
 | ƒ | k  r¼ t
 | ƒ d | k sË |  j d  k	 rÏ d  S|  j ƒ  j ƒ  } | d  k	 rú | | } n  |  j ƒ  j d |  j ƒ  j ƒ  | d | ƒ } |  j d | d |  j ƒ  | ƒ |  j ƒ  } t | | ƒ sut  | | g ƒ ‚ d  S(	   Ni    i   g      à?g      ð?R/   R  R4   RJ   (   R}   Rð   R   R˜   R4   R/   Rc   RL   RJ   Re   RG   R¬   R   R  Rƒ   RŒ   R   (	   R:   R  t   r_startt   oneR&  t   scR  t	   f_obs_newt   r_final(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR„  \  s(    $$( 		c         C   s…  t  ƒ  } | d  k r' t j j ƒ  } n  | j }	 d d l m }
 |  j ƒ  j	 ƒ  |  j
 ƒ  j	 ƒ  |  j ƒ  j	 ƒ  } |  j ƒ  j d | ƒ } |  j ƒ  d  k	 ré |  j ƒ  j	 ƒ  |  j ƒ  j	 ƒ  |  j ƒ  j	 ƒ  } |  j ƒ  j d | ƒ } n  | r°|  j ƒ  } t | ƒ d k st ‚ | d k  r(t } n  t } | d  k	 rF| j } n  t j j j d |  j ƒ  d | d | d	 |  j ƒ  d
 | d |  j d d d |  j d |  j d | ƒ 
} d  } | j d  k	 rºt j | j ƒ j  ƒ  d k r<t j! j" j# |  j ƒ  j$ ƒ  | j ƒ } |  j% d  k	 r·t j! j" j# |  j% j$ ƒ  | j ƒ } q·qºt j! j" j# |  j ƒ  j$ ƒ  | j |  j ƒ  j& ƒ  ƒ } |  j% d  k	 rºt j! j" j# |  j% j$ ƒ  | j |  j ƒ  j& ƒ  ƒ } qºn  | rl| j' d |  j( ƒ } | d  k	 r(|  j) d | j( d t ƒ |  j* d | j+ d | j, d | j# d | ƒ q­|  j* d | j- j, ƒ  d | j- j+ | j- j. d | j- j# d | ƒ q!|  j* d | j- j, ƒ  d | j- j+ | j- j. d | j- j# d | ƒ nq|  j/ ƒ  rÈt | _ n  | j d t j0 | j	 ƒ  j  ƒ  d ƒ ƒ } t j! j1 d |  j ƒ  d | d |  j2 j- j d | d | d |  j ƒ } d  } |  j ƒ  d  k	 rÁ| j d t j0 | j	 ƒ  j  ƒ  d ƒ ƒ } t j! j1 d |  j ƒ  d | d |  j2 j3 j d | d | d |  j ƒ } n  t j4 d | d | d |  j5 d | d | d  | ƒ } t | j6 ƒ  ƒ d k r@| j6 ƒ  d |  _7 | j8 ƒ  |  _8 | j9 ƒ  |  _9 n  t: j; |  j ƒ  j& ƒ  t: j< | j9 ƒ  ƒ ƒ } t j! j" j# |  j ƒ  j$ ƒ  | ƒ } d  } |  j% d  k	 rÊt j! j" j# |  j% j$ ƒ  | ƒ } n  |
 | | j= j> j# ƒ  ƒ sët ‚ d! „  } | rÛt | j6 ƒ  ƒ d k rÛ| d" |  j( d# | j6 ƒ  d d$ | j8 ƒ  d% | j9 ƒ  d |  j d |  j ƒ  d& |  j! ƒ  ƒ \ } } } t j |  j ƒ  j	 ƒ  j  ƒ  |  j? ƒ  ƒ } |  j* d | d | d | d | ƒ |  j) d | d t ƒ nF |  j* d | j= j> j@ ƒ  d | j= j> j# ƒ  d | j= j> j+ ƒ  d | ƒ | j rO| rO|  jA d | d' | d  | ƒ n  |  j* ƒ  |  j/ ƒ  rq|	 | _ n  tB | jC ƒ  7aB | S((   Niÿÿÿÿ(   R   R/   i   i    R4   Rm   R¥   R.   R   Rv   t   number_of_cyclesid   R«   Rª   R  i   R£   R=  RL   R–   RJ   R¨   Rx   Rq   Rr   RD  RH  R>   Ri  Rÿ   Rk  c         S   s¶  |  d  k r d  St | |  j ƒ  t j d ƒ ƒ } | d k  rK |  j ƒ  n  | d | d | d d } | | }	 |	 d k  r– | t |	 ƒ d }
 n | }
 | d |
 | d |
 | d |
 | d | d	 | d
 g } | |
 } |  j d |
 ƒ t | |  j ƒ  t j d ƒ ƒ } | d k s&t ‚ |  j ƒ  t	 j
 | | | ƒ g } t j | j ƒ  t j | ƒ ƒ } t	 j | j ƒ  | ƒ } d d l m } | j ƒ  } | j ƒ  } | | |  f S(   Ng      ð?i    i   i   g      @g        gü©ñÒMbP?i   i   i   t   b_shiftiÿÿÿÿ(   R   (   R   R¡  t   min_u_cart_eigenvalueR   R“   t   tidy_usRG   t   shift_usR}   R…   R–   R‰   R†   RŠ   RJ   R�   RD   R   R/   (   Rí   R�   Rp   R‹   Rv   R4   RB   R¨  t   b_isot   b_testt   b_adjt
   b_cart_newt	   b_sol_newR—   Rs   RJ   RÂ  R   R!  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   apply_back_b_iso÷  s0     " 
 !
"
!Rí   R�   Rp   R‹   RB   R)   (D   R   R   RÂ  t   master_paramsR·   R   t   libtbx.test_utilsR   Rm   R/   Rq   Rr   Rƒ   R¦   RF  RG  Rx   R~   R}   RW   R3   RD   t   scalert   runR4   R.   Rv   R«   Rª   t   scale_matricesR   R˜   Rc   RB   R…   RJ   R�   R¯   R†   t,   apply_back_trace_of_overall_exp_scale_matrixR£   RC  RQ   RL   R–   R;   t   k_isotropic_expR’   R„   Rl   R,   R=   t   bulk_solvent_and_scalesR>   Ro   R�   Rp   R‹   R   R‰   RŠ   t   fmodelsRõ   t   scale_k1R—   Rz  t   time_bulk_solvent_and_scaleRY   (   R:   Ri  R)   R  Rz  Rk  R{  R~  RZ   t   save_params_bulk_solventR   t   f_calc_dataRm   R¦   Rx   R   R[   R¨   RJ   R/  RŒ  RD  RH  Rs   RŸ  R—   Rí   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR‚  q  s    	 	22 	 				!							
	
	
 	!	!			-$$!	!$*		
c         C   s   |  j  S(   N(   t   _target_name(   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   _get_target_name*  s    c         C   sZ   |  j  d  k r d  St j j j j |  j  ƒ } | d  k rV t d t |  j  ƒ ƒ ‚ n  | S(   Ns   Unknown target name: %s(	   R©   R   RD   t
   refinementt   targetst   target_namest   getRd   R   (   R:   R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   target_attributes-  s     c         C   s   t  j j j d |  d | ƒ S(   NRš   t
   alpha_beta(   RD   R¯  R°  RV   (   R:   R´  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRV   5  s    c         C   s"   | d k r d } n  | |  _  d  S(   Nt   lst   ls_wunit_k1(   R­  (   R:   R©   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÇ   9  s     	id   c   	      C   sæ   | d k s t  ‚ |  j j j ƒ  } |  j j j t ƒ } | } | d k r\ | | | 9} n  t | t | ƒ ƒ } t d t | t d | ƒ ƒ ƒ } | d  k	 rÄ t | t | t | | ƒ ƒ ƒ } n  | d  k	 râ t | | ƒ } n  | S(   Ni    i   (
   R}   R,   R1   Rc   RP   R3   R¡  R   RÒ  R   (	   R:   t   free_reflections_per_bint
   max_n_binst
   min_n_binst   min_refl_per_bint   n_reflR  t   n_refl_per_binR[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   determine_n_bins=  s    "%c         C   sÆ  |  j  d | d | d | d | d | d | ƒ | d  k	 rF | |  _ n  | d  k	 rk | |  j _ |  j  ƒ  n  | d  k	 rƒ | |  _ n  |	 d  k	 r« |	 |  _ |  j d t ƒ n  |
 d  k	 rÊ |  j	 d |
 ƒ n  | d  k	 r]| j
 ƒ  j |  j ƒ  j
 ƒ  ƒ s-| j d	 d d |  j ƒ  j ƒ  ƒ j |  j ƒ  ƒ } n  | |  _ | |  _ | j |  j ƒ  ƒ |  j _ n  | d  k	 r| |  _ |  j  ƒ  n  | d  k	 r—| |  _ n  | d  k	 rÂ|  j d | d t d t ƒ n  |  S(   NRm   R¥   Rq   R–   RJ   R¨   R=  R©   RŸ   i    R    R£   R>  (   i    i    i    i    (   RQ   R   R¢   R,   R4   R´   R½   RC  R3   RÇ   R�   R‚   R±   R    R²   RÎ   Rµ   R<   R>   R¾   (   R:   Rm   R4   R¥   R.   Rq   R–   RJ   R¨   RÏ   R©   RÎ   R¾   R>   R£   R¢   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRŒ   P  sJ    		!				
c         C   s$   |  j  d  k r |  j S|  j  j Sd  S(   N(   R,   R   Rµ   R<   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR<   …  s    c         C   s$   |  j  d  k	 r |  j  j S|  j Sd  S(   N(   R,   R   R4   R³   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR4   ‹  s    
c         C   s   |  j  S(   N(   R´   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR.   ‘  s    c         C   s(   t  j d |  j ƒ  d |  j j j j ƒ S(   NRw   R/   (   R   RC   R4   R,   R;   R/   t   f_bulk(   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR¾  ”  s    c         C   sH   |  j  ƒ  j ƒ  j t ƒ d k r: |  j ƒ  j |  j j ƒ S|  j ƒ  Sd  S(   Ni    (   R.   R/   RP   R3   R¾  R6   R,   R0   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_bulk_w˜  s    !c         C   sH   |  j  ƒ  j ƒ  j t ƒ d k r: |  j ƒ  j |  j j ƒ S|  j ƒ  Sd  S(   Ni    (   R.   R/   RP   R3   R¾  R6   R,   R1   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_bulk_tž  s    !c         C   s   |  j  j j j S(   N(   R,   R;   R/   RJ   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRJ   ¤  s    c         C   s
   |  j  j S(   N(   R,   RK   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRK   §  s    c         C   s   |  j  ƒ  j |  j j ƒ S(   N(   RJ   R6   R,   R1   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   k_anisotropic_testª  s    c         C   s   |  j  j j S(   N(   R,   R;   R—   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR—   ­  s    c         C   s   |  j  j j S(   N(   R,   R;   RL   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRL   °  s    c         C   s
   |  j  j S(   N(   R,   RM   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRM   ³  s    c         C   s
   |  j  j S(   N(   R,   RN   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRN   ¶  s    c         C   s
   |  j  j S(   N(   R,   RO   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRO   ¹  s    c         C   s
   |  j  j S(   N(   R,   RB   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRB   ¼  s    c         C   s„   |  j  ƒ  } |  j ƒ  } t | ƒ d k s0 t ‚ t | ƒ d k sH t ‚ |  j ƒ  j ƒ  | d j ƒ  | d } | d j d | ƒ S(   Ni   i    R/   (   Rx   R—   R~   R}   Rm   R/   Rƒ   (   R:   Rx   R—   R.  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_model_no_scales¿  s    (c         C   s
   |  j  j S(   N(   R,   RH   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRH   È  s    c         C   s   |  j  j j S(   N(   R,   R;   Rx   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRx   Ë  s    c         C   s   |  j  j j S(   N(   R,   R=   Rx   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRE  Î  s    c         C   s
   |  j  j S(   N(   R,   RI   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRI   Ñ  s    c         C   s2   t  j d |  j ƒ  d |  j ƒ  |  j ƒ  j ƒ  ƒ S(   NRw   R/   (   R   RC   R4   R©  RB   R/   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR,  Ô  s    	c         C   sM   |  j  ƒ  } |  j ƒ  } | j ƒ  j ƒ  | j ƒ  j ƒ  k r@ | S| j | ƒ S(   N(   t   f_model_scaled_with_k1_wt   f_model_scaled_with_k1_tR�   Rc   Rÿ  (   R:   t   ma_wt   ma_f(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt*   f_model_scaled_with_k1_composite_work_freeÙ  s
    $ c         C   s2   t  j d |  j ƒ  d |  j ƒ  |  j ƒ  j ƒ  ƒ S(   NRw   R/   (   R   RC   RO   t
   scale_k1_tRI   R/   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÄ  ß  s    	c         C   s2   t  j d |  j ƒ  d |  j ƒ  |  j ƒ  j ƒ  ƒ S(   NRw   R/   (   R   RC   RN   t
   scale_k1_wRH   R/   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÃ  ä  s    	c         C   s‹   |  j  ƒ  \ } } t j d |  j ƒ  j ƒ  d t j |  j ƒ  j ƒ  ƒ d | j ƒ  d | j ƒ  d |  j ƒ  j ƒ  d |  j ƒ  j	 ƒ  ƒ } | S(   NR4   RB   t   alphat   betaRñ  Rã   (
   R´  R   t   f_star_w_star_mu_nuR4   R/   R   RG   RB   Rñ  R�   (   R:   RÊ  RË  t   obj(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_star_w_star_objé  s    	c         C   s^   |  j  ƒ  } t j d |  j ƒ  d | j ƒ  ƒ } t j d |  j ƒ  d | j ƒ  ƒ } | | f S(   NRw   R/   (   RÎ  R   RC   R4   t   f_start   w_star(   R:   RÍ  RÏ  RÐ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_star_w_starô  s    $$c         C   s   |  j  j j S(   N(   R,   R;   Rq   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRq   ú  s    c         C   s#   |  j  j d  k	 r |  j  j j Sd  S(   N(   R,   R=   R   Rq   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRF  ý  s    c         C   s   |  j  j j S(   N(   R,   R;   Rr   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRr     s    c         C   s#   |  j  j d  k	 r |  j  j j Sd  S(   N(   R,   R=   R   Rr   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRG    s    c         C   s   |  j  j j S(   N(   R,   R;   Rm   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRm     s    c         C   s#   |  j  j d  k	 r |  j  j j Sd  S(   N(   R,   R=   R   Rm   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR¦     s    c         C   sO   |  j  ƒ  j ƒ  j t ƒ d k rA |  j ƒ  j |  j  ƒ  j ƒ  ƒ S|  j ƒ  Sd  S(   Ni    (   R.   R/   RP   R3   Rm   R6   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_calc_w  s    ! c         C   sN   |  j  ƒ  j ƒ  j t ƒ d k r@ |  j ƒ  j |  j  ƒ  j ƒ  ƒ S|  j ƒ  Sd  S(   Ni    (   R.   R/   RP   R3   Rm   R6   (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_calc_t  s    !c         C   s�   | d  k r t j } n  xn t |  j ƒ  j ƒ  t |  j ƒ  ƒ |  j ƒ  j ƒ  j ƒ  ƒ D]0 \ } } } | d IJ| d | | | f IJqU Wd  S(   Ns   Fobe   Fmodel   resolution (A)s   %12.3f %12.3f %6.3f(	   R   R   R   R  R4   R/   RG   R,  R5   (   R:   Rÿ   R  Rˆ   R.  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_obs_vs_f_model  s     (
c         C   s¯   |  j  j } |  j ƒ  } t j j j d |  j ƒ  d | d |  j ƒ  d |  j d | j	 d | j
 d | j d | j d	 | j ƒ 	j ƒ  \ } } | r¥ | |  _ | |  _ n  | | f S(
   NRö   t   miller_calcR.   t   ta_dt   kernel_width_free_reflectionst   kernel_on_chebyshev_nodest   n_sampling_pointst   n_chebyshev_termst   use_sampling_sum_weights(   R¾   R
   RB   RD   t   scalingt   ta_alpha_beta_calcR4   R.   t
   set_sigmaaR×  RØ  t   number_of_sampling_pointst   number_of_chebyshev_termsRÛ  t'   eobs_and_ecalc_miller_array_normalizerst   n_obst   n_calc(   R:   t   update_nobs_ncalcRî   Rõ   Râ  Rã  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   n_obs_n_calc'  s     						c         C   sŸ   |  j  d  k	 s t ‚ |  j d  k	 s* t ‚ |  j t j |  j  |  j ƒ } d |  j |  j |  j  } |  j ƒ  j d | ƒ } |  j ƒ  j d | ƒ } | | f S(   Ng      ð?R/   (	   Râ  R   R}   Rã  RÞ  R   R$  R4   RC   (   R:   RÊ  RË  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt!   alpha_beta_with_restrained_n_calc9  s     c   	      C   sA  t  ƒ  } | d  k r$ |  j ƒ  } n  | d  k r? |  j ƒ  } n  d \ } } |  j } |  j d  k rm |  j ƒ  S|  j d  k	 rå|  j j d k s” t ‚ |  j j	 d k s¬ t ‚ |  j j d k rŠ|  j j	 d k r!t
 j d | d | d |  j j d |  j ƒ  j ƒ  d	 |  j j ƒ j ƒ  \ } } qâ|  j j } t d
 | d | d |  j ƒ  d | j d | j d | j d | j d | j ƒ j ƒ  \ } } q'| j | j } t
 j d | d | d | j d | j d | j d | j ƒ j ƒ  \ } } nB t
 j d | d | d d d |  j ƒ  j ƒ  d	 t ƒ j ƒ  \ } } t | j  ƒ  7a | | f S(   Nt   estt   calct
   analyticalt	   iterativeR4   Rm   R·  R�  t   interpolationRö   RÕ  R.   R×  RØ  RÙ  RÚ  RÛ  Rœ  t   n_atoms_absentt   n_atoms_includedt   bf_atoms_absentt   final_errort   absent_atom_typeiŒ   (   NN(   Rç  Rè  (   Ré  Rê  (!   R   R   R4   RB   R¾   RÞ  Ræ  R…  R}   t   estimation_algorithmR	   t   alpha_beta_est_managerR·  R.   R/   Rë  R´  R
   R×  RØ  Rß  Rà  RÛ  t$   number_of_macromolecule_atoms_absentt   number_of_waters_absentt   alpha_beta_calcRí  Rî  Rï  Rð  RW   R"   RY   (	   R:   R4   RB   RZ   RÊ  RË  t	   ab_paramsRî   t   n_atoms_missed(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR´  B  s`    	  	
						
					c         C   s…   | r |  j  d k r d Sn  |  j ƒ  \ } } |  j ƒ  j ƒ  j t ƒ d k rw | j |  j j	 ƒ | j |  j j	 ƒ f S| | f Sd  S(   NR›   t   mlhli    (   R›   Rø  (   NN(
   R©   R   R´  R.   R/   RP   R3   R6   R,   R0   (   R:   t   only_if_required_by_targetRÊ  RË  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   alpha_beta_wy  s     !c         C   si   |  j  ƒ  \ } } |  j ƒ  j ƒ  j t ƒ d k r[ | j |  j j ƒ | j |  j j ƒ f S| | f Sd  S(   Ni    (   R´  R.   R/   RP   R3   R6   R,   R1   (   R:   RÊ  RË  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   alpha_beta_tƒ  s
    !c         C   sj   |  j  j } t d |  j ƒ  d |  j ƒ  d |  j ƒ  d | j d | j d | j d | j d | j	 ƒ } | S(	   NRö   RÕ  R.   R×  RØ  RÙ  RÚ  RÛ  (
   R¾   R
   R4   RB   R.   R×  RØ  Rß  Rà  RÛ  (   R:   R4   RB   Rî   t
   sigmaa_obj(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   sigmaa‹  s    				c         C   sá  |  j  d  k r d } d } n |  j  j } |  j  j } | d k sH t ‚ g  } | d k r« t j d |  j ƒ  d |  j ƒ  d | d |  j	 ƒ  j
 ƒ  d t ƒ j ƒ  \ } } nr |  j  j } t d	 |  j ƒ  d
 |  j ƒ  d |  j	 ƒ  d | j d | j d | j d | j d | j ƒ j ƒ  \ } } | j
 ƒ  d k } | j
 ƒ  j | ƒ } |  j j | ƒ }	 | d k } | j | d ƒ } t j d |	 }
 t j | ƒ } t j |
 |
 ƒ } | d k r×t j t j |
 | ƒ | ƒ } n d  } | S(   NiŒ   Ré  Rê  R4   Rm   R·  R�  Rë  Rö   RÕ  R.   R×  RØ  RÙ  RÚ  RÛ  i    g      ð?i   (   s
   analyticals	   iterative(   R¾   R   R·  Rñ  R}   R	   Rò  R4   R,  R.   R/   R3   R´  R
   R×  RØ  Rß  Rà  RÛ  R6   Rv   Rö  R   t   piR   Rÿ   Re   R$  (   R:   R·  Rñ  t   est_exceptionsRÊ  RË  Rî   R  t
   alpha_datat   sjt   ajt   bjRg   t   omega(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   model_error_ml˜  sH    						#t   workc         C   s  | d k r3 |  j  ƒ  j ƒ  } |  j ƒ  j ƒ  } nl | d k rf |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } n9 | d k r™ |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } n t ‚ | d  k	 rÏ | | g j	 d  ƒ d k sÏ t
 ‚ n  | | g j	 d  ƒ d k  r| d  k r| d  k	 st
 ‚ n  t ƒ  } | | g j	 d  ƒ d k ršt j | j ƒ  t ƒ }	 | r`|	 | | k M}	 n  | ry|	 | | k M}	 n  | j |	 ƒ } | j |	 ƒ } n  | d  k	 rÇ| j | ƒ } | j | ƒ } n  t t j | | d ƒ ƒ }
 t | j ƒ  7a |
 d k rd  }
 n  |
 S(   NR  t   freeR<  i   i    g      ð?g    eÍÍA(   RN   R/   RÃ  RO   RÄ  R4   R,  Rd   R   RP   R}   R   R   R�   Rc   R3   R6   RG   R   R‘   R&   RY   (   R:   Ry   R    R9  R5   Rh   R4   RB   RZ   t   keepR[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt	   _r_factorÁ  s>     $!	   	c         C   s.   |  j  d d d | d | d |  j j d | ƒ S(   NRy   R  R    R9  R5   Rh   (   R	  R,   R7   (   R:   R    R9  Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRð   ä  s    	c         C   s.   |  j  d d d | d | d |  j j d | ƒ S(   NRy   R  R    R9  R5   Rh   (   R	  R,   R8   (   R:   R    R9  Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRV  ì  s    	c         C   s   |  j  d d ƒ S(   NRy   R<  (   R	  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   r_allô  s    c         C   s�   |  j  ƒ  j ƒ  } |  j ƒ  j ƒ  } |  j ƒ  d j ƒ  j | ƒ } |  j ƒ  |  j ƒ  j ƒ  |  j ƒ  d j | ƒ | } t d | d t	 j
 | ƒ d d  ƒ S(   Ni    Rf   Rg   Rh   (   R.   R/   RN   Rx   R6   RK   RÒ  R—   Rk   R   RG   R   (   R:   t   sR  t   fmaskRˆ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   scale_k1_w_for_twin_targets÷  s    c         C   s¯   |  j  d  k	 rq |  j  d k rX t d |  j ƒ  j ƒ  d t j |  j ƒ  j ƒ  ƒ d | ƒ S|  j  d k r« |  j  Sn: t d |  j ƒ  j ƒ  d t j |  j ƒ  j ƒ  ƒ d | ƒ Sd  S(   Ni    Rf   Rg   Rh   (   t   set_scale_switchR   Rk   R4   R/   R   RG   RB   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR©  	  s    
c         C   su   |  j  d  k	 rq |  j  d k rX t d |  j ƒ  j ƒ  d t j |  j ƒ  j ƒ  ƒ d | ƒ S|  j  d k rq |  j  Sn  d  S(   Ni    Rf   Rg   Rh   (   R  R   Rk   RN   R/   R   RG   RH   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÉ  	  s    c         C   su   |  j  d  k	 rq |  j  d k rX t d |  j ƒ  j ƒ  d t j |  j ƒ  j ƒ  ƒ d | ƒ S|  j  d k rq |  j  Sn  d  S(   Ni    Rf   Rg   Rh   (   R  R   Rk   RO   R/   R   RG   RI   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÈ  	  s    c         C   s:   t  d t j |  j j j ƒ  ƒ d |  j ƒ  j ƒ  d | ƒ S(   NRf   Rg   Rh   (   Rk   R   RG   R,   RB   R/   R4   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   scale_k2$	  s    c         C   s:   t  d t j |  j ƒ  j ƒ  ƒ d |  j ƒ  j ƒ  d | ƒ S(   NRf   Rg   Rh   (   Rk   R   RG   RH   R/   RN   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   scale_k2_w*	  s    c         C   s:   t  d t j |  j ƒ  j ƒ  ƒ d |  j ƒ  j ƒ  d | ƒ S(   NRf   Rg   Rh   (   Rk   R   RG   RI   R/   RO   (   R:   Rh   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   scale_k2_t0	  s    c      	   C   s¥   t  j |  j ƒ  j ƒ  j ƒ  j ƒ  |  j ƒ  j ƒ  j ƒ  j ƒ  ƒ } t d |  j ƒ  j ƒ  | d t  j |  j	 ƒ  j ƒ  ƒ | d | d t
 ƒ } | d  k r� d  S| d S(   NRf   Rg   Rh   Ri   g      à?(   R   R$  RN   t   multiplicitiesR/   Rý  t   epsilonsRk   RG   RH   R3   R   (   R:   Rh   t   mul_eps_sqrtR[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   scale_k3_w6	  s    "	 c      	   C   s¥   t  j |  j ƒ  j ƒ  j ƒ  j ƒ  |  j ƒ  j ƒ  j ƒ  j ƒ  ƒ } t d |  j ƒ  j ƒ  | d t  j |  j	 ƒ  j ƒ  ƒ | d | d t
 ƒ } | d  k r� d  S| d S(   NRf   Rg   Rh   Ri   g      à?(   R   R$  RO   R  R/   Rý  R  Rk   RG   RI   R3   R   (   R:   Rh   R  R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt
   scale_k3_tB	  s    "	 iô  c   	      C   sÄ   |  j  ƒ  j d | ƒ } |  j  ƒ  j | ƒ } |  j ƒ  j | ƒ } | j ƒ  j ƒ  |  } t j | ƒ } t j | ƒ } | j ƒ  |  } | j ƒ  |  } t	 d t
 t j | | d ƒ ƒ d | d | ƒ S(   Nt   reverseRð   i   R    R9  (   RN   t   sort_permutationR6   RÃ  R5   R/   R   RÒ  R¡  R   RG   R   R‘   (	   R:   Rc   R  R  R  Rˆ   t   dsR    R9  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRT  N	  s    g      @c   	      C   sE  |  j  ƒ  } |  j ƒ  j ƒ  \ } } | | k  r9 | } n  | | k rN | } n  |  j ƒ  j d | d d ƒ j ƒ  j ƒ  } | d k rŸ |  j  d | d d ƒ } n d  } |  j ƒ  j d d d | ƒ j ƒ  j ƒ  } | d k rö |  j  d d d | ƒ } n d  } | d  k	 r| } n d } | d  k	 r,| } n d } | | | | | f S(   NR    R9  g33333?�@i    g        (   Rð   RN   t	   d_max_minR;  R/   Rc   R   (	   R:   R.  Rð   R9  R    t   n_lowt   r_work_lt   n_hight   r_work_h(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   r_overall_low_high\	  s*     	 	**		c         C   s-   |  j  d  k r d S|  j  j d k r) d Sd  S(   Ng      ð?Rè  (   R¾   R   R…  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   scale_ml_wrapperu	  s      c         C   sª   |  j  ƒ  \ } } t ƒ  } t j d |  j ƒ  j ƒ  d t j |  j j	 j ƒ  ƒ d | j ƒ  d | j ƒ  d |  j ƒ  j
 ƒ  d |  j ƒ  j ƒ  ƒ j ƒ  } t | j ƒ  7a | S(   NR4   RB   RÊ  RË  Rñ  Rã   (   R´  R   R   t   fom_and_phase_errorR4   R/   R   RG   R,   RB   Rñ  R�   t   fomR(   RY   (   R:   RÊ  RË  RZ   R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   figures_of_merity	  s    		c         C   s(   |  j  ƒ  } t j d |  j ƒ  d | ƒ S(   NRw   R/   (   R#  R   RC   R4   (   R:   R/  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR"  ‡	  s    	c         C   sH   |  j  ƒ  } |  j ƒ  j ƒ  j t ƒ d k r@ | j |  j j ƒ S| Sd  S(   Ni    (   R#  R.   R/   RP   R3   R6   R,   R0   (   R:   R"  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   figures_of_merit_work�	  s    !c         C   sª   |  j  ƒ  \ } } t ƒ  } t j d |  j ƒ  j ƒ  d t j |  j j	 j ƒ  ƒ d | j ƒ  d | j ƒ  d |  j ƒ  j
 ƒ  d |  j ƒ  j ƒ  ƒ j ƒ  } t | j ƒ  7a | S(   NR4   RB   RÊ  RË  Rñ  Rã   (   R´  R   R   R!  R4   R/   R   RG   R,   RB   Rñ  R�   t   phase_errorR'   RY   (   R:   RÊ  RË  RZ   R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   phase_errors”	  s    		c         C   sN   |  j  ƒ  } |  j ƒ  j ƒ  j t ƒ d k rF | j |  j ƒ  j ƒ  ƒ S| Sd  S(   Ni    (   R&  R.   R/   RP   R3   R6   (   R:   t   pher(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   phase_errors_test¢	  s    !c         C   sH   |  j  ƒ  } |  j ƒ  j ƒ  j t ƒ d k r@ | j |  j j ƒ S| Sd  S(   Ni    (   R&  R.   R/   RP   R3   R6   R,   R0   (   R:   R'  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   phase_errors_work©	  s    !gš™™™™™É?c         C   s\   |  j  ƒ  } | | k } |  j ƒ  j ƒ  j ƒ  d k  } | j | t ƒ } |  j | ƒ }  |  S(   Ng      @(   R#  R4   R5   R/   Rö  R3   R6   (   R:   t   fom_thresholdR"  R  t   dsel(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   filter_by_fom°	  s    c         C   s¶   t  j ƒ  } xR t |  j ƒ  j ƒ  |  j ƒ  j ƒ  ƒ D]) \ } } | j t | t | ƒ ƒ ƒ q4 Wt  j | d t	 ƒ} |  j
 | ƒ }  t  j t d | j ƒ  ƒ ƒ } |  j
 | ƒ }  |  S(   NR  id   (   R   R˜   R  R,  R/   R4   R€   RG   R  R3   R6   t   size_tR<  Rc   (   R:   t   deltasR  R  R  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   filter_by_delta_fofc¸	  s    4!c         C   s/   d t  f d „  ƒ  Y} | d |  d | d | ƒ S(   NR[   c           B   s   e  Z d  „  Z RS(   c         S   sî   | j  ƒ  |  _  | j ƒ  |  _ t j d |  j  d |  j d | d | j ƒ  j ƒ  d | ƒ j ƒ  \ |  _ |  _ t	 j
 d |  j  j ƒ  d t j |  j j ƒ  ƒ d |  j j ƒ  d |  j j ƒ  d	 | j ƒ  j ƒ  d
 | j ƒ  j ƒ  ƒ j ƒ  |  _ d  S(   NR4   Rm   R·  R�  Rë  RB   RÊ  RË  Rñ  Rã   (   R4   RB   R	   Rò  R.   R/   R´  RÊ  RË  R   R!  R   RG   Rñ  R�   R"  (   R:   Rõ   R·  Rë  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR?   Æ	  s    				(   RR   RS   R?   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR[   Å	  s   Rõ   R·  Rë  (   t   object(   R:   R·  Rë  R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRO  Â	  s
    c      	   C   s  | d  k	 r | } n |  j ƒ  } | j j ƒ  j ƒ  } t j | ƒ } t j | ƒ } | | g j d  ƒ d k r¢ t	 j
 d | j d | j d | j d | j ƒ } n@ | | g j d  ƒ d k sÃ t ‚ d | t j | |  j ƒ } | | }	 | | }
 t j d |	 d |
 ƒ S(	   Ni   R4   RB   RÊ  RË  i    R%  R›  (   R   RO  RB   t   phasesR/   R   t   sint   cosRP   R	   t   fo_fc_alpha_over_eps_betaR4   RÊ  RË  R}   Rš  Rv   t   hendrickson_lattman(   R:   RO  t   k_blurt   b_blurt   mcht   f_model_phasest   sin_f_model_phasest   cos_f_model_phasesRr  t
   hl_a_modelt
   hl_b_model(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRa  Û	  s"    					!

c         C   sR   t  j d |  j ƒ  j ƒ  d |  j ƒ  j ƒ  d t ƒ j d |  j d d  ƒ ƒ } | S(   NRå   R�   R  R/   RO  (	   R   R`  R4   Rå   R�   RW   RC   Ra  R   (   R:   R<   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt!   f_model_phases_as_hl_coeffs_arrayñ	  s    	c         C   s>   d  } |  j ƒ  d  k	 r: |  j ƒ  j ƒ  |  j | ƒ } n  | S(   N(   R   R<   R/   Ra  (   R:   RO  R[   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   combined_hl_coefficientsù	  s
    ih  c         C   s�   d  } |  j ƒ  d  k	 r‹ t j d | ƒ } | d |  j ƒ  j ƒ  d |  j ƒ  j ƒ  d |  j | ƒ ƒ } d d d „  ƒ  Y} | d | ƒ } n  | S(	   Nt   n_stepsRñ  Rã   t    hendrickson_lattman_coefficientst   tmpc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         S   s   | |  _  d  S(   N(   t   phase_source(   R:   RC  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR?   

  s    c         S   s   t  j |  j ƒ S(   N(   R   t   argRC  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR1  
  s    c         S   s   t  j |  j ƒ S(   N(   R   RG   RC  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR"  
  s    c         S   s   |  j  S(   N(   RC  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   f_obs_phase_and_fom_source
  s    (   RR   RS   R?   R1  R"  RE  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRB  	
  s   			RC  (    (   R   R<   R   t   phase_integratorR4   Rñ  R�   R?  (   R:   R@  RO  R[   t
   integratorRC  RB  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   combine_phases 
  s    	c         C   s   t  j d |  ƒ S(   NRõ   (   R   RÚ  (   R:   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÚ  
  s    c         K   s   |  j  ƒ  } | j | �  S(   N(   RÚ  RÛ  (   R:   t   kwdst   emap(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRÛ  
  s    c         K   s+   |  j  | �  } | j d d ƒ j ƒ  j ƒ  S(   NRí  g      Ð?(   RÛ  RÜ  RÝ  RÞ  (   R:   RI  RQ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   _get_real_map
  s    	c         K   s   d | d <|  j  | �  S(   Ns   2mFo-DFcRÍ  (   RK  (   R:   RI  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   two_fofc_map!
  s    
c         K   s   d | d <|  j  | �  S(   Ns   mFo-DFcRÍ  (   RK  (   R:   RI  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   fofc_map%
  s    
c         K   s-   |  j  ƒ  j ƒ  s d  Sd | d <|  j | �  S(   Nt   anomRÍ  (   R4   R  R   RK  (   R:   RI  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   anomalous_map)
  s     
c      	   C   sp   | d  k r |  j j } n  | d  k r3 |  j } n  | d  k rK |  j } n  t j j d |  d | d | d | ƒ S(   NRõ   R·  RÀ   t   n_bins(   R   R¾   R·  RÀ   RÁ   RD   t   f_model_infot   info(   R:   R·  RÀ   RP  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRR  .
  s    iú   c         C   s|  | d  k r t j } n  |  j ƒ  } | j d | d | ƒ |  j ƒ  } t j ƒ  } d | _ t j ƒ  } d | _ |  j	 j d k r• | j
 d | ƒ n% |  j	 j d k rº | j
 d | ƒ n  | d d d d IJ| d	 IJ| d
 IJt j ƒ  } xe| j ƒ  j ƒ  D]Q}	 | j ƒ  j |	 ƒ }
 |  j d |
 ƒ } |  j d |
 ƒ } | j d |
 ƒ } | j d |
 ƒ } | j |
 ƒ } | j ƒ  \ } } | j d | ƒ } |
 j t ƒ } t | | ƒ d } | j | ƒ | j ƒ  j d |	 d t d t ƒ } d } |  j	 j d k r.| | |	 | | | | | | | f IJq| | |	 | | | | | | | f IJqW| d d d d IJ| j ƒ  d  S(   Nt   reflections_per_binRP  t   fftt   directRÏ   RM  RN  iM   sO   | Bin     Resolution   Compl.  No.       Scale_k1             R-work          |sO   |number     range              Refl.      direct       fft direct fft-direct,%|Rh   R9  g      Y@t   i_bint   show_bin_numbert   show_countss3   |%3d: %-17s %4.2f %6d %14.3f %6.4f %6.4f   %9.4f  |(   R   R   R   RN   t   setup_binnerRŽ   R¶   R·   Rë   R½   RŒ   R   R˜   t   binnert
   range_usedRh   Rð   RÉ  R6   R  R  RP   R3   RG   R€   t
   bin_legendRW   t   flush(   R:   RS  RP  R)   t   f_obs_wt	   fmodel_dct   fft_pt   dir_pR.  RV  R  t   r_work_1t
   scale_k1_1t   r_work_2t
   scale_k1_2t	   f_obs_selR9  R    t   complt   n_refRx  t   d_rangeRP  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   fft_vs_direct<
  sP     		

c         C   s]   | d  k r t j } n  d d „ } x2 d d d d d d g D] } | | | | IJq= Wd  S(	   Ng�íµ ÷Æ°>c         S   s   t  |  ƒ | k  r d S|  S(   Ni    (   RG   (   R*  t   eps(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   zero_if_almost_zeroj
  s     sF   Fmodel        = k_isotropic * k_anisotropic * (Fcalc + k_mask * Fmask)s>   Fcalc         = structure factors calculated from atomic modelsC   Fmask         = structure factors calculated from bulk-solvent masks9   k_isotropic   = overall resolution-dependent scale factors:   k_anisotropic = overall Millerindex-dependent scale factors)   k_mask        = bulk-solvent scale factor(   R   R   R   (   R:   R)   RW  R(  Rl  t   line(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   explain_membersh
  s     c         C   sÄ   |  j  ƒ  } |  j ƒ  } |  j ƒ  } | r` | j ƒ  } | j ƒ  } | d k	 r` | j ƒ  } q` n  | j d d ƒ } | d k	 rš | rš | j | d d ƒn  | j | d d ƒ| j ƒ  j | ƒ d S(   sí   
    Dump all input data to an MTZ file using standard column labels.  This may
    be useful when running modules or programs that require an MTZ file as
    input (rather than taking f_model.manager or the Miller arrays directly).
    t   column_root_labelR  t   HLt
   FreeR_flagN(	   R4   R.   R<   t   average_bijvoet_matesR   t   as_mtz_datasett   add_miller_arrayt
   mtz_objectt   write(   R:   t	   file_namet   merge_anomaloust   include_hendrickson_lattmanR4   R�  R<   t   mtz_dataset(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   export_f_obs_flags_as_mtzv
  s    	t   mtzc         C   s‚  | d# k s t  ‚ d  } | d  k r0 t j } n* t | d ƒ rZ t j j d | j ƒ } n  | d k r~| d  k	 sx t  ‚ |  j	 ƒ  j
 d d ƒ } | j d |  j ƒ  d d ƒ | j d |  j ƒ  d d ƒ | j d |  j ƒ  d d	 ƒ xe t |  j ƒ  ƒ D]Q \ } } t |  j ƒ  ƒ d
 k r$d } n d | d
 } | j d | d | ƒ q÷ W| j d |  j ƒ  j d |  j ƒ  ƒ d d ƒ | j d |  j ƒ  j d |  j ƒ  ƒ d d ƒ xw t |  j ƒ  ƒ D]c \ } } t |  j ƒ  ƒ d
 k rèd } n d | d
 } | j d |  j	 ƒ  j d | ƒ d | ƒ q»W| j d |  j	 ƒ  j d |  j ƒ  ƒ d d ƒ |  j ƒ  \ } }	 | j d | d d ƒ | j d |	 d d ƒ |  j ƒ  d  k	 r¿| j d |  j ƒ  d d ƒ n  t j d |  j	 ƒ  j ƒ  d |  j	 ƒ  j ƒ  d t ƒ j d |  j d d  ƒ ƒ }
 | j d |
 d d ƒ t j d |  j	 ƒ  j ƒ  d |  j	 ƒ  j ƒ  d t ƒ j d |  j  d d  ƒ ƒ } | j d |
 d d ƒ | j d |  j	 ƒ  j! ƒ  d d d d ƒ t" j# ƒ  } | j$ } | t% ƒ  ƒ | d t& j j' | ƒ ƒ | d  t& j j( | ƒ ƒ t) ƒ  } |  j* d! | ƒ x$ | j+ ƒ  j, ƒ  D] } | | ƒ q1W| j- ƒ  } | j. d" | ƒ | j/ ƒ  | j0 d | ƒ n  d  S($   NR|  R’  Rw  Ro  t   FOBSRž   t   R_FREE_FLAGSt   FMODELt   FCALCi   t   FMASKs   FMASK%dR/   t   K_ISOTROPICt   K_ANISOTROPICt   K_MASKs   K_MASK%dt   FOMt   ALPHAt   BETARp  Rå   R�   R  RO  t   HLmodelt   HLcombt
   RESOLUTIONt   column_typest   Rs   file name: %ss   directory: %sR)   t   lines(   R|  (1   R}   R   R   R   t   hasattrRd  t   patht   canonical_pathR’  R4   Rs  Rt  R.   R,  Rm   R  Rx   R~   Rƒ   RL   RJ   R—   RC   R#  R´  R<   R   R`  Rå   R�   RW   Ra  R?  R5   R   t
   std_stringR€   R   t   ost   basenamet   dirnameR   Rn  t   getvaluet
   splitlinesRu  t   add_historyt   closeRv  (   R:   R)   RP  Rw  Rz  t   ifmRˆ   t   labelRÊ  RË  Rf  t   hl_combt   mtz_history_buffert   haR  Rm  Ru  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   export�
  s˜    																			
N(Œ   RR   RS   R   RW   R?   RÑ   RÓ   RÔ   Rß   t   propertyt   structure_factor_gradients_wR®   RÅ   Rô   R•   R3   R  R  R  R0  RŽ   R6   R;  RC  RD  RH  RQ   R]  Rz  Rf  R’   R|  R‘  R™  R±  RÉ  Rë  RÁ  R  Rþ   RM  Rh  Ro  Rz  RÅ  R„  R‚  R®  R©   R³  RV   RÇ   R½  RŒ   R<   R4   R.   R¾  R¿  RÀ  RJ   RK   RÁ  R—   RL   RM   RN   RO   RB   RÂ  RH   Rx   RE  RI   R,  RÇ  RÄ  RÃ  RÎ  RÑ  Rq   RF  Rr   RG  Rm   R¦   RÒ  RÓ  RÔ  RÞ  Râ  Rã  Rå  Ræ  R´  Rú  Rû  Rý  R  R	  Rð   RV  R
  R  R  R©  RÉ  RÈ  R  R  R  R  R  RT  R  R   R#  R"  R$  R&  R(  R)  R,  R/  RO  Ra  R>  R?  RH  RÚ  RÛ  RK  RL  RM  RO  RR  Rj  Rn  R{  Rž  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRš   B  s²  p							&	D)			9	:			B	2I9	m	)8	!		D	¸			'																																						7
		*			

																*c         C   s>   g  } | } x+ | |  d k r9 | j  | ƒ | | 7} q W| S(   Ng-Cëâ6?(   R€   (   t   x_maxt   x_mint   stept   x_rangeR   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   kb_rangeÝ
  s    c         C   sc   | d  k r t d |  d | ƒ St | t t f ƒ rB |  | j ƒ  Sg  | D] } |  | j ƒ  ^ qI S(   NRP  RQ  (   R   R   t
   isinstanceR|   R{   RU  (   RP  RQ  R*  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   n_as_så
  s
    c   	      C   sŒ   t  j d |  d | ƒ } | j ƒ  } t | j ƒ  ƒ } xO | D]G \ } } | j ƒ  | j ƒ  | d } | d | | | f IJ| } q= Wd  S(   NR/   R  i   s   %10.3f - %-10.3f : %d(   R   R  R  R  R  R  (	   R/   R  Rÿ   R   R!  R$  R%  R&  R'  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR  ì
  s    R{  c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   R-   (   R:   Rg  Rh  Rð   RV  RT  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR?   ö
  s    c      
   C   sm   | d  k r d  S| d t d |  j ƒ t d |  j ƒ t d |  j ƒ t d |  j ƒ t d |  j ƒ f IJd  S(   Ns7   r_solv=%s r_shrink=%s r_work=%s r_free=%s r_work_low=%ss   %6.2fs   %6.4f(   R   R   Rg  Rh  Rð   RV  RT  (   R:   R)   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRþ   ù
  s     (   RR   RS   R?   Rþ   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR{  õ
  s   	RR  c           B   s   e  Z RS(    (   RR   RS   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyRR    s   t   resolution_binc           B   s   e  Z RS(    (   RR   RS   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyR¨    s   (a   t
   __future__R    t   mmtbx.f_model_infoRD   t   libtbx.load_envRd  t   cctbx.array_familyR   R   R   R’  RÜ   R   R   R   R   R   R   R   t   mmtbx.max_likR	   t   mmtbx.scaling.sigmaa_estimationR
   t+   mmtbx.bulk_solvent.bulk_solvent_and_scalingRˆ  RÂ  t   cctbx.xray.structure_factorst   stdlibt   boost.pythonRó  t   libtbx.math_utilsR   RU  R   R   R   t   libtbx.str_utilsR   R   t   libtbx.patht	   cStringIOR   RT  Rc  t   mmtbx.scalingR   R   R   R   t   copyR   R   t    mmtbx.scaling.ta_alpha_beta_calct   mmtbx.refinement.targetsR   t   mmtbx.arrayst   mmtbx.bulk_solvent.scalert   scitbx.mathR"  R   R¡  R   Rô  Rõ  R…   Rª  R    R!   R"   R#   R$   R%   R&   R'   R(   t	   time_showR   R+   R0  R,   RT   RY  RZ  R¶   R3   R¸   RW   Rk   Rl   Rš   R¥  R§  R  R{  RQ  RR  R¨  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/f_model.pyt   <module>   s    $(			‡ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ¤				