ó
a#nSc           @   s  d  Z  d d l m Z d Z e j d  Z e j d  Z e j d  Z e j d  Z e j d  Z	 e j d	  Z
 e	 d
 f e d f e
 d f e d f e d f e d f f a d d  Z e d k rd d d d d g Z x6 e D]+ Z e GHe j e  Z e e  Z e GHqć Wn  d S(   s(     Functionality for SATIS typing atoms

i˙˙˙˙(   t   Chemi    s   [CD2]=[OD1]s   [CD3]=[OD1]s   [CD3](=[OD1])-[#7]s   C(=[OD1])-O-[#6]s   C(=[OD1])-[OX1]s   C(=[OD1])-[OX2]ia   i`   ib   i_   i^   i]   i   c         C   s*  |  j    } d g | } |  j   } x( t |  D] } | | j   | | <q2 Wt t  } d	 g | } xO t t  D]A \ } \ } }	 |  j |  r­ |  j	 |  | | <qv d
 | | <qv Wd	 g | }
 x[t
 |  D]M} d g | d } | | } | j   } t | j   d  | d <| j   } t |  } d g | } t rQ| d Gn  xB t
 |  D]4 } | | j |  j   | | <t r^| | Gq^q^Wt r Hn  g  | D] } | | ^ q§d g | j   } | j   t |  } | | k rC| j   | |  } | j   xç t
 |  D]! } t | | d  | | d <qWnľ x/ t
 |  D]! } t | | d  | | d <qPW| | k  rř| d d k rřd } x^ t
 |  D]M } x: | | D]. } | | k rľt | d | d <d } PqľqľW| r¤Pq¤q¤Wn  d j g  | D] } d | ^ q |
 | <qŐ W|
 S(   sŠ   returns SATIS codes for all atoms in a molecule

   The SATIS definition used is from:
   J. Chem. Inf. Comput. Sci. _39_ 751-757 (1999)

   each SATIS code is a string consisting of _neighborsToInclude_ + 1
   2 digit numbers

   **Arguments**

     - mol: a molecule

     - neighborsToInclude (optional): the number of neighbors to include
       in the SATIS codes

   **Returns**

     a list of strings nAtoms long

  i    ic   i   i˙˙˙˙i   i   t    s   %02dN(    (   i   i   (   t   GetNumAtomst   GetAtomst   xranget   GetAtomicNumt   lent   specialCasest   Nonet	   enumeratet   HasSubstructMatcht   GetSubstructMatchest   ranget   GetIdxt   mint   GetBondst   _debugt   GetOtherAtomt   GetTotalNumHst   sortt   reverset   join(   t   molt   neighborsToIncludet   nAtomst
   atomicNumst   atomst   it   nSpecialCasest   specialCaseMatchest   pattt   idxt   codest   codet   atomt   atomIdxt   bondst   nBondst   otherIndicest   jt   xt	   otherNumst   nOtherst   foundt
   matchTuple(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/SATIS.pyt
   SATISTypes%   sh    
   



".t   __main__s   CC(=O)NCs   CP(F)(Cl)(Br)(O)s	   O=CC(=O)Cs   C(=O)OCC(=O)Os	   C(=O)[O-]N(   t   __doc__t   rdkitR    R   t   MolFromSmartst   aldehydePattt
   ketonePattt	   amidePattt	   esterPattt   carboxylatePattt   carboxylPattR   R-   t   __name__t   smist   smit   MolFromSmilest   mR    (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/SATIS.pyt   <module>   s.   					O