ó
?™xTc           @   s¾   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 „  Z d „  Z d	 „  Z d
 „  Z d „  Z e
 j d „ Z d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionN(   t   flex(   t   miller(   t   maptbx(   t   Sorryc         C   sn   |  } t  j | j ƒ  ƒ } | d k } | j | j ƒ  ƒ } | t j | ƒ } t j | t j | ƒ ƒ | S(   Ni    (   t   matht   logt   sizet   selectt
   iselectionR   t   sum(   t   mt   m_t   sct   s(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   Hn	   s    c         C   sB   |  d k } |  } | j  | j ƒ  ƒ } t j | t j | ƒ ƒ S(   Ni    (   R   R	   R   R
   R   (   R   R   R   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   Hw   s    c         C   sH   t  |  ƒ j ƒ  }  t  | ƒ j ƒ  } t j  |  | ƒ } t j | | ƒ S(   N(   t   abst   dataR   R
   (   t   xt   yt   delta(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   Q_X   s    c         C   s¨   t  |  ƒ t  | ƒ k s t ‚ t  |  ƒ t j k rN |  j ƒ  }  | j ƒ  } n  t j |  ƒ }  t j | ƒ } t j | | ƒ } | d k r� d St j |  | ƒ | Sd  S(   Ni    i   (   t   typet   AssertionErrorR   t   arrayR   R   R   R
   (   R   R   t   d(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   scale   s     c         C   s‹   y. t  j |  j ƒ  ƒ }  t  j | j ƒ  ƒ } Wn t k
 rA n Xd } | r` t |  | ƒ } n  t  j t  j |  | | ƒ ƒ t  j |  ƒ S(   Ni   (   R   R   R   t	   ExceptionR   R
   (   R   R   t	   use_scaleR   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   r_factor)   s      c         C   sW   | d | t  j |  ƒ t  j |  ƒ t  j |  ƒ t  j |  ƒ t |  ƒ t |  ƒ f IJd  S(   NsB   %s (min/max/mean/sum, Hw, Hn): %9.6f %9.6f %9.6f %9.6f %9.6f %9.6f(   R   t   mint   maxt   meanR
   R   R   (   R   t   prefixt   out(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   show_map_stat2   s    t   runc           B   s’   e  Z d d d  d d d d e d e d d d e d e d d „ Z d „  Z d d	 „ Z d
 d d d „ Z d „  Z	 e d „ Z
 d „  Z d „  Z RS(   t   ldeg      Ð?g      Ø?iÐ  gÍÌÌÌÌÌì?i    gš™™™™™¹?c         C   sœ  | d  k r t j } n  | |  _ | |  _ | d% k s< t ‚ | |  _ | |  _ | |  _ | |  _	 | |  _
 | |  _ |	 |  _ d  |  _ |
 |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ t  |  _! d  |  _" t# j$ ƒ  |  _% t# j$ ƒ  |  _& |  j d  k r­|  j j d |  j j' ƒ  d | d d  d d  d d  d	 d
 d t( ƒ |  _ n  |  j j) ƒ  |  _) g  |  j) D] } t* | d d ƒ ^ qÉ} |  j) d |  j) d |  j) d |  _+ |  j j, d | ƒ |  _- d  |  _. |  j d  k	 rc|  j- j/ d |  j ƒ j. ƒ  |  _. n  | r|  j d | IJ|  j d I|  j+ I|  j) d I|  j) d I|  j) d IJ|  j d IJ|  j d |  j- j' ƒ  IJ|  j d I| IJ|  j d I|  j- j0 ƒ  j1 ƒ  IJn  |  j d  k rD| |  j j2 ƒ  j3 ƒ  |  _ n  d } d } | |  j+ |  _4 | rÏ|  j d I| I| I|  j4 Id |  j IJ|  j d I| |  j+ |  j IJ|  j d I|  j
 IJn  |  j j5 d |  j j6 ƒ  | |  j+ |  j ƒ |  _ t7 j8 d |  j d |  j ƒ } | j9 ƒ  |  _: | rWt; d  |  j: d! d" d# |  j ƒ n  |  j< ƒ  |  _= | rŽt; d  |  j= d! d$ d# |  j ƒ n  |  j> ƒ  d  S(&   Nt   flatR&   t   min_shiftedt   d_mint   resolution_factort	   grid_stept   symmetry_flagst   mandatory_factorst	   max_primei   t   assert_shannon_samplingi   g       @i    i   t	   max_indext   xray_structures   Resolution factor: %-6.4fs     N, n1,n2,n3:s   Box: s     resolution: %6.4fs!     max. index |h|,|k|,|l|<nreal/2:s
     n.refl.:g®Gáz®×?s   Cobs, Ca, Agd, f_000:s   %6.3fs   Cobs/(N*f_000): s   memory factor (beta):R   t   crystal_griddingt   fourier_coefficientsR   R"   s   rho_obs (formula #13)R#   s   rho_0 (initial approximation)(   R'   R&   R(   (?   t   Nonet   syst   stdoutR   t	   start_mapR   t   lamt   max_iterationst   f_000t   verboset   betat   ft   use_modificationt   meio_objR1   t   lambda_increment_factort   convergence_at_r_factort   detect_convergenceR2   R   t   convergence_r_thresholdt   cntrt   rt   h_nt   h_wt   Zt   scale_kct   a_gdt   q_xt   q_tott   tpt   f_memt   Falset   header_shownt   ccR   t   doublet	   r_factorst   cc_to_answerR)   t   Truet   n_realt   intt   Nt   complete_sett   full_sett   f_calct!   structure_factors_from_scattererst   indicesR   t	   unit_cellt   volumet   Agdt   customized_copyR   R   t   fft_mapt   real_map_unpaddedt   rho_obsR$   t   normalize_start_mapt   rhot
   iterations(   t   selfR=   R:   R8   R7   R*   t   mean_densityR9   R<   R>   R1   R;   R@   RA   RC   RB   R2   R   R   t   iR0   t   Cobst   CaRb   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   __init__8   s¦     																														*&	6% (!3		c         C   sË   |  j  j ƒ  } |  j d k rF t j t j |  j ƒ d |  j ƒ } nt |  j d k r‰ t j | ƒ d } | | k } | j	 | | ƒ } n1 |  j d k r® | t j
 | ƒ } n t d ƒ ‚ | t j | ƒ S(   NR'   g      ð?R&   g      Y@R(   s(   Invalid initial map modification choice.(   Rd   t	   deep_copyR7   R   RR   t   gridRV   RX   R    t   set_selectedR   R   R
   (   Rh   Rf   t   epst   selection_nonpositive(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyRe   ¢   s    (c      	   C   sD  t  j d |  j d |  j ƒ } xŒ d d d g D]{ } | j ƒ  | k j t ƒ d | j ƒ  j ƒ  } | j ƒ  | k j t ƒ d | j ƒ  j ƒ  } |  j	 d | | f IJq. W|  j
 j d | j ƒ  d	 t d
 t d t ƒ } |  j j d | j ƒ  d	 t d
 t d t ƒ } | d  k	 r:| j d | ƒ } | j d | ƒ } n  | | f S(   Nt   map_1t   map_2g      à?i   g      ø?g      ð?s5   Cumulative histograms match for two maps: %9.6f %9.6ft   mapR   t   anomalous_flagt   use_sgR)   (   R   tA   non_linear_map_modification_to_match_average_cumulative_histogramRf   Rd   Rs   t   countRU   R   Rt   R   RZ   t   structure_factors_from_mapRO   R=   R4   t   resolution_filter(   Rh   R)   t   oR   t   p1t   p2t   f1t   f2(    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   map_coefficients¯   s,    	//		s   me.mtzt   MEMc         C   s`   |  j  d | ƒ \ } } | j d | ƒ } | j d | d d ƒ | j ƒ  } | j d | ƒ d  S(   NR)   t   column_root_labelt   miller_arrayt   ORIGt	   file_name(   R�   t   as_mtz_datasett   add_miller_arrayt
   mtz_objectt   write(   Rh   R†   Rƒ   R)   R   R€   t   mtz_datasetR‰   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   write_mtz_fileÉ   s
    c         C   s­   t  |  j |  j d t ƒ|  _ |  j j ƒ  |  _ |  j j ƒ  |  _	 t
 |  j |  j ƒ |  _ t |  j |  j ƒ |  _ |  j	 |  j d |  j |  j |  _ |  j j ƒ  |  _ d  S(   NR   i   (   R   R=   RN   RO   RE   R?   t   hnRF   t   hwRG   R   RI   R   RK   R8   RX   RL   RM   (   Rh   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   update_metricsÑ   s    %c         C   s  |  j  rB |  j rB |  j d I|  j IJ|  j d IJt |  _ n  |  j ƒ  d j d |  j d |  j d |  j	 d |  j
 d |  j d	 |  j d
 |  j d |  j d |  j d d |  j d |  j g ƒ } |  j d  k	 rë d |  j } n	 |  j } |  j | I| IJ| S(   Ns   lam:sr     nit    TP       Hw        Q_X              Qtot         Agd    scFc       Hn     R    * tpgd       lam        cct    s   %5ds   %8.6fs   %9.6fs   %12.8es   %11.6fs   %10.6fs   %7.4fs   %6.4ft   *s   %12.6fs   %7.5f(   R;   RP   R   R8   RU   R�   t   joinRD   RM   RG   RK   RL   R`   RI   RF   RE   RH   RQ   R4   (   Rh   R;   t   fsRQ   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   showÚ   s    
$  	c   	   	      sœ  t  } t ˆ  j ˆ  j d t  ƒ} | ˆ  j k  r�ˆ  j d  k r® ˆ  j j | ƒ ˆ  j j	 ƒ  } | d k rŒt
 j ˆ  j | d ƒ } | | k sŸ | ˆ  j k r« t } q« qŒq˜ˆ  j j d | d t  d t  d t  ƒ } | j d ˆ  j ƒ ˆ  _ ˆ  j j ˆ  j ƒ ‡  f d †  } ˆ  j j	 ƒ  } | d k r˜| d ˆ  j ƒ } t
 j ˆ  j | d ƒ } | ˆ  j d	 k s€| d
 ˆ  j | k rŒt } qŒq˜n	 d  ˆ  _ | S(   NR   i   Ru   Rv   Rw   t   otherc            s}   t  j ƒ  } ˆ  j j ƒ  rp xR t ˆ  j j ƒ  ƒ D]8 } | d k r1 | j ˆ  j | ˆ  j | d ƒ q1 q1 Wn  t  j | ƒ S(   Ni    i   (   R   RR   RT   R   t   xranget   appendR    (   R   t   resultRj   (   Rh   (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   max_change_so_farû   s    -R   g�íµ ÷Æ°>i   (   RO   R   R=   RN   RC   R1   R4   RS   R—   R   R   R!   RA   RU   RZ   Rz   t   map_correlationR[   RQ   RT   (	   Rh   t	   rho_trialR˜   RE   R   t   tmpRN   R™   t   mcsf(    (   Rh   s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   is_convergedé   s4     	*	c      	   C   sª  d |  _  x�|  j  |  j k  r›|  j j d |  j d t d t d t ƒ |  _ |  j j d |  j j ƒ  |  j	 ƒ |  _ t
 j d |  j d |  j ƒ } | j ƒ  } |  j j ƒ  } t j | |  j | |  j |  j	 |  j |  j |  j |  j ƒ |  _ |  j r|  j d	 | ƒ rPn	 | |  _ |  j j ƒ  |  _ |  j r<|  j ƒ  n  |  j  d
 d k re|  j |  j |  _ n  |  j  d 7_  |  j d  k	 r |  j |  j 9_ q q W|  j  ƒ  d  S(   Ni    Ru   R   Rv   Rw   R   R2   R3   R›   i   i   (!   RD   R9   R=   Rz   Rf   RO   RN   Ra   R   RX   R   Rb   R2   Rc   Rn   R   t   mem_iterationRd   R8   RV   R`   R<   R   R?   RB   Rž   t   zRH   R;   R”   R@   R4   R�   (   Rh   Rb   t   rho_modR›   (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyRg     sD    		(				  N(   t   __name__t
   __module__R4   RU   RO   Rm   Re   R�   RŒ   R�   R”   Rž   Rg   (    (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyR%   7   s2   X				"(   t
   __future__R    R   t   scitbx.array_familyR   t   cctbxR   R   t   libtbx.utilsR   R5   R   R   R   R   R   R6   R$   t   objectR%   (    (    (    s>   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/maptbx/mem.pyt   <module>   s   						