ó
;™xTc           @   s»   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 Z d  d l Z d	 e f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   neutron_news_1992_table(   t   miller(   t   crystal(   t   sgtbx(   t   adptbx(   t   flexNt	   scattererc           B   sP   e  Z d  d	 d
 d d  d
 d „ Z d „  Z d „  Z d „  Z d d e d „ Z RS(   t    i    i   c         C   sL  | d  k s | d  k s t ‚ | d  k	 r< t j | ƒ } n | d  k rQ d } n  t | ƒ t d ƒ k r™ | d k r‡ t | d ƒ } q™ t | d ƒ } n  | |  _ | |  _ y t | ƒ |  _	 t
 |  _ WnZ t k
 r#t | ƒ d k sï t ‚ t |  _ t g  | D] } t | ƒ ^ qƒ |  _ n X| |  _ | |  _ d |  _ d |  _ d  S(   Ni    R   i   i   (   t   Nonet   AssertionErrorR   t   b_as_ut   typeR   t   labelt   sitet   floatt   u_isot   Falset   anisotropic_flagt	   Exceptiont   lent   Truet   tuplet   u_start	   occupancyt   scattering_infot   _multiplicityt   _weight(   t   selfR   R   t   uR   R   t   bt   uij(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   __init__   s,      				,			c         C   s   |  j  S(   N(   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   multiplicity)   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   weight,   s    c         C   s!   |  j  |  j t | ƒ |  _ d  S(   N(   R   R   R   R   (   R   t   space_group_order_z(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   update_weight/   s    g      à?c         C   sž   t  j | | |  j | | ƒ } | j ƒ  |  _ | j ƒ  |  _ |  j | j ƒ  ƒ |  j rš | d k r‚ | j	 |  j
 | ƒ s‚ t ‚ n  | j |  j
 ƒ |  _
 n  | S(   Ng        (   R   t   site_symmetryR   t
   exact_siteR!   R   R$   t   order_zR   t   is_compatible_u_starR   R
   t   average_u_star(   R   t	   unit_cellt   space_groupt   min_distance_sym_equivt   u_star_tolerancet   assert_min_distance_sym_equivR%   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   apply_symmetry3   s    		(   i    i    i    N(	   t   __name__t
   __module__R	   R    R!   R"   R$   R   R/   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR      s   			t	   structurec           B   sk   e  Z d
 d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d
 d „ Z d
 d	 „ Z RS(   c         C   sE   t  j j |  | ƒ g  |  _ g  |  _ | d  k	 rA |  j | ƒ n  d  S(   N(   R   t   special_position_settingst   _copy_constructort   _scattererst   _special_position_indicesR	   t   add_scatterers(   R   R3   t
   scatterers(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR    I   s    	
		c         C   s/   t  j j |  t ƒ | j |  _ | j |  _ d  S(   N(   R   R3   R4   R5   R6   (   R   t   other(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR4   Q   s    	
c         C   s   |  j  S(   N(   R5   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR8   W   s    c         C   s   |  j  S(   N(   R6   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   special_position_indicesZ   s    c         C   sf   |  j  | j |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  ƒ } | j ƒ  sb |  j ƒ  j	 | ƒ n  d  S(   N(
   R5   R/   R*   R+   R,   R-   R.   t   is_point_group_1R:   t   append(   R   t   iR%   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR/   ]   s    				c         C   s3   t  |  j ƒ  ƒ } |  j j | ƒ |  j | ƒ d  S(   N(   R   R8   R5   R<   R/   (   R   R   R=   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   add_scattererg   s    c         C   s2   x+ t  t | ƒ ƒ D] } |  j | | ƒ q Wd  S(   N(   t   xrangeR   R>   (   R   R8   R=   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR7   l   s    c         C   sù  d GHt  j d |  d t d | ƒ } t j ƒ  } x±| j ƒ  D]£} d } x‡|  j ƒ  D]y} |  j | j ƒ } t	 j
 | ƒ } d }	 xØ t | j ƒ  ƒ D]Ä \ }
 } d } x* t d ƒ D] } | | | | | 7} q´ Wd t j | } t t j | ƒ t j | ƒ ƒ } | j rO|  j ƒ  |
 ƒ j ƒ  } | } t j | | j ƒ } | | 9} n  |	 | 7}	 q• W| j j ƒ  } | j ƒ  | |	 } | j sÄ|  j ƒ  j | ƒ } t j | d	 | j ƒ } | | 9} n  | | 7} qU W| j  | ƒ q< Wt  j! d
 | d | ƒ S(   Ns   WARNING: RESULTS NOT VERIFIEDt   crystal_symmetryt   anomalous_flagt   d_miny                i    i   i   i   t
   miller_sett   data("   R   t	   build_setR   R   t   complex_doublet   indicesR8   R%   R   R   t   sym_equiv_sitest	   enumeratet   coordinatesR?   t   matht   pit   complext   cost   sinR   R+   t   rR   t   debye_waller_factor_u_starR   R   t   bound_coh_scatt_lengthR"   R*   t	   d_star_sqt   debye_waller_factor_u_isoR   R<   t   array(   R   RB   RC   t   f_calct   ht   fcR   R%   t   equiv_sitest   sum_exp_j_two_pi_hxt   i_symopt   xt   sum_hxR=   t   phaset   exp_j_two_pi_hxRP   t   hrt   dwt   b_jt   fc_siteRS   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   structure_factorsp   sF    		!			c         C   sg   | d  k r t j } n  | d It |  j ƒ  ƒ IJ| d It |  j ƒ  ƒ IJt j j |  | ƒ |  S(   Ns   Number of scatterers:s   At special positions:(	   R	   t   syst   stdoutR   R8   R:   R   t   symmetryt   show_summary(   R   t   f(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyRh   •   s     c         C   sÜ   | d  k r t j } n  | d IJx³ |  j ƒ  D]¥ } | d | j f I| d | j ƒ  f I| d | j I| d | j f I| j s¥ | d | j	 f In+ | d d d	 t
 j |  j ƒ  | j ƒ I| Jq/ W|  S(
   Ns3   Label  M  Coordinates            Occ  Uiso or Ucarts   %-4ss   %3ds   %7.4f %7.4f %7.4fs   %4.2fs   %6.4fs   %6.3f i   s   %6.3f(   R	   Re   Rf   R8   R   R!   R   R   R   R   R   t   u_star_as_u_cartR*   R   (   R   Ri   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   show_scatterersœ   s     
	N(   R0   R1   R	   R    R4   R8   R:   R/   R>   R7   Rd   Rh   Rk   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyR2   G   s   				
			%(   t
   __future__R    t   cctbx.eltbx.neutronR   t   cctbxR   R   R   R   t   scitbx.array_familyR   RK   Re   t   objectR   R3   R2   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/neutron/__init__.pyt   <module>   s   <