ó
/™xTc           @   sæ   d  d l  m Z d  d l m Z d  d l Z d  d l m Z d  d l m Z d  d l m	 Z	 d  d l
 m Z d  d l Z d  d l m Z d  d l Z d	 e j f d
 „  ƒ  YZ d e j j e j f d „  ƒ  YZ d d d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   extN(   t   eltbx(   t   adptbx(   t   flex(   t   show_string(   t   StringIOt	   scattererc        	   B   s)   e  Z d  d d d d d d d d „ Z RS(   t    i    i   c	   	   	   C   s¤   | d  k s | d  k s t ‚ | d  k	 r< t j | ƒ } n | d  k rQ d } n  | d  k r{ t j j d | d t ƒ } n  t j	 j
 |  | | | | | | | ƒ d  S(   Ni    t   labelt   exact(   t   Nonet   AssertionErrorR   t   b_as_uR   t   xray_scatteringt   get_standard_labelt   FalseR   R   t   __init__(	   t   selfR	   t   sitet   ut	   occupancyt   scattering_typet   fpt   fdpt   b(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyR      s      		(   i    i    i    N(   t   __name__t
   __module__R   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyR      s   t   _c           B   sq   e  Z d d d d d d d d d d d d  „ Z e d „ Z e d „ Z d „  Z d d d „ Z d d d „ Z	 RS(   c         C   sÚ  | d  k s | d  k s t ‚ | d  k	 r< t j | ƒ } n  ~ | d  k	 r¹ |
 d  k rc | d  k si t ‚ |	 d  k rš |  j j ƒ  |  j j ƒ  As¶ t ‚ q¹ |	 j ƒ  |	 j ƒ  As¹ t ‚ n  t j d |  ƒ } | d  k	 rã | | _	 n  | d  k	 rû | | _
 n  |	 d  k	 r|	 | _ n  | d  k	 rF| j j ƒ  r:| | _ qF| | _ n  |
 d  k	 r^|
 | _ n  | d  k	 rv| | _ n  | d  k	 rŽ| | _ n  | d  k	 r¦| | _ n  | d  k	 r¾| | _ n  | d  k	 rÖ| | _ n  | S(   Nt   other(   R   R   R   R   t   flagst	   use_u_isot   use_u_anisoR   R   R	   R   t   u_isot   u_starR   R   R   R   (   R   R	   R   R   R   R   R   R   R   R   R!   R"   t   result(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   customized_copy!   sB     %         c         C   s   t  j j d |  j d | ƒ S(   NR   R
   (   R   R   t   get_element_and_charge_symbolsR   (   R   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   element_and_charge_symbolsG   s    c         C   s2   |  j  d | ƒ \ } } t | ƒ d k r. d  S| S(   NR
   i    (   R&   t   lenR   (   R   R
   t   et   c(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   element_symbolK   s     c         C   s  d d l  } |  j d t ƒ \ } } t j j | ƒ j ƒ  } | d k rK nÂ| d k rd | d 8} n©| d k r} | d 8} n�| d	 k r– | d 7} nw| d
 k r¯ | d 7} n^| d k rÈ | d 8} nE| d k rá | d 8} n,| d k rú | d 8} n| d k r| d 8} nú | d k r,| d 8} ná | d k rE| d 8} nÈ | d k r^| d 8} n¯ | d k rw| d 7} n– | d k r�| d 7} n} | d k r©| d 7} nd | d k rÂ| d 7} nK | d k rÛ| d 7} n2 | d k rô| d 7} n | d k r| d 7} n  | S(    s�   This method returns the number of electrons a scatterer effectively has.

    :returns: number of electrons (= Z - charge)
    :rtype: int
    iÿÿÿÿNR
   R   s   1+i   s   2+i   s   2-s   1-s   3+i   s   4+i   s   5+i   s   6+i   s   7+i   s   8+i   s   9+i	   s   3-s   4-s   5-s   6-s   7-s   8-s   9-(   t   cctbx.eltbx.tiny_pseR&   t   TrueR   t   tiny_pset   tablet   atomic_number(   R   t   cctbxt   symbolt   charget	   electrons(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   electron_countP   sT    R   c         C   s’  g  } | j  d | t |  j ƒ f ƒ t j j d |  j d t ƒ |  j k rp | j  d | t |  j ƒ f ƒ n  | j  d | f |  j ƒ |  j	 j
 ƒ  r· | j  d | |  j f ƒ n  |  j	 j ƒ  rú | j  d | f |  j d  | f |  j d ƒ n  |  j d	 k r&| j  d
 | |  j f ƒ n  |  j d k sD|  j d k r{| j  d | |  j f ƒ | j  d | |  j f ƒ n  d | d j | ƒ f S(   sŒ    The returned string does usually eval to self, except if the both of
    self.flags.use_u_iso() and self.flags.use_u_aniso() are True.
    s   %s  label=%sR	   R
   s   %s  scattering_type=%ss   %s  site=(%.6f, %.6f, %.6f)s
   %s  u=%.6fs1   %s  u=(%.6f, %.6f, %.6f,
%s     %.6f, %.6f, %.6f)i   i   s   %s  occupancy=%.6fi    s   %s  fp=%.6fs   %s  fdp=%.6fs   xray.scatterer(%s
%s)s   ,
(   t   appendR   R	   R   R   R   R   R   R   R   R   R!   R    R"   R   R   R   t   join(   R   t   indentt   commentt   r(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt
   as_py_code‚   s&     		+c         C   sV  | d  k r t j } n  | d |  j I| d |  j I| d |  j ƒ  I| d |  j I| d |  j I|  j j	 ƒ  r“ | d |  j
 In
 | d I|  j j ƒ  r	| d  k	 s¾ t ‚ t j | |  j ƒ } | d t j | ƒ IJ| d Id d	 d
 | In
 | d I|  j d k s1|  j d k rN| d |  j |  j f In  | Jd  S(   Ns   %-4ss   %3ds   (%7.4f %7.4f %7.4f)s   %4.2fs   %6.4fs   [ - ]s        u_cart =s   %6.3f i   s   %6.3fi    s   
     fp,fdp = %6.4f,%6.4f(   R   t   syst   stdoutR	   R   t   multiplicityR   R   R   R   R!   R    R   R   t   u_star_as_u_cartR"   t   u_cart_as_u_isoR   R   (   R   t   ft	   unit_cellt   u_cart(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   showœ   s*     

N(
   R   R   R   R$   R   R&   R*   R4   R:   RC   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyR      s    	2t   anomalous_scatterer_groupc           B   sD   e  Z d e d  „ Z d „  Z d d d „ Z d „  Z d d „ Z RS(   c         C   s‡   | |  _  | |  _ | |  _ t |  _ t |  _ | |  _ xA | D]9 } | d k sU t ‚ | d k rm t |  _ q= t |  _ q= W| |  _	 d  S(   Nt   f_primet   f_double_prime(   s   f_primes   f_double_prime(
   t
   iselectionRE   RF   R   t   refine_f_primet   refine_f_double_primet   update_from_selectionR   R,   t   selection_string(   R   RG   RE   RF   t   refineRK   RJ   t   refine_item(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyR   ¶   s    						c         C   s<   g  } |  j  r | j d ƒ n  |  j r8 | j d ƒ n  | S(   NRE   RF   (   RH   R5   RI   (   R   R#   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   labels_refineË   s    	 	 R   c         C   sì   | d  k r t j } n  | | d IJ|  j d  k	 rU | | d It |  j ƒ IJn  | | d I|  j j ƒ  IJ| | d |  j IJ| | d |  j IJ|  j	 ƒ  } | | d It
 | ƒ d k rÕ | d IJn | d	 j | ƒ IJd  S(
   Ns   Anomalous scatterer group:s     Selection:s      Number of selected scatterers:s     f_prime:        %.6gs     f_double_prime: %.6gs	     refine:i    R   t    (   R   R;   R<   RK   R   RG   t   sizeRE   RF   RN   R'   R6   (   R   t   outt   prefixRN   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   show_summaryÑ   s       c         C   s8   x1 |  j  D]& } |  j | | _ |  j | | _ q
 Wd  S(   N(   RG   RE   R   RF   R   (   R   t
   scattererst   i_seq(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   copy_to_scatterers_in_placeß   s    g-Cëâ6?c      	   C   sš  t  j ƒ  } t  j ƒ  } | j |  j j ƒ  ƒ | j | j ƒ  ƒ xR|  j D]G} | j | | j ƒ | j | | j ƒ x| d f | d f g D]ü \ } } t  j | ƒ } | j	 | j
 | k rÙ t |  | | j ƒ q’ d | g }	 |  j d  k	 r|	 j d t |  j ƒ ƒ n  |	 j d | j ƒ t ƒ  }
 | j d |
 d d | d	 t ƒ |	 j |
 j ƒ  j ƒ  ƒ |	 j d
 | ƒ t d j |	 ƒ ƒ ‚ q’ WqK Wd  S(   NRE   RF   s:   Anomalous scatterer group with significantly different %s:s     Selection: %ss#     Number of selected scatterers: %dRQ   RR   s     %s t   show_ns     tolerance: %.6gs   
(   R   t   doublet   reserveRG   RP   R5   R   R   t   min_max_mean_doublet   maxt   mint   setattrt   meanRK   R   R   t   nR   RC   R   t   extendt   getvaluet
   splitlinest   RuntimeErrorR6   (   R   RT   t	   tolerancet   fpst   fdpsRU   t   valuesR	   t   statst   msgt   s(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt    extract_from_scatterers_in_placeä   s*    %
	 N(	   R   R   R   R   R   RN   RS   RV   Rk   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyRD   ´   s   		(    (   t
   __future__R    t
   cctbx.xrayR   t   cctbx.eltbx.xray_scatteringR0   R   R   t   cctbx.array_familyR   t   libtbx.str_utilsR   t   boost.pythont   boostt	   cStringIOR   R;   R   t   pythont   injectorR   RD   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/scatterer.pyt   <module>   s   "•