ó
a#nSc           @   s¢  d  d l  m Z d  d l m Z d  d l Z d „  Z g  a d „  Z d  d l m Z	 d „  Z
 e	 j e
 _ d e
 _ d	 „  Z d
 e _ d e _ d „  Z e	 j e _ d e _ d „  Z d e _ d „  Z d e _ e d „ Z e d „ Z d e _ e d „ Z d e _ e d „ Z d e _ e d „ Z d e _ d  d l m Z m Z m Z m Z e e ƒ  ƒ d „  Z e  d k ržd  d l! Z! e ƒ  \ Z" Z# e! j$ e" ƒ n  d S(   iÿÿÿÿ(   t   Chem(   t   rdPartialChargesNc         C   s.   t  t d ƒ r! t |  t j ƒ p- t  |  d ƒ S(   Nt   Callablet   __call__(   t   hasattrt   collectionst
   isinstanceR   (   t   thing(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   _isCallable   s    !c         C   sâ  d d l  m } m } m } m } m } d d l m } | | | | | | g } t g } xL |  j	 ƒ  D]> \ }	 }
 |	 d d k rf t
 |
 ƒ rf t j |	 |
 f ƒ qf qf Wg  } xi | D]a } t | ƒ } xL | D]D } | d d k rÎ t | | ƒ }
 t
 |
 ƒ r| j | ƒ qqÎ qÎ Wqµ Wx» | D]³ } t | ƒ } xž | D]– } | d d k r:| d d k r:| | k r:| d  d k r’| d | k r’q:n  t | | ƒ }
 t
 |
 ƒ rÐ|
 |  | <t j | |
 f ƒ qÐq:q:Wq!Wt a d  S(   Niÿÿÿÿ(   t   GraphDescriptorst   MolSurft   Lipinskit	   Fragmentst   Crippen(   t
   EState_VSAi    t   _i   t   py(   t
   rdkit.ChemR	   R
   R   R   R   t   rdkit.Chem.EStateR   R    t	   iteritemsR   t	   _descListt   appendt   dirt   getattrt   descList(   t	   namespaceR	   R
   R   R   R   R   t   modst	   otherModst   nmR   t   otherst   modt   tmpt   name(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   _setupDescriptors   s4    (	, 
!(   t   rdMolDescriptorsc          O   s   t  j |  | Ž  S(   N(   t   _rdMolDescriptorst
   _CalcMolWt(   t   xt   y(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   <lambda>8   s    s›   The average molecular weight of the molecule

  >>> MolWt(Chem.MolFromSmiles('CC'))
  30.07...
  >>> MolWt(Chem.MolFromSmiles('[NH4+].[Cl-]'))
  53.49...

c         C   s   t  |  t ƒ S(   N(   t   MolWtt   True(   R%   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyR'   C   s    sÀ   The average molecular weight of the molecule ignoring hydrogens

  >>> HeavyAtomMolWt(Chem.MolFromSmiles('CC'))
  24.02...
  >>> HeavyAtomMolWt(Chem.MolFromSmiles('[NH4+].[Cl-]'))
  49.46...

s   1.0.0c          O   s   t  j |  | Ž  S(   N(   R#   t   CalcExactMolWt(   R%   R&   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyR'   N   s    sŸ   The exact molecular weight of the molecule

  >>> ExactMolWt(Chem.MolFromSmiles('CC'))
  30.04...
  >>> ExactMolWt(Chem.MolFromSmiles('[13CH3]C'))
  31.05...

c         C   sf   t  j ƒ  } d } xM |  j ƒ  D]? } | | j | j ƒ  ƒ 7} | | j ƒ  8} | | j ƒ  7} q W| S(   s3   The number of valence electrons the molecule has

  >>> NumValenceElectrons(Chem.MolFromSmiles('CC'))
  14.0
  >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)O'))
  18.0
  >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)[O-]'))
  18.0
  >>> NumValenceElectrons(Chem.MolFromSmiles('C(=O)'))
  12.0
  

  g        (   R    t   GetPeriodicTablet   GetAtomst   GetNOuterElecst   GetAtomicNumt   GetFormalCharget   GetTotalNumHs(   t   molt   tblt   accumt   atom(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   NumValenceElectronsZ   s    c         C   s1   d } x$ |  j  ƒ  D] } | | j ƒ  7} q W| S(   sŒ   The number of radical electrons the molecule has
    (says nothing about spin state)

  >>> NumRadicalElectrons(Chem.MolFromSmiles('CC'))
  0.0
  >>> NumRadicalElectrons(Chem.MolFromSmiles('C[CH3]'))
  0.0
  >>> NumRadicalElectrons(Chem.MolFromSmiles('C[CH2]'))
  1.0
  >>> NumRadicalElectrons(Chem.MolFromSmiles('C[CH]'))
  2.0
  >>> NumRadicalElectrons(Chem.MolFromSmiles('C[C]'))
  3.0
  

  g        (   R,   t   GetNumRadicalElectrons(   R1   R3   R4   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   NumRadicalElectronsr   s    c         C   s›   | r t  |  d ƒ r |  j St j |  ƒ } d } d } xG |  j ƒ  D]9 } t | j d ƒ ƒ } t | | ƒ } t | | ƒ } qE W| | f } | |  _ | S(   Nt   _chargeDescriptorsg     @@g     @Àt   _GasteigerCharge(	   R   R8   R   t   ComputeGasteigerChargesR,   t   floatt   GetPropt   mint   max(   R1   t   forcet   chgst   minChgt   maxChgt   att   chgt   res(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   _ChargeDescriptors‰   s    	c         C   s   t  |  | ƒ \ } } | S(   N(   RF   (   R1   R?   R   RE   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   MaxPartialCharge˜   s    c         C   s   t  |  | ƒ \ } } | S(   N(   RF   (   R1   R?   RE   R   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   MinPartialCharge�   s    c         C   s.   t  |  | ƒ \ } } t t | ƒ t | ƒ ƒ S(   N(   RF   R>   t   abs(   R1   R?   t   v1t   v2(    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   MaxAbsPartialCharge¢   s    c         C   s.   t  |  | ƒ \ } } t t | ƒ t | ƒ ƒ S(   N(   RF   R=   RI   (   R1   R?   RJ   RK   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   MinAbsPartialCharge§   s    (   t   MaxEStateIndext   MinEStateIndext   MaxAbsEStateIndext   MinAbsEStateIndexc          C   s5   d d  l  }  d d  l } |  j | j d d |  j ƒS(   Niÿÿÿÿt   __main__t   optionflags(   t   doctestt   syst   testmodt   modulest   ELLIPSIS(   RT   RU   (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   _test¶   s    RR   (%   t   rdkitR    R   R   R   R   R   R!   R"   R#   R(   t   _CalcMolWt_versiont   versiont   __doc__t   HeavyAtomMolWtt
   ExactMolWtt   _CalcExactMolWt_versionR5   R7   t   FalseRF   RG   RH   RL   RM   t   rdkit.Chem.EState.EStateRN   RO   RP   RQ   t   localsRY   t   __name__RU   t   failedt   triedt   exit(    (    (    sX   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/Descriptors.pyt   <module>   sF   		#															"	