ó
a#nSc           @   sè   d  Z  d d l m Z d d l m Z d d l Z d d l Z d a d e f d „  ƒ  YZ	 d e f d	 „  ƒ  YZ
 e d
 k rä d d l m Z d d l m Z m Z e j d ƒ Z e j e ƒ e j e ƒ e
 ƒ  Z e j e ƒ n  d S(   s+    uses DSViewer to interact with molecules

iÿÿÿÿ(   t   Chem(   t   DispatchNi   t   Displayablec           B   sS   e  Z d  d „ Z g  e e d „ Z e d „ Z e d „ Z e d „ Z d „  Z	 RS(   iÿÿÿÿc         C   sG   | d k  r t  } t  d 7a  n  | |  _ | |  _ t |  _ g  |  _ d  S(   Ni    i   (   t   _nextDisplayIdt   doct   idt   Truet   visiblet   children(   t   selfR   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   __init__   s    			c   
      C   sC  | r d } n d } | s( | d k r1 d } n0 g  | D] } d | ^ q8 } d d j  | ƒ } d |  j | | f } t t |  j j | ƒ ƒ ƒ } | rà | rà d	 } d |  j | | f } t t |  j j | ƒ ƒ ƒ } n  | rd
 |  j } |  j j | ƒ n  | r?x0 |  j D]" }	 |	 j d | d | d t ƒ qWn  | S(   Nt   truet   falset   *s
   ; atom "*"s   id=%ds	   ; atom %st   ,s-   SetProperty object RD_Visual=%d %s: select=%st    s;   SetProperty object RD_Visual=%d; bond index="*": select=offt   atomst   statet   recurse(	   t   joinR   t   intt   strR   t	   DoCommandR   t   SelectR   (
   R	   R   R   R   t   selTextt   atomStrt   xt   cmdt   rt   child(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR      s,    		

!#c         C   s@   |  j  d t d t ƒ |  j j d ƒ |  j  d t d t ƒ d  S(   NR   R   t   hide(   R   R   R   R   t   False(   R	   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   HideC   s    c         C   s@   |  j  d t d t ƒ |  j j d ƒ |  j  d t d t ƒ d  S(   NR   R   t   Show(   R   R   R   R   R   (   R	   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR!   G   s    c         C   sP   |  j  j d ƒ |  j d t d t ƒ |  j  j d ƒ |  j d t d t ƒ d  S(   Nt   HideAllR   R   R!   (   R   R   R   R   R   (   R	   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   ShowOnlyL   s    c         C   sE   |  j  j d ƒ |  j d t d t ƒ } | rA |  j  j d ƒ n  d  S(   Nt   UnselectAllR   R   t   Delete(   R   R   R   R   (   R	   t   count(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   __del__R   s    (
   t   __name__t
   __module__R
   R   R   R   R    R!   R#   R'   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR      s   $t	   MolViewerc           B   sÝ   e  Z d  d d „ Z d „  Z d „  Z d e g  d d e d „ Z e d	 „ Z d d
 „ Z	 e d „ Z
 d d „ Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d d e d „ Z d „  Z RS(   i    t   Untitledc         K   sg   t  d ƒ |  _ d |  j _ | s3 |  j j d  k rK |  j j | ƒ |  _ n |  j j |  _ i  |  _ d  S(   Ns   WebLabViewerPro.Applicationi   (   R   t   appt   Visiblet   ActiveDocumentt   Nonet   NewR   t   displayables(   R	   t   forcet   titlet   kwargs(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR
   Y   s    c         C   s-   |  j  j d ƒ |  j  j d ƒ i  |  _ d  S(   Nt	   SelectAllR%   (   R   R   R1   (   R	   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt	   DeleteAllc   s    c         C   s\   g  | D] } | j  ƒ  ^ q } |  j j ƒ  } x' | D] } | | k r5 |  j | =q5 q5 Wd  S(   N(   t   lowerR1   t   keys(   R	   t   excludesR   t   allNamest   nm(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   DeleteAllExcepth   s
    t   moleculeR   iÿÿÿÿc         C   sž  | r |  j  ƒ  d  } n |  j j | j ƒ  d  ƒ } | sR t j | d | ƒ} n  | d | | j d ƒ d }	 |	 } | s� t |  j	 ƒ } n  t
 | d ƒ s® | j | k r>| | _ t j d ƒ }
 t |
 d ƒ j | ƒ |  j	 j d |
 ƒ |  j	 j d | j ƒ |  j	 j d	 | j ƒ |  j	 j d
 ƒ t j |
 ƒ n  | j d t ƒ |  j	 j d ƒ | |  j | j ƒ  <| rš|  j	 j d ƒ |  j	 j d ƒ n  d  S(   Nt   confIds   
i   t	   _molBlocks   .mols   w+s   PasteFrom %ss(   SetProperty molecule id=0 : RD_Visual=%ds!   SetProperty molecule id=0 : id=%ds&   SetProperty molecule id=0 : select=offR   R!   t   Centert   FitView(   R6   R/   R1   t   getR7   R    t   MolToMolBlockt   indexR   R   t   hasattrR?   t   tempfilet   mktempt   opent   writeR   R   t   ost   unlinkR   R   (   R	   t   molt   namet   showOnlyt   highlightFeaturest   molBR>   t   zoomt   objt   tmpt   fN(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   ShowMolq   s4    
		c         C   sÂ   | r |  j  ƒ  n  |  j j d | ƒ t |  j ƒ } |  j j d | j ƒ |  j j d ƒ |  j j d | j ƒ } | s� t | ƒ d k r« |  j j d | j ƒ } n  | |  j | j ƒ  <| S(   Ns   PasteFrom %ss!   SetProperty molecule id=0 : id=%ds&   SetProperty molecule id=0 : select=offs.   SetProperty AminoAcidChain id=0 : RD_Visual=%di    s(   SetProperty molecule id=0 : RD_Visual=%d(   R6   R   R   R   R   R   R1   R7   (   R	   t   filenameRM   RN   RR   R&   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   LoadFileš   s    c         C   s  | st  |  j j d ƒ ƒ } t  |  j j d ƒ ƒ } | rî g  } i  } x½ | j d ƒ D]� } t | j d ƒ d ƒ d } | j | ƒ rž | j | | ƒ qX xF |  j j ƒ  D]5 \ } } | | j	 k r® | | | <| j | ƒ q® q® WqX Wq„d g | j
 d ƒ d } ny |  j j | j ƒ  ƒ rx| j ƒ  } |  j | j	 } t  |  j j d | ƒ ƒ } | g | j
 d ƒ d } n d  } d  } | r| j d ƒ }	 yN g  }
 xA t t |	 ƒ ƒ D]- } t |	 | ƒ } |
 j | | | f ƒ qµWWqd d  l } | j ƒ  g  }
 qXn g  }
 |
 S(	   Ns'   GetPropertyValue atom select=true: id=?s-   GetPropertyValue atom select=true: molecule=?R   t   /i   R   s>   GetPropertyValue molecule RD_Visual=%d; atom select=true: id=?iÿÿÿÿ(   R   R   R   t   splitR   t   has_keyt   appendR1   t	   iteritemsR   R&   R7   R/   t   ranget   lent	   tracebackt	   print_exc(   R	   t   whichSelectiont   dt   d2t   molIdst   tmpDR   t   kt   vt   splitDt   rest   it   idxR_   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   GetSelectedAtoms¨   sF    

c         C   s$   |  j  j d ƒ |  j | | ƒ d  S(   Nt   UnSelectAll(   R   R   t   SelectAtoms(   R	   t   indicest   wheret   extraHighlight(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   HighlightAtomsÖ   s    t	   selectionc         C   sX   |  j  j d ƒ |  j  j d ƒ |  j j | j ƒ  d  ƒ } | rT | j d | ƒ n  d  S(   NRm   s#   SetProperty atom id="*": select=offR   (   R   R   R1   RB   R7   R/   R   (   R	   t   itemIdt   atomIndicest   selNamet   o(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyRn   Ù   s
    c         C   s-   | s |  j  j d ƒ n |  j  j d ƒ d  S(   Ns   UpdateView offs   UpdateView on(   R   R   (   R	   t   val(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   SetDisplayUpdateá   s    c   	      C   s¡   i  } x” | D]Œ \ } } | j  ƒ  } |  j | j } | d 7} d | | f } |  j j | ƒ } g  | j d ƒ D] } t | ƒ ^ qq } | | | | f <q W| S(   Ni   s9   GetPropertyValue molecule RD_Visual=%d; atom id=%d: xyz=?t    (   R7   R1   R   R   R   RY   t   float(	   R	   t   selsRi   t   labelRk   Ra   R   t   coordsR   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   GetAtomCoordsç   s    
(g      à?c         C   si  | j  ƒ  } |  j t ƒ t |  j ƒ } x t | ƒ D]\ } } | | } d j g  | D] }	 t t d |	 ƒ ƒ ^ qX ƒ } t |  j ƒ }
 d |
 j	 } |  j j
 d | ƒ |  j j
 d | | d | d | d f ƒ |  j j
 d	 | | f ƒ |  j j
 d
 | | f ƒ |  j j
 d | | j	 f ƒ |  j j
 d | | j	 f ƒ q5 W| |  j | <|  j t ƒ d  S(   NRz   iÿ   s	   sphere-%ds	   Sphere %ss)   SetProperty Object name=%s : xyz=%f %f %fi    i   i   s&   SetProperty Object name=%s : radius=%fs%   SetProperty Object name=%s : color=%ss)   SetProperty Object name=%s : RD_Visual=%ds"   SetProperty Object name=%s : id=%d(   R7   Ry   R   R   R   t	   enumerateR   R   R   R   R   R1   R   (   R	   t   locst   colorsR}   t	   sphereRadt   parentRj   t   loct   colorR   RR   R;   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   AddPharmacophoreõ   s     
2,!c         C   s»   |  j  j d ƒ | j ƒ  } |  j j | d  ƒ } | r· | j d t ƒ | d k rf |  j  j d ƒ n> | d k r… |  j  j d ƒ n | d k r¤ |  j  j d ƒ n  | j d t ƒ n  d  S(	   NRm   R   t   stickss   DisplayStyle Atom Stickt   liness   DisplayStyle Atom LineR   s   DisplayStyle Atom Off(	   R   R   R7   R1   RB   R/   R   R   R   (   R	   RR   t   styleRw   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   SetDisplayStyle	  s    c         C   s   |  j  j d ƒ d  S(   NR"   (   R   R   (   R	   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR"     s    c         C   sH   |  j  j d ƒ | j ƒ  } |  j j | d  ƒ } | rD | j ƒ  n  d  S(   NRm   (   R   R   R7   R1   RB   R/   R    (   R	   t   objNameRw   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt
   HideObject  s
    c         C   sH   |  j  j d ƒ | j ƒ  } |  j j | d  ƒ } | rD | j ƒ  n  d  S(   NRm   (   R   R   R7   R1   RB   R/   R!   (   R	   RŒ   Rw   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   DisplayObject!  s
    c         C   s€   |  j  j d ƒ | j ƒ  } |  j j | d  ƒ } | r| | j d t ƒ } |  j  j d ƒ |  j  j d ƒ | j d t ƒ n  d  S(   NRm   R   R@   RA   (	   R   R   R7   R1   RB   R/   R   R   R   (   R	   RŒ   Rw   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   Zoom(  s    g      @t   neighborhoodc         C   sñ  |  j  j d ƒ |  j j | j ƒ  d ƒ } |  j j | j ƒ  d ƒ } | rí| rí|  j t ƒ | j ƒ  |  j  j d ƒ |  j  j d | j	 ƒ } |  j  j d | ƒ } xC |  j j
 ƒ  D]2 }	 |	 j	 | j	 k r¸ |  j  j d |	 j	 ƒ q¸ q¸ W|  j  j d ƒ }
 |
 r�|
 j d ƒ }
 i  } x |
 D] } d | | <q"Wd j g  | j ƒ  D] } d | ^ qIƒ } d	 | } |  j  j | ƒ } n  | rÝ|  j  j d
 ƒ t |  j  ƒ }	 |	 |  j | <|  j  j d |	 j	 ƒ |  j  j d ƒ n  |  j t ƒ n  d S(   s§   FIX: the surface display stuff here is all screwed up due to
    differences between the way PyMol and DSViewer handle surfaces.
    In PyMol they are essentially a display mode for the protein, so
    they don't need to be managed separately.
    In DSViewer, on the other hand, the surface is attached to the
    protein, but it needs to be hidden or shown on its own.  I haven't
    figured out how to do that yet.
    Rm   s7   SetProperty object RD_Visual=%d;object id="*":select=ons   SelectByRadius inside %f atoms8   SetProperty object RD_Visual=%d;object id="*":select=offs+   GetPropertyValue atom select=true: parent=?R   i   s   parent="%s"s   SetProperty atom %s: select=ont   Surfaces'   SetProperty surface id="*":RD_Visual=%dN(   R   R   R1   RB   R7   R/   Ry   R   R!   R   t   valuesRY   R   R8   R   R   (   R	   t	   aroundObjt   inObjt   distanceRM   t   showSurfaceRw   t   pRS   RR   t   rst   residuesR   R   t   parentsR   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   SelectProteinNeighborhood2  s8    
,
c         C   s   |  j  t ƒ d  S(   N(   Ry   R   (   R	   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   Redrawe  s    (   R(   R)   R
   R6   R<   R   RU   R   RW   Rl   Rr   Rn   Ry   R   R‡   R‹   R"   R�   RŽ   R�   R›   Rœ   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyR*   X   s(   
				(.						
2t   __main__(   t
   rdDistGeomt   rdForceFieldHelperst   c1cccc2c1cccc2(   t   __doc__t   rdkitR    t   win32com.clientR   RF   RJ   R   t   objectR   R*   R(   t
   rdkit.ChemRž   RŸ   t   MolFromSmilest   mt   EmbedMoleculet   UFFOptimizeMoleculet   sRU   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/DSViewer.pyt   <module>   s   Eÿ 	