<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pymol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dseelig</id>
	<title>PyMOL Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pymol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dseelig"/>
	<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php/Special:Contributions/Dseelig"/>
	<updated>2026-04-04T22:19:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6354</id>
		<title>Autodock plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6354"/>
		<updated>2009-09-17T18:53:00Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
This plugin should help to set up docking runs with Autodock and view docking results. It has two features:&lt;br /&gt;
&lt;br /&gt;
1) Setup of a docking grid for Autodock with PyMOL.&lt;br /&gt;
&lt;br /&gt;
2) View the docking results.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1)Download [http://wwwuser.gwdg.de/~dseelig/adplugin.html plugin]&lt;br /&gt;
&lt;br /&gt;
2) PyMOL -&amp;gt; Plugin -&amp;gt; Install Plugin&lt;br /&gt;
&lt;br /&gt;
== Author ==&lt;br /&gt;
&lt;br /&gt;
[[User:Dseelig|Daniel Seeliger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:Dseelig&amp;diff=3255</id>
		<title>User:Dseelig</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:Dseelig&amp;diff=3255"/>
		<updated>2008-05-05T15:40:14Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dr. Daniel Seeliger&lt;br /&gt;
&lt;br /&gt;
Computational Biomolecular Dynamics Group&lt;br /&gt;
&lt;br /&gt;
Max-Planck-Institute for Biophysical Chemistry&lt;br /&gt;
&lt;br /&gt;
Goettingen, Germany&lt;br /&gt;
&lt;br /&gt;
[http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/index.html www]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=TCONCOORD&amp;diff=10542</id>
		<title>TCONCOORD</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=TCONCOORD&amp;diff=10542"/>
		<updated>2008-05-05T15:37:08Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: New page: == Description == tCONCOORD is a program that predicts conformational flexibility based on geometrical considerations. The focus is on proteins, however, most non-protein residues like lig...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
tCONCOORD is a program that predicts conformational flexibility based on geometrical considerations. The focus is on proteins, however, most non-protein residues like ligands or other organic compounds are treated correctly. You can use it for:&lt;br /&gt;
&lt;br /&gt;
1) Generating ensembles of protein structures&lt;br /&gt;
&lt;br /&gt;
2) Generating alternate conformations of protein parts (e. g. loops)&lt;br /&gt;
&lt;br /&gt;
3) Generating ensembles of organic compounds.&lt;br /&gt;
&lt;br /&gt;
The PyMOL plugin helps to setup tCONCOORD runs and provides visual support for the structure analysis in tCONCOORD.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1) You need a working gromacs installation (ftp://ftp.gromacs.org/pub/gromacs/gromacs-3.3.3.tar.gz)&lt;br /&gt;
&lt;br /&gt;
2) the tCONCOORD binaries (http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/tconcoord.html)&lt;br /&gt;
&lt;br /&gt;
3) and the plugin itself (http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/cncplugin.html)&lt;br /&gt;
&lt;br /&gt;
== Author ==&lt;br /&gt;
&lt;br /&gt;
[[User:Dseelig|Daniel Seeliger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6353</id>
		<title>Autodock plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6353"/>
		<updated>2006-08-10T13:52:24Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
This plugin should help to set up docking runs with Autodock and view docking results. It has two features:&lt;br /&gt;
&lt;br /&gt;
1) Setup of a docking grid for Autodock with PyMOL.&lt;br /&gt;
&lt;br /&gt;
2) View the docking results.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1)Download [http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/autodock.py plugin]&lt;br /&gt;
&lt;br /&gt;
2) PyMOL -&amp;gt; Plugin -&amp;gt; Install Plugin&lt;br /&gt;
&lt;br /&gt;
== Author ==&lt;br /&gt;
&lt;br /&gt;
[[User:Dseelig|Daniel Seeliger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User_talk:Dseelig&amp;diff=10785</id>
		<title>User talk:Dseelig</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User_talk:Dseelig&amp;diff=10785"/>
		<updated>2006-08-10T13:27:10Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: User talk:Dseelig moved to Autodock Plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Autodock Plugin]]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:Dseelig&amp;diff=3254</id>
		<title>User:Dseelig</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:Dseelig&amp;diff=3254"/>
		<updated>2006-08-10T13:25:48Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Daniel Seeliger, Ph. D. student&lt;br /&gt;
&lt;br /&gt;
Computational Biomolecular Dynamics Group&lt;br /&gt;
&lt;br /&gt;
Max-Planck-Institute for Biophysical Chemistry&lt;br /&gt;
&lt;br /&gt;
Goettingen, Germany&lt;br /&gt;
&lt;br /&gt;
[http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/index.html www]&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6352</id>
		<title>Autodock plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Autodock_plugin&amp;diff=6352"/>
		<updated>2006-08-10T13:19:23Z</updated>

		<summary type="html">&lt;p&gt;Dseelig: Autodock Plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
This plugin should help to set up docking runs with Autodock and view docking results. It has two features:&lt;br /&gt;
&lt;br /&gt;
1) Setup of a docking grid for Autodock with PyMOL.&lt;br /&gt;
&lt;br /&gt;
2) View the docking results.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
1)Download [http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/autodock.py plugin]&lt;br /&gt;
&lt;br /&gt;
2) PyMOL -&amp;gt; Plugin -&amp;gt; Install Plugin&lt;br /&gt;
&lt;br /&gt;
== Author ==&lt;br /&gt;
&lt;br /&gt;
[[User:Dseelig|Daniel Seeliger]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
from __future__ import division&lt;br /&gt;
from __future__ import generators&lt;br /&gt;
&lt;br /&gt;
import os,math,re&lt;br /&gt;
import Tkinter&lt;br /&gt;
from Tkinter import *&lt;br /&gt;
import tkMessageBox&lt;br /&gt;
import Pmw&lt;br /&gt;
from pymol import cmd,selector&lt;br /&gt;
import sys&lt;br /&gt;
from pymol.cmd import _feedback,fb_module,fb_mask,is_list,_cmd&lt;br /&gt;
from pymol.cgo import *&lt;br /&gt;
from pymol import stored&lt;br /&gt;
from Numeric import *&lt;br /&gt;
import tkColorChooser&lt;br /&gt;
from pymol.vfont import plain&lt;br /&gt;
&lt;br /&gt;
# Python backward-compatibility...&lt;br /&gt;
try:&lt;br /&gt;
    True&lt;br /&gt;
except:&lt;br /&gt;
    True = 1&lt;br /&gt;
try:&lt;br /&gt;
    False&lt;br /&gt;
except:&lt;br /&gt;
    False = 0&lt;br /&gt;
#&lt;br /&gt;
# Cheap hack for testing purposes&lt;br /&gt;
#&lt;br /&gt;
try:&lt;br /&gt;
    import pymol&lt;br /&gt;
    REAL_PYMOL = True&lt;br /&gt;
except ImportError:&lt;br /&gt;
    REAL_PYMOL = False&lt;br /&gt;
    class pymol:&lt;br /&gt;
        class cmd:&lt;br /&gt;
            def load(self,name,sel=''):&lt;br /&gt;
                pass&lt;br /&gt;
            def get_names(self):&lt;br /&gt;
                return ['mol1','mol2','map1','map2']&lt;br /&gt;
            def get_type(self,thing):&lt;br /&gt;
                if thing.startswith('mol'):&lt;br /&gt;
                    return 'object:molecule'&lt;br /&gt;
                else:&lt;br /&gt;
                    return 'object:map'&lt;br /&gt;
                f.close()&lt;br /&gt;
        cmd = cmd()&lt;br /&gt;
    pymol = pymol()&lt;br /&gt;
&lt;br /&gt;
def __init__(self):&lt;br /&gt;
        self.menuBar.addmenuitem('Plugin', 'command',&lt;br /&gt;
                                 'Launch Autodock',&lt;br /&gt;
                                 label='Autodock...',&lt;br /&gt;
                                 command = lambda s=self: Autodock(s))&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
# set the defaults&lt;br /&gt;
&lt;br /&gt;
defaults = {&lt;br /&gt;
    &amp;quot;spacing&amp;quot; : '0.375',&lt;br /&gt;
    &amp;quot;xpst&amp;quot;:'100',&lt;br /&gt;
    &amp;quot;ypst&amp;quot;:'100',&lt;br /&gt;
    &amp;quot;zpts&amp;quot;:'100',&lt;br /&gt;
    &amp;quot;sel&amp;quot;:'(all)',&lt;br /&gt;
    &amp;quot;X&amp;quot;:'0',&lt;br /&gt;
    &amp;quot;Y&amp;quot;:'0',&lt;br /&gt;
    &amp;quot;Z&amp;quot;:'0',&lt;br /&gt;
    &amp;quot;dx&amp;quot;:'1.0',&lt;br /&gt;
    &amp;quot;dy&amp;quot;:'1.0',&lt;br /&gt;
    &amp;quot;dz&amp;quot;:'1.0',&lt;br /&gt;
    &amp;quot;csize&amp;quot;:'0.2',&lt;br /&gt;
    &amp;quot;lwidth&amp;quot;:'1',&lt;br /&gt;
    &amp;quot;grid&amp;quot;:'1',&lt;br /&gt;
    &amp;quot;output&amp;quot;:'grid.gpf',&lt;br /&gt;
    &amp;quot;dlgfile&amp;quot;:'dock.dlg'&lt;br /&gt;
    }&lt;br /&gt;
	       &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class FileDialogButtonClassFactory:&lt;br /&gt;
    def get(fn,filter='*'):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;This returns a FileDialogButton class that will&lt;br /&gt;
        call the specified function with the resulting file.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        class FileDialogButton(Tkinter.Button):&lt;br /&gt;
            # This is just an ordinary button with special colors.&lt;br /&gt;
&lt;br /&gt;
            def __init__(self, master=None, cnf={}, **kw):&lt;br /&gt;
                '''when we get a file, we call fn(filename)'''&lt;br /&gt;
                self.fn = fn&lt;br /&gt;
                self.__toggle = 0&lt;br /&gt;
                apply(Tkinter.Button.__init__, (self, master, cnf), kw)&lt;br /&gt;
                self.configure(command=self.set)&lt;br /&gt;
            def set(self):&lt;br /&gt;
                fd = PmwFileDialog(self.master,filter=filter)&lt;br /&gt;
                fd.title('Please choose a file')&lt;br /&gt;
                n=fd.askfilename()&lt;br /&gt;
                if n is not None:&lt;br /&gt;
                    self.fn(n)&lt;br /&gt;
        return FileDialogButton&lt;br /&gt;
    get = staticmethod(get)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
class Autodock:&lt;br /&gt;
&lt;br /&gt;
    def __init__(self,app):&lt;br /&gt;
        parent = app.root&lt;br /&gt;
        self.parent = parent&lt;br /&gt;
        self.on_screen = IntVar()&lt;br /&gt;
        self.on_screen.set(0) # 0 box | 1 wire&lt;br /&gt;
        self.center = []&lt;br /&gt;
        self.have_box = 0&lt;br /&gt;
        self.colorRGB = [1,1,1]&lt;br /&gt;
        self.dialog = Pmw.Dialog(parent,&lt;br /&gt;
                                 buttons = ('Exit',),&lt;br /&gt;
                                 title = 'PyMOL Autodock Tools',&lt;br /&gt;
                                 command = self.buttonPressed)&lt;br /&gt;
        self.dialog.withdraw()&lt;br /&gt;
        Pmw.setbusycursorattributes(self.dialog.component('hull'))&lt;br /&gt;
&lt;br /&gt;
        # the title&lt;br /&gt;
&lt;br /&gt;
        w = Tkinter.Label(self.dialog.interior(),&lt;br /&gt;
                                text = 'PyMOL Autodock Tools\nDaniel Seeliger\n&amp;lt;http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/index.html&amp;gt;',&lt;br /&gt;
                                background = 'navy',&lt;br /&gt;
                                foreground = 'white',&lt;br /&gt;
                                #pady = 20,&lt;br /&gt;
                                )&lt;br /&gt;
        w.pack(expand = 1, fill = 'both', padx = 4, pady = 4)&lt;br /&gt;
&lt;br /&gt;
        # the basic notebook&lt;br /&gt;
&lt;br /&gt;
        self.notebook = Pmw.NoteBook(self.dialog.interior())&lt;br /&gt;
        self.notebook.pack(fill='both',expand=0,padx=3,pady=3)&lt;br /&gt;
        &lt;br /&gt;
        # the grid page&lt;br /&gt;
        &lt;br /&gt;
        page = self.notebook.add('Grid')&lt;br /&gt;
&lt;br /&gt;
        # grid definiton page&lt;br /&gt;
        group = Pmw.Group(page,tag_text='Grid Definition')&lt;br /&gt;
        group.pack(fill = 'both', expand = 0, padx = 10, pady = 5)&lt;br /&gt;
        self.dialog.bind('&amp;lt;Return&amp;gt;',self.buttonPressed)&lt;br /&gt;
&lt;br /&gt;
        # we put the parametes on the left side&lt;br /&gt;
        &lt;br /&gt;
        lgroup = Pmw.Group(group.interior(),tag_text = &amp;quot;Parameters&amp;quot;)&lt;br /&gt;
        lgroup.pack(side='left',fill = 'both', expand = 0, padx = 10, pady = 3)&lt;br /&gt;
&lt;br /&gt;
        # ... and the display stuff on the right side&lt;br /&gt;
        &lt;br /&gt;
        rgroup = Pmw.Group(group.interior(),tag_text = &amp;quot;Display Options&amp;quot;)&lt;br /&gt;
        rgroup.pack(side='right',fill = 'both', expand = 0, padx = 10, pady = 3)&lt;br /&gt;
&lt;br /&gt;
        # the left side ...&lt;br /&gt;
&lt;br /&gt;
        self.space=DoubleVar()&lt;br /&gt;
        self.space.set(defaults['spacing'])&lt;br /&gt;
        self.spacefr = Tkinter.Frame(lgroup.interior())&lt;br /&gt;
        labSP = Label(self.spacefr,text=&amp;quot;Grid:&amp;quot;);&lt;br /&gt;
        self.splocation = Entry(self.spacefr,textvariable=self.space,bg='black',fg='green');&lt;br /&gt;
        self.scrSP=Scrollbar(self.spacefr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueSpacing)&lt;br /&gt;
        labSP.pack(side=LEFT)&lt;br /&gt;
        self.splocation.pack(side=LEFT)&lt;br /&gt;
        self.scrSP.pack(side=LEFT)&lt;br /&gt;
        self.spacefr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        self.xpts=IntVar()&lt;br /&gt;
        self.xpts.set(100)&lt;br /&gt;
        self.xptsfr = Tkinter.Frame(lgroup.interior())&lt;br /&gt;
        labXP = Label(self.xptsfr,text=&amp;quot;xpts:&amp;quot;);&lt;br /&gt;
        self.xptslocation = Entry(self.xptsfr,textvariable=self.xpts,bg='black',fg='green');&lt;br /&gt;
        self.xptsSP=Scrollbar(self.xptsfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueXpts)&lt;br /&gt;
        labXP.pack(side=LEFT)&lt;br /&gt;
        self.xptslocation.pack(side=LEFT)&lt;br /&gt;
        self.xptsSP.pack(side=LEFT)&lt;br /&gt;
        self.xptsfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        self.ypts=IntVar()&lt;br /&gt;
        self.ypts.set(100)&lt;br /&gt;
        self.yptsfr = Tkinter.Frame(lgroup.interior())&lt;br /&gt;
        labYP = Label(self.yptsfr,text=&amp;quot;ypts:&amp;quot;);&lt;br /&gt;
        self.yptslocation = Entry(self.yptsfr,textvariable=self.ypts,bg='black',fg='green');&lt;br /&gt;
        self.yptsSP=Scrollbar(self.yptsfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueYpts)&lt;br /&gt;
        labYP.pack(side=LEFT)&lt;br /&gt;
        self.yptslocation.pack(side=LEFT)&lt;br /&gt;
        self.yptsSP.pack(side=LEFT)&lt;br /&gt;
        self.yptsfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        self.zpts=IntVar()&lt;br /&gt;
        self.zpts.set(100)&lt;br /&gt;
        self.zptsfr = Tkinter.Frame(lgroup.interior())&lt;br /&gt;
        labZP = Label(self.zptsfr,text=&amp;quot;zpts:&amp;quot;);&lt;br /&gt;
        self.zptslocation = Entry(self.zptsfr,textvariable=self.zpts,bg='black',fg='green');&lt;br /&gt;
        self.zptsSP=Scrollbar(self.zptsfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueZpts)&lt;br /&gt;
        labZP.pack(side=LEFT)&lt;br /&gt;
        self.zptslocation.pack(side=LEFT)&lt;br /&gt;
        self.zptsSP.pack(side=LEFT)&lt;br /&gt;
        self.zptsfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        # put a dummy frame&lt;br /&gt;
        dumframe = Tkinter.Frame(page)&lt;br /&gt;
        dumframe.pack(fill='x',padx=4,pady=2)&lt;br /&gt;
        &lt;br /&gt;
        dum1 = Tkinter.Label(dumframe,&lt;br /&gt;
                               justify=LEFT,&lt;br /&gt;
                               text = &amp;quot;&amp;quot;,&lt;br /&gt;
                               )&lt;br /&gt;
        dum1.pack(side='left')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        # the center definition&lt;br /&gt;
        &lt;br /&gt;
        radiogroups = []&lt;br /&gt;
        self.selmode = Tkinter.IntVar()&lt;br /&gt;
        self.selmode.set(0)&lt;br /&gt;
        radioframe = Tkinter.Frame(page)&lt;br /&gt;
        &lt;br /&gt;
        w = Pmw.Group(radioframe,&lt;br /&gt;
                      tag_pyclass = Tkinter.Radiobutton,&lt;br /&gt;
                      tag_text='Use average coordinates \nof a given selection',&lt;br /&gt;
                      tag_value = 0,&lt;br /&gt;
                      tag_variable = self.selmode)&lt;br /&gt;
        w.pack(fill = 'x', expand = 1, side='top')&lt;br /&gt;
        cw = Tkinter.Frame(w.interior())&lt;br /&gt;
        cw.pack(padx = 2, pady = 2, expand='yes', fill='both')&lt;br /&gt;
        radiogroups.append(w)&lt;br /&gt;
        self.selectionlist = Pmw.EntryField(w.interior(),&lt;br /&gt;
                                            labelpos='w',&lt;br /&gt;
                                            label_text='Selection: ',&lt;br /&gt;
                                            value=defaults['sel'],&lt;br /&gt;
                                            command = self.changed,&lt;br /&gt;
                                            )&lt;br /&gt;
        self.selectionlist.pack(fill='x',padx=4,pady=1,expand=0) # vertical&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        w = Pmw.Group(radioframe,&lt;br /&gt;
                      tag_pyclass = Tkinter.Radiobutton,&lt;br /&gt;
                      tag_text='Use coordinates',&lt;br /&gt;
                      tag_value = 1,&lt;br /&gt;
                      tag_variable = self.selmode)&lt;br /&gt;
        w.pack(fill = 'x', expand = 1, side='top')&lt;br /&gt;
        cw = Tkinter.Frame(w.interior())&lt;br /&gt;
        cw.pack(padx = 2, pady = 2, expand='yes', fill='both')&lt;br /&gt;
        radiogroups.append(w)&lt;br /&gt;
&lt;br /&gt;
        radioframe.pack(padx = 6, pady = 6, expand='yes', fill='both')&lt;br /&gt;
        Pmw.aligngrouptags(radiogroups)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        self.x=DoubleVar()&lt;br /&gt;
        self.x.set(float(defaults[&amp;quot;X&amp;quot;]))&lt;br /&gt;
        self.y=DoubleVar()&lt;br /&gt;
        self.y.set(float(defaults[&amp;quot;Y&amp;quot;]))&lt;br /&gt;
        self.z=DoubleVar()&lt;br /&gt;
        self.z.set(float(defaults[&amp;quot;Z&amp;quot;]))&lt;br /&gt;
        &lt;br /&gt;
        self.xfr = Tkinter.Frame(w.interior())&lt;br /&gt;
        labX = Label(self.xfr,text=&amp;quot;X:&amp;quot;);&lt;br /&gt;
        self.xloc = Entry(self.xfr,textvariable=self.x,bg='black',fg='green');&lt;br /&gt;
        self.scrX=Scrollbar(self.xfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueX)&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        self.yfr = Tkinter.Frame(w.interior())&lt;br /&gt;
        labY = Label(self.yfr,text=&amp;quot;Y:&amp;quot;);&lt;br /&gt;
        self.yloc = Entry(self.yfr,textvariable=self.y,bg='black',fg='green');&lt;br /&gt;
        self.scrY=Scrollbar(self.yfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueY)&lt;br /&gt;
        &lt;br /&gt;
        self.zfr = Tkinter.Frame(w.interior())&lt;br /&gt;
        labZ = Label(self.zfr,text=&amp;quot;Z:&amp;quot;);&lt;br /&gt;
        self.zloc = Entry(self.zfr,textvariable=self.z,bg='black',fg='green');&lt;br /&gt;
        self.scrZ=Scrollbar(self.zfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueZ)&lt;br /&gt;
        &lt;br /&gt;
        labX.pack(side=LEFT)&lt;br /&gt;
        self.xloc.pack(side=LEFT)&lt;br /&gt;
        self.scrX.pack(side=LEFT)&lt;br /&gt;
        self.xfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
        labY.pack(side=LEFT)&lt;br /&gt;
        self.yloc.pack(side=LEFT)&lt;br /&gt;
        self.scrY.pack(side=LEFT)&lt;br /&gt;
        self.yfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
        labZ.pack(side=LEFT)&lt;br /&gt;
        self.zloc.pack(side=LEFT)&lt;br /&gt;
        self.scrZ.pack(side=LEFT)&lt;br /&gt;
        self.zfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        self.butt1 = Pmw.ButtonBox(radioframe, padx=0)&lt;br /&gt;
        self.butt1.pack(side=TOP)&lt;br /&gt;
        self.butt1.add('Show Box',command = self.calc_box)&lt;br /&gt;
        self.butt1.add('Hide Box',command = self.hideBox)&lt;br /&gt;
        self.butt1.add('Write gpf',command = self.write_gpf)&lt;br /&gt;
        self.butt1.add('Write Box',command = self.write_box)&lt;br /&gt;
        self.butt1.add('Change Color',command=self.tk_color_dialog)&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
        # the display options&lt;br /&gt;
        &lt;br /&gt;
        radiogroups = []&lt;br /&gt;
        radioframe = Tkinter.Frame(rgroup.interior())&lt;br /&gt;
&lt;br /&gt;
        w = Pmw.Group(radioframe,&lt;br /&gt;
                      tag_pyclass = Tkinter.Radiobutton,&lt;br /&gt;
                      tag_text='Cylindric Box',&lt;br /&gt;
                      tag_value = 0,&lt;br /&gt;
                      tag_variable = self.on_screen)&lt;br /&gt;
        w.pack(fill = 'x', expand = 1, side='top')&lt;br /&gt;
        cw = Tkinter.Frame(w.interior())&lt;br /&gt;
        cw.pack(padx = 2, pady = 2, expand='yes', fill='both')&lt;br /&gt;
        radiogroups.append(w)&lt;br /&gt;
        &lt;br /&gt;
        self.csize=DoubleVar()&lt;br /&gt;
        self.csize.set(float(defaults[&amp;quot;csize&amp;quot;]))&lt;br /&gt;
&lt;br /&gt;
        self.csizefr = Tkinter.Frame(w.interior())&lt;br /&gt;
        labcsize = Label(self.csizefr,text=&amp;quot;size:&amp;quot;);&lt;br /&gt;
        self.csizeloc = Entry(self.csizefr,textvariable=self.csize,bg='black',fg='green',width=15);&lt;br /&gt;
        self.scrcsize=Scrollbar(self.csizefr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueCsize)&lt;br /&gt;
&lt;br /&gt;
        labcsize.pack(side=LEFT)&lt;br /&gt;
        self.csizeloc.pack(side=LEFT)&lt;br /&gt;
        self.scrcsize.pack(side=LEFT)&lt;br /&gt;
        self.csizefr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        w = Pmw.Group(radioframe,&lt;br /&gt;
                      tag_pyclass = Tkinter.Radiobutton,&lt;br /&gt;
                      tag_text='Wired Box',&lt;br /&gt;
                      tag_value = 1,&lt;br /&gt;
                      tag_variable = self.on_screen)&lt;br /&gt;
        w.pack(fill = 'x', expand = 1, side='top')&lt;br /&gt;
        cw = Tkinter.Frame(w.interior())&lt;br /&gt;
        cw.pack(padx = 2, pady = 2, expand='yes', fill='both')&lt;br /&gt;
        radiogroups.append(w)&lt;br /&gt;
        &lt;br /&gt;
        self.lwidth=DoubleVar()&lt;br /&gt;
        self.lwidth.set(float(defaults[&amp;quot;lwidth&amp;quot;]))&lt;br /&gt;
&lt;br /&gt;
        self.lwidthfr = Tkinter.Frame(w.interior())&lt;br /&gt;
        lablwidth = Label(self.lwidthfr,text=&amp;quot;line:&amp;quot;);&lt;br /&gt;
        self.lwidthloc = Entry(self.lwidthfr,textvariable=self.lwidth,bg='black',fg='green',width=15);&lt;br /&gt;
        self.scrlwidth=Scrollbar(self.lwidthfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueLwidth)&lt;br /&gt;
&lt;br /&gt;
        lablwidth.pack(side=LEFT)&lt;br /&gt;
        self.lwidthloc.pack(side=LEFT)&lt;br /&gt;
        self.scrlwidth.pack(side=LEFT)&lt;br /&gt;
        self.lwidthfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        self.grid=DoubleVar()&lt;br /&gt;
        self.grid.set(float(defaults[&amp;quot;grid&amp;quot;]))&lt;br /&gt;
&lt;br /&gt;
        self.gridfr = Tkinter.Frame(w.interior())&lt;br /&gt;
        labgrid = Label(self.gridfr,text=&amp;quot;grid:&amp;quot;);&lt;br /&gt;
        self.gridloc = Entry(self.gridfr,textvariable=self.grid,bg='black',fg='green',width=15);&lt;br /&gt;
        self.scrgrid=Scrollbar(self.gridfr,orient=&amp;quot;horizontal&amp;quot;,command=self.changeValueGrid)&lt;br /&gt;
&lt;br /&gt;
        labgrid.pack(side=LEFT)&lt;br /&gt;
        self.gridloc.pack(side=LEFT)&lt;br /&gt;
        self.scrgrid.pack(side=LEFT)&lt;br /&gt;
        self.gridfr.pack(fill='x',padx=4,pady=1) # vertical&lt;br /&gt;
&lt;br /&gt;
        radioframe.pack(padx = 6, pady = 6, expand='yes', fill='both')&lt;br /&gt;
        Pmw.aligngrouptags(radiogroups)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        # the output file stuff&lt;br /&gt;
&lt;br /&gt;
        self.outfile = StringVar()&lt;br /&gt;
        self.outfile.set(defaults['output'])&lt;br /&gt;
        self.outlocation = Pmw.EntryField(page,&lt;br /&gt;
                                          labelpos='w',&lt;br /&gt;
                                          label_pyclass = FileDialogButtonClassFactory.get(self.set_outfilename,filter=(&amp;quot;*.gpf&amp;quot;)),&lt;br /&gt;
                                          validate = {'validator':self.quickFileValidation,},&lt;br /&gt;
                                          value = defaults['output'],&lt;br /&gt;
                                          label_text = 'Browse:')&lt;br /&gt;
&lt;br /&gt;
        self.outlocation.pack(fill = 'both', expand = 1, padx = 10, pady = 5)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        # Docking Results Card&lt;br /&gt;
        &lt;br /&gt;
        page = self.notebook.add('View Docked')&lt;br /&gt;
&lt;br /&gt;
        # the input file&lt;br /&gt;
        &lt;br /&gt;
        group = Pmw.Group(page,tag_text='File')&lt;br /&gt;
        group.pack(fill = 'both', expand = 0, padx = 10, pady = 5)&lt;br /&gt;
&lt;br /&gt;
        # the structure card&lt;br /&gt;
        &lt;br /&gt;
        rgroup = Pmw.Group(page,tag_text='Structures')&lt;br /&gt;
        rgroup.pack(fill = 'both', expand = 1, padx = 10, pady = 5)&lt;br /&gt;
        self.rgroup = Pmw.NoteBook(rgroup.interior())&lt;br /&gt;
        self.rgroup.pack(fill='both',expand=1,padx=3,pady=3)&lt;br /&gt;
        self.pages = {}&lt;br /&gt;
        self.struct_dic = {}        &lt;br /&gt;
        self.dlgfile = StringVar()&lt;br /&gt;
        self.dlgfile.set(defaults['dlgfile'])&lt;br /&gt;
        self.dlglocation = Pmw.EntryField(group.interior(),&lt;br /&gt;
                                          labelpos='w',&lt;br /&gt;
                                          label_pyclass = FileDialogButtonClassFactory.get(self.set_dlgfilename,filter=&amp;quot;*.dlg&amp;quot;),&lt;br /&gt;
                                          validate = {'validator':self.quickFileValidation,},&lt;br /&gt;
                                          value = defaults['dlgfile'],&lt;br /&gt;
                                          label_text = 'Browse:')&lt;br /&gt;
&lt;br /&gt;
        self.dlglocation.pack(fill = 'both', expand = 1, padx = 10, pady = 5)&lt;br /&gt;
&lt;br /&gt;
        self.load_buttonbox = Pmw.ButtonBox(group.interior(), padx=0)&lt;br /&gt;
        self.load_buttonbox.pack(side=LEFT,expand = 1, padx = 10, pady = 5)&lt;br /&gt;
        self.load_buttonbox.add('Load',command=self.load_dlg)&lt;br /&gt;
&lt;br /&gt;
        self.mlist = []&lt;br /&gt;
        self.namelist = []&lt;br /&gt;
&lt;br /&gt;
        self.radiobuttons = Pmw.RadioSelect(rgroup.interior(),&lt;br /&gt;
                                            buttontype = 'radiobutton',&lt;br /&gt;
                                            orient = 'horizontal',&lt;br /&gt;
                                            labelpos = 'w',&lt;br /&gt;
                                            )&lt;br /&gt;
        for text in ('Show Selected',&lt;br /&gt;
                     'Delete Selected'):&lt;br /&gt;
            self.radiobuttons.add(text)&lt;br /&gt;
            self.radiobuttons.setvalue('Show Selected')&lt;br /&gt;
        self.radiobuttons.pack(padx=4,pady=1,side='top')&lt;br /&gt;
&lt;br /&gt;
        self.status_line = Label(rgroup.interior(), #relief='groove',&lt;br /&gt;
                                 relief='sunken',&lt;br /&gt;
                                 font='helvetica 12', anchor='w',fg='yellow',bg='black')&lt;br /&gt;
&lt;br /&gt;
        self.status_line.pack(side='left', fill='x', expand=True)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
        # the about card&lt;br /&gt;
        &lt;br /&gt;
        page = self.notebook.add('About')&lt;br /&gt;
        group = Pmw.Group(page, tag_text='About PyMOL Autodock Tools')&lt;br /&gt;
        group.pack(fill = 'both', expand = 1, padx = 10, pady = 5)&lt;br /&gt;
	text = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  This plugin should help to set up docking runs and view docking results.&lt;br /&gt;
&lt;br /&gt;
  To set up a docking grid,&lt;br /&gt;
&lt;br /&gt;
  1) Load a protein structure.&lt;br /&gt;
  2) Select the center of the box either by giving a selection or&lt;br /&gt;
     the coordinates directly.&lt;br /&gt;
  3) Adjust the box as needed and save the *.gpf file.&lt;br /&gt;
&lt;br /&gt;
  To view docking results,&lt;br /&gt;
  &lt;br /&gt;
  1) Load the protein structure.&lt;br /&gt;
  2) Load the *.dlg file (or multiple *dlg files).&lt;br /&gt;
  &lt;br /&gt;
  For any bug, please send a mail with description to the author.&lt;br /&gt;
&lt;br /&gt;
  Many thanks to&lt;br /&gt;
  - Warren DeLano for everything involving PyMOL&lt;br /&gt;
  - The PyMOL plugin writers for providing templates&lt;br /&gt;
  &lt;br /&gt;
  Created by Daniel Seeliger (dseelig@gwdg.de)&lt;br /&gt;
  &amp;lt;http://www.mpibpc.mpg.de/groups/grubmueller/start/people/dseelig/index.html&amp;gt; &lt;br /&gt;
  Computational Biomolecular Dynamics Group&lt;br /&gt;
  &amp;lt;http://www.mpibpc.gwdg.de/abteilungen/073/&amp;gt;&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	lfre=Frame(group.interior())&lt;br /&gt;
	bar=Scrollbar(lfre,)&lt;br /&gt;
	ll=Text(lfre,yscrollcommand=bar.set,background=&amp;quot;#ddddff&amp;quot;,font=&amp;quot;Times 14&amp;quot;)&lt;br /&gt;
	bar.config(command=ll.yview)&lt;br /&gt;
&lt;br /&gt;
	ll.insert(END,text)&lt;br /&gt;
	ll.pack(side=LEFT,expand=&amp;quot;yes&amp;quot;,fill=&amp;quot;both&amp;quot;)&lt;br /&gt;
	bar.pack(side=LEFT,expand=&amp;quot;yes&amp;quot;,fill=&amp;quot;y&amp;quot;)&lt;br /&gt;
	lfre.pack(expand=&amp;quot;yes&amp;quot;,fill=&amp;quot;both&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        self.notebook.setnaturalsize()&lt;br /&gt;
&lt;br /&gt;
        self.showAppModal()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    # functions&lt;br /&gt;
&lt;br /&gt;
    def tk_color_dialog(self):&lt;br /&gt;
        color = tkColorChooser.Chooser(&lt;br /&gt;
            initialcolor='white',title='Choose box color').show()&lt;br /&gt;
        if color[0] is not None:&lt;br /&gt;
            self.colorRGB = [color[0][0]/100.,&lt;br /&gt;
                             color[0][1]/100.,&lt;br /&gt;
                             color[0][2]/100.]&lt;br /&gt;
                            &lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    def status_combobox(self, value):&lt;br /&gt;
        name = value.split('_')[0]&lt;br /&gt;
        if self.radiobuttons.getvalue()=='Show Selected':&lt;br /&gt;
            view = cmd.get_view()&lt;br /&gt;
            cmd.read_pdbstr(self.struct_dic[str(value)].as_string,str(value))&lt;br /&gt;
            cmd.set_view(view)&lt;br /&gt;
            text = 'Docked Energy: %8.2f kcal/mol' % self.struct_dic[str(value)].energy&lt;br /&gt;
            self.status_line.configure(text=text)&lt;br /&gt;
            usr = self.struct_dic[str(value)].info_as_string.split('\n')&lt;br /&gt;
            u = ''&lt;br /&gt;
            for l in usr:&lt;br /&gt;
                u+=l[8:]+'\n'&lt;br /&gt;
            atoms = self.struct_dic[str(value)].as_string.split('\n')&lt;br /&gt;
            at = ''&lt;br /&gt;
            for a in atoms:&lt;br /&gt;
                at+=a[8:]+'\n'&lt;br /&gt;
                &lt;br /&gt;
            self.pages[name]['text'].clear()&lt;br /&gt;
            self.pages[name]['text'].insert('end',u)&lt;br /&gt;
            self.pages[name]['text'].insert('end',at)&lt;br /&gt;
        else:&lt;br /&gt;
            cmd.delete(str(value))&lt;br /&gt;
            self.pages[name]['text'].clear()&lt;br /&gt;
            self.status_line.configure(text='')&lt;br /&gt;
            &lt;br /&gt;
    def set_outfilename(self,filename):&lt;br /&gt;
        self.outlocation.setvalue(filename)&lt;br /&gt;
&lt;br /&gt;
    def set_dlgfilename(self,filename):&lt;br /&gt;
        self.dlglocation.setvalue(filename)&lt;br /&gt;
&lt;br /&gt;
    def buttonPressed(self,result):&lt;br /&gt;
        if hasattr(result,'keycode'):&lt;br /&gt;
            if result.keycode == 36:&lt;br /&gt;
                if self.notebook.getcurselection()=='Grid':&lt;br /&gt;
                    self.calc_box()&lt;br /&gt;
                elif self.notebook.getcurselection()=='View Docked':&lt;br /&gt;
                    self.load_dlg()&lt;br /&gt;
        if result == 'Show Box':&lt;br /&gt;
            self.calc_box()&lt;br /&gt;
        elif result == 'Write gpf':&lt;br /&gt;
            self.write_gpf()&lt;br /&gt;
        elif result == 'Exit' or result == None:&lt;br /&gt;
            self.dialog.withdraw()&lt;br /&gt;
&lt;br /&gt;
    def write_gpf(self):&lt;br /&gt;
        fname = self.outlocation.getvalue()&lt;br /&gt;
        if os.path.isfile(fname):&lt;br /&gt;
            print &amp;quot;backing up %s to ~%s&amp;quot; % (fname,fname)&lt;br /&gt;
            os.rename(fname,'~'+fname)&lt;br /&gt;
        print 'writing file %s' % fname&lt;br /&gt;
        fp = self.fileopen(fname,'w')&lt;br /&gt;
        if fp:&lt;br /&gt;
            print &amp;gt;&amp;gt;fp,&amp;quot;receptor protein.pdbqs          #macromolecule&amp;quot;&lt;br /&gt;
            print &amp;gt;&amp;gt;fp,&amp;quot;gridfld  protein.maps.fld       #grid_data_file&amp;quot;&lt;br /&gt;
            print &amp;gt;&amp;gt;fp,&amp;quot;npts  %5d %5d %5d         #num.grid points in xyz&amp;quot; % \&lt;br /&gt;
                  (self.xpts.get(),self.ypts.get(),self.zpts.get())&lt;br /&gt;
            print &amp;gt;&amp;gt;fp,&amp;quot;spacing %7.3f                 #spacing (Angstroms)&amp;quot; % self.space.get()&lt;br /&gt;
            print &amp;gt;&amp;gt;fp,&amp;quot;gridcenter %6.3f %6.3f %6.3f #xyz-coordinates or \&amp;quot;auto\&amp;quot; &amp;quot;%\&lt;br /&gt;
                  (self.center[0],self.center[1],self.center[2])&lt;br /&gt;
            self.print_stuff(fp)&lt;br /&gt;
            fp.close()&lt;br /&gt;
        &lt;br /&gt;
    def write_box(self):&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        fname = self.outlocation.getvalue()&lt;br /&gt;
        if os.path.isfile(fname):&lt;br /&gt;
            print &amp;quot;backing up %s to ~%s&amp;quot; % (fname,fname)&lt;br /&gt;
            os.rename(fname,'~'+fname)&lt;br /&gt;
        print 'writing file %s' % fname&lt;br /&gt;
        fp = self.fileopen(fname,'w')&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'xmin = %8.3f' % self.dbox[0][0]&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'xmax = %8.3f' % self.dbox[0][1]&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'ymin = %8.3f' % self.dbox[1][0]&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'ymax = %8.3f' % self.dbox[1][1]&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'zmin = %8.3f' % self.dbox[2][0]&lt;br /&gt;
        print &amp;gt;&amp;gt;fp, 'zmax = %8.3f' % self.dbox[2][1]&lt;br /&gt;
        fp.close()&lt;br /&gt;
    &lt;br /&gt;
    def print_stuff(self,fp):&lt;br /&gt;
        &lt;br /&gt;
        print &amp;gt;&amp;gt;fp, &amp;quot;&amp;quot;&amp;quot;types CANOSH                    #atom type names&lt;br /&gt;
smooth 0.500                    #store minimum energy within radius (Ang)&lt;br /&gt;
map protein.C.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  4.00 0.0222750 12  6 #C-C lj&lt;br /&gt;
nbp_r_eps  3.75 0.0230026 12  6 #C-N lj&lt;br /&gt;
nbp_r_eps  3.60 0.0257202 12  6 #C-O lj&lt;br /&gt;
nbp_r_eps  4.00 0.0257202 12  6 #C-S lj&lt;br /&gt;
nbp_r_eps  3.00 0.0081378 12  6 #C-H lj&lt;br /&gt;
nbp_r_eps  4.10 0.0257202 12  6 #C-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  3.70 0.0181874 12  6 #C-M lj (Met: Mg)&lt;br /&gt;
sol_par 12.77 0.6844            #C atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.000                  #C grid map constant energy&lt;br /&gt;
map protein.A.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  4.00 0.0222750 12  6 #A-C lj&lt;br /&gt;
nbp_r_eps  3.75 0.0230026 12  6 #A-N lj&lt;br /&gt;
nbp_r_eps  3.60 0.0257202 12  6 #A-O lj&lt;br /&gt;
nbp_r_eps  4.00 0.0257202 12  6 #A-S lj&lt;br /&gt;
nbp_r_eps  3.00 0.0081378 12  6 #A-H lj&lt;br /&gt;
nbp_r_eps  4.10 0.0257202 12  6 #A-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  3.70 0.0181874 12  6 #A-M lj (Met: Mg)&lt;br /&gt;
sol_par 10.80 0.1027            #A atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.000                  #A grid map constant energy&lt;br /&gt;
map protein.N.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  3.75 0.0230026 12  6 #N-C lj&lt;br /&gt;
nbp_r_eps  3.50 0.0237600 12  6 #N-N lj&lt;br /&gt;
nbp_r_eps  3.35 0.0265667 12  6 #N-O lj&lt;br /&gt;
nbp_r_eps  3.75 0.0265667 12  6 #N-S lj&lt;br /&gt;
nbp_r_eps  2.75 0.0084051 12  6 #N-H lj&lt;br /&gt;
nbp_r_eps  3.85 0.0265667 12  6 #N-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  3.45 0.0187839 12  6 #N-M lj (Met: Mg)&lt;br /&gt;
sol_par  0.00 0.0000            #N atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.000                  #N grid map constant energy&lt;br /&gt;
map protein.O.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  3.60 0.0257202 12  6 #O-C lj&lt;br /&gt;
nbp_r_eps  3.35 0.0265667 12  6 #O-N lj&lt;br /&gt;
nbp_r_eps  3.20 0.0297000 12  6 #O-O lj&lt;br /&gt;
nbp_r_eps  3.60 0.0297000 12  6 #O-S lj&lt;br /&gt;
nbp_r_eps  1.90 0.3280000 12 10 #O-H hb&lt;br /&gt;
nbp_r_eps  3.70 0.0297000 12  6 #O-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  3.30 0.0210010 12  6 #O-M lj (Met: Mg)&lt;br /&gt;
sol_par  0.00 0.0000            #O atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.236                  #O grid map constant energy&lt;br /&gt;
map protein.S.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  4.00 0.0257202 12  6 #S-C lj&lt;br /&gt;
nbp_r_eps  3.75 0.0265667 12  6 #S-N lj&lt;br /&gt;
nbp_r_eps  3.60 0.0297000 12  6 #S-O lj&lt;br /&gt;
nbp_r_eps  4.00 0.0297000 12  6 #S-S lj&lt;br /&gt;
nbp_r_eps  2.50 0.0656000 12 10 #S-H hb&lt;br /&gt;
nbp_r_eps  4.10 0.0297000 12  6 #S-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  3.70 0.0210010 12  6 #S-M lj (Met: Mg)&lt;br /&gt;
sol_par  0.00 0.0000            #S atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.000                  #S grid map constant energy&lt;br /&gt;
map protein.H.map               #filename of grid map&lt;br /&gt;
nbp_r_eps  3.00 0.0081378 12  6 #H-C lj&lt;br /&gt;
nbp_r_eps  2.75 0.0084051 12  6 #H-N lj&lt;br /&gt;
nbp_r_eps  1.90 0.3280000 12 10 #H-O hb&lt;br /&gt;
nbp_r_eps  2.50 0.0656000 12 10 #H-S hb&lt;br /&gt;
nbp_r_eps  2.00 0.0029700 12  6 #H-H lj&lt;br /&gt;
nbp_r_eps  3.10 0.0093920 12  6 #H-X lj (X: Phosphorus in protein-cofactor)&lt;br /&gt;
nbp_r_eps  2.70 0.0066411 12  6 #H-M lj (Met: Mg)&lt;br /&gt;
sol_par  0.00 0.0000            #H atomic fragmental volume, solv. param.&lt;br /&gt;
constant 0.118                  #H grid map constant energy&lt;br /&gt;
elecmap protein.e.map           #electrostatic potential map&lt;br /&gt;
dielectric -0.1146              #&amp;lt;0,distance-dep.diel; &amp;gt;0,constant&lt;br /&gt;
#fmap ... .f.map                #floating grid&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
    def quickFileValidation(self,s):&lt;br /&gt;
        if s == '': return Pmw.PARTIAL&lt;br /&gt;
        elif os.path.isfile(s): return Pmw.OK&lt;br /&gt;
        elif os.path.exists(s): return Pmw.PARTIAL&lt;br /&gt;
        else: return Pmw.PARTIAL&lt;br /&gt;
&lt;br /&gt;
    def changed(self):&lt;br /&gt;
        self.selmode.set(0)&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.selectionlist.clear()&lt;br /&gt;
        &lt;br /&gt;
    def calc_center(self):&lt;br /&gt;
        self.center = []&lt;br /&gt;
        if self.selmode.get() == 0:&lt;br /&gt;
            sel = self.selectionlist.getvalue()&lt;br /&gt;
            if sel:&lt;br /&gt;
                stored.xyz  = []&lt;br /&gt;
                cmd.iterate_state(1,sel,&amp;quot;stored.xyz.append([x,y,z])&amp;quot;)&lt;br /&gt;
                self.center = average(stored.xyz)&lt;br /&gt;
            else:&lt;br /&gt;
                self.selmode.set(1)&lt;br /&gt;
                self.calc_center()&lt;br /&gt;
&lt;br /&gt;
        elif self.selmode.get() == 1:&lt;br /&gt;
            self.center.append(float(self.x.get()))&lt;br /&gt;
            self.center.append(float(self.y.get()))&lt;br /&gt;
            self.center.append(float(self.z.get()))&lt;br /&gt;
        self.x.set(self.center[0])&lt;br /&gt;
        self.y.set(self.center[1])&lt;br /&gt;
        self.z.set(self.center[2])&lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
    def showCrisscross(self):&lt;br /&gt;
        startpoint = (self.center[0],self.center[1],self.center[2])&lt;br /&gt;
        cmd.delete(&amp;quot;crisscross&amp;quot;)&lt;br /&gt;
        self.crisscross(startpoint[0],startpoint[1],startpoint[2],0.5,&amp;quot;crisscross&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    def changeValueSpacing(self,a):&lt;br /&gt;
        val = float(self.space.get())+float(a)*0.005&lt;br /&gt;
        self.space.set(val)&lt;br /&gt;
        if self.have_box:&lt;br /&gt;
            self.selmode.set(1)&lt;br /&gt;
            self.calc_center()&lt;br /&gt;
            self.showCrisscross()&lt;br /&gt;
            self.calc_box()&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
    def changeValueXpts(self,a):&lt;br /&gt;
        val = int(self.xpts.get())+int(a)&lt;br /&gt;
        self.xpts.set(val)&lt;br /&gt;
        if self.have_box:&lt;br /&gt;
            self.selmode.set(1)&lt;br /&gt;
            self.calc_center()&lt;br /&gt;
            self.showCrisscross()&lt;br /&gt;
            self.calc_box()&lt;br /&gt;
&lt;br /&gt;
    def changeValueYpts(self,a):&lt;br /&gt;
        val = int(self.ypts.get())+int(a)&lt;br /&gt;
        self.ypts.set(val)&lt;br /&gt;
        if self.have_box:&lt;br /&gt;
            self.selmode.set(1)&lt;br /&gt;
            self.calc_center()&lt;br /&gt;
            self.showCrisscross()&lt;br /&gt;
            self.calc_box()&lt;br /&gt;
&lt;br /&gt;
    def changeValueZpts(self,a):&lt;br /&gt;
        val = int(self.zpts.get())+int(a)&lt;br /&gt;
        self.zpts.set(val)&lt;br /&gt;
        if self.have_box:&lt;br /&gt;
            self.selmode.set(1)&lt;br /&gt;
            self.calc_center()&lt;br /&gt;
            self.showCrisscross()&lt;br /&gt;
            self.calc_box()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def changeValueX(self,a):&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        val=float(self.x.get())+float(a)*1.0&lt;br /&gt;
        self.x.set(val)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        &lt;br /&gt;
    def changeValueY(self,a):&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        val=float(self.y.get())+float(a)*1.0&lt;br /&gt;
        self.y.set(val)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        &lt;br /&gt;
    def changeValueZ(self,a):&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        val=float(self.z.get())+float(a)*1.0&lt;br /&gt;
        self.z.set(val)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        &lt;br /&gt;
    def changeValueCsize(self,a):&lt;br /&gt;
        val=float(self.csize.get())+float(a)*0.1&lt;br /&gt;
        self.csize.set(val)&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    def changeValueLwidth(self,a):&lt;br /&gt;
        val=float(self.lwidth.get())+float(a)*1.0&lt;br /&gt;
        self.lwidth.set(val)&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
        &lt;br /&gt;
    def changeValueGrid(self,a):&lt;br /&gt;
        val=float(self.grid.get())+float(a)*1.0&lt;br /&gt;
        self.grid.set(val)&lt;br /&gt;
        self.selmode.set(1)&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        self.showCrisscross()&lt;br /&gt;
        self.calc_box()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def calc_box(self):&lt;br /&gt;
        self.calc_center()&lt;br /&gt;
        xpts = int(self.xpts.get())&lt;br /&gt;
        ypts = int(self.ypts.get())&lt;br /&gt;
        zpts = int(self.zpts.get())&lt;br /&gt;
        csize = float(self.csize.get())&lt;br /&gt;
        spacing = float(self.space.get())&lt;br /&gt;
        size = [xpts*spacing,ypts*spacing,zpts*spacing]&lt;br /&gt;
        xmax = xmin = ymax = ymin = zmax =zmin = 0&lt;br /&gt;
        xmax = self.center[0] + size[0]/2.&lt;br /&gt;
        xmin = self.center[0] - size[0]/2.&lt;br /&gt;
        ymax = self.center[1] + size[1]/2.&lt;br /&gt;
        ymin = self.center[1] - size[1]/2.&lt;br /&gt;
        zmax = self.center[2] + size[2]/2.&lt;br /&gt;
        zmin = self.center[2] - size[2]/2.&lt;br /&gt;
        x = [xmin,xmax]&lt;br /&gt;
        y = [ymin,ymax]&lt;br /&gt;
        z = [zmin,zmax]&lt;br /&gt;
        self.dbox = [x,y,z]&lt;br /&gt;
        if self.on_screen.get()==0:&lt;br /&gt;
            self.showBox(self.dbox,csize)&lt;br /&gt;
        elif self.on_screen.get()==1:&lt;br /&gt;
            self.showWireBox(self.dbox)&lt;br /&gt;
        self.have_box = 1&lt;br /&gt;
        &lt;br /&gt;
    def showBox(self,box,size):&lt;br /&gt;
        view = cmd.get_view()&lt;br /&gt;
        name =&amp;quot; box&amp;quot;&lt;br /&gt;
        obj = []&lt;br /&gt;
        # do the box&lt;br /&gt;
        for i in range(2):&lt;br /&gt;
            for k in range (2):&lt;br /&gt;
                for j in range(2):&lt;br /&gt;
                    if i != 1:&lt;br /&gt;
                        obj.append(CYLINDER)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k]])&lt;br /&gt;
                        obj.extend([box[0][i+1],box[1][j],box[2][k]])&lt;br /&gt;
                        obj.append(size)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(COLOR)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(SPHERE)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k],size])&lt;br /&gt;
                        &lt;br /&gt;
                    if j != 1:&lt;br /&gt;
                        obj.append(CYLINDER)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k]])&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j+1],box[2][k]])&lt;br /&gt;
                        obj.append(size)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(COLOR)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(SPHERE)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j+1],box[2][k],size])&lt;br /&gt;
                    if k != 1:&lt;br /&gt;
                        obj.append(CYLINDER)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k]])&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k+1]])&lt;br /&gt;
                        obj.append(size)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(COLOR)&lt;br /&gt;
                        obj.extend(self.colorRGB)&lt;br /&gt;
                        obj.append(SPHERE)&lt;br /&gt;
                        obj.extend([box[0][i],box[1][j],box[2][k+1],size])&lt;br /&gt;
&lt;br /&gt;
        axes = [[2.0,0.0,0.0],[0.0,2.0,0.0],[0.0,0.0,2.0]]&lt;br /&gt;
        xpos = [box[0][1]+(box[0][1]-box[0][0])/5.,box[1][0],box[2][0]]&lt;br /&gt;
        cyl_text(obj,plain,xpos,'X',0.10,axes=axes)&lt;br /&gt;
        ypos = [box[0][0],box[1][1]+(box[1][1]-box[1][0])/5,box[2][0]]&lt;br /&gt;
        cyl_text(obj,plain,ypos,'Y',0.10,axes=axes)&lt;br /&gt;
        zpos = [box[0][0],box[1][0],box[2][1]+(box[2][1]-box[2][0])/5]&lt;br /&gt;
        cyl_text(obj,plain,zpos,'Z',0.10,axes=axes)&lt;br /&gt;
        cmd.load_cgo(obj,name)&lt;br /&gt;
        cmd.set_view(view)&lt;br /&gt;
        &lt;br /&gt;
    def hideBox(self):&lt;br /&gt;
        cmd.delete(&amp;quot;box&amp;quot;)&lt;br /&gt;
        cmd.delete(&amp;quot;wirebox&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    def showWireBox(self,box):&lt;br /&gt;
        cmd.delete(&amp;quot;wirebox&amp;quot;)&lt;br /&gt;
        view = cmd.get_view()&lt;br /&gt;
        spacing = float(self.grid.get())&lt;br /&gt;
        lwidth = float(self.lwidth.get())&lt;br /&gt;
        xpts = int(round((box[0][1]-box[0][0])/spacing))+1&lt;br /&gt;
        ypts = int(round((box[1][1]-box[1][0])/spacing))+1&lt;br /&gt;
        zpts = int(round((box[2][1]-box[2][0])/spacing))+1&lt;br /&gt;
        obj = []&lt;br /&gt;
        for i in range(xpts):&lt;br /&gt;
            for k in range (ypts):&lt;br /&gt;
                obj.append(BEGIN)&lt;br /&gt;
                obj.append(LINE_STRIP)&lt;br /&gt;
                obj.append(COLOR)&lt;br /&gt;
                obj.extend(self.colorRGB)&lt;br /&gt;
                &lt;br /&gt;
                for j in range(zpts):&lt;br /&gt;
                    &lt;br /&gt;
                    obj.append(VERTEX)&lt;br /&gt;
                    obj.extend([box[0][0]+spacing*i,box[1][0]+spacing*k,\&lt;br /&gt;
                                box[2][0]+spacing*j])&lt;br /&gt;
&lt;br /&gt;
                obj.append(END)&lt;br /&gt;
        for i in range(xpts):&lt;br /&gt;
            for j in range (zpts):&lt;br /&gt;
                obj.append(BEGIN)&lt;br /&gt;
                obj.append(LINE_STRIP)&lt;br /&gt;
                obj.append(COLOR)&lt;br /&gt;
                obj.extend(self.colorRGB)&lt;br /&gt;
                for k in range(ypts):&lt;br /&gt;
                    obj.append(VERTEX)&lt;br /&gt;
                    obj.extend([box[0][0]+spacing*i,box[1][0]+spacing*k,\&lt;br /&gt;
                                box[2][0]+spacing*j])&lt;br /&gt;
                obj.append(END)&lt;br /&gt;
        for j in range(zpts):&lt;br /&gt;
            for i in range (xpts):&lt;br /&gt;
                obj.append(BEGIN)&lt;br /&gt;
                obj.append(LINE_STRIP)&lt;br /&gt;
                obj.append(COLOR)&lt;br /&gt;
                obj.extend(self.colorRGB)&lt;br /&gt;
                for k in range(ypts):&lt;br /&gt;
                    obj.append(VERTEX)&lt;br /&gt;
                    obj.extend([box[0][0]+spacing*i,box[1][0]+spacing*k,\&lt;br /&gt;
                                box[2][0]+spacing*j])&lt;br /&gt;
                obj.append(END)&lt;br /&gt;
        for j in range(zpts):&lt;br /&gt;
            for k in range (ypts):&lt;br /&gt;
                obj.append(BEGIN)&lt;br /&gt;
                obj.append(LINE_STRIP)&lt;br /&gt;
                obj.append(COLOR)&lt;br /&gt;
                obj.extend(self.colorRGB)&lt;br /&gt;
                for i in range(xpts):&lt;br /&gt;
                    obj.append(VERTEX)&lt;br /&gt;
                    obj.extend([box[0][0]+spacing*i,box[1][0]+spacing*k,\&lt;br /&gt;
                                box[2][0]+spacing*j])&lt;br /&gt;
                obj.append(END)&lt;br /&gt;
        cmd.load_cgo(obj,&amp;quot;wirebox&amp;quot;)&lt;br /&gt;
        cmd.set(&amp;quot;cgo_line_width&amp;quot;,lwidth)&lt;br /&gt;
        cmd.set_view(view)&lt;br /&gt;
         &lt;br /&gt;
    def crisscross(self,x,y,z,d,name=&amp;quot;crisscross&amp;quot;):&lt;br /&gt;
        &lt;br /&gt;
        obj = [&lt;br /&gt;
            LINEWIDTH, 3,&lt;br /&gt;
            &lt;br /&gt;
            BEGIN, LINE_STRIP,&lt;br /&gt;
            VERTEX, float(x-d), float(y), float(z),&lt;br /&gt;
            VERTEX, float(x+d), float(y), float(z),&lt;br /&gt;
            END,&lt;br /&gt;
            &lt;br /&gt;
            BEGIN, LINE_STRIP,&lt;br /&gt;
            VERTEX, float(x), float(y-d), float(z),&lt;br /&gt;
            VERTEX, float(x), float(y+d), float(z),&lt;br /&gt;
            END,&lt;br /&gt;
            &lt;br /&gt;
            BEGIN, LINE_STRIP,&lt;br /&gt;
            VERTEX, float(x), float(y), float(z-d),&lt;br /&gt;
            VERTEX, float(x), float(y), float(z+d),&lt;br /&gt;
            END&lt;br /&gt;
            &lt;br /&gt;
            ]&lt;br /&gt;
        view = cmd.get_view()&lt;br /&gt;
        cmd.load_cgo(obj,name)&lt;br /&gt;
        cmd.set_view(view)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def load_dlg(self):&lt;br /&gt;
        filename = self.dlglocation.get()&lt;br /&gt;
        self.namelist = []&lt;br /&gt;
        name = filename.split('/')[-1].split('.')[0]&lt;br /&gt;
        fp=self.fileopen(filename,'r')&lt;br /&gt;
        if fp:&lt;br /&gt;
            string = fp.read()&lt;br /&gt;
            newl = []&lt;br /&gt;
            modlist = []&lt;br /&gt;
            ex = re.compile('DOCKED:.*')&lt;br /&gt;
            l = ex.findall(string)&lt;br /&gt;
            str = ''&lt;br /&gt;
            mod = []&lt;br /&gt;
            for i in range(len(l)):&lt;br /&gt;
                if 'MODEL' in l[i]:&lt;br /&gt;
                    str+=l[i]+'\n'&lt;br /&gt;
                    for k in range(i+1,len(l)):&lt;br /&gt;
                        if 'TER' in l[k]:&lt;br /&gt;
                            str+=l[k]+'\n'&lt;br /&gt;
                            mod.append(str)&lt;br /&gt;
                            str=''&lt;br /&gt;
                            break&lt;br /&gt;
                        else:&lt;br /&gt;
                            str+=l[k]+'\n'&lt;br /&gt;
                            mlist= []&lt;br /&gt;
            for x in mod:&lt;br /&gt;
                m = Model()&lt;br /&gt;
                m.str2mod(x)&lt;br /&gt;
                mlist.append(m)&lt;br /&gt;
            self.mlist = sortByEnergy(mlist)&lt;br /&gt;
            for i in range(len(self.mlist)):&lt;br /&gt;
                self.namelist.append(name+'_%d'%(i+1))&lt;br /&gt;
                self.struct_dic[name+'_%d'%(i+1)] = self.mlist[i]&lt;br /&gt;
            self.update_combo(name)&lt;br /&gt;
        &lt;br /&gt;
    def update_combo(self,name):&lt;br /&gt;
        try:&lt;br /&gt;
            self.rgroup.delete(name)&lt;br /&gt;
        except:&lt;br /&gt;
            pass&lt;br /&gt;
        self.pages[name] = {'name':self.rgroup.add(name)}&lt;br /&gt;
        self.pages[name].update({'structs':self.namelist})&lt;br /&gt;
        self.del_buttonbox = Pmw.ButtonBox(self.pages[name]['name'], padx=3)&lt;br /&gt;
        self.del_buttonbox.pack(fill='x',side=TOP)&lt;br /&gt;
        self.del_buttonbox.add('Show best 10 %s' % name,command=self.show_best_lig)&lt;br /&gt;
        self.del_buttonbox.add('Show all %s' % name,command=self.show_all_lig)&lt;br /&gt;
        self.del_buttonbox.add('Hide all %s' % name,command=self.hide_all_lig)&lt;br /&gt;
        self.del_buttonbox.add('Delete %s' % name,command=self.del_lig)        &lt;br /&gt;
&lt;br /&gt;
        self.pages[name]['combo'] = Pmw.ComboBox(self.pages[name]['name'],&lt;br /&gt;
                                                 label_text='Docked',&lt;br /&gt;
                                                 labelpos='nw',&lt;br /&gt;
                                                 scrolledlist_items= self.namelist,&lt;br /&gt;
                                                 selectioncommand=self.status_combobox,&lt;br /&gt;
                                                 listbox_height=10,&lt;br /&gt;
                                                 listbox_width=1,&lt;br /&gt;
                                                 &lt;br /&gt;
                                                 dropdown=False)&lt;br /&gt;
        self.pages[name]['combo'].pack(side='left', padx=3, anchor='n')&lt;br /&gt;
&lt;br /&gt;
        self.pages[name]['text'] = Pmw.ScrolledText(self.pages[name]['name'],&lt;br /&gt;
                                                    borderframe=5, &lt;br /&gt;
                                                    vscrollmode='dynamic',&lt;br /&gt;
                                                    hscrollmode='dynamic',&lt;br /&gt;
                                                    labelpos='n',&lt;br /&gt;
                                                    label_text=name,&lt;br /&gt;
                                                    text_width=150, text_height=15,&lt;br /&gt;
                                                    text_wrap='none',&lt;br /&gt;
                                                    text_background='#000000',&lt;br /&gt;
                                                    text_foreground='green'&lt;br /&gt;
                                                    )&lt;br /&gt;
        self.pages[name]['text'].pack()&lt;br /&gt;
        self.rgroup.selectpage(name)&lt;br /&gt;
        self.status_line.configure(text ='Loading %s' % name)&lt;br /&gt;
        &lt;br /&gt;
    def show_all_lig(self):&lt;br /&gt;
        name = self.rgroup.getcurselection()&lt;br /&gt;
        for s in self.pages[name]['structs']:&lt;br /&gt;
            self.status_combobox(s)&lt;br /&gt;
        self.status_line.configure(text = 'Showing all %s' % name)&lt;br /&gt;
&lt;br /&gt;
    def show_best_lig(self):&lt;br /&gt;
        name = self.rgroup.getcurselection()&lt;br /&gt;
        for s in self.pages[name]['structs'][:10]:&lt;br /&gt;
            self.status_combobox(s)&lt;br /&gt;
        self.status_line.configure(text = 'Showing best 10 %s' % name)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
    def hide_all_lig(self):&lt;br /&gt;
        name = self.rgroup.getcurselection()&lt;br /&gt;
        cmd.delete(name+'*')&lt;br /&gt;
        self.status_line.configure(text = 'Deleted all %s' % name)&lt;br /&gt;
        &lt;br /&gt;
    def del_lig(self):&lt;br /&gt;
        name = self.rgroup.getcurselection()&lt;br /&gt;
        cmd.delete(name+'*')&lt;br /&gt;
        self.rgroup.delete(self.rgroup.getcurselection())&lt;br /&gt;
        self.status_line.configure(text = 'Deleted %s' % name)&lt;br /&gt;
&lt;br /&gt;
    def fileopen(self, filename, mode):&lt;br /&gt;
        try:&lt;br /&gt;
            fp = open(filename,mode)&lt;br /&gt;
            return fp&lt;br /&gt;
        except:&lt;br /&gt;
            tkMessageBox.showerror('Error','Could not open file %s' % filename)&lt;br /&gt;
            return None&lt;br /&gt;
                &lt;br /&gt;
    def showAppModal(self):&lt;br /&gt;
        #self.dialog.activate(geometry = 'centerscreenalways', globalMode = 'nograb')&lt;br /&gt;
        self.dialog.show()&lt;br /&gt;
        #self.dialog.activate(geometry = 'centerscreenalways')&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# The classes PmwFileDialog and PmwExistingFileDialog and the _errorpop function&lt;br /&gt;
# are taken from the Pmw contrib directory.  The attribution given in that file&lt;br /&gt;
# is:&lt;br /&gt;
################################################################################&lt;br /&gt;
# Filename dialogs using Pmw&lt;br /&gt;
#&lt;br /&gt;
# (C) Rob W.W. Hooft, Nonius BV, 1998&lt;br /&gt;
#&lt;br /&gt;
# Modifications:&lt;br /&gt;
#&lt;br /&gt;
# J. Willem M. Nissink, Cambridge Crystallographic Data Centre, 8/2002&lt;br /&gt;
#    Added optional information pane at top of dialog; if option&lt;br /&gt;
#    'info' is specified, the text given will be shown (in blue).&lt;br /&gt;
#    Modified example to show both file and directory-type dialog&lt;br /&gt;
#&lt;br /&gt;
# No Guarantees. Distribute Freely. &lt;br /&gt;
# Please send bug-fixes/patches/features to &amp;lt;r.hooft@euromail.com&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
################################################################################&lt;br /&gt;
import os,fnmatch,time&lt;br /&gt;
import Tkinter,Pmw&lt;br /&gt;
#Pmw.setversion(&amp;quot;0.8.5&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def _errorpop(master,text):&lt;br /&gt;
    d=Pmw.MessageDialog(master,&lt;br /&gt;
                        title=&amp;quot;Error&amp;quot;, &lt;br /&gt;
                        message_text=text,&lt;br /&gt;
                        buttons=(&amp;quot;OK&amp;quot;,))&lt;br /&gt;
    d.component('message').pack(ipadx=15,ipady=15)&lt;br /&gt;
    d.activate()&lt;br /&gt;
    d.destroy()&lt;br /&gt;
    &lt;br /&gt;
class PmwFileDialog(Pmw.Dialog):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;File Dialog using Pmw&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self, parent = None, **kw):&lt;br /&gt;
	# Define the megawidget options.&lt;br /&gt;
	optiondefs = (&lt;br /&gt;
	    ('filter',    '*',              self.newfilter),&lt;br /&gt;
	    ('directory', os.getcwd(),      self.newdir),&lt;br /&gt;
	    ('filename',  '',               self.newfilename),&lt;br /&gt;
	    ('historylen',10,               None),&lt;br /&gt;
	    ('command',   None,             None),&lt;br /&gt;
            ('info',      None,             None),&lt;br /&gt;
	    )&lt;br /&gt;
	self.defineoptions(kw, optiondefs)&lt;br /&gt;
        # Initialise base class (after defining options).&lt;br /&gt;
	Pmw.Dialog.__init__(self, parent)&lt;br /&gt;
&lt;br /&gt;
	self.withdraw()&lt;br /&gt;
&lt;br /&gt;
        # Create the components.&lt;br /&gt;
	interior = self.interior()&lt;br /&gt;
&lt;br /&gt;
        if self['info'] is not None:&lt;br /&gt;
            rowoffset=1&lt;br /&gt;
            dn = self.infotxt()&lt;br /&gt;
            dn.grid(row=0,column=0,columnspan=2,padx=3,pady=3)&lt;br /&gt;
        else:&lt;br /&gt;
            rowoffset=0&lt;br /&gt;
&lt;br /&gt;
	dn = self.mkdn()&lt;br /&gt;
	dn.grid(row=0+rowoffset,column=0,columnspan=2,padx=3,pady=3)&lt;br /&gt;
	del dn&lt;br /&gt;
&lt;br /&gt;
	# Create the directory list component.&lt;br /&gt;
	dnb = self.mkdnb()&lt;br /&gt;
	dnb.grid(row=1+rowoffset,column=0,sticky='news',padx=3,pady=3)&lt;br /&gt;
	del dnb&lt;br /&gt;
&lt;br /&gt;
	# Create the filename list component.&lt;br /&gt;
	fnb = self.mkfnb()&lt;br /&gt;
	fnb.grid(row=1+rowoffset,column=1,sticky='news',padx=3,pady=3)&lt;br /&gt;
	del fnb&lt;br /&gt;
&lt;br /&gt;
	# Create the filter entry&lt;br /&gt;
	ft = self.mkft()&lt;br /&gt;
	ft.grid(row=2+rowoffset,column=0,columnspan=2,padx=3,pady=3)&lt;br /&gt;
	del ft&lt;br /&gt;
&lt;br /&gt;
	# Create the filename entry&lt;br /&gt;
	fn = self.mkfn()&lt;br /&gt;
	fn.grid(row=3+rowoffset,column=0,columnspan=2,padx=3,pady=3)&lt;br /&gt;
	fn.bind('&amp;lt;Return&amp;gt;',self.okbutton)&lt;br /&gt;
	del fn&lt;br /&gt;
&lt;br /&gt;
	# Buttonbox already exists&lt;br /&gt;
	bb=self.component('buttonbox')&lt;br /&gt;
	bb.add('OK',command=self.okbutton)&lt;br /&gt;
	bb.add('Cancel',command=self.cancelbutton)&lt;br /&gt;
	del bb&lt;br /&gt;
&lt;br /&gt;
	Pmw.alignlabels([self.component('filename'),&lt;br /&gt;
			 self.component('filter'),&lt;br /&gt;
			 self.component('dirname')])&lt;br /&gt;
&lt;br /&gt;
    def infotxt(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot; Make information block component at the top &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
                'infobox',&lt;br /&gt;
                (), None,&lt;br /&gt;
                Tkinter.Label, (self.interior(),),&lt;br /&gt;
                width=51,&lt;br /&gt;
                relief='groove',&lt;br /&gt;
                foreground='darkblue',&lt;br /&gt;
                justify='left',&lt;br /&gt;
                text=self['info']&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
    def mkdn(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Make directory name component&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
	    'dirname',&lt;br /&gt;
	    (), None,&lt;br /&gt;
	    Pmw.ComboBox, (self.interior(),),&lt;br /&gt;
	    entryfield_value=self['directory'],&lt;br /&gt;
	    entryfield_entry_width=40,&lt;br /&gt;
            entryfield_validate=self.dirvalidate,&lt;br /&gt;
	    selectioncommand=self.setdir,&lt;br /&gt;
	    labelpos='w',&lt;br /&gt;
	    label_text='Directory:')&lt;br /&gt;
&lt;br /&gt;
    def mkdnb(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Make directory name box&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
	    'dirnamebox',&lt;br /&gt;
	    (), None,&lt;br /&gt;
	    Pmw.ScrolledListBox, (self.interior(),),&lt;br /&gt;
	    label_text='directories',&lt;br /&gt;
	    labelpos='n',&lt;br /&gt;
	    hscrollmode='none',&lt;br /&gt;
	    dblclickcommand=self.selectdir)&lt;br /&gt;
&lt;br /&gt;
    def mkft(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Make filter&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
	    'filter',&lt;br /&gt;
	    (), None,&lt;br /&gt;
	    Pmw.ComboBox, (self.interior(),),&lt;br /&gt;
	    entryfield_value=self['filter'],&lt;br /&gt;
	    entryfield_entry_width=40,&lt;br /&gt;
	    selectioncommand=self.setfilter,&lt;br /&gt;
	    labelpos='w',&lt;br /&gt;
	    label_text='Filter:')&lt;br /&gt;
&lt;br /&gt;
    def mkfnb(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Make filename list box&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
	    'filenamebox',&lt;br /&gt;
	    (), None,&lt;br /&gt;
	    Pmw.ScrolledListBox, (self.interior(),),&lt;br /&gt;
	    label_text='files',&lt;br /&gt;
	    labelpos='n',&lt;br /&gt;
	    hscrollmode='none',&lt;br /&gt;
	    selectioncommand=self.singleselectfile,&lt;br /&gt;
	    dblclickcommand=self.selectfile)&lt;br /&gt;
&lt;br /&gt;
    def mkfn(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Make file name entry&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        return self.createcomponent(&lt;br /&gt;
	    'filename',&lt;br /&gt;
	    (), None,&lt;br /&gt;
	    Pmw.ComboBox, (self.interior(),),&lt;br /&gt;
	    entryfield_value=self['filename'],&lt;br /&gt;
	    entryfield_entry_width=40,&lt;br /&gt;
            entryfield_validate=self.filevalidate,&lt;br /&gt;
	    selectioncommand=self.setfilename,&lt;br /&gt;
	    labelpos='w',&lt;br /&gt;
	    label_text='Filename:')&lt;br /&gt;
    &lt;br /&gt;
    def dirvalidate(self,string):&lt;br /&gt;
        if os.path.isdir(string):&lt;br /&gt;
            return Pmw.OK&lt;br /&gt;
        else:&lt;br /&gt;
            return Pmw.PARTIAL&lt;br /&gt;
        &lt;br /&gt;
    def filevalidate(self,string):&lt;br /&gt;
        if string=='':&lt;br /&gt;
            return Pmw.PARTIAL&lt;br /&gt;
        elif os.path.isfile(string):&lt;br /&gt;
            return Pmw.OK&lt;br /&gt;
        elif os.path.exists(string):&lt;br /&gt;
            return Pmw.PARTIAL&lt;br /&gt;
        else:&lt;br /&gt;
            return Pmw.OK&lt;br /&gt;
        &lt;br /&gt;
    def okbutton(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;OK action: user thinks he has input valid data and wants to&lt;br /&gt;
           proceed. This is also called by &amp;lt;Return&amp;gt; in the filename entry&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	fn=self.component('filename').get()&lt;br /&gt;
	self.setfilename(fn)&lt;br /&gt;
	if self.validate(fn):&lt;br /&gt;
	    self.canceled=0&lt;br /&gt;
	    self.deactivate()&lt;br /&gt;
&lt;br /&gt;
    def cancelbutton(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Cancel the operation&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	self.canceled=1&lt;br /&gt;
	self.deactivate()&lt;br /&gt;
&lt;br /&gt;
    def tidy(self,w,v):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Insert text v into the entry and at the top of the list of &lt;br /&gt;
           the combobox w, remove duplicates&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	if not v:&lt;br /&gt;
	    return&lt;br /&gt;
	entry=w.component('entry')&lt;br /&gt;
	entry.delete(0,'end')&lt;br /&gt;
	entry.insert(0,v)&lt;br /&gt;
	list=w.component('scrolledlist')&lt;br /&gt;
	list.insert(0,v)&lt;br /&gt;
	index=1&lt;br /&gt;
	while index&amp;lt;list.index('end'):&lt;br /&gt;
	    k=list.get(index)&lt;br /&gt;
	    if k==v or index&amp;gt;self['historylen']:&lt;br /&gt;
		list.delete(index)&lt;br /&gt;
	    else:&lt;br /&gt;
		index=index+1&lt;br /&gt;
        w.checkentry()&lt;br /&gt;
&lt;br /&gt;
    def setfilename(self,value):&lt;br /&gt;
	if not value:&lt;br /&gt;
	    return&lt;br /&gt;
	value=os.path.join(self['directory'],value)&lt;br /&gt;
	dir,fil=os.path.split(value)&lt;br /&gt;
	self.configure(directory=dir,filename=value)&lt;br /&gt;
        &lt;br /&gt;
	c=self['command']&lt;br /&gt;
	if callable(c):&lt;br /&gt;
	    c()&lt;br /&gt;
&lt;br /&gt;
    def newfilename(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Make sure a newly set filename makes it into the combobox list&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	self.tidy(self.component('filename'),self['filename'])&lt;br /&gt;
	&lt;br /&gt;
    def setfilter(self,value):&lt;br /&gt;
	self.configure(filter=value)&lt;br /&gt;
&lt;br /&gt;
    def newfilter(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Make sure a newly set filter makes it into the combobox list&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	self.tidy(self.component('filter'),self['filter'])&lt;br /&gt;
	self.fillit()&lt;br /&gt;
&lt;br /&gt;
    def setdir(self,value):&lt;br /&gt;
	self.configure(directory=value)&lt;br /&gt;
&lt;br /&gt;
    def newdir(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Make sure a newly set dirname makes it into the combobox list&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	self.tidy(self.component('dirname'),self['directory'])&lt;br /&gt;
	self.fillit()&lt;br /&gt;
&lt;br /&gt;
    def singleselectfile(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Single click in file listbox. Move file to &amp;quot;filename&amp;quot; combobox&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	cs=self.component('filenamebox').curselection()&lt;br /&gt;
	if cs!=():&lt;br /&gt;
	    value=self.component('filenamebox').get(cs)&lt;br /&gt;
            self.setfilename(value)&lt;br /&gt;
&lt;br /&gt;
    def selectfile(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Take the selected file from the filename, normalize it, and OK&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        self.singleselectfile()&lt;br /&gt;
	value=self.component('filename').get()&lt;br /&gt;
        self.setfilename(value)&lt;br /&gt;
        if value:&lt;br /&gt;
	    self.okbutton()&lt;br /&gt;
&lt;br /&gt;
    def selectdir(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Take selected directory from the dirnamebox into the dirname&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	cs=self.component('dirnamebox').curselection()&lt;br /&gt;
	if cs!=():&lt;br /&gt;
	    value=self.component('dirnamebox').get(cs)&lt;br /&gt;
	    dir=self['directory']&lt;br /&gt;
	    if not dir:&lt;br /&gt;
		dir=os.getcwd()&lt;br /&gt;
	    if value:&lt;br /&gt;
		if value=='..':&lt;br /&gt;
		    dir=os.path.split(dir)[0]&lt;br /&gt;
		else:&lt;br /&gt;
		    dir=os.path.join(dir,value)&lt;br /&gt;
	    self.configure(directory=dir)&lt;br /&gt;
	    self.fillit()&lt;br /&gt;
&lt;br /&gt;
    def askfilename(self,directory=None,filter=None):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;The actual client function. Activates the dialog, and&lt;br /&gt;
	   returns only after a valid filename has been entered &lt;br /&gt;
           (return value is that filename) or when canceled (return &lt;br /&gt;
           value is None)&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	if directory!=None:&lt;br /&gt;
	    self.configure(directory=directory)&lt;br /&gt;
	if filter!=None:&lt;br /&gt;
	    self.configure(filter=filter)&lt;br /&gt;
	self.fillit()&lt;br /&gt;
        self.canceled=1 # Needed for when user kills dialog window&lt;br /&gt;
	self.activate()&lt;br /&gt;
	if self.canceled:&lt;br /&gt;
	    return None&lt;br /&gt;
	else:&lt;br /&gt;
	    return self.component('filename').get()&lt;br /&gt;
&lt;br /&gt;
    lastdir=&amp;quot;&amp;quot;&lt;br /&gt;
    lastfilter=None&lt;br /&gt;
    lasttime=0&lt;br /&gt;
    def fillit(self):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Get the directory list and show it in the two listboxes&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Do not run unnecesarily&lt;br /&gt;
        if self.lastdir==self['directory'] and self.lastfilter==self['filter'] and self.lasttime&amp;gt;os.stat(self.lastdir)[8]:&lt;br /&gt;
            return&lt;br /&gt;
        self.lastdir=self['directory']&lt;br /&gt;
        self.lastfilter=self['filter']&lt;br /&gt;
        self.lasttime=time.time()&lt;br /&gt;
	dir=self['directory']&lt;br /&gt;
	if not dir:&lt;br /&gt;
	    dir=os.getcwd()&lt;br /&gt;
	dirs=['..']&lt;br /&gt;
	files=[]&lt;br /&gt;
        try:&lt;br /&gt;
            fl=os.listdir(dir)&lt;br /&gt;
            fl.sort()&lt;br /&gt;
        except os.error,arg:&lt;br /&gt;
            if arg[0] in (2,20):&lt;br /&gt;
                return&lt;br /&gt;
            raise&lt;br /&gt;
	for f in fl:&lt;br /&gt;
	    if os.path.isdir(os.path.join(dir,f)):&lt;br /&gt;
		dirs.append(f)&lt;br /&gt;
	    else:&lt;br /&gt;
		filter=self['filter']&lt;br /&gt;
		if not filter:&lt;br /&gt;
		    filter='*'&lt;br /&gt;
		if fnmatch.fnmatch(f,filter):&lt;br /&gt;
		    files.append(f)&lt;br /&gt;
	self.component('filenamebox').setlist(files)&lt;br /&gt;
	self.component('dirnamebox').setlist(dirs)&lt;br /&gt;
    &lt;br /&gt;
    def validate(self,filename):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;Validation function. Should return 1 if the filename is valid, &lt;br /&gt;
           0 if invalid. May pop up dialogs to tell user why. Especially &lt;br /&gt;
           suited to subclasses: i.e. only return 1 if the file does/doesn't &lt;br /&gt;
           exist&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	return 1&lt;br /&gt;
&lt;br /&gt;
class PmwExistingFileDialog(PmwFileDialog):&lt;br /&gt;
    def filevalidate(self,string):&lt;br /&gt;
        if os.path.isfile(string):&lt;br /&gt;
            return Pmw.OK&lt;br /&gt;
        else:&lt;br /&gt;
            return Pmw.PARTIAL&lt;br /&gt;
        &lt;br /&gt;
    def validate(self,filename):&lt;br /&gt;
        if os.path.isfile(filename):&lt;br /&gt;
            return 1&lt;br /&gt;
        elif os.path.exists(filename):&lt;br /&gt;
            _errorpop(self.interior(),&amp;quot;This is not a plain file&amp;quot;)&lt;br /&gt;
            return 0&lt;br /&gt;
        else:&lt;br /&gt;
            _errorpop(self.interior(),&amp;quot;Please select an existing file&amp;quot;)&lt;br /&gt;
            return 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#===============================================================&lt;br /&gt;
#&lt;br /&gt;
# stuff to deal with dlg files&lt;br /&gt;
&lt;br /&gt;
class Model:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.atoms = []&lt;br /&gt;
        self.energy = 0.&lt;br /&gt;
        self.info = []&lt;br /&gt;
        self.num = 0&lt;br /&gt;
        self.as_string = ''&lt;br /&gt;
        self.info_as_string = ''&lt;br /&gt;
    def str2mod(self,string):&lt;br /&gt;
        list = string.split('\n')&lt;br /&gt;
        for line in list:&lt;br /&gt;
            if 'ATOM' in line:&lt;br /&gt;
                self.atoms.append(line.split(':')[1].strip())&lt;br /&gt;
                self.as_string+=line.split(':')[1].strip()+'\n'&lt;br /&gt;
            elif 'USER' in line:&lt;br /&gt;
                self.info.append(line.split(':')[1].strip())&lt;br /&gt;
                self.info_as_string+=line.split(':')[1].strip()+'\n'&lt;br /&gt;
            elif 'MODEL' in line:&lt;br /&gt;
                self.num = int(line.split()[2])&lt;br /&gt;
        for line in self.info:&lt;br /&gt;
            if 'Docked Energy' in line:&lt;br /&gt;
                x = line.split('=')[1]&lt;br /&gt;
                self.energy = float(x.split()[0])&lt;br /&gt;
&lt;br /&gt;
    def writeMod(self,fp):&lt;br /&gt;
        print &amp;gt;&amp;gt;fp,'MODEL%8d' % self.num&lt;br /&gt;
        for at in self.atoms:&lt;br /&gt;
            print &amp;gt;&amp;gt;fp, at&lt;br /&gt;
        print &amp;gt;&amp;gt;fp,'ENDMDL'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sortByEnergy(mlist):&lt;br /&gt;
    en = []&lt;br /&gt;
    idx = []&lt;br /&gt;
    for m in mlist:&lt;br /&gt;
        en.append(m.energy)&lt;br /&gt;
        idx.append(mlist.index(m))&lt;br /&gt;
    changed = True&lt;br /&gt;
    while changed:&lt;br /&gt;
        changed = False&lt;br /&gt;
        for i in range(len(en)-1):&lt;br /&gt;
            if en[i] &amp;gt; en[i+1]:&lt;br /&gt;
                dum = en[i+1]&lt;br /&gt;
                en[i+1] = en[i]&lt;br /&gt;
                en[i] = dum&lt;br /&gt;
                dum = idx[i+1]&lt;br /&gt;
                idx[i+1] = idx[i]&lt;br /&gt;
                idx[i] = dum&lt;br /&gt;
                changed = True&lt;br /&gt;
    new = []&lt;br /&gt;
    for i in range(len(idx)):&lt;br /&gt;
        new.append(mlist[idx[i]])&lt;br /&gt;
        new[i].num=i+1&lt;br /&gt;
    return new&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create demo in root window for testing.&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    class App:&lt;br /&gt;
        def my_show(self,*args,**kwargs):&lt;br /&gt;
            pass&lt;br /&gt;
    app = App()&lt;br /&gt;
    app.root = Tkinter.Tk()&lt;br /&gt;
    Pmw.initialise(app.root)&lt;br /&gt;
    app.root.title('Some Title')&lt;br /&gt;
    &lt;br /&gt;
    widget = Autodock(app)&lt;br /&gt;
    exitButton = Tkinter.Button(app.root, text = 'Exit', command = app.root.destroy)&lt;br /&gt;
    exitButton.pack()&lt;br /&gt;
    app.root.mainloop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dseelig</name></author>
	</entry>
</feed>