ó
Ç™xTc           @   sv  d  d l  m Z d  d l m Z m Z d  d l Z d  d l m Z d  d l m	 Z	 m
 Z
 d  d l m Z d  d l m Z d  d l Z d  d l m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d	 l m Z e j j d
 d ƒ rd  d l m Z n e Z e j d ƒ d Z  d Z! d „  Z" d e# f d „  ƒ  YZ$ d e# f d „  ƒ  YZ% d e# f d „  ƒ  YZ& d S(   iÿÿÿÿ(   t   division(   t   absolute_scalingt   relative_scalingN(   t   adptbx(   t   maptbxt   miller(   t   flex(   t   phase_error(   t   adopt_init_argst   Autot
   group_args(   t   StringIOt   namet   solve_resolve(   t   ncs_averagei   i-   sÞ  
  solvent_fraction = None
    .type = float
    .style = bold noauto
  initial_steps = 10
    .type = int
  shrink_steps = 20
    .type = int
  final_steps = 10
    .type = int
  grid_resolution_factor = 1/4
    .type = float
    .style = noauto
  d_min = None
    .type = float
    .short_caption = High resolution
    .style = noauto
  initial_d_min = None
    .type = float
    .short_caption = Initial high resolution
    .help = If this is specified, phase extension will be performed             from initial_d_min to d_min
  phase_extension = False
    .type = bool
  verbose = True
    .type = bool
  change_basis_to_niggli_cell = True
    .type = bool
    .short_caption = Change basis to Niggli cell
  ncs_averaging = False
    .type = bool
    .help = NCS averaging of the protein density
  protein_solvent_ratio = 1.31
    .type = float
    .short_caption = Protein/solvent ratio
  density_truncation
    .style = box
  {
    fraction_min = 0.35
      .type = float
    fraction_max = None
      .type = float
  }
  solvent_modification {
    method = *flipping flattening
      .type = choice
      .short_caption = Solvent modification method
      .style = noauto
    scale_flip = True
      .type = bool
  }
  solvent_adjust = True
    .type = bool
    .short_caption = Adjust solvent
  solvent_mask {
    averaging_radius {
      initial = None
        .type = float
        .short_caption = Initial averaging radius
      final = None
        .type = float
        .short_caption = Final averaging radius
    }
  }
  anisotropic_correction = True
    .type = bool
    .help = Correct the observations for anisotropy
  asu_contents
    .help = "Defines the ASU contents"
    .short_caption = ASU contents
    .style = menu_item auto_align noauto
  {
    n_residues=None
      .type=float
      .help="Number of residues in structural unit"
      .short_caption = Number of residues in asymmetric unit
    n_bases=None
      .type=float
      .help="Number of nucleotides in structural unit"
      .short_caption = Number of nucleotides in asymmetric unit
    n_copies_per_asu=None
      .type=float
      .help="Number of copies per ASU. If not specified, Matthews analyses is performed"
      .short_caption = Number of copies in asymmetric unit
  }

c         C   s   t  j t j t j |  ƒ ƒ ƒ S(   N(   t   matht   sqrtR   t   meant   pow2(   t   flex_double(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   rmsp   s    t   local_standard_deviation_mapc           B   s2   e  Z d  d  d d d „ Z d d „ Z d „  Z RS(	   i    i   i   c         C   sL   | j  ƒ  s t ‚ | j | d | d | d | ƒ|  _ |  j j ƒ  |  _ d  S(   Nt   symmetry_flagst   mean_solvent_densityt   resolution_factor(   t   is_complex_arrayt   AssertionErrorR   t   mapt   real_map_unpadded(   t   selft
   map_coeffst   radiusR   t   methodR   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   __init__v   s    i'  c         C   s   t  j d |  j j ƒ  d | ƒ S(   Nt   datat   n_slots(   R   t	   histogramR   t   as_1d(   R   R#   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR$   ƒ   s    c         C   st   |  j  ƒ  } | j t |  j j ƒ  d | ƒ ƒ } t j ƒ  } | j |  j j ƒ  d ƒ | j	 |  j | k d ƒ | S(   Ni   i    (
   R$   t
   get_cutofft   intR   t   sizeR   t   size_tt   resizet   accessort   set_selected(   R   t   solvent_fractiont   histt   cutofft   mask(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR0   †   s    &NgUUUUUUÕ?(   t   __name__t
   __module__t   NoneR!   R$   R0   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR   t   s   	t   density_modificationc           B   sI  e  Z d d d e d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d „ Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d „  Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ RS(   c         C   sZ	  | d  k r t j } n  t |  t ƒ  ƒ |  j j j j d  k r¸ |  j j	 d  k	 rm |  j j	 |  j j j _ q¸ |  j j
 d  k	 rš |  j j
 |  j j j _ q¸ |  j j
 ƒ  |  j j j _ n  |  j j j j d  k rõ |  j j j j d |  j j j _ n  |  j ƒ  |  j ƒ  d  |  _ |  j j rN|  j j ƒ  |  _ |  j j ƒ  rNd  |  _ qNn  |  j d  k	 rÌ|  j j |  j ƒ j ƒ  |  _ |  j j |  j ƒ j ƒ  |  _ |  j d  k	 rÌ|  j j |  j ƒ j ƒ  |  _ qÌn  d |  _ d  |  _ d  |  _ |  j j
 d  k r5|  j j r|  j j
 ƒ  |  j _
 q5|  j j
 ƒ  |  j _
 n  |  j j	 d  k r\|  j j
 |  j _	 n  |  j j	 |  j j
 k szt ‚ t |  j j |  j j |  j j f ƒ |  _  d |  _! |  j j d  k	 rP|  j j d k rP|  j j j j |  j j j j |  j j |  _" |  j j r2|  j j	 |  j j
 |  j j |  _# qPd |  _# |  j j
 |  j _	 n  |  j j$ ƒ  |  _$ |  j j% ƒ  d  k	 r®|  j j% ƒ  d k |  j j& ƒ  j' ƒ  |  j j
 k @} n! |  j j& ƒ  j' ƒ  |  j j
 k } d }	 d }
 t( |  j j) | ƒ j' ƒ  ƒ |
 } t* j+ |  j j) | ƒ j' ƒ  ƒ } |  j j% ƒ  d  k	 r¯|  j j, d |  j j' ƒ  |	 |  j j% ƒ  k |  j j' ƒ  | k @|  j j' ƒ  | k @|  j j& ƒ  j' ƒ  |  j j
 k @ƒ |  _- nY |  j j, d |  j j' ƒ  | k |  j j' ƒ  | k @|  j j& ƒ  j' ƒ  |  j j
 k @ƒ |  _- |  j- j. d t/ d |  j j
 ƒ |  _- |  j- j' ƒ  |  _0 |  j j. d d d d d |  j j
 ƒ |  _1 |  j j. d d% d |  j j
 ƒ |  _ |  j j2 |  j3 ƒ |  _4 |  j4 } |  j5 | ƒ t* j6 |  j j' ƒ  ƒ } | j7 | j' ƒ  d& k d ƒ | |  _8 |  j d  k r¿|  j9 j: d |  j9 j' ƒ  | d d  ƒ j; d	 |  j4 ƒ |  _ |  j j' ƒ  j7 | d k d ƒ |  j j) | d k ƒ j< d
 t= j> d |  j j? ƒ j@ ƒ  jA ƒ  |  _B |  j j) | d k ƒ |  _ nH |  j jC ƒ  sÔt ‚ |  j j< d
 t= j> d |  j j? ƒ j@ ƒ  jA ƒ  |  _B |  j |  _D |  jE ƒ  | d k jF tG ƒ } | jH rþd | } | d |  j 7} | d |  jI 7} | d |  jJ 7} | d |  jK 7} | d |  jJ |  jK 7} | d |  jL 7} | d t* jM | j) | d k ƒ ƒ 7} |  jN | IJtO jP d d d | ƒ n  d  |  _Q d  |  _R d  |  _S d  |  _T d  |  _U d  |  _V |  j jW jX d  k	 p[|  j jW jY d  k	 |  _Z t[ ƒ  |  _\ |  j\ j] d d d |  j d |  jI d |  jL d |  jJ d |  jK d t* jM | j) | d k ƒ ƒ ƒ tO jP d d t^ d d |  j  d  |  j  ƒ ƒxI t_ |  j  ƒ D]8 |  _! |  j` ƒ  tO jP d d! d t^ d" d ƒ d# t/ ƒ q	WtO jP d$ d d  ƒd  S('   Ni   i    g     ˆÃ@R"   t   new_data_valuet   d_mint   new_sigmas_valuet   sigmast   phase_sourceR   R   s   n phased: %d
s   Mean solvent density: %.4f
s   Mean protein density: %.4f
s   RMS solvent density: %.4f
s   RMS protein density: %.4f
s(   RMS solvent/protein density ratio: %.4f
s   F000/V: %.4f
s   Mean FOM: %.4f
t   messaget   summaryt   cycleR   t   mean_protein_densityt   f000_over_vt   rms_solvent_densityt   rms_protein_densityt   fomt   start_progress_bart   labels   Running %d cycles...R(   t   increment_progress_bart   chunkt   cachedt   end_progress_bar(   i    i    i    i    (   i    i    i    i    (a   R3   t   syst   stdoutR   t   localst   paramst   solvent_maskt   averaging_radiust   finalt   initial_d_minR6   t   f_obst   initialt   matthews_analysist   anisotropic_correctiont   change_of_basis_opt   change_basis_to_niggli_cellt!   change_of_basis_op_to_niggli_cellt   is_identity_opt   change_basist
   map_to_asut   hl_coeffs_startR   R   t   phase_source_initialR9   t   phase_extensionR   t   sumt   initial_stepst   shrink_stepst   final_stepst   max_iterationst   i_cyclet   radius_deltat   phase_extend_stept   complete_setR8   t
   d_spacingsR"   R   t   selectR   t   mint   arrayt   ref_flags_arrayt   complete_arrayt   Falset	   ref_flagst   f_obs_completet   select_indicest   active_indicest	   hl_coeffst   compute_phase_sourcet   absR,   RA   t   f_obs_activet   customized_copyt   phase_transfert   fft_mapR   t   use_space_group_symmetryt   grid_resolution_factort   apply_volume_scalingR   R   R   t   map_coeffs_startt   calculate_solvent_maskt   countt   Truet   verboseR=   R?   R@   R>   R   t   logt   libtbxt	   call_backt   truncate_mint   truncate_min_percentt   truncate_maxt   truncate_max_percentt   k_flipt   solvent_addt   density_truncationt   fraction_maxt   fraction_mint   truncate_densityt   dm_statst   _statst	   add_cycleR
   t   ranget
   next_cycle(   R   RK   RP   RZ   t
   ncs_objectR   R€   t   as_gui_programt
   ref_activet   sigma_cutofft   obs_rmst   obs_hight   obs_lowRq   RA   t   n_phasedR;   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR!   ‘   s     %

								$&	%!"!pM				
	
&											
c         C   s   |  j  S(   N(   RŽ   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt	   get_stats1  s    c         C   s^   |  j  ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d  S(   N(	   R|   t   ncs_averagingR‰   t   solvent_flippingt   solvent_flatteningt   solvent_adjustt   compute_map_coefficientst   compute_mapt   show_cycle_summary(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR‘   4  s    







c         C   s3   |  j  } | j  d } | j  d } | j | j f S(   Ni    iÿÿÿÿ(   RŽ   RA   (   R   R�   t   start_statst   final_stats(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   start_and_end_fom?  s    	c         C   sÔ   d d l  m } | j d |  j d |  j j j d |  j j j ƒ j |  j	 ƒ |  _
 |  j
 j |  j j _ |  j
 j |  j j _ |  j j j d  k r© |  j
 j |  j j _ n  |  j j d  k rÐ |  j
 j |  j _ n  d  S(   Niÿÿÿÿ(   t   matthewst   crystal_symmetryt
   n_residuest   n_bases(   t   mmtbx.scalingR¥   t   matthews_ruppRP   RK   t   asu_contentsR§   R¨   t   showR€   t   matthews_resultt   n_copies_per_asuR3   t   n_copiesR-   t   solvent_content(   R   R¥   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRR   E  s    		!c         C   sY  |  j  j s d  Sd  |  _ |  j  j j } |  j  j j } |  j  j j } t j	 d |  j
 d | |  j
 j ƒ  j ƒ  | d | |  j
 j ƒ  j ƒ  | ƒ |  _ |  j j d |  j ƒ |  j j } t | d  ƒ d } | d | | d | | d | | d | d	 | d
 g } t j |  j
 j ƒ  t j | ƒ ƒ } t j |  j
 d | ƒ j |  j
 ƒ |  _
 d  S(   Nt   miller_arrayR§   R¨   t   outi   i    i   i   i   i   g        (   RK   RS   R3   t   aniso_scale_and_bR«   R®   R§   R¨   R   t   ml_aniso_absolute_scalingRP   t   space_groupt   order_zR¬   R€   t   b_cartR]   R   t   u_cart_as_u_start	   unit_cellt   b_as_ut   set_observation_type(   R   t   n_copies_solcR§   R¨   R·   t   tracet   u_star(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRS   R  s$     			#!$iH   c         C   s…   t  j d | ƒ } |  j |  _ t  j d | d | d | j ƒ  d | j ƒ  d | j ƒ  ƒ ƒ |  _ |  j d  k r~ |  j |  _ n  |  j S(   Nt   n_stepst
   miller_setR"   Rµ   t   miller_indicest    hendrickson_lattman_coefficients(
   R   t   phase_integratorR9   t   phase_source_previousRi   Rµ   t   indicesR"   R[   R3   (   R   Rq   R¿   t
   integrator(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRr   e  s    	c         C   s7   |  j  j d t j d |  j j ƒ j ƒ  j ƒ  |  _ d  S(   NR   R   (	   R   Rw   R   Rx   RK   Ry   Rz   R   R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR    r  s    	c         C   sÖ  t  |  j |  j d |  j d t j d |  j j d d ƒ} | j |  _	 | j
 |  j j ƒ |  _
 |  j
 d k |  _ |  j
 d k |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ |  j
 j d ƒ |  _ |  j
 j d ƒ |  _ t j |  j j |  j ƒ ƒ |  _ |  _ t j |  j j |  j ƒ ƒ |  _ |  _ |  j |  j
 j ƒ  d |  _ d |  j j |  j |  j |  j j |  j j d |  _ t |  j j |  j ƒ ƒ |  _ t |  j j |  j ƒ ƒ |  _  t j! | j j" ƒ  ƒ j# ƒ  |  _$ d  S(	   NR   R   R   R    i   i   i    id   (%   R   R   R   R   R   Rx   RK   Ry   R   t   rms_mapR0   R-   t   solvent_selectiont   protein_selectiont
   iselectiont   solvent_iselectiont   protein_iselectionR}   t   n_solvent_grid_pointst   n_protein_grid_pointsR   R   Rg   R=   t   mean_protein_density_startt   mean_solvent_density_startR(   t   mask_percentt   protein_solvent_ratioR>   R   R@   R?   t   mean_and_varianceR%   t$   unweighted_sample_standard_deviationt   standard_deviation_local_rms(   R   t   lsd(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR|   x  s6    				""c         C   sž  |  j  j j } |  j  j j } | d  k r: | d  k r: d  S| t k rY |  j |  j } n  t j	 |  j
 j |  j ƒ d d ƒ} | d  k	 rû | j t |  j d | ƒ ƒ |  _ |  j
 |  j k |  j @} |  j
 j | |  j ƒ | j t ƒ |  j d |  _ n  | d  k	 ry| j t |  j d | ƒ ƒ |  _ |  j
 |  j k  |  j @} |  j
 j | |  j ƒ | j t ƒ |  j d |  _ n  t j |  j
 j |  j ƒ ƒ |  _ d  S(   NR#   i'  i   id   (   RK   R‰   R‹   RŠ   R3   R	   R=   R>   R   R$   R   Rg   RÌ   R&   R'   RÎ   R…   RÉ   R,   R}   R~   R†   Rƒ   R„   R   (   R   t   min_fractiont   max_fractionR.   t   truncate_max_selt   truncate_min_sel(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR‰   ™  s,       c         C   s  |  j  j j d k s d  S|  j d |  j k r; d |  _ n‚ d |  j  j |  j  j |  _ |  j  j j r½ t j	 t
 j t
 j |  j j |  j ƒ ƒ ƒ ƒ } |  j t j | |  j d ƒ 9_ n  |  j j ƒ  j |  j |  j |  j |  j |  j j ƒ  ƒ t
 j |  j j |  j ƒ ƒ |  _ d  S(   Nt   flippingi   i    i   (   RK   t   solvent_modificationR    Rb   Ra   R‡   R-   t
   scale_flipR   R   R   R   R   R   Rg   RÌ   t   powR@   R%   t   copy_selectedRË   R   (   R   t   rms_protein_density_new(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRœ   ²  s      *c         C   s6   |  j  j j d k s d  S|  j j |  j |  j ƒ d  S(   Nt
   flattening(   RK   RÜ   R    R   R,   RÈ   R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR�   Ä  s     c         C   sÉ   |  j  j s d  St j |  j j |  j ƒ ƒ } t j |  j j |  j ƒ ƒ } |  j | |  j  j	 | |  j
 |  _ |  j j ƒ  j |  j |  j |  j j ƒ  ƒ d |  j  j |  j
 |  j |  j |  _
 d  S(   Ni   (   RK   Rž   R   Rh   R   Rg   RË   RÌ   R=   RÒ   R   Rˆ   R%   Rß   R-   (   R   t   min_solvent_densityt   min_protein_density(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRž   È  s     %c         C   s4  |  j  j |  j  j ƒ  j ƒ  |  j k ƒ } | j |  j d t ƒ} | j |  j	 ƒ } t
 j | | j ƒ  j |  j	 ƒ d t d t ƒ} | j d | j ƒ  t j | j ƒ t j | j ƒ  | j ƒ ƒ } | j | ƒ } | j |  j ƒ } | j d ƒ } d d l m } | j d | d	 | d
 d d t j | j ƒ  ƒ d t ƒ }	 |	 j  d |  j  j |  j  j ƒ  j ƒ  |  j k ƒ ƒ \ }
 } | j ƒ  j! | j" ƒ  t j# | j ƒ  ƒ ƒ | j$ d | d | d |
 d | ƒ } t j% | t j& | j' ƒ  j ƒ  ƒ | t j( | j' ƒ  j ƒ  ƒ ƒ } |
 j ƒ  } | j) d |  j* j | ƒ j ƒ  | ƒ } |  j+ | ƒ t j# |  j, j ƒ  ƒ } | j) d | j ƒ  |  j, j ƒ  ƒ } | j) d | | j ƒ  j- |  j, ƒ j ƒ  ƒ } | j. ƒ  j ƒ  } | } t j/ | j ƒ  ƒ } t j/ | j ƒ  ƒ } | j0 | d ƒ | j0 | d ƒ | j0 | d ƒ | j0 | d ƒ | j0 | d ƒ | j0 | d ƒ | j) d | j ƒ  | | j ƒ  | ƒ |  _1 | j) d | ƒ |  _2 | |  _3 | j4 | ƒ |  _4 | j | j5 d ƒ ƒ } t j6 | t j# | j ƒ  | j ƒ  j ƒ  ƒ ƒ t j6 | | j ƒ  ƒ |  _7 |  j, j8 |  j9 ƒ \ } } t: t j; | j ƒ  ƒ t j; | j ƒ  ƒ ƒ |  _< |  j, j8 |  j= ƒ \ } } t: t j; | j ƒ  ƒ t j; | j ƒ  ƒ ƒ |  _> t j? | ƒ |  _@ | j) d | ƒ } | j ƒ  j ƒ  d k  r| j ƒ  j ƒ  } n d } | jA d | ƒ | j? d t ƒ |  _B d  S(   Nt   use_sgt   use_intensitiest   use_weightsR"   i    iÿÿÿÿ(   t   maxlikRP   t   f_calct   free_reflections_per_biniŒ   t   flagst   interpolationt   f_modelt   alphat   betai   i   iè  t   reflections_per_bint   use_binning(C   Rn   Rg   Rf   R"   R6   t   structure_factors_from_mapR   R~   Ro   Rp   R   t   ls_rel_scale_drivert   as_amplitude_arrayRl   Ru   R   t   expt   p_scaleR   t   debye_waller_factor_u_starRÅ   R¾   t
   common_sett   match_indicesRt   t   single_selectiont   mmtbx.max_likRç   t   alpha_beta_est_managerR   t   boolR(   t   alpha_beta_for_each_reflectionRß   RÊ   Rs   t   fo_fc_alpha_over_eps_betat   hendrickson_lattmant   cost   phasest   sinRi   RZ   Rr   R9   Rv   t   centric_flagst   doubleR,   R   RA   Rq   t	   r1_factort   pair_selectionR]   t   r1_factor_fomt   common_setsRÄ   R   t   argt   mean_delta_phiR[   t   mean_delta_phi_initialR   t   mean_fomt   setup_binnert   mean_fom_binned(   R   RP   Rè   Rt   t	   minimizedt   f_calc_activet   matched_indicest   lone_indices_selectionRç   t   alpha_beta_estRí   Rî   t   tt   hl_coefft   ddt   hl_arrayRA   t   mFot   DFcR  t   acentric_flagst   fo_scalet   fc_scaleR9   RÄ   R[   Rï   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRŸ   Õ  s–    *		 			3		"	%	$	)	-	-c      3   C   sÃ  |  j  j s d  S| d  k r( t j } n  t j |  j ƒ |  _ |  j j	 d |  j
 d d |  j d |  j d |  j d |  j d |  j d |  j d	 |  j d
 |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d t j |  j ƒ t d t j |  j  ƒ t d |  j! d |  j" d |  j# d |  j$ d |  j j% ƒ  ƒ |  j j& ƒ  } |  j' | IJ|  j' j( ƒ  |  j) s t* j+ d d d | d t, ƒ n t* j+ d d d |  j j- ƒ  ƒ d  S(    NR<   i   R   R6   RÑ   R   R=   R>   RŒ   Rƒ   R„   R…   R†   t   ncs_ccR‡   Rˆ   R?   R@   RÕ   R
  R  R  R  RA   t
   fom_binnedt   skewnessR:   R;   R"   t
   accumulatet   plot_current_stats(.   RK   R   R3   RH   RI   R   t   more_statisticsR   RŽ   R�   Rb   R   R6   RÑ   R   R=   R>   RŒ   Rƒ   R„   R…   R†   R  R‡   Rˆ   R?   R@   RÕ   R   R   R
  t   pi_180R  R  R  R  R  R  t   format_summaryR€   t   flushR“   R�   R‚   R~   t   get_fom_for_plot(   R   R²   R;   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR¡   '  sP      																						
c         C   s  |  j  j s d  |  _ d  St d  k r4 t d ƒ ‚ n  |  j d  k	 sI t ‚ t ƒ  } t	 j
 |  j j ƒ  d ƒ } | j |  j d ƒ t d |  j j ƒ  d | d |  j j ƒ  d |  j j ƒ  d |  j d	 |  j d
 | ƒ } | j } | j |  _ | j } | j ƒ  |  _ d  S(   Ns?   solve_resolve must be available for NCS averaging functionalityi    i   R   R0   Rµ   R¹   R’   t
   resolutionR²   (   RK   R›   R3   R  t   resolve_ncs_averaget   RuntimeErrorR’   R   R   R   t   floatR0   R+   R,   RÉ   R   t   as_floatR   Rµ   R¹   R6   t   average_mapt	   n_nc_opert	   as_double(   R   t   st   resolve_maskt   naR,  t
   n_ncs_oper(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR›   P  s,    							Rt   c           B   s   e  Z d  „  Z RS(   c         C   s   |  j  j |  j ƒ S(   N(   Rn   Ro   Rp   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   fgetj  s    (   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRt   i  s   Rp   c           B   s   e  Z d  „  Z RS(   c         C   sè   |  j  d k r+ t |  d ƒ r+ d  |  _ n  |  j j r� |  j j |  j j k  r� |  j  |  j j k r� |  j  |  j j |  j j	 k  r� d  |  _ n  |  j d  k rá |  j
 j ƒ  j ƒ  |  j k |  j @} |  j
 j | ƒ j ƒ  |  _ n  |  j S(   Ni    t   _active_indices(   Rb   t   hasattrR3   R4  RK   R\   R6   RO   R^   R_   Rj   Rf   R"   Rm   Rg   RÅ   (   R   t   sel(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR3  n  s    %(   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyRp   m  s   c         C   s)   |  j  d  k	 r% | j |  j  j ƒ  ƒ S| S(   N(   RT   R3   RX   t   inverse(   R   R±   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt    miller_array_in_original_setting{  s    t   map_coeffs_in_original_settingc           B   s   e  Z d  „  Z RS(   c         C   s   |  j  |  j ƒ S(   N(   R8  R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR3  �  s    (   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR9  €  s   t   hl_coeffs_in_original_settingc           B   s   e  Z d  „  Z RS(   c         C   s   |  j  |  j ƒ S(   N(   R8  Rq   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR3  …  s    (   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR:  „  s   R   c           B   s   e  Z d  „  Z RS(   c         C   s“   |  j  d k s$ |  j  |  j j k  r4 |  j j j j S|  j  |  j j |  j j k  r |  j j j j |  j |  j  |  j j d S|  j j j j Sd  S(   Ni    i   (	   Rb   RK   R^   RL   RM   RQ   R_   Rc   RN   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR3  ‰  s    $(   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR   ˆ  s   R6   c           B   s   e  Z d  „  Z RS(   c         C   s�   |  j  d k s$ |  j  |  j j k  r. |  j j S|  j  |  j j |  j j k  rs |  j j |  j |  j  |  j j d S|  j j Sd  S(   Ni    i   (   Rb   RK   R^   RO   R_   Rd   R6   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR3  “  s    $
	(   R1   R2   R3  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR6   ’  s   N(   R1   R2   R3   Rl   R!   Rš   R‘   R¤   RR   RS   Rr   R    R|   R‰   Rœ   R�   Rž   RŸ   R¡   R›   R�   t   propertyRt   Rp   R8  R9  R:  R   R6   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR4   �   s4   ™							!					R)		
R�   c           B   sD   e  Z d  „  Z d „  Z d d „ Z d „  Z d d „ Z d „  Z RS(   c         C   s   g  |  _  d  S(   N(   RŽ   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR!   �  s    c         K   s    t  | �  } |  j j | ƒ d  S(   N(   R
   RŽ   t   append(   R   t   kwdst   cycle_stats(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR�      s    iÿÿÿÿc         C   s   |  j  | S(   N(   RŽ   (   R   Rb   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   get_cycle_stats¤  s    c         C   sÄ   t  j j d d d d d d d d d	 g d
 d d d d d d g d d d d g d d d g d d d g d d d g g ƒ } xB |  j D]7 } | j | j | j | j | j | j	 | j
 g ƒ q… W| S(   Nt   titles(   Density modification statistics by cyclet   column_namesR<   RA   R=   R   R@   R?   t   column_labelst   Cycles   Figure of Merits   Mean protein densitys   Mean solvent densitys   RMS protein densitys   RMS solvent densityt   graph_namess   FOM vs. cycles   Mean density vs. cycles   RMS density vs. cyclet   graph_columnsi    i   i   i   i   i   (   t   iotbxt
   data_plotst
   table_dataRŽ   t   add_rowR<   RA   R=   R   R@   R?   (   R   t   tablet   stats(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   extract_loggraph§  s$    		*c         C   sv  |  j  | } d d d } | d | j 7} | d | j 7} | d | j 7} | d | j 7} | d | j 7} | d	 | j 7} | d
 | j 7} | j r | d 7} | j	 d  k	 rÑ | d | j	 | j f 7} n  | j d  k	 r | d | j | j f 7} q n  | j d  k	 r#| d | j 7} n  | j d  k	 rF| d | j 7} n  | j d  k	 ri| d | j 7} n  | d | j 7} | d | j 7} | d | j | j 7} | d | j 7} | d | j 7} | d | j 7} | d | j 7} | d | j 7} | d | j 7} | d | j 7} t ƒ  } | d 7} | j j d | d d ƒ | | j ƒ  7} | d d d 7} | d 7} | S(   Nt   #iP   s   
s	   Cycle %i
s   d min: %.2f
s   Mask averaging radius: %.2f
s   Solvent mask volume (%%): %.4f
s   Mean solvent density: %.4f
s   Mean protein density: %.4f
s   F000/V: %.4f
s   Protein density truncation:
s     min = %7.4f (%.2f%%)
s     max = %7.4f (%.2f%%)
s"   NCS correlation coefficient: %.4f
s   Solvent flipping factor: %.4f
s   Solvent level raised by: %.4f
s   RMS solvent density: %.4f
s   RMS protein density: %.4f
s(   RMS solvent/protein density ratio: %.4f
s%   Standard deviation (local RMS): %.4f
s   Mean delta phi: %.4f
s   Mean delta phi (initial): %.4f
s   R1-factor:       %.2f
s   R1-factor (fom): %.2f
s   Skewness: %.4f
s!   Mean figure of merit (FOM): %.3f
s/   Mean figure of merit (FOM) in resolution bins:
t   ft   data_fmts   %.4f(   RŽ   R<   R6   R   RÑ   R   R=   R>   RŒ   Rƒ   R3   R„   R…   R†   R  R‡   Rˆ   R?   R@   RÕ   R
  R  R  R  R  RA   R   R  R¬   t   getvalue(   R   Rb   RK  R;   R/  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR$  »  sT    	
	

c         C   s   g  |  j  D] } | j ^ q
 S(   N(   RŽ   RA   (   R   RK  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR&  ç  s    (   R1   R2   R!   R�   R?  RL  R$  R&  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyR�   œ  s   			,('   t
   __future__R    R©   R   R   t   iotbx.data_plotsRF  t   cctbxR   R   R   t   cctbx.array_familyR   t   scitbx.mathR   t   libtbx.callbacksR�   R   R	   R
   t   libtbx.load_envR   RH   t	   cStringIOR   t   envt
   has_modulet(   solve_resolve.resolve_python.ncs_averageR   R(  R3   t   atanR#  t   master_params_strR   t   objectR   R4   R�   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/density_modification/__init__.pyt   <module>   s.   X	ÿ ÿ 