ó
2™xTc           @   st   d  d l  m Z d  d l m Z d  d l Z e j j d ƒ Z d  d l	 Td e
 f d „  ƒ  YZ d „  Z d	 „  Z d S(
   iÿÿÿÿ(   t   division(   t   flexNt'   cctbx_eltbx_attenuation_coefficient_ext(   t   *t   nist_elementsc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s    A table of nist elements. c      ]   C   s$  d d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] g] |  _  d^ S(_   s    Initialise the table. t    t   Ht   Het   Lit   Bet   Bt   Ct   Nt   Ot   Ft   Net   Nat   Mgt   Alt   Sit   Pt   St   Clt   Art   Kt   Cat   Sct   Tit   Vt   Crt   Mnt   Fet   Cot   Nit   Cut   Znt   Gat   Get   Ast   Set   Brt   Krt   Rbt   Srt   Yt   Zrt   Nbt   Mot   Tct   Rut   Rht   Pdt   Agt   Cdt   Int   Snt   Sbt   Tet   It   Xet   Cst   Bat   Lat   Cet   Prt   Ndt   Pmt   Smt   Eut   Gdt   Tbt   Dyt   Hot   Ert   Tmt   Ybt   Lut   Hft   Tat   Wt   Ret   Ost   Irt   Ptt   Aut   Hgt   Tlt   Pbt   Bit   Pot   Att   Rnt   Frt   Rat   Act   Tht   Pat   UN(   t	   _elements(   t   self(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   __init__   s    !!!!!!!!c         C   s   t  |  j ƒ d S(   s    Return the number of elemets i   (   t   lenRb   (   Rc   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   __len__   s    c         C   s   t  |  j d ƒ S(   s    Return the list of elements. i   (   t   listRb   (   Rc   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   symbol_list   s    c         C   s   t  d t |  j ƒ ƒ S(   s"    Return a list of atomic numbers. i   (   t   rangeRe   Rb   (   Rc   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   atomic_number_list    s    c         C   s   |  j  j | ƒ S(   sƒ    Get the atomic number from the symbol.

    Params:
        symbol The element symbol

    Return:
        The atomic number

    (   Rb   t   index(   Rc   t   symbol(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   atomic_number$   s    
c         C   s2   | d k r! | t  |  j ƒ k  s' t ‚ |  j | S(   sz    Get the symbol from the atomic number

    Params:
        number The atomic number

    Return:
        The symbol

    i    (   Re   Rb   t   AssertionError(   Rc   t   number(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyRl   0   s    
'(	   t   __name__t
   __module__t   __doc__Rd   Rf   Rh   Rj   Rm   Rl   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyR      s   					c   	      C   sÅ   d d l  } | j d |  ƒ rµ | j d |  ƒ } g  } xx | D]p } | j d ƒ } | j | ƒ } | rŽ | j d ƒ } t | j d ƒ ƒ } n | } d } | j | | f ƒ q= W| St d ƒ ‚ d S(	   sW   Function taking a chemical formula and getting the component
  elements and number.

  Parsing is simply done by regex and no checking for whether the
  symbol corresponds to anything real is done. Proper capitalisation
  must be used.

  Params:
      formula A chemical formula string

  Returns:
      A list of (symbol, number) tuples

  iÿÿÿÿNs   ^([A-Z][a-z]{0,2}[1-9]?)*$s   [A-Z][^A-Z]*s   ([A-Z][a-z]{0,2})([1-9]+)i   i   s   Unidentified formula(   t   ret   matcht   findallt   compilet   groupt   intt   appendt
   ValueError(	   t   formulaRs   t   compt   el_numt   ct   rt   mt   elt   num(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   chemlex>   s    c         C   s4   t  |  t ƒ r$ t ƒ  j |  ƒ } n |  } t | ƒ S(   sŸ    Get the table for a given element

    Params:
        index Either an atomic number of symbol

    Returns:
        The table for the requested element

    (   t
   isinstancet   strR   Rm   t   table(   Rk   Rm   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt	   get_tablel   s    (   t
   __future__R    t   scitbx.array_familyR   t   boost.pythont   boostt   pythont
   import_extt   extR   t   objectR   Rƒ   R‡   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/eltbx/attenuation_coefficient.pyt   <module>   s   
6	.