ó
}™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 Z d e f d „  ƒ  YZ	 d	 e f d
 „  ƒ  YZ
 d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   xray(   t   crystal(   t   sgtbx(   t   uctbxNt   atomc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s%   | |  _  t | ƒ |  _ | |  _ d  S(   N(   t   labelt   tuplet   sitet   connectivity(   t   selfR   R   R	   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   __init__
   s    	c         C   s   t  j d |  j d |  j ƒ S(   NR   R   (   R   t	   scattererR   R   (   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   as_xray_scatterer   s    (   t   __name__t
   __module__R   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR      s   	t
   read_entryc           B   sb   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d
 d „ Z	 e
 d „ Z d d	 „ Z RS(   c         C   s<  | j  ƒ  } t | ƒ d k r+ t |  _ d  S| d d k rH d  |  _ d  S| d j ƒ  |  _ t |  j ƒ d k sv t ‚ | j  ƒ  j ƒ  |  _ | j  ƒ  j ƒ  |  _ | j  ƒ  j ƒ  |  _	 t |  j	 ƒ d k sÐ t ‚ g  | j  ƒ  j
 ƒ  D] } t | ƒ ^ qã |  _ t |  j ƒ d k st ‚ g  |  _ x| j  ƒ  } t | ƒ d k rGPn  | j d ƒ rZPn  | j
 d d ƒ d j
 ƒ  } t | ƒ d k rŽq%n  t | ƒ d k s²t | j ƒ  ƒ ‚ g  | d d !D] } t | ƒ ^ qÀ} t | ƒ d k rýt | d ƒ } n d  } |  j j t | d | | ƒ ƒ q%d  |  _ d  |  _ d  S(	   Ni    t   *i   s   --t   #i   i   (   i   i   (   t   readlinet   lent   Falset   tagt   Nonet   stript   AssertionErrort   titlet	   referencet   space_group_symbolt   splitt   floatt   unit_cell_parameterst   atomst
   startswitht   rstript   intt   appendR   t   _space_group_infot
   _unit_cell(   R
   t   ft   linet   pt   atom_line_fieldst   xR   R	   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR      sB    		.	   $&#	c         C   s4   |  j  d  k r- t j |  j d d ƒ|  _  n  |  j  S(   Nt   table_idt   A1983(   R%   R   R   t   space_group_infoR   (   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR.   5   s    c         C   s   |  j  ƒ  j ƒ  S(   N(   R.   t   group(   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   space_group;   s    c         C   s.   t  t j d |  j ƒ  j ƒ  ƒ ƒ j d d ƒ S(   NR/   t    t    (   t   strR   R.   R0   t   build_derived_laue_groupt   replace(   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   _derived_laue_group_symbol>   s    c         C   s@   t  j |  j |  j ƒ  ƒ |  _ |  j d  k r9 t d ‚ n  |  j S(   Ns&   Cannot interpret unit cell parameters.(   R   t   infer_unit_cell_from_symmetryR   R0   R&   R   t   RuntimeError(   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt	   unit_cellB   s
    c         C   s"   t  j d |  j ƒ  d |  j ƒ  ƒ S(   NR9   R.   (   R   t   symmetryR9   R.   (   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   crystal_symmetryI   s    	c         C   s¹   | d  k r t j } n  | d I|  j IJ| d I|  j IJ| d I|  j IJ|  j ƒ  j d | ƒ xK |  j D]@ } | d | j	 Id | j
 G| j d  k r° d | j Gn  Hqq Wd  S(   Ns   Tag:s   Title:s
   Reference:R'   s   %-8ss   %8.5f %8.5f %8.5fs   %2d(   R   t   syst   stdoutR   R   R   R;   t   show_summaryR    R   R   R	   (   R
   R'   t   atm(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   showN   s     c         C   s—   g  |  j  D] } | j ^ q
 } | r“ | j d  ƒ } | t | ƒ k rO d  } q“ | d k r“ t d |  j | d d g t | d k ƒ f ƒ ‚ q“ n  | S(   Ni    s)   Tag %s: %d atom%s missing the bond count.s    iss   s arei   (   R    R	   t   countR   R   R   R   R#   (   R
   t   all_or_nothingR   t   resultt   n_none(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   connectivities[   s    	2g      à?c         C   sU   t  j d t j d |  j ƒ  d | ƒ ƒ } x$ |  j D] } | j | j ƒ  ƒ q4 W| S(   Nt   special_position_settingsR;   t   min_distance_sym_equiv(   R   t	   structureR   RF   R;   R    t   add_scattererR   (   R
   RG   RC   R?   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   as_xray_structuref   s    		N(   R   R   R   R.   R0   R6   R9   R;   R   R@   R   RE   RJ   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR      s   	!					t   read_all_entriesc           B   s/   e  Z d  „  Z d d „ Z d „  Z d „  Z RS(   c         C   sW   g  |  _  xG t | ƒ } | j d  k r- q n  | j t k r@ Pn  |  j  j | ƒ q d  S(   N(   t   entriesR   R   R   R   R$   (   R
   R'   t   entry(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR   q   s    	c         C   sD   | d  k r t j } n  x% |  j D] } | j d | ƒ | Jq" Wd  S(   NR'   (   R   R<   R=   RL   R@   (   R
   R'   RM   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyR@   {   s
     c         C   s   |  j  S(   N(   RL   (   R
   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   __call__�   s    c         C   s+   x$ |  j  D] } | j | k r
 | Sq
 Wd  S(   N(   RL   R   R   (   R
   R   RM   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   get„   s    N(   R   R   R   R   R@   RN   RO   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyRK   o   s   	
	(   t
   __future__R    t   cctbxR   R   R   R   R<   t   objectR   R   RK   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/kriber/strudat.pyt   <module>   s   
]