ó
�™xTc           @   s–   d  Z  d d l m Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 „  Z	 e
 d k r’ d d l Z e	 e j d ƒ n  d S(   sr   Parser for Kim Henrick's standard_geometry.cif file:
  http://www.ebi.ac.uk/~henrick/newpdb/standard_geometry.cif
iÿÿÿÿ(   t   divisionc         C   sY   | j  ƒ  } | d k r d  St | ƒ d k s4 t ‚ | j d ƒ d k  sO t ‚ |  | ƒ S(   Nt   .i    t    (   t   stript   Nonet   lent   AssertionErrort   find(   t   typet   s(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   get_cif_number   s     c         C   s   t  t |  ƒ S(   N(   R
   t   float(   R	   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   get_cif_float   s    c         C   s   t  t |  ƒ S(   N(   R
   t   int(   R	   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   get_cif_int   s    t   chem_comp_atomc           B   sG   e  Z d  d d d d d d d d d	 d
 d d d d d g Z d „  Z RS(   t   atom_idt   alt_atom_idt   type_symbolt   charget
   pdbx_alignt   pdbx_aromatic_flagt   pdbx_leaving_atom_flagt   pdbx_stereo_configt   ccp4_type_energyt   ccp4_partial_charget   pdbx_model_cartn_x_idealt   pdbx_model_cartn_y_idealt   pdbx_model_cartn_z_idealt   pdbx_ordinalt   ref_radii_asa_probet
   descriptorc         C   s   |  j  |  j |  j f S(   N(   R   R   R   (   t   self(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt
   site_ideal$   s    (   t   __name__t
   __module__t	   __slots__R!   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyR      s"   	t   process_chem_comp_atom_bufferc           B   s&   e  Z d  d g Z d „  Z d „  Z RS(   t   comp_idt   atomsc         C   s8  d  } g  |  _ x"| D]} | d  k r< | d  } |  _ n | d  | k sR t ‚ | d d !d k sk t ‚ t ƒ  } | d d !| _ | d d !d k s� t ‚ | d d !| _ | d d k sÃ t ‚ | d	 d
 !| _ | d
 d k sé t ‚ | d | _ | d d k st ‚ | d | _	 | d d k s/t ‚ | d | _
 | d d k sRt ‚ | d | _ | d d k sut ‚ | d | _ | d d !d k s›t ‚ | d d !| _ | d d !d k sÄt ‚ t | d d !ƒ | _ | d d !d k sót ‚ t | d d !ƒ | _ | d d k st ‚ t | d d !ƒ | _ | d d k sKt ‚ t | d d !ƒ | _ | d d k swt ‚ t | d  d! !ƒ | _ | d! d k s£t ‚ t | d" d# !ƒ | _ | j d  k	 rô| d# d k sÞt ‚ | d$ j ƒ  | _ n, | d" d# !d% k st ‚ | d# j ƒ  | _ |  j j | ƒ q Wd  S(&   Ni   i   s     i	   i   s      i   R   i   i   i   i   i   i   i   i   i   i   i   i   i!   s       i%   i)   i0   i4   i;   i<   iC   iD   iK   iL   iO   iP   iU   iV   s     .  (   R   R'   R&   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   append(   R    t   buffert   comd_idt   lineR&   t   a(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   __init__-   sV    		c         C   s:   d } x- |  j  D]" } | j d k r | d 7} q q W| S(   Ni    s    Hs   H i   (   s    Hs   H (   R'   R   (   R    t   resultt   atom(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   count_non_hydrogen_atoms\   s
    (   R"   R#   R$   R-   R0   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyR%   )   s   	/c         C   s  t  |  ƒ j ƒ  j ƒ  } t | ƒ } x0 | D] } | j ƒ  d k r+ Pq+ q+ Wt d ƒ ‚ i  } g  } x‰ | D]u } | j ƒ  d k r† Pn  | j ƒ  d k rÒ t | ƒ d k rß t d | ƒ } | | | j	 <g  } qß qj | j
 | ƒ qj Wt d ƒ ‚ t | ƒ d k st ‚ | S(   Ns   _chem_comp_atom.descriptors   Unexpected end of file.t   loop_t   #i    R)   (   t   opent   readt
   splitlinest   itert   rstript   RuntimeErrorR   R   R%   R&   R(   R   (   t	   file_namet   linest	   line_iterR+   t
   chem_compsR)   t	   chem_comp(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   process_chem_compsc   s(    t   __main__Ni   (   t   __doc__t
   __future__R    R
   R   R   t   objectR   R%   R>   R"   t   syst   argv(    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/wwpdb/standard_geometry_cif.pyt   <module>   s   			:	