1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1 |
#############################################################################
|
2 |
#
|
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
3 |
# Author: Ruth HUEY, Michel F. SANNER, Stefano FORLI
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
4 |
#
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
5 |
# Copyright: M. Sanner TSRI 2011
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
6 |
#
|
7 |
#############################################################################
|
|
8 |
||
9 |
||
1.1.9
by Thorsten Alteholz
Import upstream version 1.5.6~rc3~cvs.20120206 |
10 |
# $Header: /opt/cvs/python/packages/share1.5/AutoDockTools/autostartCommands.py,v 1.37.2.1 2011/11/15 22:24:00 forli Exp $
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
11 |
#
|
1.1.9
by Thorsten Alteholz
Import upstream version 1.5.6~rc3~cvs.20120206 |
12 |
# $Id: autostartCommands.py,v 1.37.2.1 2011/11/15 22:24:00 forli Exp $
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
13 |
#
|
14 |
#
|
|
15 |
#
|
|
16 |
#
|
|
17 |
#
|
|
18 |
#
|
|
19 |
||
20 |
"""
|
|
21 |
This Module facilitates starting autogrid and autodock jobs and managing them
|
|
22 |
||
23 |
"""
|
|
24 |
from ViewerFramework.VFCommand import CommandGUI, Command |
|
25 |
## from ViewerFramework.gui import InputFormDescr
|
|
26 |
from mglutil.gui.InputForm.Tk.gui import InputFormDescr |
|
27 |
from mglutil.popen2Threads import SysCmdInThread |
|
28 |
from mglutil.util.callback import CallBackFunction |
|
29 |
from mglutil.util.packageFilePath import findResourceFile |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
30 |
import tkMessageBox, tkFileDialog |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
31 |
from Pmv.mvCommand import MVCommand |
32 |
from Pmv.guiTools import MoleculeChooser, BarButton, Kill |
|
33 |
||
34 |
from MolKit.tree import TreeNode, TreeNodeSet |
|
35 |
from MolKit.molecule import Atom |
|
36 |
||
37 |
from SimpleDialog import SimpleDialog |
|
38 |
import types, string, Tkinter, re |
|
39 |
import commands, os, sys, socket, time |
|
40 |
from string import splitfields |
|
41 |
||
42 |
||
43 |
||
44 |
try: |
|
45 |
import Entropia |
|
46 |
entropiaPresent = 1 |
|
47 |
except: |
|
48 |
entropiaPresent = 0 |
|
49 |
||
50 |
||
51 |
def removePCs(): |
|
52 |
print 'removing PCs from hostTable' |
|
53 |
||
54 |
||
55 |
if entropiaPresent: |
|
56 |
from Entropia.EntropiaDef import entropia_job_dir |
|
57 |
from Entropia.EntropiaUI import EntropiaUI |
|
58 |
from Entropia.EntropiaEx import EntropiaError |
|
59 |
import ftplib |
|
60 |
||
61 |
||
62 |
#these are the texts on menubuttons, menu entries etc:
|
|
63 |
menuText = {} |
|
64 |
menuText['StartMB'] = 'Run' |
|
65 |
#menuText['StartMB'] = ' Run '
|
|
66 |
menuText['startGridMB'] = 'Run AutoGrid...' |
|
67 |
menuText['startDockMB'] = 'Run AutoDock...' |
|
68 |
menuText['processManagerMB'] = 'Job Status...' |
|
69 |
menuText['editHostsMB'] = 'Host Preferences...' |
|
70 |
||
71 |
||
72 |
||
73 |
class ADKill(Kill): |
|
74 |
||
75 |
def __init__(self, master): |
|
76 |
self.master=master |
|
77 |
Kill.__init__(self, master) |
|
78 |
self.view.set(4) |
|
79 |
self.bar.file.forget() |
|
80 |
self.bar.view.forget() |
|
81 |
self.frame2=Tkinter.Frame(self.master) |
|
82 |
self.frame2.pack() |
|
83 |
self.dismiss = Tkinter.Button(self.frame2, text='Dismiss', command=self.quit) |
|
84 |
self.update.forget() |
|
85 |
self.dismiss.pack(side = 'right', fill = 'x') |
|
86 |
self.winfo_toplevel().title('Autodock Process Manager') |
|
87 |
self.done=0 |
|
88 |
||
89 |
||
90 |
def kill(self, selected): |
|
91 |
if not selected: |
|
92 |
return
|
|
93 |
c=self.format_list[self.format.get()][2] |
|
94 |
pid = string.split(selected)[c] |
|
95 |
host = string.split(selected)[-1] |
|
96 |
#put in are you sure dialog here
|
|
97 |
t = "Do you wish to kill this process?" |
|
98 |
d= SimpleDialog(self.master, text=t, buttons=['Yes','No'], |
|
99 |
default = 0, title = 'Kill Process') |
|
100 |
ok = d.go() |
|
101 |
if ok == 0: |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
102 |
#if host != self.vf.ADstart_manage.localHost: ??? N3P
|
103 |
if host == self.vf.ADstart_manage.localHost: |
|
104 |
cmdStr="kill -9 %s"%pid |
|
105 |
#print "EXECUTING 1", cmdStr
|
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
106 |
else: |
107 |
cmdStr="ssh " + host+ " -n \'kill -9 %s\'"%pid |
|
108 |
commands.getoutput(cmdStr) |
|
109 |
hosts = self.hosts |
|
110 |
self.do_update(self.psList, hosts) |
|
111 |
||
112 |
||
113 |
def updateHosts(self, hostList): |
|
114 |
self.hosts=hostList |
|
115 |
||
116 |
||
117 |
def do_update(self, psList=['autodock'], hosts=None): |
|
118 |
if not hosts: return |
|
119 |
self.hosts=hosts |
|
120 |
self.psList = psList |
|
121 |
format = self.format_list[self.format.get()][1] |
|
122 |
view = self.view_list[self.view.get()][1] |
|
123 |
self.frame.list.delete(0,Tkinter.AtEnd()) |
|
124 |
self.done=1 |
|
125 |
for item in self.hosts: |
|
126 |
if item == self.vf.ADstart_manage.localHost: |
|
127 |
cmdStr="ps %s %s"%(view,format) |
|
128 |
else: |
|
129 |
cmdStr="ssh " + item+ " -n \'ps %s %s\'"%(view,format) |
|
130 |
p=commands.getoutput(cmdStr) |
|
131 |
if p: |
|
132 |
list = string.splitfields(p,'\n') |
|
133 |
del list[0] |
|
134 |
for line in list: |
|
135 |
for ps in psList: |
|
136 |
if string.find(line, ps)>-1: |
|
137 |
#check here that the line has ps: autodock/autogrid
|
|
138 |
line = line + ' ' + item |
|
139 |
self.frame.list.insert(0,line) |
|
140 |
self.done=0 |
|
141 |
else: |
|
142 |
self.hosts.remove(item) |
|
143 |
return(self.hosts) |
|
144 |
||
145 |
||
146 |
def quit(self, event=None): |
|
147 |
self.master.withdraw() |
|
148 |
||
149 |
||
150 |
||
151 |
class ADProcessManager(MVCommand): |
|
152 |
||
153 |
def onAddCmdToViewer(self): |
|
154 |
if not self.vf.hasGui: |
|
155 |
self.root = Tkinter.Tk() |
|
156 |
self.root.withdraw() |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
157 |
root = self.root |
158 |
else: |
|
159 |
root = self.vf.GUI.ROOT |
|
160 |
self.hostVal=Tkinter.IntVar(master=root) |
|
161 |
self.macroVal=Tkinter.IntVar(master=root) |
|
162 |
self.top = Tkinter.Toplevel(master=root) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
163 |
self.top.withdraw() |
164 |
self.kill = ADKill(self.top) |
|
165 |
self.kill.vf = self.vf |
|
166 |
||
167 |
def __init__(self): |
|
168 |
MVCommand.__init__(self) |
|
169 |
self.localHost = socket.gethostname() |
|
170 |
self.invalid = 0 |
|
171 |
import AutoDockTools |
|
172 |
self.hostDict = AutoDockTools.hostDict |
|
173 |
self.currentHosts=None |
|
174 |
self.psList=None |
|
175 |
||
176 |
||
177 |
def addHost(self, host): |
|
178 |
if not self.currentHosts: self.currentHosts=[] |
|
179 |
if not host in self.currentHosts: |
|
180 |
self.currentHosts.append(host) |
|
181 |
||
182 |
def addProcess(self, ps): |
|
183 |
if not self.psList: self.psList=[] |
|
184 |
if not ps in self.psList: |
|
185 |
self.psList.append(ps) |
|
186 |
||
187 |
def adUpdate(self): |
|
188 |
#currentHosts should be all hosts of all active jobs
|
|
189 |
if not self.currentHosts: self.currentHosts=[] |
|
190 |
self.currentHosts = self.kill.do_update(self.psList,self.currentHosts) |
|
191 |
if self.kill.done: |
|
192 |
self.kill.master.withdraw() |
|
193 |
else: |
|
194 |
self.kill.after(100,self.adUpdate) |
|
195 |
||
196 |
def guiCallback(self, event=None): |
|
197 |
if not self.top.winfo_ismapped(): |
|
198 |
self.top.deiconify() |
|
199 |
self.kill.after(100, self.adUpdate) |
|
200 |
||
201 |
def __call__(self, **kw): |
|
202 |
apply(self.doitWrapper, (), kw) |
|
203 |
||
204 |
def doit(self): |
|
205 |
#kill
|
|
206 |
print 'killed' |
|
207 |
||
208 |
ADProcessManagerGUI=CommandGUI() |
|
209 |
ADProcessManagerGUI.addMenuCommand('AutoToolsBar', menuText['StartMB'], menuText['processManagerMB']) |
|
210 |
||
211 |
||
212 |
||
213 |
class AutoStarter(MVCommand): |
|
214 |
"""Base class for AutoGridStarter and AutoDockStarter, whose command structure is
|
|
215 |
very similar with a few differences such as programType, title for file browser, first letters of required parameter and log file extensions and the presence or absence of possible flags,etc """
|
|
216 |
||
217 |
||
218 |
def onAddCmdToViewer(self): |
|
219 |
if self.vf.hasGui: |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
220 |
self.hostVal=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
221 |
self.macroVal=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
222 |
self.projectVal=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
223 |
|
224 |
||
225 |
def __init__(self, program=None, dictObj=None, |
|
226 |
ifdTitle="Run BaseClass", |
|
227 |
browserPFTitle="baseclassPF", browserEXETitle='baseClass', |
|
228 |
browserLOGTitle="baseLog", logType='.base', |
|
229 |
pfType='.bpf', programType=None): |
|
230 |
||
231 |
MVCommand.__init__(self) |
|
232 |
self.program=program |
|
233 |
self.programType=programType |
|
234 |
self.dictObj = dictObj |
|
235 |
self.ifdTitle=ifdTitle |
|
236 |
self.browserPFTitle=browserPFTitle |
|
237 |
self.browserEXETitle=browserEXETitle |
|
238 |
self.browserLOGTitle=browserLOGTitle |
|
239 |
self.logType=logType |
|
240 |
self.pfType=pfType |
|
241 |
self.qT='int' |
|
242 |
self.command=None |
|
243 |
self.RemoteCommand=None |
|
244 |
self.nqeJobFile=None |
|
245 |
self.Host=None |
|
246 |
self.Exe=None |
|
247 |
self.FlagStr="" |
|
248 |
self.ParmFile=None |
|
249 |
self.LogFile=None |
|
250 |
self.Nice=20 |
|
251 |
#
|
|
252 |
self.localHost = socket.gethostname() |
|
253 |
self.invalid=0 |
|
254 |
import AutoDockTools |
|
255 |
self.hostDict=AutoDockTools.hostDict |
|
256 |
||
257 |
||
258 |
||
259 |
def guiCallback(self, event=None): |
|
260 |
#AutoStarter: dict is only self.vf.gpo since autodock is handled separately
|
|
261 |
self.customizeGUI() |
|
262 |
if not hasattr(self, 'form'): |
|
263 |
if self.vf.hasGui: |
|
264 |
#self.form = self.vf.getUserInput(self.ifd, scrolledFrame = 1, width = 1000, height = 300,modal=0, blocking=0)
|
|
265 |
self.form = self.vf.getUserInput(self.ifd, modal=0,blocking=0) |
|
266 |
self.form.root.protocol('WM_DELETE_WINDOW',self.Close_cb) |
|
267 |
self.topLevel = self.form.root |
|
268 |
else: |
|
269 |
## from ViewerFramework.gui import InputForm
|
|
270 |
from mglutil.gui.InputForm.Tk.gui import InputForm |
|
271 |
self.form = InputForm(self.vf.master,self.ifd,modal=0, blocking=0) |
|
272 |
self.form.root.protocol('WM_DELETE_WINDOW',self.Close_cb) |
|
273 |
self.topLevel = self.form.root |
|
274 |
if self.dictObj: |
|
275 |
self.dict=eval('self.vf.%s'%self.dictObj) |
|
276 |
if hasattr(self.vf, 'hasGui') and hasattr(self.vf, self.dictObj) and len(self.dict.gpf_filename): |
|
277 |
if self.paramFile.get()=='': |
|
278 |
self.paramFile.set(self.dict.gpf_filename) |
|
279 |
self.updateLF() |
|
280 |
#4/5 return seems better than leave
|
|
281 |
entryItems= ['lFentry','eXentry','pFentry','nqeTimeEntry','nqeCpuEntry',\ |
|
282 |
'pbsCpuEntry','pbsTimeEntry','pbsDirEntry','pbsWallTimeEntry',\ |
|
283 |
'pbsCpuEntry', 'niceEntry'] |
|
284 |
for item in entryItems: |
|
285 |
self.ifd.entryByName[item]['widget'].bind('<Return>', self.getCmd) |
|
286 |
self.ifd.entryByName['pFentry']['widget'].bind('<Return>', self.updateLF) |
|
287 |
self.ifd.entryByName['mNentry']['widget'].bind('<Return>', self.getMacro) |
|
288 |
self.ifd.entryByName['mNMenu']['widget'].bind('<ButtonPress>', self.buildMacroMenu, add='+') |
|
289 |
self.ifd.entryByName['hNentry']['widget'].bind('<Return>', self.getHost) |
|
290 |
self.intWids=['niceLab','niceEntry'] |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
291 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
292 |
for item in self.intWids: |
293 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
294 |
self.niceLevel.set('0') |
|
295 |
self.commonWids=['hNLab','hNentry','eXLab','eXentry','eXbutton', |
|
296 |
'pFLab','pFentry','pFbutton', |
|
297 |
'lFLab','lFentry','lFbutton'] |
|
298 |
self.nqeWids=['nqeCpuLab','nqeCpuEntry','nqeTimeLab','nqeTimeEntry'] |
|
299 |
self.pbsWids=['pbsCpuLab','pbsCpuEntry','pbsDirLab','pbsDirEntry','pbsTimeLab','pbsTimeEntry','pbsWallTimeLab','pbsWallTimeEntry','pbsRerunCB'] |
|
300 |
self.entWids=['pjLab','pjentry','pjMenu','nodesEntLab', |
|
301 |
'nodesEnt', 'gpfEntLab', 'gpfEnt','pdbqsEntLab','pdbqsEnt', |
|
302 |
'dpfEntLab','dpfEnt', 'pdbqEntLab','pdbqEnt', |
|
303 |
'jobDirEntLab','jobDirEnt', 'gpfFilterEnt', 'pdbqsFilterEnt', |
|
304 |
'dpfFilterEnt','pdbqFilterEnt'] |
|
305 |
self.entWidLCS=['gpfFiles','pdbqsFiles','dpfFiles','pdbqFiles'] |
|
306 |
self.entButs=[ 'uploadGpfFileBut','uploadPdbqFileBut', |
|
307 |
'uploadDpfFileBut','uploadPdbqsFileBut', 'monitorCB', |
|
308 |
'ftpBackCB'] |
|
309 |
self.getMacroVal(0) |
|
310 |
self.flagWids=[] |
|
311 |
self.form.autoSize() |
|
312 |
||
313 |
||
314 |
def updateLCS(self, key, event=None): |
|
315 |
if not entropiaPresent: return |
|
316 |
keyList= ['gpf','pdbqs','dpf','pdbq'] |
|
317 |
itemList= ['gpfFiles','pdbqsFiles','dpfFiles','pdbqFiles'] |
|
318 |
fileList=[self.EntropiaUI.gpf_list,self.EntropiaUI.pdbqs_list,self.EntropiaUI.dpf_list,self.EntropiaUI.pdbq_list] |
|
319 |
#compile the re items if any
|
|
320 |
reList=[] |
|
321 |
for filterStr in [self.gpfFilter.get(),self.pdbqsFilter.get(),self.dpfFilter.get(), self.pdbqFilter.get()]: |
|
322 |
reList.append(re.compile(filterStr)) |
|
323 |
if key: |
|
324 |
ind=keyList.index(key) |
|
325 |
item=itemList[ind] |
|
326 |
files=fileList[ind] |
|
327 |
reitem=reList[ind] |
|
328 |
lb=self.ifd.entryByName[item]['widget'].lb |
|
329 |
lb.delete(0,'end') |
|
330 |
for f in files: |
|
331 |
match=reitem.match(f) |
|
332 |
if match!=None: |
|
333 |
lb.insert(lb.index('end'),match.string) |
|
334 |
#lb.insert(lb.index('end'),f)
|
|
335 |
else: |
|
336 |
for i in range(4): |
|
337 |
#'gpfFiles','pdbqsFiles','dpfFiles','pdbqFiles'
|
|
338 |
item=itemList[i] |
|
339 |
files=fileList[i] |
|
340 |
reitem=reList[i] |
|
341 |
lb=self.ifd.entryByName[item]['widget'].lb |
|
342 |
lb.delete(0,'end') |
|
343 |
for f in files: |
|
344 |
match=reitem.match(f) |
|
345 |
if match!=None: |
|
346 |
lb.insert(lb.index('end'), match.string) |
|
347 |
||
348 |
||
349 |
def uploadFiles(self,key, event=None): |
|
350 |
if not entropiaPresent: return |
|
351 |
titleStr='Upload '+key+' file:' |
|
352 |
newfile=self.vf.askFileOpen(types=[(key,'*'+key)], title=titleStr) |
|
353 |
if newfile: |
|
354 |
try: |
|
355 |
self.EntropiaUI.upload(newfile) |
|
356 |
except EntropiaError, msg: |
|
357 |
self.vf.warningMsg(msg) |
|
358 |
return
|
|
359 |
self.updateLCS(key[1:]) |
|
360 |
||
361 |
def setFile(self,item,event=None): |
|
362 |
pass
|
|
363 |
||
364 |
def customizeGUI(self): |
|
365 |
#AutoStarter
|
|
366 |
if not hasattr(self, 'ifd'): |
|
367 |
#for the moment:
|
|
368 |
self.gpf_list=[] |
|
369 |
self.dpf_list=[] |
|
370 |
self.pdbq_list=[] |
|
371 |
self.pdbqs_list=[] |
|
372 |
||
373 |
#self.gpfFileList=['h2.gpf','hpi1s.gpf']
|
|
374 |
#self.dpfFileList=['h2.dpf','hpi1s.dpf']
|
|
375 |
#self.pdbqFileList=['h2.out.pdbq','hpi1s.out.pdbq']
|
|
376 |
#self.pdbqsFileList=['1crn.pdbqs','1hvr.pdbqs']
|
|
377 |
ifd=self.ifd=InputFormDescr(title=self.ifdTitle) |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
378 |
self.execPath = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
379 |
self.workingDirPath = Tkinter.StringVar(master=self.vf.GUI.ROOT, value = os.getcwd() ) # N3P |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
380 |
self.queueType = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
381 |
self.queueType.set('int') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
382 |
self.jobFile = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
383 |
self.jobFile.set('') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
384 |
self.paramFile = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
385 |
self.paramFile.set('') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
386 |
self.niceLevel=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
387 |
self.niceLevel.set('20') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
388 |
self.nqeTime=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
389 |
self.nqeTime.set('144000') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
390 |
self.nqeCpu=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
391 |
self.nqeCpu.set('1') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
392 |
self.pbsCpu=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
393 |
self.pbsCpu.set('1') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
394 |
self.pbsCpuTime=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
395 |
self.pbsCpuTime.set('24:00:00') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
396 |
self.pbsWallTime=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
397 |
self.pbsWallTime.set('24:30:00') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
398 |
self.pbsRerun=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
399 |
self.pbsRerun.set('y') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
400 |
self.logFile = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
401 |
self.cmd = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
402 |
self.setUpFlagVars() |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
403 |
self.pidStr = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
404 |
self.macroName = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
405 |
self.hostName = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
406 |
self.remoteDir = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
407 |
try: |
408 |
usr = os.environ['USER'] |
|
409 |
self.remoteDir.set('/usr/people/'+usr) |
|
410 |
except: |
|
411 |
self.remoteDir.set('./') |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
412 |
self.showMacroMenu = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
413 |
self.showHostMenu = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
414 |
#the tkinter variables for the entropia stuff
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
415 |
self.projectName=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
416 |
self.gpf=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
417 |
self.dpf=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
418 |
self.pdbq=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
419 |
self.pdbqs=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
420 |
self.jobDir=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
421 |
if entropiaPresent: |
422 |
self.jobDir.set(entropia_job_dir + 'job_id') |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
423 |
self.nodes=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
424 |
self.nodes.set('1') |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
425 |
self.gpfFilter=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
426 |
self.pdbqsFilter=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
427 |
self.dpfFilter=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
428 |
self.pdbqFilter=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
429 |
self.monitorVar=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
430 |
self.ftpBackVar=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
431 |
ifd.append( {'name': 'mNLab', |
432 |
'widgetType': Tkinter.Label, |
|
433 |
'text': 'Macro Name:', |
|
434 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
435 |
ifd.append( {'name': 'mNentry', |
|
436 |
'widgetType':Tkinter.Entry, |
|
437 |
'wcfg':{ |
|
438 |
'width':25, |
|
439 |
'textvariable': self.macroName,}, |
|
440 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
441 |
ifd.append( {'name': 'mNMenu', |
|
442 |
'widgetType':Tkinter.Menubutton, |
|
443 |
'text': 'macros', |
|
444 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':2}}) |
|
445 |
ifd.append( {'name': 'hNLab', |
|
446 |
'widgetType': Tkinter.Label, |
|
447 |
'text': 'Host Name:', |
|
448 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
449 |
ifd.append( {'name': 'hNentry', |
|
450 |
'widgetType':Tkinter.Entry, |
|
451 |
'wcfg':{ |
|
452 |
'width':25, |
|
453 |
'textvariable': self.hostName, |
|
454 |
},
|
|
455 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
456 |
|
457 |
||
458 |
# here you define the working directory
|
|
459 |
# N3P trace
|
|
460 |
ifd.append( {'name': 'wDLab', |
|
461 |
'widgetType': Tkinter.Label, |
|
462 |
'text': 'Working Directory:', |
|
463 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
464 |
ifd.append( {'name': 'wDentry', |
|
465 |
'widgetType':Tkinter.Label, |
|
466 |
'wcfg':{ |
|
467 |
'width':65, |
|
468 |
'justify':Tkinter.LEFT, |
|
469 |
'textvariable': self.workingDirPath, |
|
470 |
},
|
|
471 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1, 'columnspan':12}}) |
|
472 |
ifd.append({'name': 'wDbutton', |
|
473 |
'widgetType': Tkinter.Button, |
|
474 |
'text':'Browse', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
475 |
'wcfg':{'bd':2}, |
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
476 |
'command':self.browseWD, |
477 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':13}}) |
|
478 |
||
479 |
# # # # # N3P trace
|
|
480 |
||
481 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
482 |
ifd.append( {'name': 'eXLab', |
483 |
'widgetType': Tkinter.Label, |
|
484 |
'text': 'Program Pathname:', |
|
485 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
486 |
ifd.append( {'name': 'eXentry', |
|
487 |
'widgetType':Tkinter.Entry, |
|
488 |
'wcfg':{ |
|
489 |
'width':65, |
|
490 |
'textvariable': self.execPath, |
|
491 |
},
|
|
492 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1, 'columnspan':12}}) |
|
493 |
ifd.append({'name': 'eXbutton', |
|
494 |
'widgetType': Tkinter.Button, |
|
495 |
'text':'Browse', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
496 |
'wcfg':{'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
497 |
'command':self.browseEX, |
498 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':13}}) |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
499 |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
500 |
ifd.append( {'name': 'pFLab', |
501 |
'widgetType': Tkinter.Label, |
|
502 |
'text': 'Parameter Filename:', |
|
503 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
504 |
ifd.append( {'name': 'pFentry', |
|
505 |
'widgetType':Tkinter.Entry, |
|
506 |
'wcfg':{ |
|
507 |
'width':65, |
|
508 |
'textvariable': self.paramFile, |
|
509 |
},
|
|
510 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1, 'columnspan':12}}) |
|
511 |
ifd.append({'name': 'pFbutton', |
|
512 |
'widgetType': Tkinter.Button, |
|
513 |
'text':'Browse', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
514 |
'wcfg':{'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
515 |
'command':self.browsePF, |
516 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':13}}) |
|
517 |
ifd.append( {'name': 'lFLab', |
|
518 |
'widgetType': Tkinter.Label, |
|
519 |
'text': 'Log Filename:', |
|
520 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
521 |
ifd.append( {'name': 'lFentry', |
|
522 |
'widgetType':Tkinter.Entry, |
|
523 |
'wcfg':{ |
|
524 |
'width':65, |
|
525 |
'textvariable': self.logFile, |
|
526 |
},
|
|
527 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1, 'columnspan':12}}) |
|
528 |
ifd.append({'name': 'lFbutton', |
|
529 |
'widgetType': Tkinter.Button, |
|
530 |
'text':'Browse', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
531 |
'wcfg':{'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
532 |
'command':self.browseLF, |
533 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':13}}) |
|
534 |
self.getFlags() |
|
535 |
ifd.append({'name':'niceLab', |
|
536 |
'widgetType':Tkinter.Label, |
|
537 |
'text': 'Nice Level:', |
|
538 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
539 |
ifd.append( {'name': 'niceEntry', |
|
540 |
'widgetType':Tkinter.Entry, |
|
541 |
'wcfg':{ |
|
542 |
'width':25, |
|
543 |
'textvariable': self.niceLevel, |
|
544 |
},
|
|
545 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
546 |
ifd.append({'name':'pbsDirLab', |
|
547 |
'widgetType':Tkinter.Label, |
|
548 |
'text': 'PBS: Remote Directory:', |
|
549 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
550 |
ifd.append( {'name': 'pbsDirEntry', |
|
551 |
'widgetType':Tkinter.Entry, |
|
552 |
'wcfg':{ |
|
553 |
'width':65, |
|
554 |
'textvariable': self.remoteDir, |
|
555 |
},
|
|
556 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1, 'columnspan':12}}) |
|
557 |
ifd.append({'name':'nqeTimeLab', |
|
558 |
'widgetType':Tkinter.Label, |
|
559 |
'text': 'NQE: Time Limit:', |
|
560 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
561 |
ifd.append( {'name': 'nqeTimeEntry', |
|
562 |
'widgetType':Tkinter.Entry, |
|
563 |
'wcfg':{ |
|
564 |
'width':25, |
|
565 |
'textvariable': self.nqeTime, |
|
566 |
},
|
|
567 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
568 |
ifd.append({'name':'pbsTimeLab', |
|
569 |
'widgetType':Tkinter.Label, |
|
570 |
'text': 'PBS: CpuTime Limit:', |
|
571 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
572 |
ifd.append( {'name': 'pbsTimeEntry', |
|
573 |
'widgetType':Tkinter.Entry, |
|
574 |
'wcfg':{ |
|
575 |
'width':25, |
|
576 |
'textvariable': self.pbsCpuTime, |
|
577 |
},
|
|
578 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
579 |
ifd.append({'name':'pbsWallTimeLab', |
|
580 |
'widgetType':Tkinter.Label, |
|
581 |
'text': 'PBS: WallTime Limit:', |
|
582 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
583 |
ifd.append( {'name': 'pbsWallTimeEntry', |
|
584 |
'widgetType':Tkinter.Entry, |
|
585 |
'wcfg':{ |
|
586 |
'width':25, |
|
587 |
'textvariable': self.pbsWallTime, |
|
588 |
},
|
|
589 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
590 |
ifd.append({'name':'pbsRerunCB', |
|
591 |
'widgetType':Tkinter.Checkbutton, |
|
592 |
'text': 'PBS: Rerun on System Crash', |
|
593 |
'onvalue':'y', |
|
594 |
'offvalue':'n', |
|
595 |
'variable':self.pbsRerun, |
|
596 |
'command': self.getCmd, |
|
597 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'columnspan':2}}) |
|
598 |
ifd.append({'name':'pbsCpuLab', |
|
599 |
'widgetType':Tkinter.Label, |
|
600 |
'text': 'PBS: Number of Processors:', |
|
601 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
602 |
ifd.append( {'name': 'pbsCpuEntry', |
|
603 |
'widgetType':Tkinter.Entry, |
|
604 |
'wcfg':{ |
|
605 |
'width':25, |
|
606 |
'textvariable': self.pbsCpu, |
|
607 |
},
|
|
608 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
609 |
ifd.append({'name':'nqeCpuLab', |
|
610 |
'widgetType':Tkinter.Label, |
|
611 |
'text': 'NQE: Number of Processors:', |
|
612 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
613 |
ifd.append( {'name': 'nqeCpuEntry', |
|
614 |
'widgetType':Tkinter.Entry, |
|
615 |
'wcfg':{ |
|
616 |
'width':25, |
|
617 |
'textvariable': self.nqeCpu, |
|
618 |
},
|
|
619 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
620 |
#next the widgets for entropia widgets:
|
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
621 |
self.showProjectMenu = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
622 |
ifd.append( {'name': 'pjLab', |
623 |
'widgetType': Tkinter.Label, |
|
624 |
'text': 'project:', |
|
625 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
626 |
ifd.append( {'name': 'pjentry', |
|
627 |
'widgetType':Tkinter.Entry, |
|
628 |
'wcfg':{ |
|
629 |
'width':25, |
|
630 |
'textvariable': self.projectName, |
|
631 |
},
|
|
632 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
633 |
ifd.append( {'name': 'pjMenu', |
|
634 |
'widgetType':Tkinter.Menubutton, |
|
635 |
'text': 'projects', |
|
636 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':2}}) |
|
637 |
ifd.append({'name':'nodesEntLab', |
|
638 |
'widgetType':Tkinter.Label, |
|
639 |
'text': 'number of nodes', |
|
640 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
641 |
ifd.append( {'name': 'nodesEnt', |
|
642 |
'widgetType':Tkinter.Entry, |
|
643 |
'wcfg':{ |
|
644 |
'width':25, |
|
645 |
'textvariable': self.nodes, |
|
646 |
},
|
|
647 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
648 |
ifd.append({'name':'gpfEntLab', |
|
649 |
'widgetType':Tkinter.Label, |
|
650 |
'text': 'gpf file', |
|
651 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
652 |
ifd.append( {'name': 'gpfEnt', |
|
653 |
'widgetType':Tkinter.Entry, |
|
654 |
'wcfg':{ |
|
655 |
'width':25, |
|
656 |
'textvariable': self.gpf, |
|
657 |
},
|
|
658 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
659 |
ifd.append({'name':'pdbqsEntLab', |
|
660 |
'widgetType':Tkinter.Label, |
|
661 |
'text': 'pdbqs file', |
|
662 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
663 |
ifd.append( {'name': 'pdbqsEnt', |
|
664 |
'widgetType':Tkinter.Entry, |
|
665 |
'wcfg':{ |
|
666 |
'width':25, |
|
667 |
'textvariable': self.pdbqs, |
|
668 |
},
|
|
669 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
670 |
ifd.append({'name':'dpfEntLab', |
|
671 |
'widgetType':Tkinter.Label, |
|
672 |
'text': 'dpf file', |
|
673 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
674 |
ifd.append( {'name': 'dpfEnt', |
|
675 |
'widgetType':Tkinter.Entry, |
|
676 |
'wcfg':{ |
|
677 |
'width':25, |
|
678 |
'textvariable': self.dpf, |
|
679 |
},
|
|
680 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
681 |
ifd.append({'name':'pdbqEntLab', |
|
682 |
'widgetType':Tkinter.Label, |
|
683 |
'text': 'pdbq file', |
|
684 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
685 |
ifd.append( {'name': 'pdbqEnt', |
|
686 |
'widgetType':Tkinter.Entry, |
|
687 |
'wcfg':{ |
|
688 |
'width':25, |
|
689 |
'textvariable': self.pdbq, |
|
690 |
},
|
|
691 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
692 |
ifd.append( {'name': 'monitorCB', |
|
693 |
'widgetType':Tkinter.Checkbutton, |
|
694 |
'text': 'Monitor job', |
|
695 |
'variable': self.monitorVar, |
|
696 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':2}}) |
|
697 |
ifd.append({'name':'jobDirEntLab', |
|
698 |
'widgetType':Tkinter.Label, |
|
699 |
'text': 'job directory', |
|
700 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
701 |
ifd.append( {'name': 'jobDirEnt', |
|
702 |
'widgetType':Tkinter.Entry, |
|
703 |
'wcfg':{ |
|
704 |
'width':25, |
|
705 |
'textvariable': self.jobDir, |
|
706 |
},
|
|
707 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
708 |
ifd.append( {'name': 'ftpBackCB', |
|
709 |
'widgetType':Tkinter.Checkbutton, |
|
710 |
'text': 'FTP back', |
|
711 |
'variable': self.ftpBackVar, |
|
712 |
'gridcfg':{'sticky':Tkinter.W,'row':-1, 'column':2}}) |
|
713 |
ifd.append( {'name': 'cmdentry', |
|
714 |
'widgetType':Tkinter.Entry, |
|
715 |
'wcfg':{ |
|
716 |
'width':90, |
|
717 |
'label': 'Cmd :', |
|
718 |
'textvariable': self.cmd, |
|
719 |
},
|
|
720 |
'gridcfg':{'sticky':Tkinter.W+Tkinter.E ,'columnspan':15}}) |
|
721 |
ifd.append({'widgetType': Tkinter.Button, |
|
722 |
'text':'Launch', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
723 |
'wcfg':{'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
724 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'columnspan':3}, |
725 |
'command':self.callDoit_cb}) |
|
726 |
ifd.append({'widgetType': Tkinter.Button, |
|
727 |
'text':'Cancel', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
728 |
'wcfg':{'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
729 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'row':-1,'column':3,'columnspan':2}, |
730 |
'command':self.Close_cb}) |
|
731 |
#last the widgets for the Entropia lists:
|
|
732 |
#ifd.append({'name':'gpfFilterLab',
|
|
733 |
#'widgetType':Tkinter.Label,
|
|
734 |
#'text': 'gpf file filter',
|
|
735 |
#'gridcfg':{'sticky':Tkinter.E}})
|
|
736 |
ifd.append({'name': 'gpfFilterEnt', |
|
737 |
'widgetType':Tkinter.Entry, |
|
738 |
'wcfg':{ |
|
739 |
'width':25, |
|
740 |
'textvariable': self.gpfFilter, |
|
741 |
},
|
|
742 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
743 |
#ifd.append({'name':'pdbqsFilterLab',
|
|
744 |
#'widgetType':Tkinter.Label,
|
|
745 |
#'text': 'pdbqs file filter',
|
|
746 |
#'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':4}})
|
|
747 |
ifd.append( {'name': 'pdbqsFilterEnt', |
|
748 |
'widgetType':Tkinter.Entry, |
|
749 |
'wcfg':{ |
|
750 |
'width':25, |
|
751 |
'textvariable': self.pdbqsFilter, |
|
752 |
},
|
|
753 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
754 |
#ifd.append({'name':'dpfFilterLab',
|
|
755 |
#'widgetType':Tkinter.Label,
|
|
756 |
#'text': 'dpf file filter',
|
|
757 |
#'gridcfg':{'sticky':Tkinter.E}})
|
|
758 |
ifd.append( {'name': 'dpfFilterEnt', |
|
759 |
'widgetType':Tkinter.Entry, |
|
760 |
'wcfg':{ |
|
761 |
'width':25, |
|
762 |
'textvariable': self.dpfFilter, |
|
763 |
},
|
|
764 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':2}}) |
|
765 |
#ifd.append({'name':'pdbqFilterLab',
|
|
766 |
#'widgetType':Tkinter.Label,
|
|
767 |
#'text': 'pdbq file filter',
|
|
768 |
#'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':6}})
|
|
769 |
ifd.append( {'name': 'pdbqFilterEnt', |
|
770 |
'widgetType':Tkinter.Entry, |
|
771 |
'wcfg':{ |
|
772 |
'width':25, |
|
773 |
'textvariable': self.pdbqFilter, |
|
774 |
},
|
|
775 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':3}}) |
|
776 |
ifd.append({'widgetType':'ListChooser', |
|
777 |
'name':'gpfFiles', |
|
778 |
'entries':self.gpf_list, |
|
779 |
'mode':'single', |
|
780 |
'title':'Select gpf file', |
|
781 |
'lbwcfg':{'height':5,'selectforeground':'red','exportselection':0}, |
|
782 |
'command':CallBackFunction(self.setFile,'gpfFiles'), |
|
783 |
'gridcfg':{'sticky':'w','rowspan':5}}) |
|
784 |
ifd.append({'widgetType':'ListChooser', |
|
785 |
'name':'pdbqsFiles', |
|
786 |
'entries':self.pdbqs_list, |
|
787 |
'mode':'single', |
|
788 |
'lbwcfg':{'height':5, 'selectforeground':'red','exportselection':0}, |
|
789 |
'command':CallBackFunction(self.setFile,'pdbqsFiles'), |
|
790 |
'title':'Select pdbqs file', |
|
791 |
'gridcfg':{'sticky':'w','column':1,'row':-5, |
|
792 |
'rowspan':5}}) |
|
793 |
ifd.append({'widgetType':'ListChooser', |
|
794 |
'name':'dpfFiles', |
|
795 |
'entries':self.dpf_list, |
|
796 |
'title':'Select dpf file', |
|
797 |
'mode':'single', |
|
798 |
'lbwcfg':{'height':5, 'selectforeground':'red','exportselection':0}, |
|
799 |
'command':CallBackFunction(self.setFile,'dpfFiles'), |
|
800 |
'gridcfg':{'sticky':'w','column':2,'row':-9, |
|
801 |
'rowspan':5}}) |
|
802 |
ifd.append({'widgetType':'ListChooser', |
|
803 |
'name':'pdbqFiles', |
|
804 |
'entries':self.pdbq_list, |
|
805 |
'title':'Select pdbq file', |
|
806 |
'mode':'single', |
|
807 |
'command':CallBackFunction(self.setFile,'pdbqFiles'), |
|
808 |
'lbwcfg':{'height':5, 'selectforeground':'red','exportselection':0}, |
|
809 |
'gridcfg':{'sticky':'w','column':3,'row':-13, |
|
810 |
'rowspan':5}}) |
|
811 |
ifd.append({'name':'uploadGpfFileBut', |
|
812 |
'widgetType':Tkinter.Button, |
|
813 |
'text': 'Upload gpf File', |
|
814 |
'command': CallBackFunction(self.uploadFiles,'.gpf'), |
|
815 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W}}) |
|
816 |
ifd.append({'name':'uploadPdbqsFileBut', |
|
817 |
'widgetType':Tkinter.Button, |
|
818 |
'text': 'Upload pdbqs File', |
|
819 |
'command': CallBackFunction(self.uploadFiles,'.pdbqs'), |
|
820 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'column':1, 'row':-1}}) |
|
821 |
ifd.append({'name':'uploadDpfFileBut', |
|
822 |
'widgetType':Tkinter.Button, |
|
823 |
'text': 'Upload dpf File', |
|
824 |
'command': CallBackFunction(self.uploadFiles,'.dpf'), |
|
825 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'column':2, 'row':-1}}) |
|
826 |
ifd.append({'name':'uploadPdbqFileBut', |
|
827 |
'widgetType':Tkinter.Button, |
|
828 |
'text': 'Upload pdbq File', |
|
829 |
'command': CallBackFunction(self.uploadFiles,'.pdbq'), |
|
830 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'column':3, 'row':-1}}) |
|
831 |
else: |
|
832 |
if hasattr(self, 'form') and self.form!=None: |
|
833 |
self.form.deiconify() |
|
834 |
self.form.autoSize() |
|
835 |
||
836 |
||
837 |
def Close_cb(self, event=None): |
|
838 |
self.form.root.withdraw() |
|
839 |
||
840 |
def callDoit_cb(self, event = None): |
|
841 |
self.doitWrapper(self.cmd.get(),log=1,redraw=0) |
|
842 |
||
843 |
def setUpFlagVars(self): |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
844 |
self.flagVar = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
845 |
self.flagVar.set(0) |
846 |
||
847 |
def getFlags(self): |
|
848 |
pass
|
|
849 |
||
850 |
def __call__(self, cmd, ask=1, **kw): |
|
851 |
kw['ask']=ask |
|
852 |
apply(self.doitWrapper, (cmd,), kw) |
|
853 |
||
854 |
||
855 |
def doit(self, cmd, ask=1): |
|
856 |
"AutoStarter:"
|
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
857 |
|
858 |
curdir=self.workingDirPath.get() # N3P |
|
859 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
860 |
if string.find(curdir, 'tmp_mnt')>=0: |
861 |
curdir=curdir[8:] |
|
862 |
if self.vf.hasGui: |
|
863 |
self.qT=self.queueType.get() |
|
864 |
self.Host=self.hostName.get() |
|
865 |
self.nqeJobFile=self.jobFile.get() |
|
866 |
self.pF=self.paramFile.get() |
|
867 |
if self.qT=='int': |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
868 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
869 |
#need to remove the & and flip the backslashes...
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
870 |
# #cmd=string.replace(cmd,'/','\\') # N3P use os.path.normpath!
|
871 |
cmd = os.path.normpath(cmd) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
872 |
afterID = None |
873 |
if cmd[-1]=='&': |
|
874 |
cmd=cmd[:-1] |
|
875 |
cmd = cmd.split(' -p ') |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
876 |
logfile_user = None |
877 |
parfile_user = None |
|
878 |
bin_name = None |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
879 |
if len(cmd) > 1: |
880 |
cmd[1] = cmd[1].split('-l') |
|
881 |
if len(cmd[1]) > 1: |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
882 |
#print "[DPF] cmd[1][0]", cmd[1][0]
|
883 |
||
884 |
# dpf name parsed and quote-protected here
|
|
885 |
cmd[1][0] = "\"%s\"" % cmd[1][0].strip() |
|
886 |
parfile_user = cmd[1][0] |
|
887 |
||
888 |
# dlg name parsed and quote-protected here
|
|
889 |
cmd[1][1] = "\"%s\"" % cmd[1][1].strip() |
|
890 |
logfile_user = cmd[1][1] |
|
891 |
||
892 |
# Removed 2011/11 because it was harmful for the cmd[1][1]/output file
|
|
893 |
#if cmd[1][1] and self.vf.hasGui:
|
|
894 |
# afterID = self.vf.GUI.ROOT.after(500, self.saveLog, cmd[1][1])
|
|
895 |
||
896 |
cmd[1] = cmd[1][0] |
|
897 |
||
898 |
# binary command
|
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
899 |
cmd[0] = cmd[0].strip() |
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
900 |
if "autodock" in cmd[0]: |
901 |
bin_name = "AutoDock" |
|
902 |
elif "autogrid" in cmd[0]: |
|
903 |
bin_name = "AutoGrid" |
|
904 |
||
905 |
# parameter file check
|
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
906 |
if not cmd[1]: |
907 |
if self.vf.hasGui: |
|
908 |
tkMessageBox.showerror("Error!","Please specify parameter file.", |
|
909 |
parent=self.topLevel) |
|
910 |
return
|
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
911 |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
912 |
cmd = [cmd[0], '-p', cmd[1]] |
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
913 |
#print "DPF>", parfile_user
|
914 |
if logfile_user: |
|
915 |
cmd.append("-l") |
|
916 |
cmd.append(("%s" % logfile_user )) |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
917 |
|
918 |
# execute the command on Windows
|
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
919 |
# by creating and executing a Windows batch file (.bat) # N3P
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
920 |
|
921 |
# add the cd command to move into the working directory # N3P
|
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
922 |
wd = os.path.normpath( self.workingDirPath.get() ) # normalize the path |
923 |
wd = os.path.expanduser(wd) # try to resolve "~" if present in the path |
|
924 |
filename = '%s\\adt_job.bat' % wd # batch filename |
|
925 |
drive = "" |
|
926 |
||
927 |
# important to manage jobs running on drives other than the current one (C:, D:, ....)
|
|
928 |
if ":" in wd: drive = "%s:\n" % (wd.split(":")[0]) |
|
929 |
||
930 |
# batch filename and its commands
|
|
931 |
fp_job = open(filename, 'w') |
|
932 |
fp_job.write("@echo off\n") |
|
933 |
fp_job.write("echo.\n") |
|
934 |
if bin_name: fp_job.write("echo CALCULATION TYPE: %s\n" % bin_name) |
|
935 |
fp_job.write("echo WORKING PATH : \"%s\"\n" % wd ) |
|
936 |
fp_job.write("echo PARAMETER FILE : %s\n" % parfile_user ) |
|
937 |
fp_job.write("echo LOG FILE : %s\n" % logfile_user ) |
|
938 |
fp_job.write("echo.\n") |
|
939 |
fp_job.write("echo [ ... running ...] \n" ) |
|
940 |
||
941 |
wd_change = drive |
|
942 |
wd_change += "cd \"%s\"\n" % wd |
|
943 |
fp_job.write(wd_change) |
|
944 |
text_cmd = " ".join(cmd) |
|
945 |
fp_job.write(text_cmd+"\n") |
|
946 |
fp_job.close() |
|
947 |
#self.WinCmd = SysCmdInThread(cmd, shell=False)
|
|
948 |
self.WinCmd = SysCmdInThread(filename, input=None, shell=False) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
949 |
self.WinCmd.start() |
950 |
else: |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
951 |
|
952 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
953 |
bin = cmd.split()[0] |
954 |
if os.system("which "+bin) != 0: |
|
955 |
if self.vf.hasGui: |
|
956 |
tkMessageBox.showerror("Error!", bin + " not found. Please include "+bin+" in your path.", |
|
957 |
parent=self.topLevel) |
|
958 |
return
|
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
959 |
# execute the command on posix
|
960 |
# add the cd command to move into the working directory # N3P
|
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
961 |
wd = os.path.normpath( self.workingDirPath.get() ) # normalize the path |
962 |
wd = os.path.expanduser(wd) # try to resolve "~" if present in the path |
|
963 |
cmd = ("cd \"%s\" ; "+cmd ) % wd |
|
1.1.9
by Thorsten Alteholz
Import upstream version 1.5.6~rc3~cvs.20120206 |
964 |
print "WD>", wd |
965 |
print "cmd>", cmd |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
966 |
#fp = open(wd+os.sep+"testing.sh", 'w')
|
967 |
#fp.write(cmd)
|
|
968 |
#fp.close()
|
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
969 |
os.system(cmd) |
970 |
if ask: |
|
971 |
self.vf.ADstart_manage.addHost(self.Host) |
|
972 |
self.vf.ADstart_manage.addProcess(self.programType) |
|
973 |
self.vf.ADstart_manage.guiCallback() |
|
974 |
elif self.qT=='nqe': |
|
975 |
if self.nqeJobFile == None: |
|
976 |
jobFile = self.makeJobFile(self.pF) |
|
977 |
if self.vf.hasGui:self.jobFile.set(jobFile) |
|
978 |
self.feedback = commands.getoutput(cmd) |
|
979 |
if ask and self.vf.hasGui:self.vf.warningMsg(self.feedback) |
|
980 |
elif self.qT=='pbs': |
|
981 |
t='PBS not yet implemented' |
|
982 |
self.vf.warningMsg(t) |
|
983 |
return 'ERROR' |
|
984 |
if self.nqeJobFile == None: |
|
985 |
jobFile = self.makeJobFile(self.pF) |
|
986 |
if self.vf.hasGui:self.jobFile.set(jobFile) |
|
987 |
print 'cmd' |
|
988 |
#self.feedback = commands.getoutput(cmd)
|
|
989 |
#if ask and self.vf.hasGui:self.vf.warningMsg(self.feedback)
|
|
990 |
elif self.qT=='ent' and entropiaPresent: |
|
991 |
print 'calling Entropia launch with ', cmd, self.projectName.get(), \ |
|
992 |
'monitor_job=',self.monitorVar.get(),'ftp_back=',self.ftpBackVar.get() |
|
993 |
try: |
|
994 |
jobid=self.EntropiaUI.launch(cmd,self.projectName.get(),\ |
|
995 |
monitor_job=self.monitorVar.get(),ftp_back=self.ftpBackVar.get()) |
|
996 |
except EntropiaError, msg: |
|
997 |
self.vf.warningMsg(msg) |
|
998 |
return 'ERROR' |
|
999 |
if jobid: |
|
1000 |
self.jobDir.set(entropia_job_dir+str(jobid)) |
|
1001 |
msg='Entropia job started as:\n'+str(jobid) |
|
1002 |
self.vf.warningMsg(msg) |
|
1003 |
else: |
|
1004 |
msg ='unknown queuetype', self.qT |
|
1005 |
if ask and self.vf.hasGui: |
|
1006 |
self.vf.warningMsg(msg) |
|
1007 |
return
|
|
1008 |
if hasattr(self, 'form') and self.qT!='ent':self.form.root.withdraw() |
|
1009 |
||
1010 |
def saveLog(self, logPath): |
|
1011 |
"""Checks the queue for results until we get one"""
|
|
1012 |
if self.WinCmd.ok.configure()['state'][-1] == 'normal': |
|
1013 |
if not hasattr(self.WinCmd,'com'): |
|
1014 |
return
|
|
1015 |
txt =self.WinCmd.stdoutTk.component('text').get(1.0,'end') |
|
1016 |
#txt = txt.split('\n')
|
|
1017 |
ind = txt.find("\n") |
|
1018 |
txt = txt[ind+1:] #this should get rid of the first line |
|
1019 |
ind = txt.find("Successful Completion") |
|
1020 |
if not ind == -1: |
|
1021 |
ind1 = txt[:ind].rfind("\n") |
|
1022 |
ind2 = ind + txt[ind:].find("\n") + 1 |
|
1023 |
if txt[ind1-5:ind1] == "____\n": |
|
1024 |
ind1 = txt[:ind1-5].rfind("\n") |
|
1025 |
ind2 = ind2+3 + txt[ind2+2:].find("\n") |
|
1026 |
tmp_txt = txt[:ind1] |
|
1027 |
tmp_txt += txt[ind2:] |
|
1028 |
txt = tmp_txt |
|
1029 |
f = open(logPath,'w') |
|
1030 |
f.write(txt) |
|
1031 |
f.close() |
|
1032 |
import winsound |
|
1033 |
winsound.MessageBeep() |
|
1034 |
return
|
|
1035 |
self.vf.GUI.ROOT.after(300,self.saveLog, logPath) |
|
1036 |
||
1037 |
def makeJobFile(self, pFName): |
|
1038 |
"""AutoStarter:"""
|
|
1039 |
#NOT FINISHED:
|
|
1040 |
#MUST PUT COPY OF JOB FILE ON REMOTE MACHINE!?!
|
|
1041 |
if not pFName: return '' |
|
1042 |
if self.qT=='int': |
|
1043 |
return '' |
|
1044 |
elif self.qT=='nqe': |
|
1045 |
curdir=os.getcwd() |
|
1046 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
1047 |
curdir=curdir[8:] |
|
1048 |
dName = curdir |
|
1049 |
elif self.qT == 'pbs': |
|
1050 |
t='PBS not yet implemented' |
|
1051 |
self.vf.warningMsg(t) |
|
1052 |
return
|
|
1053 |
curdir=os.getcwd() |
|
1054 |
dName = self.remoteDir.get() |
|
1055 |
else: |
|
1056 |
msg = 'unknown queuetype->' + self.qT |
|
1057 |
self.vf.warningMsg(msg) |
|
1058 |
return
|
|
1059 |
msg='self.'+self.name+'.makeJobFile(' + pFName+')' |
|
1060 |
self.vf.log(msg) |
|
1061 |
pName = os.path.split(pFName)[-1] |
|
1062 |
pnum=string.rfind(pName, '.') |
|
1063 |
pStem =pName[:pnum] |
|
1064 |
jobFile = pStem + '.j' |
|
1065 |
fptr= open(jobFile, 'w') |
|
1066 |
if self.qT=='nqe': |
|
1067 |
jobStr='cd '+dName+";"+self.Exe+" -p "+pName+" -l "+self.LogFile+"\n" |
|
1068 |
fptr.write(jobStr) |
|
1069 |
else: |
|
1070 |
outstring = '#PBS -l nodes=' + self.pbsCpu.get() |
|
1071 |
fptr.write(outstring) |
|
1072 |
outstring = '#PBS -l walltime=' +self.pbsWallTime.get() |
|
1073 |
fptr.write(outstring) |
|
1074 |
#what is cput???
|
|
1075 |
outstring = '#PBS -l cput=' +self.pbsTime.get() |
|
1076 |
fptr.write(outstring) |
|
1077 |
outstring = '#PBS -j oe' |
|
1078 |
fptr.write(outstring) |
|
1079 |
outstring = 'cd '+dName |
|
1080 |
#outstring = 'cd $PBSTMPDIR'
|
|
1081 |
fptr.write(outstring) |
|
1082 |
#outstring = 'dmf get exec/autogrid.'
|
|
1083 |
#fptr.write(outstring)
|
|
1084 |
outstring = "./autogrid -p "+pName+" -l "+self.LogFile+"\n" |
|
1085 |
fptr.write(outstring) |
|
1086 |
#copy the logfile and MAPS?? back to curdir??
|
|
1087 |
outstring = "cp "+self.LogFile + ' ' +dName |
|
1088 |
fptr.write(outstring) |
|
1089 |
outstring = "exit" |
|
1090 |
fptr.write(outstring) |
|
1091 |
fptr.close() |
|
1092 |
os.chmod(jobFile, 0755) |
|
1093 |
return jobFile |
|
1094 |
||
1095 |
def getMacro(self, event=None): |
|
1096 |
return self.macroName.get() |
|
1097 |
||
1098 |
def getHost(self, event=None): |
|
1099 |
return self.hostName.get() |
|
1100 |
||
1101 |
def setHostVal(self, host): |
|
1102 |
#this triggers getting the rest of the cmd
|
|
1103 |
self.hostName.set(host) |
|
1104 |
msg= 'self.setHostVal(' + host + ')' |
|
1105 |
self.vf.log(msg) |
|
1106 |
self.Exe=self.hostDict[host][self.programType] |
|
1107 |
self.execPath.set(self.Exe) |
|
1108 |
self.queueType.set(self.hostDict[host]['queuetype']) |
|
1109 |
self.getCmd() |
|
1110 |
||
1111 |
def setMacroVal(self, macro): |
|
1112 |
#this triggers getting the rest of the cmd
|
|
1113 |
d=self.hostDict[macro] |
|
1114 |
self.hostName.set(d['host']) |
|
1115 |
msg= 'self.setMacroVal(' + macro + ')' |
|
1116 |
self.vf.log(msg) |
|
1117 |
self.Exe=d[self.programType] |
|
1118 |
self.execPath.set(self.Exe) |
|
1119 |
self.queueType.set(d['queuetype']) |
|
1120 |
self.getCmd() |
|
1121 |
||
1122 |
def getEntropiaUIObject(self): |
|
1123 |
if not entropiaPresent: return |
|
1124 |
idf = InputFormDescr("Entropia Password") |
|
1125 |
idf.append({'widgetType':Tkinter.Entry, |
|
1126 |
'name': 'password', |
|
1127 |
'label': 'Password', |
|
1128 |
'wcfg':{ |
|
1129 |
#'label': 'Password',
|
|
1130 |
'show': '*' |
|
1131 |
},
|
|
1132 |
'defaultValue': '', |
|
1133 |
'gridcfg':{'sticky':Tkinter.E} |
|
1134 |
})
|
|
1135 |
idf_dict = self.vf.getUserInput(idf) |
|
1136 |
if idf_dict: |
|
1137 |
password = idf_dict['password'] |
|
1138 |
##initialize EntropiaUI object
|
|
1139 |
try: |
|
1140 |
self.EntropiaUI=EntropiaUI(password) |
|
1141 |
return 1 # true |
|
1142 |
except ftplib.error_perm,msg: |
|
1143 |
self.vf.warningMsg(msg) |
|
1144 |
return None |
|
1145 |
else: return None |
|
1146 |
||
1147 |
def checkPrevious(self): |
|
1148 |
if not entropiaPresent: return |
|
1149 |
files = {} |
|
1150 |
newAdtFile = 0 |
|
1151 |
ifd=InputFormDescr(title='Process current adt files?') |
|
1152 |
ifd.append( {'name': 'thisLab', |
|
1153 |
'widgetType': Tkinter.Label, |
|
1154 |
'text': 'Upload newly created adt files:', |
|
1155 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
1156 |
if hasattr(self.vf, 'gpo') and len(self.vf.gpo.gpf_filename): |
|
1157 |
newAdtFile = 1 |
|
1158 |
files['gpf']= self.vf.gpo.gpf_filename |
|
1159 |
ifd.append( {'name': 'gpfCBut', |
|
1160 |
'widgetType':Tkinter.Checkbutton, |
|
1161 |
'text':files['gpf'], |
|
1162 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
1163 |
if self.vf.atorsDict.has_key('outfile'): |
|
1164 |
newAdtFile = 1 |
|
1165 |
files['pdbq']=os.path.split(self.vf.atorsDict['outfile'])[-1] |
|
1166 |
ifd.append( {'name': 'pdbqCBut', |
|
1167 |
'widgetType':Tkinter.Checkbutton, |
|
1168 |
'text':files['pdbq'], |
|
1169 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
1170 |
if hasattr(self.vf,'dpo') and len(self.vf.dpo.dpf_filename): |
|
1171 |
newAdtFile = 1 |
|
1172 |
files['dpf'] = self.vf.dpo.dpf_filename |
|
1173 |
ifd.append( {'name': 'dpfCBut', |
|
1174 |
'widgetType':Tkinter.Checkbutton, |
|
1175 |
'text':files['dpf'], |
|
1176 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
1177 |
if hasattr(self.vf, 'gpo') and len(self.vf.gpo.receptor_filename): |
|
1178 |
newAdtFile = 1 |
|
1179 |
files['pdbqs'] = self.vf.gpo.receptor_filename |
|
1180 |
ifd.append( {'name': 'pdbqsCBut', |
|
1181 |
'widgetType':Tkinter.Checkbutton, |
|
1182 |
'text':files['pdbqs'], |
|
1183 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
1184 |
elif hasattr(self.vf,'dpo') and len(self.vf.dpo.receptor_filename): |
|
1185 |
newAdtFile = 1 |
|
1186 |
files['pdbqs'] = self.vf.dpo.receptor_filename |
|
1187 |
ifd.append( {'name': 'pdbqsCBut', |
|
1188 |
'widgetType':Tkinter.Checkbutton, |
|
1189 |
'text':files['pdbqs'], |
|
1190 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
1191 |
if not newAdtFile: return |
|
1192 |
val_dict = self.vf.getUserInput(ifd) |
|
1193 |
if val_dict: |
|
1194 |
for item in val_dict.keys(): |
|
1195 |
if val_dict[item]: |
|
1196 |
#upload this file
|
|
1197 |
itemName=item[:-4] |
|
1198 |
try: |
|
1199 |
print 'uploading ', files[itemName] |
|
1200 |
self.EntropiaUI.upload(files[itemName]) |
|
1201 |
except EntropiaError, msg: |
|
1202 |
self.vf.warningMsg(msg) |
|
1203 |
return
|
|
1204 |
#this gets called with 'gpf' or 'pdbqs' etc
|
|
1205 |
print 'uploaded ', files[itemName] |
|
1206 |
#select it in the listchooser
|
|
1207 |
self.updateLCS(itemName) |
|
1208 |
#put it in the entry
|
|
1209 |
#FIX ME: I don't know if this is ok or not
|
|
1210 |
#because i don't know if self.itemName is a Tkinter var
|
|
1211 |
# or not ?????
|
|
1212 |
#setattr(self, itemName, files[itemName])
|
|
1213 |
exec('self.'+itemName+'.set(files[itemName])') |
|
1214 |
#also highlightit in the listchooser
|
|
1215 |
itemWidget=itemName+'Files' |
|
1216 |
lb = self.ifd.entryByName[itemWidget]['widget'].lb |
|
1217 |
for i in range(lb.index('end')): |
|
1218 |
if lb.get(i)==files[itemName]: |
|
1219 |
lb.select_clear('end') |
|
1220 |
lb.select_set(i) |
|
1221 |
lb.see(i) |
|
1222 |
#update cmd
|
|
1223 |
self.getCmd() |
|
1224 |
||
1225 |
||
1226 |
def getMacroVal(self, val, event=None): |
|
1227 |
#autostarter
|
|
1228 |
macroList=self.hostDict.keys() |
|
1229 |
macro=macroList[val] |
|
1230 |
self.macroName.set(macro) |
|
1231 |
self.Host = self.hostDict[macro]['host'] |
|
1232 |
#self.Host=host
|
|
1233 |
self.hostName.set(self.Host) |
|
1234 |
self.Exe=self.hostDict[macro][self.programType] |
|
1235 |
self.execPath.set(self.Exe) |
|
1236 |
self.qT=self.hostDict[macro]['queuetype'] |
|
1237 |
self.queueType.set(self.qT) |
|
1238 |
if self.qT=='int': |
|
1239 |
for item in self.intWids: |
|
1240 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1241 |
for item in self.commonWids: |
|
1242 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1243 |
for item in self.nqeWids: |
|
1244 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1245 |
for item in self.pbsWids: |
|
1246 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1247 |
for item in self.entWids: |
|
1248 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1249 |
for item in self.entWidLCS: |
|
1250 |
self.ifd.entryByName[item]['widget'].top.grid_forget() |
|
1251 |
for item in self.entButs: |
|
1252 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1253 |
elif self.qT=='nqe': |
|
1254 |
for item in self.commonWids: |
|
1255 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1256 |
for item in self.nqeWids: |
|
1257 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1258 |
for item in self.intWids: |
|
1259 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1260 |
for item in self.pbsWids: |
|
1261 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1262 |
for item in self.entWids: |
|
1263 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1264 |
for item in self.entWidLCS: |
|
1265 |
self.ifd.entryByName[item]['widget'].top.grid_forget() |
|
1266 |
for item in self.entButs: |
|
1267 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1268 |
if os.name == 'nt': #sys.platform=='win32': |
1269 |
self.niceLevel.set('0') |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1270 |
elif self.qT=='pbs': |
1271 |
for item in self.commonWids: |
|
1272 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1273 |
for item in self.pbsWids: |
|
1274 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1275 |
for item in self.intWids: |
|
1276 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1277 |
for item in self.nqeWids: |
|
1278 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1279 |
for item in self.entWids: |
|
1280 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1281 |
for item in self.entWidLCS: |
|
1282 |
self.ifd.entryByName[item]['widget'].top.grid_forget() |
|
1283 |
for item in self.entButs: |
|
1284 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1285 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1286 |
self.niceLevel.set('0') |
1287 |
elif self.qT=='ent' and entropiaPresent: |
|
1288 |
if not hasattr(self, 'EntropiaUI'): |
|
1289 |
if not self.getEntropiaUIObject(): return |
|
1290 |
||
1291 |
if self==self.vf.ADstart_autogrid: |
|
1292 |
msg='AutoGrid Jobs not defined separately for Entropia system' |
|
1293 |
self.vf.warningMsg(msg) |
|
1294 |
self.getMacroVal(0) |
|
1295 |
return
|
|
1296 |
for item in self.entWids: |
|
1297 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1298 |
for item in self.entWidLCS: |
|
1299 |
self.ifd.entryByName[item]['widget'].top.grid(self.ifd.entryByName[item]['gridcfg']) |
|
1300 |
for item in self.entButs: |
|
1301 |
self.ifd.entryByName[item]['widget'].grid(self.ifd.entryByName[item]['gridcfg']) |
|
1302 |
for item in self.commonWids: |
|
1303 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1304 |
for item in self.intWids: |
|
1305 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1306 |
for item in self.flagWids: |
|
1307 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1308 |
for item in self.nqeWids: |
|
1309 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1310 |
for item in self.pbsWids: |
|
1311 |
self.ifd.entryByName[item]['widget'].grid_forget() |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1312 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1313 |
self.niceLevel.set('0') |
1314 |
# call local updateListChooser with new file_lists
|
|
1315 |
for item in ['gpf_list','dpf_list','pdbq_list','pdbqs_list']: |
|
1316 |
#exec('self.'+item+'=self.EntropiaUI.'+item)
|
|
1317 |
#these items are not Tkinter vars, so this is ok
|
|
1318 |
setattr(self, item, getattr(self.EntropiaUI, item)) |
|
1319 |
for item in ['gpf','pdbqs','dpf','pdbq']: |
|
1320 |
self.updateLCS(item) |
|
1321 |
#CHECK here for previous work done in adt:
|
|
1322 |
self.checkPrevious() |
|
1323 |
else: |
|
1324 |
t='Unknown queueType: '+self.qT |
|
1325 |
self.vf.warningMsg(t) |
|
1326 |
return
|
|
1327 |
self.getCmd() |
|
1328 |
||
1329 |
def getProjectVal(self, val, event=None): |
|
1330 |
if not entropiaPresent: return |
|
1331 |
try: |
|
1332 |
projectList=self.EntropiaUI.project_list |
|
1333 |
except AttributeError: |
|
1334 |
return
|
|
1335 |
project=projectList[val] |
|
1336 |
self.projectName.set(project) |
|
1337 |
||
1338 |
def getHostVal(self, val, event=None): |
|
1339 |
#autostarter
|
|
1340 |
hostList=self.hostDict.keys() |
|
1341 |
host=hostList[val] |
|
1342 |
self.Host=host |
|
1343 |
self.hostName.set(host) |
|
1344 |
self.Exe=self.hostDict[host][self.programType] |
|
1345 |
self.execPath.set(self.Exe) |
|
1346 |
self.qT=self.hostDict[host]['queuetype'] |
|
1347 |
self.queueType.set(self.qT) |
|
1348 |
if self.queueType.get()=='int': |
|
1349 |
self.ifd.entryByName['niceLab']['widget'].grid(self.ifd.entryByName['niceLab']['gridcfg']) |
|
1350 |
self.ifd.entryByName['niceEntry']['widget'].grid(self.ifd.entryByName['niceEntry']['gridcfg']) |
|
1351 |
self.ifd.entryByName['nqeTimeLab']['widget'].grid_forget() |
|
1352 |
self.ifd.entryByName['nqeTimeEntry']['widget'].grid_forget() |
|
1353 |
self.ifd.entryByName['pbsDirLab']['widget'].grid_forget() |
|
1354 |
self.ifd.entryByName['pbsDirEntry']['widget'].grid_forget() |
|
1355 |
self.ifd.entryByName['nqeCpuLab']['widget'].grid_forget() |
|
1356 |
self.ifd.entryByName['nqeCpuEntry']['widget'].grid_forget() |
|
1357 |
self.ifd.entryByName['niceLab']['widget'].grid(self.ifd.entryByName['niceLab']['gridcfg']) |
|
1358 |
self.ifd.entryByName['niceEntry']['widget'].grid(self.ifd.entryByName['niceEntry']['gridcfg']) |
|
1359 |
else: |
|
1360 |
self.ifd.entryByName['nqeTimeLab']['widget'].grid(self.ifd.entryByName['nqeTimeLab']['gridcfg']) |
|
1361 |
self.ifd.entryByName['nqeTimeEntry']['widget'].grid(self.ifd.entryByName['nqeTimeEntry']['gridcfg']) |
|
1362 |
self.ifd.entryByName['pbsDirLab']['widget'].grid(self.ifd.entryByName['pbsDirLab']['gridcfg']) |
|
1363 |
self.ifd.entryByName['pbsDirEntry']['widget'].grid(self.ifd.entryByName['pbsDirEntry']['gridcfg']) |
|
1364 |
self.ifd.entryByName['nqeCpuLab']['widget'].grid(self.ifd.entryByName['nqeCpuLab']['gridcfg']) |
|
1365 |
self.ifd.entryByName['nqeCpuEntry']['widget'].grid(self.ifd.entryByName['nqeCpuEntry']['gridcfg']) |
|
1366 |
self.ifd.entryByName['niceLab']['widget'].grid_forget() |
|
1367 |
self.ifd.entryByName['niceEntry']['widget'].grid_forget() |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1368 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1369 |
self.ifd.entryByName['niceLab']['widget'].grid_forget() |
1370 |
self.ifd.entryByName['niceEntry']['widget'].grid_forget() |
|
1371 |
self.niceLevel.set('0') |
|
1372 |
self.getCmd() |
|
1373 |
||
1374 |
def setParmFileVal(self, pF): |
|
1375 |
self.ParmFile=pF |
|
1376 |
self.paramFile.set(pF) |
|
1377 |
##llist = string.split(pF,'.')
|
|
1378 |
lnum=string.rfind(pF, '.') |
|
1379 |
llist=pF[:lnum] |
|
1380 |
self.logFile.set(llist+'.'+self.logType) |
|
1381 |
self.LogFile=llist+'.'+self.logType |
|
1382 |
msg= 'self.setParmFileVal(' + pF + ')' |
|
1383 |
self.vf.log(msg) |
|
1384 |
host = self.hostName.get() |
|
1385 |
self.Exe=self.hostDict[host][self.programType] |
|
1386 |
self.execPath.set(self.Exe) |
|
1387 |
self.queueType.set(self.hostDict[host]['queuetype']) |
|
1388 |
self.getCmd() |
|
1389 |
||
1390 |
def buildMacroMenu(self, event=None): |
|
1391 |
macroMb=self.ifd.entryByName['mNMenu']['widget'] |
|
1392 |
macroMb.config(text='macros') |
|
1393 |
if not self.showMacroMenu.get(): |
|
1394 |
#hostList is ['noah','saul','job']
|
|
1395 |
macroList = self.hostDict.keys() |
|
1396 |
self.buildMenu(macroList,macroMb,self.macroVal, self.getMacroVal) |
|
1397 |
self.showHostMenu.set(1) |
|
1398 |
else: |
|
1399 |
hostMenubutton.menu.unpost() |
|
1400 |
self.showHostMenu.set(0) |
|
1401 |
||
1402 |
||
1403 |
def buildHostMenu(self, event=None): |
|
1404 |
hostMb=self.ifd.entryByName['hNMenu']['widget'] |
|
1405 |
hostMb.config(text='hosts') |
|
1406 |
if not self.showHostMenu.get(): |
|
1407 |
#hostList is ['noah','saul','job']
|
|
1408 |
hostList = self.hostDict.keys() |
|
1409 |
self.buildMenu(hostList,hostMb,self.hostVal, self.getHostVal) |
|
1410 |
self.showHostMenu.set(1) |
|
1411 |
else: |
|
1412 |
hostMenubutton.menu.unpost() |
|
1413 |
self.showHostMenu.set(0) |
|
1414 |
||
1415 |
def updateProjectMenu(self, event=None): |
|
1416 |
if not entropiaPresent: return |
|
1417 |
projectMb=self.ifd.entryByName['pjMenu']['widget'] |
|
1418 |
projectMb.config(text='projects') |
|
1419 |
try: |
|
1420 |
projectList = self.EntropiaUI.project_list |
|
1421 |
except AttributeError: |
|
1422 |
projectList=[] |
|
1423 |
self.buildMenu(projectList,projectMb,self.projectVal, self.getProjectVal) |
|
1424 |
||
1425 |
def buildProjectMenu(self, event=None): |
|
1426 |
if not entropiaPresent: return |
|
1427 |
projectMb=self.ifd.entryByName['pjMenu']['widget'] |
|
1428 |
projectMb.config(text='projects') |
|
1429 |
if not self.showProjectMenu.get(): |
|
1430 |
try: |
|
1431 |
projectList = self.EntropiaUI.project_list |
|
1432 |
print "projectList=", projectList |
|
1433 |
except AttributeError: |
|
1434 |
projectList=[] |
|
1435 |
self.buildMenu(projectList,projectMb,self.projectVal, self.getProjectVal) |
|
1436 |
self.showProjectMenu.set(1) |
|
1437 |
else: |
|
1438 |
projectMb.menu.unpost() |
|
1439 |
self.showProjectMenu.set(0) |
|
1440 |
||
1441 |
def buildMenu(self,keyList,mB, var, cmd): |
|
1442 |
#start from scratch and build menu
|
|
1443 |
mB.config(bg='white') |
|
1444 |
if not hasattr(mB, 'menu'): |
|
1445 |
mB.menu=Tkinter.Menu(mB) |
|
1446 |
mB['menu']=mB.menu |
|
1447 |
else: |
|
1448 |
mB.menu.delete(1, 'end') |
|
1449 |
#raise runTimeError('check this')
|
|
1450 |
#Pack all the entries:
|
|
1451 |
for i in range(len(keyList)): |
|
1452 |
mB.menu.add_radiobutton(label=keyList[i], |
|
1453 |
var=var,value=i,command=CallBackFunction(cmd,i)) |
|
1454 |
||
1455 |
def getCmd(self, event=None): |
|
1456 |
"AutoStart:"
|
|
1457 |
host = self.hostName.get() |
|
1458 |
exe = self.execPath.get() |
|
1459 |
cmd = self.cmd |
|
1460 |
pFile = self.paramFile.get() |
|
1461 |
logName = self.logFile.get() |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1462 |
curdir = self.workingDirPath.get() |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1463 |
remotedir = self.remoteDir.get() |
1464 |
niceStr=' ' |
|
1465 |
if self.niceLevel.get()=='': |
|
1466 |
self.niceLevel.set('0') |
|
1467 |
if self.niceLevel.get()!='0': |
|
1468 |
niceStr = 'nice +'+self.niceLevel.get()+ ' ' |
|
1469 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
1470 |
curdir=curdir[8:] |
|
1471 |
jobFile = self.jobFile.get() |
|
1472 |
qT=self.queueType.get() |
|
1473 |
if jobFile=='' and pFile and (qT=='nqe' or qT=='pbs'): |
|
1474 |
self.jobFile.set(self.makeJobFile(pFile)) |
|
1475 |
jobFile = self.jobFile.get() |
|
1476 |
if qT=='int': |
|
1477 |
if host==self.localHost: |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1478 |
cmd_string = (exe + ' -p ' + pFile + ' -l ' + logName + '&') |
1479 |
#cmd.set(("%s" + exe + ' -p ' + pFile + ' -l ' + logName + '&' % change_to_dir)) #
|
|
1480 |
cmd.set(cmd_string) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1481 |
else: |
1482 |
cmdStr="rsh "+host+" -n "+"\'cd "+curdir+";"+ niceStr + exe+" -p "+pFile+" -l "+logName+"&\'&" |
|
1483 |
cmd.set(cmdStr) |
|
1484 |
elif qT=='nqe': |
|
1485 |
cmdStr = "rsh "+host+" -n \'cd "+curdir+";/nqe/bin/cqsub -lT "+self.nqeTime.get()+ " -la ncpu="+ self.nqeCpu.get()+" "+jobFile+"\'" |
|
1486 |
cmd.set(cmdStr) |
|
1487 |
elif qT=='win': |
|
1488 |
print 'in case queueType==win' |
|
1489 |
cmdStr = "rsh "+host+" -n \'cd "+curdir+";/nqe/bin/cqsub -lT "+self.nqeTime.get()+ " -la ncpu="+ self.nqeCpu.get()+" "+jobFile+"\'" |
|
1490 |
cmd.set(cmdStr) |
|
1491 |
elif qT=='pbs': |
|
1492 |
if remotedir=='': |
|
1493 |
msg = 'No REMOTE DIRECTORY specified!' |
|
1494 |
self.vf.warningMsg(msg) |
|
1495 |
return
|
|
1496 |
cmdStr = "ssh "+host+"-n \'cd "+remotedir+";qsub -l cput="+self.pbsCpuTime.get()+"-l nodes="+self.pbsCpu.get()+ " -l walltime="+ self.pbsWallTime.get()+"-r "+self.pbsRerun.get()+' ' + jobFile+"\'" |
|
1497 |
cmd.set(cmdStr) |
|
1498 |
elif qT=='ent': |
|
1499 |
msg='AutoGrid Jobs not defined separately for Entropia system' |
|
1500 |
self.vf.warningMsg(msg) |
|
1501 |
self.getMacroVal(0) |
|
1502 |
return
|
|
1503 |
else: |
|
1504 |
msg = 'Unknown queueType->'+ qT |
|
1505 |
self.vf.warningMsg(msg) |
|
1506 |
return
|
|
1507 |
||
1508 |
||
1509 |
def updateLF(self, event=None): |
|
1510 |
#llist = string.split(self.paramFile.get(),'.')
|
|
1511 |
#self.logFile.set(llist[0]+'.'+self.logType)
|
|
1512 |
#self.LogFile=llist[0]+'.'+self.logType
|
|
1513 |
pF=self.paramFile.get() |
|
1514 |
lnum=string.rfind(pF, '.') |
|
1515 |
llist=pF[:lnum] |
|
1516 |
self.logFile.set(llist+'.'+self.logType) |
|
1517 |
self.LogFile=llist+'.'+self.logType |
|
1518 |
#at this moment, make a jobFile if you can
|
|
1519 |
self.jobFile.set(self.makeJobFile(self.paramFile.get())) |
|
1520 |
#self.getCmd()
|
|
1521 |
||
1522 |
def browsePF(self, event=None): |
|
1523 |
pf = self.vf.askFileOpen(parent = self.topLevel, |
|
1524 |
types=[('select '+self.browserPFTitle,'*.'+self.pfType)], title= self.program +' Parameter File:') |
|
1525 |
if pf: |
|
1526 |
#don't strip off the pathname??
|
|
1527 |
pfList=os.path.split(pf) |
|
1528 |
if pfList[0]==os.getcwd(): |
|
1529 |
pfname = os.path.split(pf)[-1] |
|
1530 |
else: |
|
1531 |
pfname=pf |
|
1532 |
self.paramFile.set(pfname) |
|
1533 |
self.ParmFile=pfname |
|
1534 |
self.updateLF() |
|
1535 |
self.getCmd() |
|
1536 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
1537 |
||
1538 |
def browseEX(self, event=None): |
|
1539 |
ef = self.vf.askFileOpen(parent = self.topLevel, |
|
1540 |
types=[('select program:','*')], title= self.program) |
|
1541 |
if ef: |
|
1542 |
#don't strip off the pathname??
|
|
1543 |
efList=os.path.split(ef) |
|
1544 |
if efList[0]==os.getcwd(): |
|
1545 |
efname = os.path.split(ef)[-1] |
|
1546 |
else: |
|
1547 |
efname=ef |
|
1548 |
self.execPath.set(efname) |
|
1549 |
self.Exe=efname |
|
1550 |
self.getCmd() |
|
1551 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
1552 |
||
1553 |
def browseLF(self, event=None): |
|
1554 |
lf = self.vf.askFileOpen(parent = self.topLevel, |
|
1555 |
types=[('select :','*.'+self.logType)], title= self.program+ ' log File:') |
|
1556 |
if lf: |
|
1557 |
#strip off the pathname??
|
|
1558 |
lfList=os.path.split(lf) |
|
1559 |
if lfList[0]==os.getcwd(): |
|
1560 |
lfname = os.path.split(lf)[-1] |
|
1561 |
else: |
|
1562 |
lfname=lf |
|
1563 |
self.logFile.set(lfname) |
|
1564 |
self.getCmd() |
|
1565 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
1566 |
||
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1567 |
def browseWD(self, event=None): |
1568 |
wd = tkFileDialog.askdirectory(parent = self.topLevel, title= self.program) # N3P |
|
1569 |
if wd: |
|
1570 |
self.workingDirPath.set(wd) |
|
1571 |
"""
|
|
1572 |
efList=os.path.split(ef)
|
|
1573 |
if efList[0]==os.getcwd():
|
|
1574 |
efname = os.path.split(ef)[-1]
|
|
1575 |
else:
|
|
1576 |
efname=ef
|
|
1577 |
self.execPath.set(efname)
|
|
1578 |
self.Exe=efname
|
|
1579 |
"""
|
|
1580 |
self.getCmd() |
|
1581 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
1582 |
||
1583 |
||
1584 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1585 |
def setNiceLevel(self,val,event=None): |
1586 |
self.niceLevel.set(str(val)) |
|
1587 |
self.getCmd() |
|
1588 |
||
1589 |
def setNqeTime(self,val,event=None): |
|
1590 |
self.nqeTime.set(str(val)) |
|
1591 |
self.getCmd() |
|
1592 |
||
1593 |
def setNqeCpu(self,val,event=None): |
|
1594 |
self.nqeCpu.set(str(val)) |
|
1595 |
self.getCmd() |
|
1596 |
||
1597 |
def setHost(self, hostStr): |
|
1598 |
self.Host=hostStr |
|
1599 |
||
1600 |
def setExe(self, exeStr): |
|
1601 |
self.Exe=exeStr |
|
1602 |
||
1603 |
def setFlagStr(self, flagStr): |
|
1604 |
self.FlagStr=flagStr |
|
1605 |
||
1606 |
def setParmFile(self, parmStr): |
|
1607 |
self.ParmFile=parmStr |
|
1608 |
||
1609 |
def setLogFile(self, logStr): |
|
1610 |
self.LogFile=logStr |
|
1611 |
||
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1612 |
#
|
1613 |
# def setWorkingDir(self, workDir): N3P remove
|
|
1614 |
# self.workingDir = workDir
|
|
1615 |
#
|
|
1616 |
||
1617 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1618 |
def setCommand(self): |
1619 |
self.command=self.Exe + " " + self.FlagStr+ " " + self.ParmFile+ " " + self.LogFile |
|
1620 |
||
1621 |
def doIntRemoteCommand(self,pFile,host=None,nice=20,flagStr=' ',log=None): |
|
1622 |
if not host: host=self.localHost |
|
1623 |
self.qT= self.hostDict[host]['queuetype'] |
|
1624 |
if self.qT!='int': |
|
1625 |
t=host + ' is nqe queueType; use doNqeRemoteCommand instead' |
|
1626 |
self.vf.warningMsg(t) |
|
1627 |
return
|
|
1628 |
exe= self.hostDict[host][self.programType] |
|
1629 |
curdir=os.getcwd() |
|
1630 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
1631 |
curdir=curdir[8:] |
|
1632 |
if not log: |
|
1633 |
#pFileStem=string.split(pFile,'.')[0]
|
|
1634 |
lnum=string.rfind(pFile, '.') |
|
1635 |
pFileStem=pFile[:lnum] |
|
1636 |
log = pFileStem +"."+self.logType |
|
1637 |
self.RemoteCommand= "rsh "+host+" -n "+"\'cd "+curdir+";nice +" + str(nice)+" "+exe+' '+flagStr+" -p "+pFile+" -l "+log+"&\'&" |
|
1638 |
self.doitWrapper(self.RemoteCommand,0,log=1,redraw=0) |
|
1639 |
||
1640 |
def doNqeRemoteCommand(self,pFile,host=None,nqeTime=144000,ncpu=1,flagStr=' ',log=None): |
|
1641 |
if not host: host=self.localHost |
|
1642 |
self.qT= self.hostDict[host]['queuetype'] |
|
1643 |
if self.qT!='nqe': |
|
1644 |
t=host + ' is int queueType; use doIntRemoteCommand instead' |
|
1645 |
self.vf.warningMsg(t) |
|
1646 |
return
|
|
1647 |
exe= self.hostDict[host][self.programType] |
|
1648 |
curdir=os.getcwd() |
|
1649 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
1650 |
curdir=curdir[8:] |
|
1651 |
lnum=string.rfind(pFile, '.') |
|
1652 |
pFileStem=pFile[:lnum] |
|
1653 |
if not log: |
|
1654 |
log = pFileStem +"."+self.logType |
|
1655 |
cmdStr= "cd "+curdir+";"+exe+' ' +flagStr+" -p "+pFile+" -l "+log |
|
1656 |
jobFileName=pFileStem+'.j' |
|
1657 |
self.makeJF(jobFileName,cmdStr) |
|
1658 |
self.RemoteCommand= "rsh " +host+ " -n " + "\'cd " +curdir+";/nqe/bin/cqsub -lT "+str(nqeTime)+ " -la ncpu="+str(ncpu)+" "+jobFileName + "\'" |
|
1659 |
self.doitWrapper(self.RemoteCommand,0,log=1,redraw=0) |
|
1660 |
||
1661 |
def makeJF(self,jobFile,jobStr): |
|
1662 |
fptr= open(jobFile, 'w') |
|
1663 |
fptr.write(jobStr) |
|
1664 |
fptr.close() |
|
1665 |
os.chmod(jobFile, 0755) |
|
1666 |
self.nqeJobFile=jobFile |
|
1667 |
||
1668 |
def setNqeRemoteCommand(self,host,nice,exe,flagStr,pFile,log,nqeTime,ncpu): |
|
1669 |
curdir=os.getcwd() |
|
1670 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
1671 |
curdir=curdir[8:] |
|
1672 |
if self.Host==None:self.Host=host |
|
1673 |
lnum=string.rfind(pFile, '.') |
|
1674 |
pFileStem=pFile[:lnum] |
|
1675 |
#pFileStem=string.split(pFile,'.')[0]
|
|
1676 |
jName=pFileStem+'.j' |
|
1677 |
self.nqeJobFile=jName |
|
1678 |
self.makeJF(jName,self.setIntRemoteCommand(self,host,curdir,nice,exe,flagStr,pFile,log)) |
|
1679 |
return "rsh " +host+ " -n " + "\'cd " +curdir+";/nqe/bin/cqsub -lT "+nqeTime+ " -la ncpu="+ncpu+" "+job + "\'" |
|
1680 |
||
1681 |
||
1682 |
||
1683 |
class AutoGridStarter(AutoStarter): |
|
1684 |
"""Interactive usage:
|
|
1685 |
The user chooses host and parameter file and starts the Autogrid job.
|
|
1686 |
If the host has an interactive queue, launching the job opens
|
|
1687 |
a 'ADstart_manage' widget which allows the user to follow the job
|
|
1688 |
and to kill it, if necesary. A 'job file' is written when a parameter
|
|
1689 |
file is selected in combination with the selection of a 'nqe'-type host.
|
|
1690 |
Scripting usage:
|
|
1691 |
'doIntRemoteCommand' and 'doNqeRemoteCommand' methods allow starting
|
|
1692 |
AutoGrid with the specified parameter file on a host with
|
|
1693 |
a appropriate queue type. (if not specified, host is assumed
|
|
1694 |
to be the local host and must be of appropriate queue type).
|
|
1695 |
All other parameters are optional"""
|
|
1696 |
||
1697 |
def __init__(self): |
|
1698 |
AutoStarter.__init__(self,program='autogrid4', |
|
1699 |
dictObj='gpo', |
|
1700 |
ifdTitle="Run AutoGrid", |
|
1701 |
browserPFTitle="Grid Parameter File", |
|
1702 |
browserEXETitle='autogrid4', |
|
1703 |
browserLOGTitle="Grid Log", |
|
1704 |
logType='glg', |
|
1705 |
pfType='gpf', |
|
1706 |
programType='autogrid') |
|
1707 |
||
1708 |
||
1709 |
AutoGridStarterGUI=CommandGUI() |
|
1710 |
AutoGridStarterGUI.addMenuCommand('AutoToolsBar', menuText['StartMB'], menuText['startGridMB']) |
|
1711 |
||
1712 |
||
1713 |
||
1714 |
class AutoDockStarter(AutoStarter): |
|
1715 |
"""Interactive usage:
|
|
1716 |
The user chooses host and parameter file and starts the Autodock job.
|
|
1717 |
If the host has an interactive queue, launching the job opens
|
|
1718 |
a 'ADstart_manage' widget which allows the user to follow the job
|
|
1719 |
and to kill it, if necesary. A 'job file' is written when a parameter
|
|
1720 |
file is selected in combination with the selection of a 'nqe'-type host.
|
|
1721 |
Scripting usage:
|
|
1722 |
'doIntRemoteCommand' and 'doNqeRemoteCommand' methods allow starting
|
|
1723 |
Autodock with the specified parameter file on a host with
|
|
1724 |
a appropriate queue type. (if not specified, host is assumed
|
|
1725 |
to be the local host and must be of appropriate queue type).
|
|
1726 |
All other parameters are optional"""
|
|
1727 |
||
1728 |
def __init__(self): |
|
1729 |
AutoStarter.__init__(self,program='autodock4', |
|
1730 |
dictObj='dpo', |
|
1731 |
ifdTitle="Run AutoDock", |
|
1732 |
browserPFTitle="Dock Parameter File", |
|
1733 |
browserEXETitle='autodock4', |
|
1734 |
browserLOGTitle="Dock Log", |
|
1735 |
logType='dlg', |
|
1736 |
pfType='dpf', |
|
1737 |
programType='autodock') |
|
1738 |
||
1739 |
def guiCallback(self, event=None): |
|
1740 |
#AutoDock
|
|
1741 |
self.customizeGUI() |
|
1742 |
if not hasattr(self, 'form'): |
|
1743 |
if self.vf.hasGui: |
|
1744 |
#self.form = self.vf.getUserInput(self.ifd,scrolledFrame=1,width=1000,height=350, modal=0, blocking=0)
|
|
1745 |
self.form = self.vf.getUserInput(self.ifd,modal=0, blocking=0) |
|
1746 |
self.form.root.protocol('WM_DELETE_WINDOW',self.Close_cb) |
|
1747 |
self.topLevel = self.form.root |
|
1748 |
else: |
|
1749 |
## from ViewerFramework.gui import InputForm
|
|
1750 |
from mglutil.gui.InputForm.Tk.gui import InputForm |
|
1751 |
self.form = InputForm(self.vf.master,self.ifd,modal=0, blocking=0) |
|
1752 |
self.topLevel = self.form.root |
|
1753 |
if hasattr(self.vf, 'dpo') and len(self.vf.dpo.dpf_filename): |
|
1754 |
if self.paramFile.get()=='': |
|
1755 |
self.paramFile.set(self.vf.dpo.dpf_filename) |
|
1756 |
self.updateLF() |
|
1757 |
#self.bindEntries()
|
|
1758 |
self.flagVar.set(0) |
|
1759 |
self.kflag.set(0) |
|
1760 |
self.iflag.set(0) |
|
1761 |
self.uflag.set(0) |
|
1762 |
self.tflag.set(0) |
|
1763 |
self.cflag.set(0) |
|
1764 |
self.inputFile.set("") |
|
1765 |
self.outputFile.set("") |
|
1766 |
self.intWids=['niceLab','niceEntry'] |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1767 |
if os.name == 'nt': #sys.platform=='win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1768 |
self.ifd.entryByName['niceLab']['widget'].grid_forget() |
1769 |
self.ifd.entryByName['niceEntry']['widget'].grid_forget() |
|
1770 |
self.commonWids=['hNLab','hNentry','eXLab','eXentry','eXbutton', |
|
1771 |
'pFLab','pFentry','pFbutton', |
|
1772 |
'lFLab','lFentry','lFbutton'] |
|
1773 |
self.nqeWids=['nqeCpuLab','nqeCpuEntry','nqeTimeLab','nqeTimeEntry'] |
|
1774 |
self.pbsWids=['pbsCpuLab','pbsCpuEntry','pbsDirLab','pbsDirEntry','pbsTimeLab','pbsTimeEntry','pbsWallTimeLab','pbsWallTimeEntry','pbsRerunCB'] |
|
1775 |
||
1776 |
self.entWids=['pjLab','pjentry','pjMenu','nodesEntLab','nodesEnt', |
|
1777 |
'gpfEntLab', 'gpfEnt','pdbqEntLab','pdbqEnt', |
|
1778 |
'dpfEntLab','dpfEnt', 'pdbqsEntLab','pdbqsEnt', |
|
1779 |
'jobDirEntLab','jobDirEnt', 'gpfFilterEnt', 'pdbqFilterEnt', |
|
1780 |
'dpfFilterEnt','pdbqsFilterEnt'] |
|
1781 |
self.entWidLCS=['gpfFiles','pdbqFiles','dpfFiles','pdbqsFiles'] |
|
1782 |
self.entButs=[ 'uploadGpfFileBut','uploadPdbqFileBut', |
|
1783 |
'uploadDpfFileBut','uploadPdbqsFileBut', 'monitorCB', |
|
1784 |
'ftpBackCB'] |
|
1785 |
self.bindEntries() |
|
1786 |
self.getMacroVal(0) |
|
1787 |
self.updateFlags() |
|
1788 |
self.getInputs() |
|
1789 |
self.form.autoSize() |
|
1790 |
||
1791 |
def setFile(self, item, event=None): |
|
1792 |
lb=self.ifd.entryByName[item]['widget'].lb |
|
1793 |
if lb.curselection()==(): return |
|
1794 |
newsel=lb.get(lb.curselection()) |
|
1795 |
#FIX ME, i think this is ok, but i'm not sure
|
|
1796 |
#exec('self.'+item[:-5]+'.set(newsel)')
|
|
1797 |
setattr(self, item[:-5], newsel) |
|
1798 |
self.getCmd() |
|
1799 |
||
1800 |
||
1801 |
def bindEntries(self): |
|
1802 |
if hasattr(self,'form'): |
|
1803 |
self.ifd.entryByName['cmdentry']['widget'].bind('<Return>', self.getCmdParams) |
|
1804 |
self.ifd.entryByName['mNentry']['widget'].bind('<Key>', self.getMacro) |
|
1805 |
self.ifd.entryByName['mNMenu']['widget'].bind('<ButtonPress>', self.buildMacroMenu, add='+') |
|
1806 |
self.ifd.entryByName['pjMenu']['widget'].bind('<ButtonPress>', self.buildProjectMenu, add='+') |
|
1807 |
self.ifd.entryByName['pFentry']['widget'].bind('<Return>', self.updateLF) |
|
1808 |
if entropiaPresent: |
|
1809 |
entList=['lFentry','eXentry','inentry','outentry','niceEntry','nqeTimeEntry','nqeCpuEntry','nodesEnt','gpfEnt','dpfEnt','pdbqEnt','pdbqsEnt'] |
|
1810 |
else: |
|
1811 |
entList=['lFentry','eXentry','inentry','outentry','niceEntry','nqeTimeEntry','nqeCpuEntry'] |
|
1812 |
for item in entList: |
|
1813 |
self.ifd.entryByName[item]['widget'].bind('<Return>', self.getCmd) |
|
1814 |
if entropiaPresent: |
|
1815 |
filList=['gpf','pdbqs','dpf','pdbq'] |
|
1816 |
for item in filList: |
|
1817 |
n=item+'FilterEnt' |
|
1818 |
self.ifd.entryByName[n]['widget'].bind('<Return>', CallBackFunction(self.updateLCS,item), '+') |
|
1819 |
||
1820 |
def getCmdParams(self, event=None): |
|
1821 |
print "in getCmdParms" |
|
1822 |
if not entropiaPresent: return |
|
1823 |
if self.queueType.get()=='ent': |
|
1824 |
cmdList=string.split(self.cmd.get(), ';') |
|
1825 |
self.nodes.set(cmdList[1]) |
|
1826 |
gpfFile=cmdList[2] |
|
1827 |
if gpfFile in self.EntropiaUI.gpf_list: |
|
1828 |
self.gpf.set(gpfFile) |
|
1829 |
pdbqFile=cmdList[3] |
|
1830 |
if pdbqFile in self.EntropiaUI.pdbq_list: |
|
1831 |
self.pdbq.set(pdbqFile) |
|
1832 |
dpfFile=cmdList[4] |
|
1833 |
if dpfFile in self.EntropiaUI.pdbq_list: |
|
1834 |
self.dpf.set(dpfFile) |
|
1835 |
pdbqsFile=cmdList[5] |
|
1836 |
if pdbqsFile in self.EntropiaUI.pdbqs_list: |
|
1837 |
self.pdbqs.set(pdbqsFile) |
|
1838 |
elif self.queueType.get()=='int' and self.hostName.get()==self.localHost: |
|
1839 |
#in this case can set execPath,
|
|
1840 |
cmdList=string.split(self.cmd.get()) |
|
1841 |
self.execPath.set(cmdList[0]) |
|
1842 |
self.Exe=cmdList[0] |
|
1843 |
self.paramFile.set(cmdList[2]) |
|
1844 |
self.ParmFile=cmdList[2] |
|
1845 |
self.logFile.set(cmdList[4]) |
|
1846 |
self.LogFile=cmdList[4] |
|
1847 |
||
1848 |
def setUpFlagVars(self): |
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
1849 |
self.flagVar = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1850 |
self.flagVar.set(0) |
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
1851 |
self.kflag = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
1852 |
self.iflag = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1853 |
self.uflag = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1854 |
self.tflag = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1855 |
self.cflag = Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1856 |
self.inputFile = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
1857 |
self.outputFile = Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1858 |
|
1859 |
def getFlags(self): |
|
1860 |
self.ifd.append({'name': 'flagChoiceLab', |
|
1861 |
'widgetType': Tkinter.Label, |
|
1862 |
'text':'Add Optional Flags?', |
|
1863 |
'gridcfg':{'sticky':Tkinter.E }}) |
|
1864 |
self.ifd.append({'name': 'flagYes', |
|
1865 |
'widgetType':Tkinter.Radiobutton, |
|
1866 |
'wcfg': {'value':'1'}, |
|
1867 |
'variable': self.flagVar, |
|
1868 |
'command': self.getCmd, |
|
1869 |
'text':'Yes', |
|
1870 |
'gridcfg':{'sticky':Tkinter.E, 'row':-1,'column':1}, |
|
1871 |
'command': self.updateFlags }) |
|
1872 |
self.ifd.append({'name': 'flagNo', |
|
1873 |
'widgetType':Tkinter.Radiobutton, |
|
1874 |
'wcfg': {'value':'0'}, |
|
1875 |
'variable': self.flagVar, |
|
1876 |
'command': self.getCmd, |
|
1877 |
'text':'No', |
|
1878 |
'gridcfg':{'sticky':Tkinter.W, 'row':-1,'column':2}, |
|
1879 |
'command': self.updateFlags }) |
|
1880 |
self.ifd.append({'name': 'kflag', |
|
1881 |
'widgetType':Tkinter.Checkbutton, |
|
1882 |
'text':'Don\'t keep original residue numbers (-k)', |
|
1883 |
'command': self.getCmd, |
|
1884 |
'variable':self.kflag, |
|
1885 |
'gridcfg':{'sticky':Tkinter.W, 'column':1, 'columnspan':2}}) |
|
1886 |
self.ifd.append({'name': 'iflag', |
|
1887 |
'widgetType':Tkinter.Checkbutton, |
|
1888 |
'text':'Ignore grid map header errors (-i)', |
|
1889 |
'variable':self.iflag, |
|
1890 |
'command': self.getCmd, |
|
1891 |
'gridcfg':{'sticky':Tkinter.W, 'column':1, 'columnspan':2}}) |
|
1892 |
self.ifd.append({'name': 'uflag', |
|
1893 |
'widgetType':Tkinter.Checkbutton, |
|
1894 |
'text':'Return message describing cmd line usage (-u)', |
|
1895 |
'variable':self.uflag, |
|
1896 |
'command': self.getCmd, |
|
1897 |
'gridcfg':{'sticky':Tkinter.W, 'column':1, 'columnspan':2}}) |
|
1898 |
self.ifd.append({'name': 'tflag', |
|
1899 |
'widgetType':Tkinter.Checkbutton, |
|
1900 |
'text':'Parse PDBQ to check torsion dfns + stop (-t)', |
|
1901 |
'variable':self.tflag, |
|
1902 |
'command': self.getCmd, |
|
1903 |
'gridcfg':{'sticky':Tkinter.W, 'column':1, 'columnspan':2}}) |
|
1904 |
self.ifd.append({'name': 'cflag', |
|
1905 |
'widgetType':Tkinter.Checkbutton, |
|
1906 |
'text':'Run autodock in command mode (-c)', |
|
1907 |
'variable':self.cflag, |
|
1908 |
'command': self.getInputs, |
|
1909 |
'gridcfg':{'sticky':Tkinter.W, 'column':1, 'columnspan':2}}) |
|
1910 |
self.ifd.append( {'name': 'inentLab', |
|
1911 |
'widgetType': Tkinter.Label, |
|
1912 |
'text':'Take input from:', |
|
1913 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
1914 |
self.ifd.append( {'name': 'inentry', |
|
1915 |
'widgetType':Tkinter.Entry, |
|
1916 |
'wcfg':{ |
|
1917 |
'textvariable': self.inputFile, |
|
1918 |
},
|
|
1919 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
1920 |
self.ifd.append( {'name': 'outentLab', |
|
1921 |
'widgetType': Tkinter.Label, |
|
1922 |
'text':'Redirect output to:', |
|
1923 |
'gridcfg':{'sticky':Tkinter.E}}) |
|
1924 |
self.ifd.append( {'name': 'outentry', |
|
1925 |
'widgetType':Tkinter.Entry, |
|
1926 |
'wcfg':{ |
|
1927 |
'textvariable': self.outputFile, |
|
1928 |
},
|
|
1929 |
'gridcfg':{'sticky':Tkinter.E,'row':-1,'column':1}}) |
|
1930 |
self.flagWids=['flagChoiceLab','flagYes','flagNo', |
|
1931 |
'kflag','iflag','uflag', |
|
1932 |
'tflag','cflag','inentLab', |
|
1933 |
'inentry','outentLab','outentry'] |
|
1934 |
||
1935 |
||
1936 |
def callDoit_cb(self, event = None): |
|
1937 |
cmdStr=self.cmd.get() |
|
1938 |
if self.queueType.get()=='int': |
|
1939 |
if string.find(cmdStr,'dpf')<0: |
|
1940 |
msgStr="Must Specify a docking parameter file (.dpf)!" |
|
1941 |
self.vf.warningMsg(msgStr) |
|
1942 |
return
|
|
1943 |
if string.find(cmdStr,'dlg')<0: |
|
1944 |
msgStr="Must Specify a docking log file (.dlg)!" |
|
1945 |
self.vf.warningMsg(msgStr) |
|
1946 |
return
|
|
1947 |
self.doitWrapper(self.cmd.get(),log=1,redraw=0) |
|
1948 |
||
1949 |
||
1950 |
def updateFlags(self, event=None): |
|
1951 |
wlist = [] |
|
1952 |
wlist2 = [] |
|
1953 |
for item in ['kflag','iflag','uflag','tflag','cflag']: |
|
1954 |
wlist.append(self.ifd.entryByName[item]) |
|
1955 |
for item in ['inentLab','inentry','outentLab','outentry']: |
|
1956 |
wlist2.append(self.ifd.entryByName[item]) |
|
1957 |
if not self.flagVar.get(): |
|
1958 |
for item in wlist: |
|
1959 |
item['widget'].grid_forget() |
|
1960 |
for item in wlist2: |
|
1961 |
item['widget'].grid_forget() |
|
1962 |
else: |
|
1963 |
for item in wlist: |
|
1964 |
item['widget'].grid(item['gridcfg']) |
|
1965 |
#call getInputs to pack or not pack wlist2 items according to cflag
|
|
1966 |
self.getInputs() |
|
1967 |
self.getCmd() |
|
1968 |
||
1969 |
def getInputs(self, event=None): |
|
1970 |
wlist=[] |
|
1971 |
for item in ['inentLab','inentry','outentLab','outentry']: |
|
1972 |
wlist.append(self.ifd.entryByName[item]) |
|
1973 |
if not self.cflag.get(): |
|
1974 |
for item in wlist: |
|
1975 |
item['widget'].grid_forget() |
|
1976 |
else: |
|
1977 |
for item in wlist: |
|
1978 |
item['widget'].grid(item['gridcfg']) |
|
1979 |
self.getCmd() |
|
1980 |
||
1981 |
def getCmd(self, event=None): |
|
1982 |
#AutoDock:
|
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
1983 |
if self.workingDirPath.get() == None: |
1984 |
curdir = os.getcwd() |
|
1985 |
else: |
|
1986 |
curdir = self.workingDirPath.get() |
|
1987 |
||
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
1988 |
if string.find(curdir, 'tmp_mnt')>=0: |
1989 |
curdir=curdir[8:] |
|
1990 |
remotedir= self.remoteDir.get() |
|
1991 |
host = self.hostName.get() |
|
1992 |
pFile = self.paramFile.get() |
|
1993 |
logName = self.logFile.get() |
|
1994 |
exe = self.execPath.get() |
|
1995 |
job = self.jobFile.get() |
|
1996 |
cmd = self.cmd |
|
1997 |
niceStr='' |
|
1998 |
if self.niceLevel.get()=='': |
|
1999 |
self.niceLevel.set('0') |
|
2000 |
if self.niceLevel.get()!='0': |
|
2001 |
niceStr = 'nice +'+self.niceLevel.get() + " " |
|
2002 |
qT = self.queueType.get() |
|
2003 |
if job=='' and pFile and (qT=='nqe' or qT=='pbs'): |
|
2004 |
self.jobFile.set(self.makeJobFile(pFile)) |
|
2005 |
job= self.jobFile.get() |
|
2006 |
flagStr=' ' |
|
2007 |
if self.flagVar.get(): |
|
2008 |
if self.kflag.get(): |
|
2009 |
flagStr= flagStr + ' -k' |
|
2010 |
if self.iflag.get(): |
|
2011 |
flagStr= flagStr + ' -i' |
|
2012 |
if self.uflag.get(): |
|
2013 |
flagStr= flagStr + ' -u' |
|
2014 |
if self.tflag.get(): |
|
2015 |
flagStr= flagStr + ' -t' |
|
2016 |
cStr=' ' |
|
2017 |
if self.cflag.get(): |
|
2018 |
cStr= cStr + ' -c' |
|
2019 |
if self.inputFile.get()!='': |
|
2020 |
cStr= cStr + ' < '+ self.inputFile.get() |
|
2021 |
if self.outputFile.get()!='': |
|
2022 |
cStr= cStr + ' > '+ self.outputFile.get() |
|
2023 |
else: |
|
2024 |
cStr = '&' |
|
2025 |
||
2026 |
qT=self.queueType.get() |
|
2027 |
if qT =='int': |
|
2028 |
if host==self.localHost: |
|
2029 |
cmdStr=exe+flagStr+' -p '+pFile+' -l '+logName+'&' |
|
2030 |
else: |
|
2031 |
cmdStr="rsh "+host+" -n "+"\'cd "+curdir+";"+niceStr + exe + flagStr+" -p "+pFile+" -l "+logName+"&\'&" |
|
2032 |
elif qT=='nqe': |
|
2033 |
cmdStr="rsh " +host+ " -n " + "\'cd " +curdir+";/nqe/bin/cqsub -lT "+self.nqeTime.get()+ " -la ncpu="+self.nqeCpu.get()+" "+job + "\'" |
|
2034 |
elif qT=='pbs': |
|
2035 |
msg = 'PBS queuetype not yet implemented' |
|
2036 |
self.vf.warningMsg(msg) |
|
2037 |
return
|
|
2038 |
if remotedir=='': |
|
2039 |
msg = 'No REMOTE DIRECTORY specified!' |
|
2040 |
self.vf.warningMsg(msg) |
|
2041 |
return
|
|
2042 |
cmdStr="rsh " +host+ " -n " + "\'cd " +remotedir+";/pbs/bin/qsub -l walltime= "+self.nqeTime.get()+ " -l nodes="+self.nqeCpu.get()+" "+job + "\'" |
|
2043 |
elif qT=='ent': |
|
2044 |
cmdStr='params=startjob;'+self.nodes.get()+';'+self.gpf.get()+';'+self.pdbqs.get()+';'+self.dpf.get()+';'+self.pdbq.get() |
|
2045 |
else: |
|
2046 |
msg='unknown queuetype-> ' + qT |
|
2047 |
self.vf.warningMsg(msg) |
|
2048 |
return
|
|
2049 |
self.cmd.set(cmdStr) |
|
2050 |
self.command=cmdStr |
|
2051 |
###self.makeJobFile(pFile)
|
|
2052 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
2053 |
||
2054 |
def makeJobFile(self, pFName): |
|
2055 |
"""AutoDock:"""
|
|
2056 |
if not pFName: return '' |
|
2057 |
#NOT FINISHED:
|
|
2058 |
#MUST PUT COPY OF JOB FILE ON REMOTE MACHINE!!
|
|
2059 |
if self.qT=='int': |
|
2060 |
return '' |
|
2061 |
elif self.qT=='nqe': |
|
2062 |
curdir= os.getcwd() |
|
2063 |
if string.find(curdir, 'tmp_mnt')>=0: |
|
2064 |
curdir=curdir[8:] |
|
2065 |
dName = curdir |
|
2066 |
elif self.qT=='pbs': |
|
2067 |
dName = self.remoteDir.get() |
|
2068 |
msg='self.ADstart_autodock.makeJobFile(' + pFName+')' |
|
2069 |
self.vf.log(msg) |
|
2070 |
pName = os.path.split(pFName)[-1] |
|
2071 |
#pStem = string.split(pFName, '.')[0]
|
|
2072 |
pnum=string.rfind(pName, '.') |
|
2073 |
pStem =pName[:pnum] |
|
2074 |
host = self.Host |
|
2075 |
exe = self.execPath.get() |
|
2076 |
flagStr=' ' |
|
2077 |
if self.flagVar.get(): |
|
2078 |
if self.kflag.get(): |
|
2079 |
flagStr= flagStr + ' -k ' |
|
2080 |
if self.iflag.get(): |
|
2081 |
flagStr= flagStr + ' -i ' |
|
2082 |
if self.uflag.get(): |
|
2083 |
flagStr= flagStr + ' -u ' |
|
2084 |
if self.tflag.get(): |
|
2085 |
flagStr= flagStr + ' -t ' |
|
2086 |
cmd = self.cmd |
|
2087 |
logName = self.logFile.get() |
|
2088 |
jobFile = pStem + '.j' |
|
2089 |
fptr= open(jobFile, 'w') |
|
2090 |
jobStr='cd '+dName+";"+exe+" "+ flagStr +" -p "+pName+" -l "+logName+"\n" |
|
2091 |
fptr.write(jobStr) |
|
2092 |
fptr.close() |
|
2093 |
os.chmod(jobFile, 0755) |
|
2094 |
return jobFile |
|
2095 |
||
2096 |
AutoDockStarterGUI=CommandGUI() |
|
2097 |
AutoDockStarterGUI.addMenuCommand('AutoToolsBar', menuText['StartMB'], menuText['startDockMB']) |
|
2098 |
||
2099 |
||
2100 |
||
2101 |
class AddAutoDockHost(MVCommand): |
|
2102 |
""" this class allows user to add entries to hosts dictionary
|
|
2103 |
and write them to a file"""
|
|
2104 |
||
2105 |
def guiCallback(self, event=None): |
|
2106 |
#Edit AutoDockHosts
|
|
2107 |
self.customizeGUI() |
|
2108 |
if not hasattr(self, 'form'): |
|
2109 |
if self.vf.hasGui: |
|
2110 |
self.form = self.vf.getUserInput(self.ifd, modal=0, blocking=0) |
|
2111 |
self.form.root.protocol('WM_DELETE_WINDOW',self.Close_cb) |
|
2112 |
self.fillForm() |
|
2113 |
self.qType.set('int') |
|
2114 |
self.userSpecific.set(0) |
|
2115 |
self.topLevel = self.form.root |
|
2116 |
else: |
|
2117 |
## from ViewerFramework.gui import InputForm
|
|
2118 |
from mglutil.gui.InputForm.Tk.gui import InputForm |
|
2119 |
self.form = InputForm(self.vf.master,self.ifd,modal=0, blocking=0) |
|
2120 |
self.topLevel = self.form.root |
|
2121 |
self.form.autoSize() |
|
2122 |
||
2123 |
||
2124 |
def customizeGUI(self): |
|
2125 |
if not hasattr(self, 'ifd'): |
|
2126 |
import AutoDockTools |
|
2127 |
self.hostDict = AutoDockTools.hostDict |
|
2128 |
#print "AADH:hostDict.keys()=", self.hostDict.keys()
|
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
2129 |
self.macroName=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
2130 |
self.hostName=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
2131 |
self.agPath=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
2132 |
self.adPath=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
2133 |
self.qType=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
|
2134 |
self.userSpecific=Tkinter.IntVar(master=self.vf.GUI.ROOT) |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2135 |
ifd=self.ifd=InputFormDescr(title='Add Host') |
2136 |
ifd.append( {'name': 'hList', |
|
2137 |
'widgetType': Tkinter.Listbox, |
|
2138 |
'gridcfg':{'sticky':Tkinter.E,'column':0, 'row': 0,'rowspan':6}}) |
|
2139 |
ifd.append( {'name': 'mNLab', |
|
2140 |
'widgetType': Tkinter.Label, |
|
2141 |
'wcfg':{ 'text': 'Macro Name:'}, |
|
2142 |
'gridcfg':{'sticky':Tkinter.E, 'row':0, 'column':1}}) |
|
2143 |
ifd.append( {'name': 'mNentry', |
|
2144 |
'widgetType':Tkinter.Entry, |
|
2145 |
'wcfg':{ |
|
2146 |
'width':25, |
|
2147 |
'textvariable':self.macroName}, |
|
2148 |
'gridcfg':{'sticky':Tkinter.E,'row':0,'column':2}}) |
|
2149 |
ifd.append( {'name': 'hNLab', |
|
2150 |
'widgetType': Tkinter.Label, |
|
2151 |
'wcfg':{ 'text': 'Host Name:'}, |
|
2152 |
'gridcfg':{'sticky':Tkinter.E, 'row':1, 'column':1}}) |
|
2153 |
ifd.append( {'name': 'hNentry', |
|
2154 |
'widgetType':Tkinter.Entry, |
|
2155 |
'wcfg':{ |
|
2156 |
'width':25, |
|
2157 |
'textvariable':self.hostName}, |
|
2158 |
'gridcfg':{'sticky':Tkinter.E,'row':1,'column':2}}) |
|
2159 |
ifd.append( {'name': 'agPath', |
|
2160 |
'widgetType': Tkinter.Label, |
|
2161 |
'wcfg':{ |
|
2162 |
'text': 'Autogrid Program\nPathname:'}, |
|
2163 |
'gridcfg':{'sticky':Tkinter.E,'row':2,'column':1}}) |
|
2164 |
ifd.append( {'name': 'agEntry', |
|
2165 |
'widgetType':Tkinter.Entry, |
|
2166 |
'wcfg':{ |
|
2167 |
'width':25, |
|
2168 |
'textvariable':self.agPath}, |
|
2169 |
'gridcfg':{'sticky':Tkinter.E,'row':2,'column':2}}) |
|
2170 |
ifd.append({'name': 'agButton', |
|
2171 |
'widgetType': Tkinter.Button, |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2172 |
'wcfg':{'text':'Browse','command':self.browseAG,'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2173 |
'gridcfg':{'sticky':Tkinter.W,'row':2, 'column':3}}) |
2174 |
ifd.append( {'name': 'adPath', |
|
2175 |
'widgetType': Tkinter.Label, |
|
2176 |
'wcfg':{ 'text': 'Autodock Program\nPathname:'}, |
|
2177 |
'gridcfg':{'sticky':Tkinter.E, 'row':3, 'column':1}}) |
|
2178 |
ifd.append( {'name': 'adEntry', |
|
2179 |
'widgetType':Tkinter.Entry, |
|
2180 |
'wcfg':{ |
|
2181 |
'width':25, |
|
2182 |
'textvariable':self.adPath}, |
|
2183 |
'gridcfg':{'sticky':Tkinter.E,'row':3,'column':2}}) |
|
2184 |
ifd.append({'name': 'adButton', |
|
2185 |
'widgetType': Tkinter.Button, |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2186 |
'wcfg':{'text':'Browse','command':self.browseAD,'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2187 |
'gridcfg':{'sticky':Tkinter.W,'row':3, 'column':3}}) |
2188 |
ifd.append( {'name': 'qChoice', |
|
2189 |
'widgetType': Tkinter.Label, |
|
2190 |
'wcfg':{'text':'Queue Type'}, |
|
2191 |
'gridcfg':{'sticky':Tkinter.E, 'row':4, 'column':1}}) |
|
2192 |
ifd.append({'name': 'intButton', |
|
2193 |
'widgetType': Tkinter.Radiobutton, |
|
2194 |
'wcfg':{'value':'int', 'text':'int', 'variable':self.qType}, |
|
2195 |
'gridcfg':{'sticky':Tkinter.E +Tkinter.W, 'row':4,'column':2}}) |
|
2196 |
ifd.append({'name': 'winButton', |
|
2197 |
'widgetType': Tkinter.Radiobutton, |
|
2198 |
'wcfg':{'text':'nqe','value':'nqe', 'variable':self.qType}, |
|
2199 |
'gridcfg':{'sticky':Tkinter.W,'row':4, 'column':3}}) |
|
2200 |
ifd.append({'name': 'pdsButton', |
|
2201 |
'widgetType': Tkinter.Radiobutton, |
|
2202 |
'wcfg':{'text':'pbs','value':'pbs', 'state':'disabled','variable':self.qType}, |
|
2203 |
'gridcfg':{'sticky':Tkinter.W,'row':4, 'column':4}}) |
|
2204 |
ifd.append( {'name': 'userOnlyChoice', |
|
2205 |
'widgetType': Tkinter.Label, |
|
2206 |
'wcfg':{'text':'From User Dict:'}, |
|
2207 |
'gridcfg':{'sticky':Tkinter.E, 'row':5, 'column':1}}) |
|
2208 |
ifd.append({'name': 'userButton', |
|
2209 |
'widgetType': Tkinter.Radiobutton, |
|
2210 |
'wcfg':{'text':'yes','value':1, 'variable':self.userSpecific}, |
|
2211 |
'gridcfg':{'sticky':Tkinter.E +Tkinter.W,'row':5,'column':2}}) |
|
2212 |
ifd.append({'name': 'notuserButton', |
|
2213 |
'widgetType': Tkinter.Radiobutton, |
|
2214 |
'wcfg':{'text':'no','value':0, 'variable':self.userSpecific}, |
|
2215 |
'gridcfg':{'sticky':Tkinter.W,'row':5, 'column':3}}) |
|
2216 |
ifd.append({'widgetType': Tkinter.Button, |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2217 |
'wcfg':{'text':'Add','bd':2,'command':self.addItem_cb}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2218 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'row':7,'column':0}}) |
2219 |
ifd.append({'widgetType': Tkinter.Button, |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2220 |
'wcfg':{'text':'Delete','command':self.delItem_cb,'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2221 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'row':-1,'column':1}}), |
2222 |
ifd.append({'widgetType': Tkinter.Button, |
|
2223 |
'text':'Write', |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2224 |
'wcfg':{'text':'Write','command':self.write_cb,'bd':2}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2225 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'row':-1,'column':2}}) |
2226 |
ifd.append({'widgetType': Tkinter.Button, |
|
1.1.8
by Steffen Moeller
Import upstream version 1.5.6~rc2+cvs.20111222 |
2227 |
'wcfg':{'text':'Cancel','bd':2,'command':self.Close_cb}, |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2228 |
'gridcfg':{'sticky':Tkinter.E+Tkinter.W,'row':-1,'column':3,'columnspan':5}}) |
2229 |
else: |
|
2230 |
if hasattr(self, 'form') and self.form!=None: |
|
2231 |
self.form.deiconify() |
|
2232 |
||
2233 |
def fillForm(self): |
|
2234 |
lb = self.ifd.entryByName['hList']['widget'] |
|
2235 |
dict= self.hostDict |
|
2236 |
for h in dict.keys(): |
|
2237 |
lb.insert('end',h) |
|
2238 |
lb.select_set(0) |
|
2239 |
lb.bind('<Double-Button-1>', self.getItem) |
|
2240 |
||
2241 |
def getItem(self, event=None): |
|
2242 |
lb = self.ifd.entryByName['hList']['widget'] |
|
2243 |
p=lb.curselection() |
|
2244 |
picked = lb.get(p) |
|
2245 |
dict= self.hostDict |
|
2246 |
#self.hostName.set(picked)
|
|
2247 |
self.macroName.set(picked) |
|
2248 |
self.hostName.set(dict[picked]['host']) |
|
2249 |
self.agPath.set(dict[picked]['autogrid']) |
|
2250 |
self.adPath.set(dict[picked]['autodock']) |
|
2251 |
self.qType.set(dict[picked]['queuetype']) |
|
2252 |
#FIX THIS: need to do something different for this case!
|
|
2253 |
self.userSpecific.set(dict[picked]['userSpecific']) |
|
2254 |
||
2255 |
def delItem_cb(self, event=None): |
|
2256 |
lb = self.ifd.entryByName['hList']['widget'] |
|
2257 |
p=lb.curselection() |
|
2258 |
picked = lb.get(p) |
|
2259 |
dict= self.hostDict |
|
2260 |
del dict[picked] |
|
2261 |
lb.delete(p) |
|
2262 |
self.macroName.set('') |
|
2263 |
self.hostName.set('') |
|
2264 |
self.agPath.set('') |
|
2265 |
self.adPath.set('') |
|
2266 |
self.qType.set('') |
|
2267 |
||
2268 |
def buildLogStr(self): |
|
2269 |
logstr="self.ADstart_editHostMacros.addItem_cb(macro='"+self.macroName.get()+\ |
|
2270 |
"', host='"+self.hostName.get()+"',autogrid='"+self.agPath.get()+\ |
|
2271 |
"',autodock='"+self.adPath.get()+"',queuetype='"+self.qType.get()+\ |
|
2272 |
"',userSpecific="+str(self.userSpecific.get())+")\n" |
|
2273 |
print logstr |
|
2274 |
return logstr |
|
2275 |
||
2276 |
def write_cb(self, newfile = None, whichOnes='all', event=None): |
|
2277 |
# write only current content of widget....
|
|
2278 |
adtrcDict = findResourceFile(self.vf, '_adtrc') |
|
2279 |
idir = './' |
|
2280 |
if 'HOME' in os.environ.keys(): |
|
2281 |
home=os.environ['HOME'] |
|
2282 |
idir=home |
|
2283 |
||
2284 |
#if there are NO _adtrc files any where, write to HOME if it exists
|
|
2285 |
#else write to current directory
|
|
2286 |
#check for >1 choice and ask user where to write it
|
|
2287 |
hasValues=filter(lambda x: not x is None, adtrcDict.values()) |
|
2288 |
#if filter(lambda x: not x is None, adtrcDict.values())==[]:
|
|
2289 |
if hasValues==[]: |
|
2290 |
filename=self.vf.askFileSave(idir=idir, |
|
2291 |
ifile='_adtrc', |
|
2292 |
types = [('adt Resource File', '_adtrc')], |
|
2293 |
title = 'Save new host macros in _adtrc:') |
|
2294 |
elif len(hasValues)>1: |
|
2295 |
#have to give a choice here:
|
|
1.1.1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20081109 |
2296 |
location=Tkinter.StringVar(master=self.vf.GUI.ROOT) |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2297 |
levels=adtrcDict.keys() |
2298 |
ifd = InputFormDescr(title='which adtrc file to write?') |
|
2299 |
for level in levels: |
|
2300 |
if adtrcDict[level]: |
|
2301 |
ifd.append({'name': level, |
|
2302 |
'widgetType':Tkinter.Radiobutton, |
|
2303 |
'wcfg': {'value': adtrcDict[level], |
|
2304 |
'variable':location, |
|
2305 |
'text':level}, |
|
2306 |
'gridcfg':{'sticky':Tkinter.W}}) |
|
2307 |
vals = self.vf.getUserInput(ifd) |
|
2308 |
if vals: |
|
2309 |
filename=location.get() |
|
2310 |
#on UNIX machines, can test writeability:
|
|
2311 |
if sys.platform!=32: |
|
2312 |
if not os.access(filename, os.W_OK): |
|
2313 |
t=filename + " not writeable by you" |
|
2314 |
self.vf.warningMsg(t) |
|
2315 |
return
|
|
2316 |
||
2317 |
elif adtrcDict['currentdir']: |
|
2318 |
filename = adtrcDict['currentdir'] |
|
2319 |
||
2320 |
elif adtrcDict['home']: |
|
2321 |
filename = adtrcDict['home'] |
|
2322 |
||
2323 |
elif adtrcDict['package']: |
|
2324 |
filename = adtrcDict['package'] |
|
2325 |
import shutil |
|
2326 |
if not filename is None: |
|
2327 |
shutil.copy(adtrcDict['package'],filename) |
|
2328 |
||
2329 |
if filename: |
|
2330 |
fptr= open(filename, 'r') |
|
2331 |
logLine=self.buildLogStr() |
|
2332 |
allLines=fptr.readlines() |
|
2333 |
for l in allLines: |
|
2334 |
if string.find(l,logLine)>-1: |
|
2335 |
fptr.close() |
|
2336 |
t= l+ ' already in ' + filename |
|
2337 |
self.vf.warningMsg(t) |
|
2338 |
return
|
|
2339 |
fptr.close() |
|
2340 |
f= open(filename, 'a') |
|
2341 |
f.write('\n') |
|
2342 |
f.write(logLine) |
|
2343 |
f.close() |
|
2344 |
||
2345 |
else: |
|
2346 |
print "Careful: nothing has been written because no filename was give" |
|
2347 |
return
|
|
2348 |
||
2349 |
def checkit(self, host): |
|
2350 |
ans=0 |
|
2351 |
if host!='' and len(self.agPath.get()) and len(self.adPath.get()) and len(self.qType.get()): |
|
2352 |
return 1 |
|
2353 |
return ans |
|
2354 |
||
2355 |
def checklb(self,host): |
|
2356 |
if not self.ifd.entryByName.has_key('hList'): return |
|
2357 |
lb = self.ifd.entryByName['hList']['widget'] |
|
2358 |
end =lb.index('end') |
|
2359 |
for i in range(end): |
|
2360 |
if lb.get(i)==host: |
|
2361 |
return 1 |
|
2362 |
else: |
|
2363 |
return 0 |
|
2364 |
||
2365 |
def addItem_cb(self, macro=None, host= None, autogrid=None, autodock=None, queuetype=None, userSpecific=None): |
|
2366 |
#need to update the lb
|
|
2367 |
if macro: |
|
2368 |
self.macroName.set(macro) |
|
2369 |
else: |
|
2370 |
macro = self.macroName.get() |
|
2371 |
if autogrid: |
|
2372 |
self.agPath.set(autogrid) |
|
2373 |
else: |
|
2374 |
autogrid = self.agPath.get() |
|
2375 |
if autodock: |
|
2376 |
self.adPath.set(autodock) |
|
2377 |
else: |
|
2378 |
autodock=self.adPath.get() |
|
2379 |
if queuetype: |
|
2380 |
self.qType.set(queuetype) |
|
2381 |
else: |
|
2382 |
queuetype= self.qType.get() |
|
2383 |
ans = self.checkit(macro) |
|
2384 |
if host: |
|
2385 |
self.hostName.set(host) |
|
2386 |
else: |
|
2387 |
host = self.hostName.get() |
|
2388 |
if userSpecific: |
|
2389 |
self.userSpecific.set(userSpecific) |
|
2390 |
else: |
|
2391 |
userSpecific= self.userSpecific.get() |
|
2392 |
if ans: |
|
2393 |
self.hostDict.addHost(macro, host=host,autogrid=autogrid,autodock=autodock,queuetype=queuetype,userSpecific=userSpecific) |
|
2394 |
msg = "self.ADstart_editHostMacros.addItem_cb(macro='" + macro + "',host='"+host+ "', autogrid='"+ autogrid + "', autodock = '" + autodock + "', queuetype='" + queuetype+"', userSpecific="+ str(userSpecific) + ")" |
|
2395 |
self.vf.log(msg) |
|
2396 |
ans = self.checklb(macro) |
|
2397 |
if not ans and self.ifd.entryByName.has_key('hList'): |
|
2398 |
lb = self.ifd.entryByName['hList']['widget'] |
|
2399 |
lb.insert('end', macro) |
|
2400 |
||
2401 |
def Close_cb(self): |
|
2402 |
self.form.root.withdraw() |
|
2403 |
||
2404 |
def browseAG(self): |
|
2405 |
ag = self.vf.askFileOpen(parent = self.topLevel, |
|
2406 |
types=[('autogrid..','*')], title= 'Autogrid Executable File:') |
|
2407 |
if ag: |
|
2408 |
#don't strip off the pathname??
|
|
2409 |
agPathList=os.path.split(ag) |
|
2410 |
if agPathList[0]==os.getcwd(): |
|
2411 |
ag = agPathList[-1] |
|
2412 |
self.agPath.set(ag) |
|
2413 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
2414 |
||
2415 |
def browseAD(self): |
|
2416 |
ad = self.vf.askFileOpen(parent = self.topLevel, |
|
2417 |
types=[('autodock..','*')], title= 'Autodock Executable File:') |
|
2418 |
if ad: |
|
2419 |
#don't strip off the pathname??
|
|
2420 |
adPathList=os.path.split(ad) |
|
2421 |
if adPathList[0]==os.getcwd(): |
|
2422 |
ad = adPathList[-1] |
|
2423 |
self.adPath.set(ad) |
|
2424 |
if hasattr(self, 'topLevel'):self.topLevel.lift() |
|
2425 |
||
2426 |
AddAutoDockHostGUI=CommandGUI() |
|
2427 |
AddAutoDockHostGUI.addMenuCommand('AutoToolsBar', menuText['StartMB'], menuText['editHostsMB']) |
|
2428 |
||
2429 |
commandList = [ |
|
2430 |
{'name':'ADstart_autogrid','cmd':AutoGridStarter(),'gui':AutoGridStarterGUI}, |
|
2431 |
{'name':'ADstart_autodock','cmd':AutoDockStarter(),'gui':AutoDockStarterGUI}, |
|
2432 |
{'name':'ADstart_editHostMacros','cmd':AddAutoDockHost(),'gui':AddAutoDockHostGUI}, |
|
2433 |
]
|
|
2434 |
||
2435 |
import sys |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
2436 |
if os.name != 'nt': #not sys.platform == 'win32': |
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2437 |
commandList.insert(2, |
2438 |
{'name':'ADstart_manage','cmd':ADProcessManager(),'gui':ADProcessManagerGUI}) |
|
2439 |
else: |
|
2440 |
import binaries |
|
1.1.6
by Steffen Moeller
Import upstream version 1.5.6~rc1+cvs.20110617 |
2441 |
if os.environ.has_key('PATH'): |
2442 |
os.environ['PATH'] = binaries.__path__[0]+";"+os.environ['PATH'] |
|
2443 |
else: |
|
2444 |
os.environ['PATH'] = binaries.__path__[0] |
|
1
by Steffen Moeller
Import upstream version 1.5.2.cvs.20080731 |
2445 |
|
2446 |
def initModule(vf): |
|
2447 |
||
2448 |
||
2449 |
for dict in commandList: |
|
2450 |
vf.addCommand(dict['cmd'],dict['name'],dict['gui']) |
|
2451 |
||
2452 |
if hasattr(vf,'GUI'): |
|
2453 |
for item in vf.GUI.menuBars['AutoToolsBar'].menubuttons.values(): |
|
2454 |
item.configure(background = 'tan') |
|
2455 |
item.configure(underline = '-1') |
|
2456 |
||
2457 |
||
2458 |
else: |
|
2459 |
vf.addCommand(ADProcessManager(),'ADstart_manage') |
|
2460 |
vf.addCommand(AutoGridStarter(), 'ADstart_autogrid') |
|
2461 |
vf.addCommand(AutoDockStarter(), 'ADstart_autodock') |