ó
ÖxTc           @   sĀ  d  Z  d d l m Z d d l m Z d d l m Z d d l m Z d d l Z	 d d l
 m Z d d l	 m Z d d l Z d d l	 Z	 d d l Z d d l Z e j j d	  Z d d l Z d d
  Z d e f d     YZ d e f d     YZ d e f d     YZ d d d d d d  Z d e f d     YZ d   Z d   Z d   Z d   Z  d d  Z! d d d d d d  Z" d e# d   Z$ e# e% d!  Z& d" Z' d# e f d$     YZ( d S(%   sæ   
This module contains a variety of functions related to map calculation, many
of which are access via the mmtbx.f_model.manager API.  It has some overlap
with the separate mmtbx.maps module.
i’’’’(   t   division(   t   flex(   t   miller(   t   maptbxN(   t   null_out(   t   adopt_init_argst   mmtbx_f_model_extc         C   sn  | d  k	 r | } nf t j   } xW t |  j   j    D]= } | j t j d d d d d d d d d	 d
 d g   q: Wt	 |  j   } t	 |   j   } | | } | | } |  j
   }	 |	 j   | j   k sŻ t  d |	 |	 |	 |	 | | | | }
 d t j |
  } | | | | | | } d d |	 |	 |	 |	 | | | | | | | | } | S(   Ni   gń?g333333ó?gĶĢĢĢĢĢō?gffffffö?g      ų?gł?g333333ū?gĶĢĢĢĢĢü?gffffffž?i   g      š?(   t   NoneR   t   doublet   xranget   datat   sizet   appendt   randomt   choicet   abst   sigmast   AssertionErrort   sqrt(   t   f_obst   f_modelt   weight_parametert   sct   sc_t   f_mt   f_ot   i_ct   i_ft   sig_ft   wt   sigma_it   r1t   r2(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   shelx_weight   s     	;

&:t   fo_fc_scalesc           B   s   e  Z d  d d  Z RS(   g       @g      š?c   
      C   sl  | |  _  t j d |  } |  j  j   j   j   } | } | j d k rs t j |  j  j   j	   d  |  _
 n$ t j |  j  j   j	   d  |  _
 | j d k rĶ t j |  j  j   j	   d  |  _ n$ t j |  j  j   j	   d  |  _ t | j | j  } | j t | j  k r | d k r |  j
 j | | j  |  j
 j | t | j | d   |  j j | | j  |  j j | t | j | d   nČ | j t | j  k rD| d k rD|  j
 | j }	 |  j | j |  _ |  j
 j | |	 |  |  j
 j | |	  |  j j | |  j |  |  j j | |  j  n$ |  j
 | j 9_
 |  j | j 9_ d S(   sC   
    Compute x and y for x*Fobs-y*Fmodel given map type string
    t   map_name_stringi    g      š?g        gķµ ÷Ę°>N(   t   fmodelt   mmtbxt	   map_namesR   t   centric_flagsR
   t   kR   R   R   t   fo_scalet   nt   fc_scaleR   t   set_selectedt   maxt
   fc_scale_n(
   t   selfR$   t   map_type_strt   acentrics_scalet   centrics_scalet   mnmR'   t   acentric_flagst   abs_knt
   fo_scale_k(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   __init__-   s2    	'$'$$#&$(   t   __name__t
   __module__R7   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR"   ,   s   t   combinec           B   s    e  Z d d   Z d d  Z RS(   c   	      C   s#  | |  _  t j d |  |  _ | |  _ | |  _ | |  _ d  |  _ d  |  _	 | |  _
 | |  _ |  j j s |  j j   j   | |  _ n |  j  d  k r¬ |  j j   |  _  n  |  j j   d  k rē |  j  j j   | |  j  j |  _ n8 | j d |  j   } |  j  j j   | | j   |  _ d  S(   NR#   t   map_calculation_helper(   t   mchR%   R&   R3   R$   R+   R)   R   R   R   t   use_shelx_weightt   shelx_weight_parametert   ml_mapR
   R;   t	   hl_coeffst   fomt   combine_phasest   f_obs_phase_and_fom_source(	   R/   R$   R0   R)   R+   R=   R>   R;   t   cp(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR7   R   s"    								 &c            sa    f d   } | d  k r   j j sR   j j     _   j j     j } qŽ   j j   _   j j     j   j j	 j   } nT |   _   j j sø   j j     j } n&   j j     j   j j	 j   } | d   j
 d | d   j j
    }   j r]t d   j j
   d   j j   d   j  } | j d | j   |  } n  | S(	   Nc            s_   t  |   t j k rE t j d | d |   j d   j  j   }  n  t j d | d |  |  S(   Nt
   miller_setR
   t   phase_source(   t   typeR   R   R   t   arrayt   phase_transferR   R
   (   t   fot   fcRE   (   R/   (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   computen   s    RJ   RK   RE   R   R   R   R
   (   R   R3   R?   R$   t   f_model_scaled_with_k1R   R
   R+   R<   t   alphaR   R=   R!   R>   t   customized_copy(   R/   R   RL   t   f_model_datat   resultt   sw(    (   R/   s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   map_coefficientsm   s(    )	&	N(   R8   R9   R   R7   RS   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR:   Q   s   t   electron_density_mapc           B   sh   e  Z d	 d   Z d d e e d e e e d	 d	 d	 e d d  Z d
 d	 d	 d	 d	 d	 d d e d 	 Z RS(   c         C   sĶ   | |  _  d  |  _ | |  _ |  j  j   j   rÉ |  j  j   j   |  _ |  j  j   j   j	   j
   } | j d |  j  \ } } | j   j   |  j j   j   k s± t  | j d |  |  _ n  d  S(   Nt   otherRF   (   R$   R   t	   anom_diffR<   R   t   anomalous_flagt   anomalous_differencesR   t   as_non_anomalous_arrayt   merge_equivalentsRH   t   common_setst   indicesR   R   RI   (   R/   R$   R;   R   t   fmodel_match_anom_difft   anom_diff_common(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR7      s    			!-	g       @g      š?R   g      ų?c         C   s{  t  j d |  } | j rW |  j d  k	 rP t j d |  j d |  j j   d  Sd  Sn | j r |  j d  k	 r t	 d |  j
 d |  Sd  SnT | j rą | d  k r“ t d d   n  |  j d  k	 rŁ t d |  j
 d	 |  Sd  Sn  t  j d |  } | j d
 k rot | j  d k ro| rG|  j
 j j d |  j
 j   j    j   S|  j
 j   j d |  j
 j  j   Sn  |  j d  k r|  j
 j   |  _ n  t d |  j
 d | d | d |  } | j | j } } t d |  j
 d | d | d | d |  j d | d |  j   } d  } d |  j
 j   |  j
 j   } | j  d |  } | rĒ| j!   rb| j"   } n  |  j
 j#   } | j!   r| j"   } | j"   } n  | j$ | j    } | j$ | j    } n  d  } | r|
 d  k	 rt% |
 d  sōt&  |
 d | d |  j
 d |  } n  | r}| d  k r^| j!   rO| j!   rO| j"   } n  | j   } n  | j  d | j   |  } n  | ræ| j!   r| j"   } n  t' d | d |  j
 d |  } n  |	 r[d t( j) | j*   j    d } d d l+ m, } t( j- |  j
 j j.   | j/ d   d } d t( j0 | |  } | j  d | j   |  } n  | rw| j!   rw| j"   S| S(    NR#   RE   R
   y               @R$   t   exclude_free_r_reflectionss1   pdb_hierarchy must not be None when a Phaser SAD s   LLG map is requested.t   pdb_hierarchyi    i   t   d_mint   xray_structureR0   R1   R2   R)   R+   R;   R=   R>   g      š?t   __call__t
   map_coeffst   map_typet   coeffst   methodg      @i’’’’(   t   adptbxi   (1   R%   R&   t	   anomalousRV   R   R   RH   R
   t   anomalous_residualt#   anomalous_residual_map_coefficientsR$   t   phaser_sad_llgt   RuntimeErrort#   get_phaser_sad_llg_map_coefficientsR(   R   R*   Rb   t   structure_factorsR   Ra   t   f_calct!   structure_factors_from_scatterersR<   R;   R"   R)   R+   R:   RS   t   k_isotropict   k_anisotropicRO   RW   t   average_bijvoet_matest   r_free_flagst   selectt   hasattrR   t   fill_missing_f_obsR   t   pow2t
   d_spacingst   cctbxRh   t   meant   extract_u_iso_or_u_equivt   u_as_bt   exp(   R/   Re   R1   t   centrics_pre_scaleR_   t   fill_missingt   fill_missing_methodt   ncs_averaget
   isotropizet   sharpt   post_processing_callbackR`   t   merge_anomalousR=   R>   t   map_name_managerR3   t   ffsR)   R+   Rf   Ru   t   scale_defaultt   scale_arrayt   scalet   ssRh   t   bt   k_sharp(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRS      s¬    					$				 		#
i   g      @c
   
      C   s“   | d  k rB |  j d | d | d |  } | rB | j   } qB n  | rW | j   } n  |	 sx | j |  j j j  } n  | d  k r | j d | d |  St j d | d |  Sd  S(   NRe   R1   R   t   resolution_factort   symmetry_flagst   crystal_griddingt   fourier_coefficients(	   R   RS   Rt   Rv   R$   t   arrayst   work_selt   fft_mapR   (
   R/   R   R   RS   t   other_fft_mapRe   t   force_anomalous_flag_falseR1   R   t   use_all_data(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR     s$    
				NgUUUUUUÕ?(   R8   R9   R   R7   t   Falset   TrueRS   R   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRT      s.   eg¹?i   c
         C   sE  d }	 d d l  m }
 | d k rP d d l } | j j d |  j  j | } n
 | | } d } | r· t j	 d |  j
   j   d |  j
   j   d t  j d	 |  j d
 d   } n  |  j
   } | j d	 | j   d t j | j   j   d   } | r¢| j   } | j   } | j   } | j   j   | j   j   } | j d	 t j | j   j   d  d t j | j   j   d   } | j d |  } n  | r±t } n t } |
 j d | j   d | d | d | d | d | d | d | d t d |	 d t    } | j } | j   j   | j   j   k sAt  | S(   s   
  Compute Resolve DM map
  s   
keep_missing
i’’’’(   t   density_modify_in_memoryNRb   t   crystal_symmetryR\   RW   R
   R;   R   g      š?g{®Gįz?g      šæRU   t   fp_sigfpt   hendrickson_lattmant   map_coeffs_startt   solvent_contentt   mask_cyclest   minor_cyclest   pdb_inpt   denmod_with_modelt   verboset
   input_textt   out(   t   solve_resolve.resolve_pythonR   R   t   mmtbx.utilst   utilst   f_000Rb   t   solvent_fractionR   t   setR   R   R\   R   RH   t!   f_model_phases_as_hl_coefficientsR
   R   R   R   R   t   complete_sett   complete_withR   t   runt	   deep_copyR   t   map_coeffs_out_as_miller_arrayR   (   R$   Rd   R¤   t   use_model_hlt   fillR”   t   solvent_content_attenuatorR¢   R£   R§   R   R%   t   hl_modelR   R
   R   R°   t	   n_missingR„   t   cmnRQ   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   resolve_dm_map.  sZ    
		!"	!			*t   model_missing_reflectionsc           B   s&   e  Z d    Z d   Z e d  Z RS(   c         C   sZ  | |  _  | |  _ | j   j d |  j  j   j   d d  } t j d | d |  j  } | j   | j   } t	 j
   } x0 |  j  j j   D] } | j | j |   q Wt	 j | j | d k  d  } | t | d d	  k }	 | j j   }
 t j d | d |  j  j    } | j   | j   } xŗ t |
  D]¬ \ } } t j d
 |  j j   d | j   d | j   d t	 j | g  d t	 j
 d g   } t	 j d | j |  d | j |   j   } | d k  r<t |	 | <q<q<W~ ~ ~ | j   j   |  _ |  j  j   j   j d |  j  } | j  d t	 j
 | j!   j"   d   |  _ |  j  j j |	  |  _# |  j j$ |  j  |  _% |  j j& d |  j#  j'   |  _( d t	 j) |  j( j*   j+    d |  _, t- j. j/ d |  j( d d  d d   } | j1 d |  j# d t2  |  _3 t	 j4 |  j( j+   j"   d  |  _5 d d  l6 j7 j8 } | |  _8 d  S(   NRa   R   g      š?i   R   R   g      ą?g       @i   t	   unit_cellt
   fft_n_realt
   fft_m_realt
   sites_cartt
   site_radiig      ų?t   xt   ygffffffę?R
   i    Rb   g      @t   miller_arrayt   miller_array_twint   mask_paramst   force_updatei’’’’gUUUUUUÕ?(9   R$   Rf   R   R   Ra   R   R   t   apply_sigma_scalingt   real_map_unpaddedR   R   Rb   t
   sites_fracR   t   eight_point_interpolationt   mean_defaultRv   t   minRĄ   R   t	   enumerateR   t   grid_indices_around_sitesR½   t   focust   allt   vec3_doublet   linear_correlationt   coefficientR   Rt   R°   RH   R\   R   t   xray_structure_cutt
   common_sett   missing_setRq   Rp   t   f_calc_missingRy   Rz   R
   t
   ss_missingR%   t   maskst   managerR   t   shell_f_masksR   t   f_mask_missingt   complex_doublet	   zero_datat   mmtbx.maps.kickt   mapst   kick(   R/   R$   Rf   R   R   t   map_datat	   rho_atomst	   site_fract   rho_meant   sel_excludeRĄ   t	   map_data2t   i_seqt	   site_cartt	   selectiont   cct   cst   mask_managert   kick_module(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR7   o  sf    				
!	
	 	$-)				$c         C   s%  t  j g  t d d  D] } | d ^ q  } t  j g  t d d d  D] } | ^ qH  } |  j j d |  j d d  } t j d	 | j   d
 |  j	 d j   g d | g d | d |  j
 d |  j
 d d d d d d d g d |  j j   d |  j j   d |  j  
} t j d |  j d | j  S(   Ni   i)   g      Y@iU   i   Rd   t   number_of_kicksi
   Rp   RÜ   i    t   k_solst   b_solt   f_part1t   f_part2t   u_start   hklt   ucR   RE   R
   (   R   R   t   rangeRā   t   randomize_struture_factorsRŲ   R   t   coreR
   RŻ   Rß   R\   R½   RŁ   R   RH   R   (   R/   t   it   k_solRņ   Rp   R
   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   get_missing_fast«  s     /.				c   
      C   s  | r |  j  } n3 t j |  j  j   j   d  } |  j  j |  } | rĮ |  j j   } | j d t	  } t
 j j d |  j d | d | j   d d | j   d | j    } | j   } nĘ t j t t	 g  rlt j g  t d	 d
  D] } | d ^ qģ  } t j g  t d	 d d  D] } | ^ q }	 t
 j j d |  j d | d | d |	  } | j   } n | j d |  j  j   } | S(   NgĶĢĢĢĢĢģ?t   fastR   Rb   Rü   i    Rņ   t   b_carti   i)   g      Y@iU   i   Ra   (   RÕ   R   t   random_boolt
   scatterersR   Rv   R$   R³   t   update_solvent_and_scaleR   R%   R   RŪ   R°   Rń   Rņ   R’   t   f_model_no_scalesR   R   R   Rų   Ro   Ra   Rp   (
   R/   t   deterministict   xrst   selt   fmt   rRQ   Rū   Rü   Rņ   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   get_missing½  s2    !
	/.		(   R8   R9   R7   Rż   R   R	  (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR¼   n  s   	<	c         C   s=   t  d |  d |  } | j d t  } |  j d | d t  S(   NRf   R$   R  RU   R   (   R¼   R	  R   R±   (   Rf   R$   t   mrot   missing(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   fill_missing_f_obs_1ä  s    c         C   sF   | j    j   } |  j d d d d d |  } |  j d | d t  S(   Nt   vol_cutoff_plus_percentg      @t   vol_cutoff_minus_percentt   scale_toRU   R   (   R   Rt   t   double_step_filtrationR±   R   (   Rf   R$   R  t   dsf(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   fill_missing_f_obs_2é  s    		c         C   sS   t  j j d  s |  St d | d |  d d  d t d t  } |  j d | d t  S(	   Nt   solve_resolveR$   Rd   R¤   Rµ   R¶   RU   R   (   t   libtbxt   envt
   has_moduleR»   R   R   R±   (   Rf   R$   t   mc_dm_filled(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   fill_missing_f_obs_3ń  s     	c         C   sØ   | d d d d  t g k s! t  | d k r@ t d |  d |  S| d k r_ t d |  d |  S| d k r~ t d |  d |  S| d  t g k r |  St d |   d  S(   Nt
   resolve_dmR  R   Rf   R$   s*   Invalid arg of fill_missing_f_obs: method:(   R   R   R   R  R  R  Rm   (   Rf   R$   Rg   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRx   ū  s    !g      Š?c   
      C   s   | j  d |  } | j   | j   } d } d } x@ |  D]8 } | j |  } | d k r; | | 7} | d 7} q; q; W| | }	 |	 S(   NR   i    i   (   R   RČ   RÉ   RĖ   (
   RŹ   Rd   R   R   Rć   t   targett   cntrRå   t   mvt   t_mean(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   sharp_evaluation_target  s    


ij’’’i   i
   c         C   sC  | d  k r2 d t j | j   j    d } n  d d l m } | d  k rd } d  }	 d  }
 x t | | |  D]} } | j   } t j	 | |  } | j
 d | j   |  } t d |  d |  } | | k rs | } | }
 | j   }	 qs qs Wd G|
 G| GHn5 t j	 | |  } | j
 d | j   |  }	 | }
 |	 |
 f S(	   Ng      š?g      @i’’’’(   R   R
   RŹ   Rd   s   b_sharp:(   R   R   Ry   Rz   R
   R{   R   Rų   R³   R   RO   R  (   RŹ   Rd   R   t   b_sharpt   b_mint   b_maxt   stepR   t   tt   map_coeffs_bestt   b_sharp_bestt   map_coeffs_t   sc2t   t_R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt	   sharp_map  s*    &c   
      C   s%  t  j j d  s! t d   n  d d l m } |  j   j   sI t  |  j	   j
 |  j	   j   d k  } |  j   j d |  } | j d | d | d	 t  } | rĖ | d k	 rĖ | j j |  n | j j t    | j d
 |  j d | d t    } | j |  j    | j   }	 |	 S(   sĄ   
  Calculates an anomalous log-likelihood gradient (LLG) map using the SAD
  target in Phaser.  This is essentially similar to an anomalous difference-
  difference map, but more sensitive.
  t   phasers1   Phaser not available - required for SAD LLG maps.i’’’’(   t
   sad_targeti    RU   R   Ru   R¦   Rb   R`   t   logN(   R  R  R  t   Sorryt   phaser.phenix_adaptorsR+  R   RW   R   R   Rv   R
   Ru   RÖ   t   data_adaptorR   R   t   outputt   setPackagePhenixR   R  Rb   t
   set_f_calct   llg_map_coeffs(
   R$   R`   R,  R¦   R+  R   Ru   R
   R#  Rd   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRn   /  s(    
'				c         C   sA  |  j    j   s t  |  j    j   } t |  j    j   } | rõ |  j   } |  j    j d | j d d  j
   } | j j
   } | j d |  } | j d |  } | j d | j   | j    } | j d | j   | j    } n  | j d | j   | j    } |  j   j   j   j   }	 |	 j d |  \ }
 } | j   j   | j   j   k swt  t j d | d t j | j   j   d   j d |
  } t j d | d | j   | j    } | r!|  j   j
   } | j |  \ } } | j | j    } n  t j d | d | j   d  S(	   sÅ   
  EXPERIMENTAL

  Calculates map coefficients showing the difference in anomalous scattering
  between F-obs and F-model.  Similar to the Phaser SAD LLG map, but appears
  to be less sensitive.
  R
   R   RU   RE   i   RF   y               @N(   R   RW   R   RX   R   R   R;   RO   RA   R   Rt   RN   RÖ   R
   RY   RZ   RH   R[   R\   R   R   R   R   RI   Ru   Rv   (   R$   t   weightedR_   t
   f_obs_anomt   f_model_anomR<   RA   RN   t   anom_diff_diffR   R]   t   anom_diff_diff_commont
   phases_tmpRd   Ru   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRk   O  sB    	"			$			sė   
resolution_factor = 0.25
  .type = float
use_molecule_mask = False
  .type = bool
averaging_radius = 5.0
  .type = float
solvent_content = 0.5
  .type = float
exclude_hd = True
  .type = bool
skip_difference_map = Auto
  .type = bool
t   ncs_averagerc           B   s/   e  Z d  Z d d e d  Z e d d  Z RS(   s  
  Callable wrapper class for running RESOLVE NCS averaging on any map
  coefficients array.

  Parameters
  ----------
  ncs_object: mmtbx.ncs.ncs.ncs_group object
  params: phil scope_extract object containing parameters
  log: filehandle-like object

  Examples
  --------
  >>> average = ncs_averager(ncs_object, log=null_out())
  >>> for array in map_coeffs :
  >>>   array = average(array, fmodel)
  c         C   s\   | d  k r' t j j t  j   } n  | d  k r? t   } n  t |  t    d  |  _	 d  S(   N(
   R   R  t   philt   parset   ncs_averaging_paramst   extractR   R   t   localst   mask(   R/   t
   ncs_objectt   paramsR,  R¦   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR7     s    c         C   sŽ  d d l  m } d d l m } d d l m } d d l m } | j   r[ | j	   } n  | j
 d | j d |  j j  }	 |	 j   j   j   }
 |  j r© |  j } n	 t   } |  j d  k sĒ | rn|  j j r| j t j   d  |  _ | j j   } |  j j r%| j | j j    } n  | j d	 | j    d
 t j!   d t j"   d | d | j# | j   |  j j$   } t j% | d  t j& t j'    qn| j( d t)  j* d d  } | j
 d | j d |  j j  } | j   j   j   } | d | d | d | j+   d	 | j    d |  j j, d |  j j$ d | j-   d | d d   	\ } } } } | j. |  _ n  | d |
 d |  j d |  j/ d | j+   d	 | j    d | j-   d |  } | j0 d | j1 j2   d t)  } | S(   Ni’’’’(   t   get_map_mask_sg_cell(   R   (   R   (   R   R   R   i    R½   R¾   Ræ   RĄ   RĮ   i   t   update_f_part1Re   s   2mFo-DFcRd   t   mapt   space_groupR”   t   wang_radiust
   resolutionRØ   t   resolve_command_listR@  RA  t   use_sg(3   t*   solve_resolve.resolve_python.resolve_utilsRC  t(   solve_resolve.resolve_python.ncs_averageR   R{   R   t   scitbx.array_familyR   RW   Rt   R   t   use_space_group_symmetryRB  R   t   apply_volume_scalingRÉ   t   as_floatR¦   R,  R   R@  R   t   use_molecule_maskt   floatt   real_mapR   Rb   RĄ   t
   exclude_hdRv   t   hd_selectionRĻ   R½   RŠ   RŃ   R   t   averaging_radiusR,   t   reshapet   accessorRT   R   RS   RF  R”   Ra   RE  RA  t   structure_factors_from_mapt   average_mapt	   as_double(   R/   Rd   R$   t   generate_new_maskRe   RC  R   R   R   R   RE  RØ   RĄ   R\   t   mask_map_coeffst   mask_fft_mapt   mask_mapt   map_dbt   mask_map_dbt   space_group_objectt   unit_cell_objectt   averagedt   new_map_coeffs(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyRc   §  st    														N(   R8   R9   t   __doc__R   R   R7   Rc   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyR:    s   ()   Rf  t
   __future__R    t   cctbx.array_familyR   R{   R   R   t   libtbx.philR  t   libtbx.utilsR   R   R%   R   t   boost.pythont   boostt   pythont
   import_extR   t   mmtbx.masksR   R!   t   objectR"   R:   RT   R»   R¼   R  R  R  Rx   R  R)  R   Rn   R   Rk   R=  R:  (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/map_tools.pyt   <module>   sH   %;Ø6v			
		9