ó
Æ™xTc           @   s-  d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l Z d  d l	 Z	 i  Z
 d „  Z e ƒ  Z d „  Z d „  Z e d „ Z d d	 „ Z d
 „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z e e d „ Z e d „ Z e d „ Z d „  Z e d k r)d GHe e	 j d ƒ GHd GHe e	 j d ƒ GHd GHe e	 j d d d ƒ GHd GHe e	 j d ƒ GHd GHe e	 j d ƒ GHd GHe e	 j d d e ƒGHd GHe e	 j d ƒ GHd  GHe e	 j d d e ƒGHd! GHe e	 j d d" e ƒGHd# GHe e	 j d ƒ GHd$ GHe e	 j d d e ƒGHn  d S(%   iÿÿÿÿ(   t   division(   t
   cif_parser(   t   SorryNc          C   sC   x< d d d g D]+ }  t  j j d |  ƒ } | d  k	 r | Sq Wd  S(   Ns   chem_data/chemical_componentst   chemical_componentss!   ext_ref_files/chemical_componentst   relative_path(   t   libtbxt   envt   find_in_repositoriest   None(   R   t   result(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   find_data_dir   s     c         C   su   t  d  k r d S|  s d S|  j ƒ  }  t |  ƒ d k rG t d ƒ ‚ n  t j j t  d |  d j ƒ  d |  j	 ƒ  ƒ S(   Nt    i    s   Residue code is blank.s   %ss   data_%s.cif(
   t   data_dirR   t   stript   lenR   t   ost   patht   joint   lowert   upper(   t   code(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_cif_filename   s      	c         C   s&   t  |  ƒ } t j j | ƒ r" t St S(   N(   R   R   R   t   existst   Truet   False(   R   t   filename(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   is_code   s     c         C   s    t  |  ƒ r t |  d | ƒSt S(   Nt	   alternate(   R   t   get_atom_namesR   (   R   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   is_residue_specified$   s    c         C   s`   | d  k	 r t j | ƒ } n> |  t k r7 t |  } n% t |  ƒ } t j | ƒ } | t |  <| S(   N(   R   R   t   runt   loaded_cifsR   (   R   R   t   cif(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_cif_dictionary)   s    
c         C   sF   x? t  t |  ƒ t |  d t ƒƒ D] \ } } | | k r" | Sq" Wd  S(   NR   (   t   zipR   R   (   R   t   namet   atomt   alt(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_alternative_name6   s     c         C   sô   t  |  ƒ } | s | S| j d i  ƒ } xW | D]O } y5 | j j ƒ  d k ri | j j ƒ  d k ri | j SWq/ t k
 r} q/ Xq/ WxK | D]C } y) | j d k r· | j d k r· | j SWq‰ t k
 rË q‰ Xq‰ Wy | j SWn t k
 rï d SXd  S(   Nt   _pdbx_chem_comp_descriptort   CACTVSt   SMILES_CANONICALt   SMILESR   (   R!   t   gett   programR   t   typet
   descriptort	   Exception(   R   R    t   desct   item(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt
   get_smiles;   s(     *    c         C   s<   t  |  ƒ } | s | S| j | i  ƒ d } t | | d ƒ S(   Ni    R   (   R!   R+   t   getattr(   R   t   loopt   fieldR    R0   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_field_simpleL   s
     c         C   s   t  |  d d ƒ S(   Nt
   _chem_compR-   (   R6   (   R   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_typeR   s    c         C   s`   t  |  ƒ } | s | S| j d i  ƒ } x1 | D]) } t | d d  ƒ d  k	 rT | j Sd Sq/ Wd  S(   Nt   _pdbx_chem_comp_identifiert
   identifiers   Unknown or not read(   R!   R+   R3   R   R:   (   R   R    R0   R1   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_nameU   s     c         C   sf   t  |  ƒ } | s | Sg  } xC | j d g  ƒ D]/ } | rN | j | j ƒ q/ | j | j ƒ q/ W| S(   Nt   _chem_comp_atom(   R!   R+   t   appendt   alt_atom_idt   atom_id(   R   R   R    t   tmpR1   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyR   _   s     c         C   sÑ   | r | r d s t  ‚ n  t |  ƒ } | s1 | Sg  } x“ | d D]‡ } | j d k rB | r� | j } t | ƒ d k r� | d | d  } n  | j | ƒ qÉ | r¶ | j | j ƒ qÉ | j | j ƒ qB qB W| S(   Ni    R<   t   Hi   i   (   RA   (   t   AssertionErrorR!   t   type_symbolR?   R   R=   R>   (   R   t   wrapR   R    R@   R1   R#   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_hydrogen_namesj   s"      	c         C   sœ   t  |  ƒ } | s | Sg  } | j d i  ƒ } xg | D]_ } | r{ t |  | j ƒ } t |  | j ƒ } | j | | g ƒ q5 | j | j | j g ƒ q5 W| S(   Nt   _chem_comp_bond(   R!   R+   R&   t	   atom_id_1t	   atom_id_2R=   (   R   R   R    R@   t   bondsR1   t   atom1t   atom2(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   get_bond_pairs   s     c         c   sç   d „  } t  ƒ  } t j | ƒ } | j ƒ  g  } xW | D]O } t j j t j j | | ƒ ƒ se q8 n  | t j t j j | | ƒ ƒ 7} q8 W|  r¡ | j | ƒ n
 | j ƒ  x5 | D]- } | j d ƒ d k rÓ q² n  | d d !Vq² Wd  S(   Nc         S   sj   |  d d !} | d d !} | s$ d S| s. d St  | ƒ } t  | ƒ } t | ƒ t | ƒ k rb d Sd Sd  S(   Ni   iüÿÿÿi   iÿÿÿÿ(   R2   R   (   t   f1t   f2t   c1t   c2t   s1t   s2(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   _cmp_smiles_lengthŽ   s    t   data_i    i   iüÿÿÿ(   R
   R   t   listdirt   sortR   t   isdirR   t   find(   t   sort_reverse_by_smilesRS   R   t   dirst	   filenamest   dR   (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt"   generate_chemical_components_codes�   s     		
! &
 c         C   s˜   t  |  ƒ } | s d St | ƒ } | j ƒ  } | j ƒ  d } xS t | ƒ D]E \ } } | d | 7} | d k  rw qK n  | j d ƒ d k rK PqK qK W| S(   NR   s     %si   s   _chem_comp.iÿÿÿÿ(   R   t   filet	   readlinest   closet	   enumerateRX   (   R   R   t   ft   linest   outlt   it   line(    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt
   get_header«   s     
 t   __main__s   
SMILESi   s   
Types   
WeightR7   t   formula_weights   
Names   
Atom namess   
Alternate atom namesR   s   
Hydrogen namess   
Alternate hydrogen namess   
Wrapped hydrogen namesRD   s   
Bond pairss   
Alternate name bond pairs(    t
   __future__R    t   mmtbx.chemical_componentsR   t   libtbx.utilsR   t   libtbx.load_envR   R   t   sysR   R
   R   R   R   R   R   R   R!   R&   R2   R6   R8   R;   R   RE   RL   R]   Rg   t   __name__t   argvR   (    (    (    sP   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/chemical_components/__init__.pyt   <module>   s\   											
	