labelpos = 'w',
label_text = 'Choose method:',
menubutton_textvariable = self.OM1Val,
- items = ['MD', 'MREMD', 'MINIMIZE' ],
+ items = ['MD', 'REMD/MREMD', 'MINIMIZE' ],
command = self.switch_options,
menubutton_width = 10
)
self.balloon.bind(self.gr1.md.e7, "Frequency of resetting velocities to values from Gaussian distribution")
self.gr1.md.e7.component('entry').config(width=8)
self.gr1.md.e7.grid(row=1,column=2, sticky=E)
-
+
+ # -- initial structure
+ self.gr1.md.om1 = Pmw.OptionMenu(self.gr1.md,
+ labelpos = 'w',
+ label_text = 'Start from',
+ items = ['PDB', 'extended', 'random' ],
+ menubutton_width = 8,
+ )
+ self.gr1.md.om1.grid(row=1,column=3, sticky=E)
#=================================
# - thermostat frame
self.gr1.mi.c3.pack(side=LEFT)
+ #=================================
+ # - REMD frame
+ self.gr1.re = Frame(self.gr1.interior())
+ #self.gr1.re.grid(row=5, column=0, columnspan=5,sticky=W+E)
+
+ self.gr1.re.e1 = Pmw.EntryField(self.gr1.re,
+ labelpos = 'w',
+ label_text = "NREP",
+ validate = {'validator' : 'integer', 'min': 1 , 'max' : 32 },
+ command = self.set_replica_widgets,
+ value = "16" )
+ self.balloon.bind(self.gr1.re.e1,'Number of replicas in a REMD/MREMD run.')
+ self.gr1.re.e1.component('entry').config(width=8)
+ self.gr1.re.e1.grid(row=0, column=0, sticky=W)
+
+ self.gr1.re.e2 = Pmw.EntryField(self.gr1.re,
+ labelpos = 'w',
+ label_text = "NSTEX",
+ validate = {'validator' : 'integer', 'min': 0 , 'max' : 1000000 },
+ value = "1000" )
+ self.balloon.bind(self.gr1.re.e2,'Number of steps after which exchange is performed in REMD/MREMD runs.')
+ self.gr1.re.e2.component('entry').config(width=8)
+ self.gr1.re.e2.grid(row=0, column=1, sticky=W)
+
+ # -- radio select
+ self.gr1.re.rs = Pmw.RadioSelect(self.gr1.re,
+ labelpos = 'w',
+ label_text = 'Replica temperatures',
+ command = self.sel_replica_mode,
+ buttontype = 'radiobutton'
+ #frame_borderwidth = 2,
+ #frame_relief = 'ridge'
+ )
+ self.gr1.re.rs.grid(row=1, column=0, columnspan=4,sticky=W)
+
+ for text in ('Manual', 'Range'):
+ self.gr1.re.rs.add(text)
+
+ # --- range
+ self.gr1.re.tf1 = Frame(self.gr1.re, bg="blue")
+ self.gr1.re.tf1.grid(row=2,column=0, columnspan=4, sticky=W)
+
+ self.gr1.re.tf1.e1 = Pmw.EntryField(self.gr1.re.tf1,
+ labelpos = 'w',
+ label_text = "RETMIN",
+ validate = {'validator' : 'real', 'min': 0 , 'max' : 1000000 },
+ value = "10" )
+ self.balloon.bind(self.gr1.re.tf1.e1,'Minimum temperature in a REMD/MREMD run.')
+ self.gr1.re.tf1.e1.component('entry').config(width=8)
+ self.gr1.re.tf1.e1.grid(row=0, column=0, sticky=W)
+
+ self.gr1.re.tf1.e2 = Pmw.EntryField(self.gr1.re.tf1,
+ labelpos = 'w',
+ label_text = "RETMAX",
+ validate = {'validator' : 'real', 'min': 0 , 'max' : 1000000 },
+ value = "1000" )
+ self.balloon.bind(self.gr1.re.tf1.e2,'Maxmum temperature in a REMD/MREMD run.')
+ self.gr1.re.tf1.e2.component('entry').config(width=8)
+ self.gr1.re.tf1.e2.grid(row=0, column=1, sticky=W)
+
+ # --- manual
+ self.gr1.re.tf2 = Frame(self.gr1.re)
+ self.gr1.re.tf2.grid(row=3,column=0, columnspan=4, sticky=W)
+
+ self.gr1.re.tf2.te = []
+ for i in range(0,32): #int(self.gr1.re.e1.get())):
+ self.gr1.re.tf2.te.append(Pmw.EntryField(self.gr1.re.tf2,
+ labelpos='n',
+ label_text='T%02d' % (i+1),
+ validate = {'validator' : 'real','min' : 0, 'max' : 1000, 'minstrict' : 0},
+ value = '%d' % (200+i*10)))
+ self.gr1.re.tf2.te[i].component('entry').config(width=3)
+ self.gr1.re.tf2.te[i].grid(row=1+(i//16), column=0+(i % 16))
+
+ self.gr1.re.tf2.nre = Pmw.EntryField(self.gr1.re.tf2,
+ labelpos ='n',
+ label_text='Rep. in Temp.',
+ validate = {'validator' : 'integer','min' : 1, 'max' : 100 },
+ value = '2')
+ self.gr1.re.tf2.nre.component('entry').config(width=3)
+ self.gr1.re.tf2.nre.grid(row=1, column=17)
+
+ # display manual replica options
+ self.gr1.re.e1.invoke()
+ self.gr1.re.rs.invoke('Manual')
#=================================
# "Force field options" group
value = '1.00000'))
self.ef[i].component('entry').config(width=8)
self.ef[i].grid(row=1+(i//9), column=0+(i % 9))
+
+ #===================================
# "Sequence" group
+ #
self.gr3 = Pmw.Group(self,tag_text = 'Sequence')
self.gr3.grid(row=3, column=0,columnspan=4,sticky=W+E,padx=10, pady=5)
self.gr1.th.grid_remove()
self.gr1.md.grid_remove()
self.gr1.mi.grid_remove()
+ self.gr1.re.grid_remove()
# Show MD stuff
if self.OM1Val.get()=="MD":
self.gr1.md.grid(row=2, column=0, columnspan=5, sticky=W+E)
self.gr1.th.grid(row=3, column=0, columnspan=5, sticky=W+E)
+ elif self.OM1Val.get()=="REMD/MREMD":
+ self.gr1.md.grid(row=2, column=0, columnspan=5, sticky=W+E)
+ self.gr1.th.grid(row=3, column=0, columnspan=5, sticky=W+E)
+ self.gr1.re.grid(row=5, column=0, columnspan=5, sticky=W+E)
elif self.OM1Val.get()=="MINIMIZE":
self.gr1.mi.grid(row=4,column=0,columnspan=5, sticky=W+E)
+ def sel_replica_mode(self,mode):
+ '''
+ Display replica temperatures settings
+ '''
+ try:
+ self.gr1.re.tf1.grid_remove()
+ self.gr1.re.tf2.grid_remove()
+ if mode=="Range":
+ self.gr1.re.tf1.grid(row=2,column=0, columnspan=4, sticky=W)
+ elif mode=="Manual":
+ self.gr1.re.tf2.grid(row=3,column=0, columnspan=4, sticky=W)
+ except:
+ pass
+
+ def set_replica_widgets(self):
+ '''
+ Refresh list of available temperature widgets in manual mode
+ '''
+ #print self.gr1.re.e1.get()
+ for i in range(0,32): #int(self.gr1.re.e1.get())):
+ try:
+ if i<int(self.gr1.re.e1.get()):
+ self.gr1.re.tf2.te[i].component('entry').config(state=NORMAL)
+ else:
+ self.gr1.re.tf2.te[i].component('entry').config(state=DISABLED)
+ except:
+ pass
+
+
def set_force_field(self, pole):
'''
def fortran_format(self,s):
'''
- Formats string containing keywords to wrap over 80 columns
+ Formats string containing keywords to wrap over 80 columns.
+ Input string should be one line.
'''
tmpstr=''
column=1
return s
def get_md_opt(self):
+ '''
+ Get MD options for main input
+ '''
s = "NSTEP="+self.gr1.md.e1.getvalue()+" NTWE="+self.gr1.md.e2.getvalue()+" "
s+= "NTWX="+self.gr1.md.e3.getvalue()+" DT="+self.gr1.md.e4.getvalue()+" "
s+= "DAMAX="+self.gr1.md.e5.getvalue()+" DVMAX="+self.gr1.md.e6.getvalue()+" "
return s
def get_minim_opt(self):
+ '''
+ Get minimization options
+ '''
s = "MAXMIN="+self.gr1.mi.e1.getvalue()+" MAXFUN="+self.gr1.mi.e2.getvalue()
return s
+ def get_mremd_opt(self):
+ '''
+ Generates a sting containing REMD?MREMD main options for input
+ '''
+ s = "NREP="+self.gr1.re.e1.get()+" NSTEX="+self.gr1.re.e2.get()+" "
+ if self.gr1.re.rs.getvalue()=="Range":
+ s+="RETMIN="+self.gr1.re.tf1.e1.get()+"RETMAX="+self.gr1.re.tf1.e2.get()
+ else:
+ s+="TLIST MLIST"
+ s+=" TRAJ1FILE REST1FILE SYNC"
+
+ return s
+
+ def get_mremd_temp_opt(self):
+ '''
+ Generate a strong containing temperatures for REMD/MREMD "manual mode"
+ '''
+ s=""
+ for i in range(0,int(self.gr1.re.e1.get())):
+ s+=self.gr1.re.tf2.te[i].get()+" "
+
+ return s
+
+ def get_mremd_replicas(self):
+ '''
+ Generates a string containing number of replicas in every temperature for REMD/MREMD calculations.
+ For REMD calculations contains only sequence of ones.
+ '''
+ s=""
+ for i in range(0,int(self.gr1.re.e1.get())):
+ s+=self.gr1.re.tf2.nre.get()+" "
+ return s
+
+
def get_seq_data(self):
'''
Dumps the sequence and disulfide bridge information
'''
# write sequence length
s = str(self.seq_length)+"\n"
- #
- #try:
- # nchains=int(len(cmd.get_chains(self.cb2.getvalue()[0])))
- #except:
- # nchains=0
- #pass
chains=cmd.get_chains(self.cb2.getvalue()[0])
nchains=len(chains)
- #print "chains : ",chains
- #print "nchains : ",nchains
# apply one space before each sequence line
seq=self.gr3.t1.get()
# Don't writeSSbrige
else:
s+="0\n 0\n"
-
return s
# Get main options
mainopt="SEED="+self.gr1.e1.get()+" "
if self.OM1Val.get()=="MD":
- mainopt+="MD PDBREF EXTCONF"
- elif self.OM1Val.get()=="MREMD":
- mainopt+="RE "
+ mainopt+="MD PDBREF"
+ if self.gr1.md.om1.getvalue()=="PDB":
+ mainopt+=" PDBSTART"
+ elif self.gr1.md.om1.getvalue()=="extended":
+ mainopt+=" EXTCONF"
+ else:
+ mainopt+=" RAND_CONF"
+ elif self.OM1Val.get()=="REMD/MREMD":
+ mainopt+="RE PDBREF"
+ if self.gr1.md.om1.getvalue()=="PDB":
+ mainopt+=" PDBSTART"
+ elif self.gr1.md.om1.getvalue()=="extended":
+ mainopt+=" EXTCONF"
+ else:
+ mainopt+=" RAND_CONF"
+
elif self.OM1Val.get()=="MINIMIZE":
- mainopt+="PDBREF MINIMIZE RESCALE_MODE=0"
+ mainopt+="PDBREF PDBSTART MINIMIZE RESCALE_MODE=0"
if self.CART.get():
mainopt+=" CART"
if self.OVERLAP.get():
if self.OM1Val.get()=="MD":
text2save+=self.fortran_format(self.get_md_opt())
+ elif self.OM1Val.get()=="REMD/MREMD":
+ text2save+=self.fortran_format(self.get_md_opt())
+ text2save+=self.fortran_format(self.get_mremd_opt())
+ text2save+=self.fortran_format(self.get_mremd_temp_opt())
+ text2save+=self.fortran_format(self.get_mremd_replicas())
elif self.OM1Val.get()=="MINIMIZE":
text2save+=self.fortran_format(self.get_minim_opt())