ó
a#nSc           @   s   d  Z  d d l Z d d l Z d d l Z d d l Z yV d d l Z d d l m Z m Z m	 Z	 d d l
 Z e j j j d d d d ƒ Z Wn d Z d Z e d ‚ n Xd Z e rÖ d d l m Z d d l Z n  d d l Z d a d a d a d a d a d a e e e d	 „ Z e e d
 „ Z d „  Z d „  Z d d d „ Z  d d „ Z! d „  Z" d „  Z# d d „ Z$ d „  Z% d „  Z& d „  Z' y8 d d l( m) Z) d d l* Z* d „  Z+ d d d „ Z, Wn) e k
 rðd „  Z+ d d d „ Z, n Xd a- d d  „ Z. d! „  Z/ d8 Z0 i  d* „ Z1 d+ d, d- „ Z2 e3 d. k rüd/ Z4 e+ e4 ƒ Z5 e5 j6 d0 ƒ e e4 d1 d1 ƒ Z7 d2 Ge4 GHd3 Ge7 GHe e4 d1 d ƒ Z7 d2 Ge4 GHd3 Ge7 GHe e7 d d ƒ Z8 d4 Ge8 GHd5 Z4 e e4 d1 d ƒ Z7 e9 d6 d7 ƒ Z: e: j; e7 ƒ e: j< ƒ  n  d S(9   s&    tools for interacting with chemdraw

iÿÿÿÿN(   t   gencachet   Dispatcht	   constantss&   {5F646AAB-3B56-48D2-904C-A68D7989C251}i    i   s0   ChemDraw version (at least version 7) not found.(   R   c         C   s.  t  d	 k	 r9 d	 } d	 a d	 a d	 a d	 a d	 a d	 a  n  t d ƒ a  | rf t  j j	 ƒ  a t j
 a n d	 a t  j d ƒ j d ƒ j d ƒ a t  j d ƒ j d ƒ j d ƒ a t d k rÞ t  j d ƒ j d ƒ j d ƒ a n! t  j d ƒ j d ƒ j d ƒ a |  r*d t  _ t r*| r*t j ƒ  q*n  d	 S(
   s    launches chemdraw s   ChemDraw.Applicationi   i   i   i   i   i   i   N(   t   cdAppt   Nonet
   selectItemt	   cleanItemt
   centerItemt   theObjst   theDocR   t	   Documentst   Addt   Objectst   MenuBarst   Menust	   MenuItemst   _cdxVersiont   Visiblet   Activate(   t   visiblet   openDoct   showDoct   holder(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   StartChemDraw'   s,    	!!$!	c         C   sG   d t  _ |  rC t  j j ƒ  a t r7 | r7 t j ƒ  n  t j a n  d  S(   Ni   (   R   R   R
   R   R	   R   R   R   (   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   ReactivateChemDrawE   s    	c         C   s   t  d k r t ƒ  n  t d k rL t d k r@ t  j j ƒ  a n  t j a n  t j | |  t	 j
 ƒ t j | ƒ } t j ƒ  | S(   sî  converts the data passed in from one format to another

    inFormat should be one of the following:
       chemical/x-cdx                   chemical/cdx 
       chemical/x-daylight-smiles       chemical/daylight-smiles 
       chemical/x-mdl-isis              chemical/mdl-isis 
       chemical/x-mdl-molfile           chemical/mdl-molfile 
       chemical/x-mdl-rxn               chemical/mdl-rxn 
       chemical/x-mdl-tgf               chemical/mdl-tgf 
       chemical/x-questel-F1  
       chemical/x-questel-F1-query 

    outFormat should be one of the preceding or:
       image/x-png                      image/png 
       image/x-wmf                      image/wmf 
       image/tiff  
       application/postscript  
       image/gif  
  N(   R   R   R   R   R	   R
   R   R   t   SetDatat	   pythoncomt   Missingt   GetDatat   Clear(   t   inDatat   inFormatt	   outFormatt   outD(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt
   CDXConvertQ   s    

c         C   s“   t  d k r t ƒ  n  t d k rL t d k r@ t  j j ƒ  a n  t j a n  t j | |  t	 j
 ƒ t j ƒ  t j ƒ  t j | ƒ } t j ƒ  | S(   s  calls the CDXLib Clean function on the data passed in.

    CDXLib_Clean attempts to clean (prettify) the data before
    doing an output conversion.  It can be thought of as CDXConvert++.

    CDXClean supports the same input and output specifiers as CDXConvert
    (see above)

  N(   R   R   R   R   R	   R
   R   R   R   R   R   t   SelectR   t   ExecuteR   R   (   R   R   R    R!   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   CDXCleans   s    



s   chemical/cdxi   c         C   sk   t  d k r t ƒ  n  y t j ƒ  Wn t ƒ  t j a n X| rQ t j ƒ  n  t j	 | |  t
 j ƒ d S(   s    displays the data in Chemdraw N(   R   R   R   R	   R   R   R   R   R   R   R   R   (   R   R   t   clear(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt
   CDXDisplay‹   s    
s   chemical/x-mdl-molfilec         C   s^   t  d k r d } nE d t  _ t  j s1 t ƒ  n  y t  j j j |  ƒ } Wn d } n X| S(   s9    returns the contents of the active chemdraw document

  t    i   N(   R   R   R   t   ActiveDocumentR   R   R   (   R    t   res(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   CDXGrabš   s    			

c           C   s#   y t  j ƒ  Wn n Xt ƒ  d S(   s    shuts down chemdraw

  N(   R   t   Quitt   Exit(    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   CloseChemdraw«   s
    c           C   s
   d a d S(   s"    destroys our link to Chemdraw

  N(   R   R   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyR-   ¶   s    s   save.cdxc         C   s   t  j } | j |  ƒ d S(   sˆ   force chemdraw to save the active document

  NOTE: the extension of the filename will determine the format
   used to save the file.
  N(   R   R)   t   SaveAs(   t   fileNamet   d(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   SaveChemDrawDoc½   s    	c          C   s   t  j }  |  j ƒ  d S(   sˆ   force chemdraw to save the active document

  NOTE: the extension of the filename will determine the format
   used to save the file.
  N(   R   R)   t   Close(   R1   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   CloseChemDrawDocÆ   s    	c         C   sŽ   d „  } g  } t  j | | ƒ d } x6 | D]. } t  j | ƒ } |  j | ƒ r, | } Pq, q, W| d k rŠ t  j | d ƒ t  j | ƒ n  d  S(   Nc         S   s   | j  |  ƒ S(   N(   t   append(   t   xt   y(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   <lambda>Ñ   s    iÿÿÿÿi    i   (   t   win32guit   EnumWindowst   GetWindowTextt   matcht
   ShowWindowt   BringWindowToTop(   t   nameRet   cbt   winst   tgtWint   wint   txt(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   RaiseWindowNamedÏ   s    	c          C   s   t  j d ƒ }  t |  ƒ d  S(   Ns	   ^ChemDraw(   t   ret   compileRE   (   t   e(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   RaiseChemDrawá   s    (   t   Imagec         C   s   t  |  d d d d ƒS(   sB   takes a SMILES string and returns a PIL image using chemdraw

    R   s   chemical/daylight-smilesR    s	   image/gif(   t   MolToPilImage(   t	   smilesStr(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   SmilesToPilImageé   s    s   chemical/daylight-smiless	   image/gifc         C   sC   t  |  | | ƒ } t j t | ƒ ƒ } t j | ƒ j d ƒ } | S(   sD   takes a molecule string and returns a PIL image using chemdraw

    t   RGB(   R"   t	   cStringIOt   StringIOt   strRJ   t   opent   convert(   t   dataStrR   R    R*   t   dataFilet   img(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyRK   î   s    c         C   s	   d GHd  S(   Ns8   You need to have PIL installed to use this functionality(   R   (   RL   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyRM   ø   s    c         C   s	   d GHd  S(   Ns8   You need to have PIL installed to use this functionality(   R   (   RT   R   R    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyRK   û   s    c         C   s%   t  d ƒ a t j s! |  t _ n  d S(   s    launches Chem3D s   Chem3D.ApplicationN(   R   t   c3dAppR   (   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   StartChem3D  s    	c           C   s   t  j ƒ  d a  d S(   s    shuts down Chem3D N(   RW   R,   R   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   CloseChem3D  s    
t   DipoleMomentt
   BendEnergyt   Non14VDWEnergyt   StericEnergyt   StretchBendEnergyt   StretchEnergyt   TorsionEnergyt   VDW14Energyc         C   s‹  t  d k r t ƒ  n  | d k r7 t |  | d ƒ } n |  } t j d ƒ } t | d ƒ j | ƒ t  j j	 | ƒ } | s‹ d GHt
 d ‚ n  t d ƒ } d | _ d | _ d | _ | j | ƒ x | j d k rÔ qÂ Wt j ƒ  d } | j | ƒ x" t D] } t d | ƒ | | <qù W| j d ƒ t j | ƒ t | d ƒ j ƒ  }	 d }
 x8 |
 s†y t j | ƒ Wn t j d ƒ qOXd }
 qOW|	 S(   s   adds 3D coordinates to the data passed in using Chem3D

    **Arguments**

      - data: the molecular data

      - format: the format of _data_.  Should be something accepted by
        _CDXConvert_

      - props: (optional) a dictionary used to return calculated properties
  
  s   chemical/mdl-molfiles   .mols   wb+s   cannot open molecules   No Molecules   Chem3D.MM2Jobi   i    iPMOCiDNEPs	   /to3d.mols   doc.%st   rg      à?N(   iPMOCiDNEP(   RW   R   RX   R%   t   tempfilet   mktempRR   t   writeR
   t   Opent
   ValueErrorR   t   Typet   DisplayEveryIterationt   RecordEveryIterationt
   MM2Computet   ComputeStatust   ost   getcwdR/   t   availChem3DPropst   evalR3   t   unlinkt   readt   timet   sleep(   t   datat   formatt   propst   molDatat   molFNamet   doct   jobt   outFNamet   propt   c3dDatat   gone(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   Add3DCoordsToMol  sB    
				
s   problems.sdfi   c         C   ss  t  |  d ƒ } t  | d ƒ } d } i  } g  } | j ƒ  }	 d }
 d } t j ƒ  } xõ|	 d k rK|	 j d ƒ d k rÞ | j |	 ƒ t j | d ƒ } y t | d d | ƒ} Wn | } d	 }
 g  } q<Xd }
 | g } n^|	 j d
 ƒ d k r/t j ƒ  } | d	 7} d | t j ƒ  | f GHt j ƒ  } | | d k rht	 ƒ  t
 ƒ  | j ƒ  t  | d ƒ } n  |
 sÏx/ | j ƒ  D]! } | j d | | | f ƒ q{W| j |	 ƒ | j t j | d ƒ ƒ g  } q<d }
 | j |	 ƒ | d k r t  | d ƒ } n  | j | ƒ | j t j | d ƒ ƒ g  } n | j |	 ƒ | j ƒ  }	 qW W| j ƒ  | d k	 ro| j ƒ  n  d S(   sÕ    optimizes the structure of every molecule in the input SD file

    **Arguments**

      - inFileName: name of the input SD file

      - outFileName: name of the output SD file

      - problemFileName: (optional) name of the SD file used to store molecules which
        fail during the optimization process

      - restartEvery: (optional)  Chem3D will be shut down and restarted
        every _restartEvery_ molecules to try and keep core leaks under control

  Rb   s   w+i    R(   s   M  ENDiÿÿÿÿs   chemical/mdl-molfileRw   i   s   $$$$s"   finished molecule %d in %f secondst   as   > <%s>
%f

N(   RR   R   t   readlineRs   t   findR5   t   stringt   joinR€   RY   RX   t   closet   keysRe   (   t
   inFileNamet   outFileNamet   problemFileNamet   restartEveryt   inFilet   outFilet   problemFileRw   t   linest   nextLinet   skipt   nDonet   t1t   molBlockt   newMolBlockt   badBlockt   t2R}   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   OptimizeSDFileQ  sb    


		
t   __main__s   CCC(C=O)CCCs   foo.jpgs   chemical/x-daylight-smiless   in:s   out:s   out2:s7   COc1ccc(c2onc(c2C(=O)NCCc3ccc(F)cc3)c4ccc(F)cc4)c(OC)c1s   test.mols   w+(   RZ   R[   R\   R]   R^   R_   R`   Ra   (=   t   __doc__R„   Rc   Rm   Rs   R   t   win32com.clientR    R   R   t   win32com.client.gencachet   win32comt   clientt   EnsureModulet	   cdxModuleR   R   t   ImportErrorR9   RF   R   R	   R   R   R   R   t   Truet   FalseR   R   R"   R%   R'   R+   R.   R-   R2   R4   RE   RI   t   PILRJ   RO   RM   RK   RW   RX   RY   Ro   R€   R˜   t   __name__t   inStrRV   t   savet   convStrt   convStr2RR   t   outRe   R†   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/utils/chemdraw.pyt   <module>   s„   0"	"												 >F					