ó
a#nSc           @   sZ   d  Z  d d l m Z d d l Z d d l Z d d l Z d a d e f d „  ƒ  YZ	 d S(   s(    uses pymol to interact with molecules

iÿÿÿÿ(   t   ChemNt	   MolViewerc           B   s  e  Z d# d  d d „ Z d „  Z d „  Z d „  Z e d „ Z d e	 g  d d	 e	 d
 „ Z
 d# d „ Z d d „ Z e d „ Z d d „ Z d d e d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z d d  d d d! „ Z d# d# d d" „ Z RS($   i£#  i    c         K   sƒ   | r t  d  k	 r t  |  _ nV | s= t j j d d ƒ } n  d  a  t j d | | f ƒ } | j ƒ  | a  | |  _ |  j	 ƒ  d  S(   Nt   PYMOL_RPCHOSTt	   localhosts   http://%s:%d(
   t   _servert   Nonet   servert   ost   environt   gett	   xmlrpclibt   Servert   pingt   InitializePyMol(   t   selft   hostt   portt   forcet   kwargst   serv(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   __init__   s    
	c         C   sd   |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ |  j  j d ƒ d S(   sL    does some initializations to set up PyMol according to our
    tastes

    s   set valence,1s   set stick_rad,0.15s   set mouse_selection_mode,0s   set line_width,2s   set selection_width,10s   set auto_zoom,0N(   R   t   do(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyR   "   s    c         C   s   |  j  j ƒ  d S(   s$    blows out everything in the viewer N(   R   t	   deleteAll(   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt	   DeleteAll/   s    c         C   sI   |  j  j d t ƒ } x- | D]% } | | k r |  j  j | ƒ q q Wd S(   sG    deletes everything except the items in the provided list of arguments t   *N(   R   t   getNamest   Falset   deleteObject(   R   t   excludest   allNamest   nm(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   DeleteAllExcept3   s    c         C   s,   | r |  j  ƒ  n  |  j j | | ƒ } | S(   sk    calls pymol's "load" command on the given filename; the loaded object
    is assigned the name "name"
    (   R   R   t   loadFile(   R   t   filenamet   namet   showOnlyt   id(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   LoadFile:   s    t   moleculet    iÿÿÿÿc         C   s¦  |  j  } | s" |  j  j d ƒ n  | r5 |  j ƒ  n  | j ƒ  d k  rz | se t j | d | ƒ} n  | j | | ƒ }	 n0 | s˜ t j | d | ƒ} n  | j | | ƒ }	 | r|| d }
 | j	 | ƒ } x° | D]¥ } d d d g } xw | D]o } | j
 | ƒ } | d c | d t | ƒ 7<| d c | d t | ƒ 7<| d c | d t | ƒ 7<qì W| j | d	 d |
 ƒ qÐ Wn  | r’| j d
 ƒ n |  j  j d ƒ |	 S(   s5    special case for displaying a molecule or mol block s   view rdinterface,storeiç  t   confIds	   -featuresg        i    i   i   gš™™™™™É?t   visibles   view rdinterface,recall(   i   i   i   (   R   R   R   t   GetNumAtomsR    t   MolToMolBlockt   loadMolBlockt   MolToPDBBlockt   loadPDBt   GetConformert   GetAtomPositiont   lent   spheret   zoom(   R   t   molR"   R#   t   highlightFeaturest   molBR(   R3   R   t   midR   t   conft   featt   ptt   idxt   loc(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   ShowMolC   s6    	
"c         C   sY   | s4 |  j  j d ƒ } | r+ | d } q4 d } n  | rO |  j  j | ƒ } n g  } | S(   s    returns the selected atoms t
   selectionsiÿÿÿÿN(   R   R   R   t   index(   R   t   whichSelectiont   selst   items(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   GetSelectedAtomsg   s    	t	   selectionc         C   se   d } | d j  g  | D] } d | d ^ q ƒ 7} | d 7} d | | | f } |  j j | ƒ d S(   s    selects a set of atoms s   (id t   ,s   %di   t   )s   select %s,%s and %sN(   t   joinR   R   (   R   t   itemIdt   atomIndicest   selNamet   idst   xt   cmd(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   SelectAtomsv   s
    .
c         C   s�   | rI d j  g  | D] } d | | f ^ q ƒ } |  j j d | ƒ n@ d j  g  | D] } d | ^ qV ƒ } |  j j d | | f ƒ d S(   s    highlights a set of atoms RE   s   %s and (id %d)s   edit %ss    or s   id %ds   select selection, %s and (%s)N(   RG   R   R   (   R   t   indicest   wheret   extraHighlightRL   t   idxText(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   HighlightAtoms~   s
    ,&c         C   s>   |  j  j d | f ƒ | r: |  j  j d | | f ƒ n  d S(   s2    change the display style of the specified object s   hide everything,%ss
   show %s,%sN(   R   R   (   R   t   objt   style(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   SetDisplayStyle‡   s    g      @t   neighborhoodc         C   sL   |  j  j d t ƒ  ƒ | rH |  j  j d | ƒ |  j  j d | ƒ n  d S(   so    selects the area of a protein around a specified object/selection name;
    optionally adds a surface to that sG   select %(name)s,byres (%(aroundObj)s around %(distance)f) and %(inObj)ss   show surface,%ss
   disable %sN(   R   R   t   locals(   R   t	   aroundObjt   inObjt   distanceR"   t   showSurface(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   SelectProteinNeighborhood�   s    g      à?c         C   s…   |  j  j d ƒ |  j  j | ƒ x: t | ƒ D], \ } } |  j  j | | | | | d ƒ q- W|  j  j d | ƒ |  j  j d ƒ d S(   s    adds a set of spheres s   view rdinterface,storei   s	   enable %ss   view rdinterface,recallN(   R   R   t   resetCGOt	   enumerateR2   (   R   t   locst   colorst   labelt	   sphereRadt   iR<   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   AddPharmacophore˜   s    $c         C   s-   | s |  j  j d ƒ n |  j  j d ƒ d  S(   Ns   set defer_update,1s   set defer_update,0(   R   R   (   R   t   val(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   SetDisplayUpdate¢   s    c         C   sM   i  } x@ | D]8 \ } } |  j  j d | | f ƒ } | | | | f <q W| S(   s/    returns the coordinates of the selected atoms s   (%s and id %d)(   R   t   getAtomCoords(   R   RA   t   resRb   R;   t   coords(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   GetAtomCoords¨   s
    c         C   s   |  j  j d ƒ d  S(   Ns   disable all(   R   R   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   HideAll°   s    c         C   s   |  j  j d | ƒ d  S(   Ns
   disable %s(   R   R   (   R   t   objName(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt
   HideObject²   s    c         C   s   |  j  j d | ƒ d  S(   Ns	   enable %s(   R   R   (   R   Rm   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   DisplayObject´   s    c         C   s   |  j  j d ƒ d  S(   Nt   refresh(   R   R   (   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   Redraw·   s    c         C   s   |  j  j | ƒ d  S(   N(   R   R3   (   R   Rm   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   Zoom¹   s    s   (%(molName)s)s   (%(proteinName)s and not het)c         C   sK   d } | d | d | d 7} | d 7} | t  ƒ  } |  j j | ƒ d S(   sI    toggles display of h bonds between the protein and a specified molecule s   delete %(objName)s;
s   dist %(objName)s,RE   s	   ,mode=2;
s   enable %(objName)s;N(   RX   R   R   (   R   Rm   t   molNamet   proteinNamet
   molSelTextt   proteinSelTextRM   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   DisplayHBonds¼   s
    
g      @t   redc   	      C   sK   d } | d | d | d 7} | d 7} | t  ƒ  } |  j j | ƒ d S(   sL    toggles display of collisions between the protein and a specified molecule s   delete %(objName)s;
s   dist %(objName)s,RE   s   ,%(distCutoff)f,mode=0;
s3   enable %(objName)s
    color %(color)s, %(objName)sN(   RX   R   R   (	   R   Rm   Rs   Rt   t
   distCutofft   colorRu   Rv   RM   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   DisplayCollisionsÇ   s    c         C   s  y d d  l  } Wn! t k
 r3 d d l m  } n Xd d  l } | d k r\ | j | ƒ n  t j d d d t ƒ } | j ƒ  |  j	 j
 d | j ƒ | j d ƒ xL t d	 ƒ D]> } y | j | j ƒ } PWq¯ t k
 rì | j d
 ƒ q¯ Xq¯ Wt j | j ƒ d  } | d  k	 s| d  k	 r| j }	 | d  k rA|	 d } n  | d  k rZ|	 d } n  | |	 d k  r¯t | ƒ |	 d }
 | |
 9} t | ƒ } | j | | f t ƒ } q| |	 d k  rt | ƒ |	 d }
 | |
 9} t | ƒ } | j | | f t ƒ } qn  | S(   Niÿÿÿÿ(   t   Imagei    t   suffixs   .pngt   deletes   png %sgš™™™™™É?i
   gš™™™™™¹?i   (   R|   t   ImportErrort   PILt   timet   sleept   tempfilet   NamedTemporaryFileR   t   closeR   R   R"   t   ranget   opent   IOErrorR   t   unlinkR   t   sizet   floatt   intt   resizet   True(   R   t   ht   wt   preDelayR|   R�   t   fdRd   t   imgt   szt   frac(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   GetPNGÓ   sH    
	

N(   t   __name__t
   __module__R   R   R   R   R   R   R%   RŽ   R=   RC   RN   RS   RV   R]   Re   Rg   Rk   Rl   Rn   Ro   Rq   Rr   Rw   R{   R–   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyR      s8   					#	

									(
   t   __doc__t   rdkitR    R
   R   Rƒ   R   R   t   objectR   (    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/Chem/PyMol.pyt   <module>   s   $