X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=source%2Fpymol%2FUNRESInpGen.py;h=ca8c51664b9fabe03c37866812b5f142aab0cf36;hb=34d3ad3987785642be58fb2f26557d3314215577;hp=b3d77a771a300e4a040a5f128d008700f6b388af;hpb=f690e8b70bab14132839afebf080d4a28363b226;p=unres.git diff --git a/source/pymol/UNRESInpGen.py b/source/pymol/UNRESInpGen.py old mode 100755 new mode 100644 index b3d77a7..ca8c516 --- a/source/pymol/UNRESInpGen.py +++ b/source/pymol/UNRESInpGen.py @@ -52,6 +52,9 @@ class UNRESInpGenerator(Toplevel): writeSSbrige = IntVar() OM1Val = StringVar() OM2Val = StringVar() + CART = IntVar() + OVERLAP = IntVar() + NOSEARCHSC = IntVar() objects_list = ['Select object'] seq_list=[] seq_length=0 @@ -118,7 +121,7 @@ class UNRESInpGenerator(Toplevel): labelpos = 'w', label_text = 'Choose method:', menubutton_textvariable = self.OM1Val, - items = ['MD', 'MREMD' ], + items = ['MD', 'REMD/MREMD', 'MINIMIZE' ], command = self.switch_options, menubutton_width = 10 ) @@ -213,7 +216,15 @@ class UNRESInpGenerator(Toplevel): 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 @@ -261,6 +272,134 @@ class UNRESInpGenerator(Toplevel): self.gr1.th.e3.component('entry').config(width=8) #self.gr1.th.e2.pack(side=LEFT) + + #================================= + # - Minimization frame + self.gr1.mi = Frame(self.gr1.interior()) + #self.gr1.mi.grid(row=4, column=0, columnspan=5,sticky=W+E) + + self.gr1.mi.e1 = Pmw.EntryField(self.gr1.mi, + labelpos='w', + label_text="MAXMIN", + validate = {'validator' : 'integer', 'min': 0 , 'max' : 1000000 }, + value = "2000" ) + self.balloon.bind(self.gr1.mi.e1,'Maximum number of iterations of the SUMSL minimizer.') + self.gr1.mi.e1.component('entry').config(width=8) + self.gr1.mi.e1.pack(side=LEFT) + + self.gr1.mi.e2 = Pmw.EntryField(self.gr1.mi, + labelpos='w', + label_text="MAXFUN", + validate = {'validator' : 'integer', 'min': 0 , 'max' : 1000000 }, + value = "5000" ) + self.balloon.bind(self.gr1.mi.e2,'Maximum number of function evaluations in a single minimization.') + self.gr1.mi.e2.component('entry').config(width=8) + self.gr1.mi.e2.pack(side=LEFT) + + self.gr1.mi.c1 = Checkbutton(self.gr1.mi, + text = "CART", + variable = self.CART ) + self.balloon.bind(self.gr1.mi.c1,'Minimize in virtual-bond vectors instead of angles.') + self.gr1.mi.c1.pack(side=LEFT) + + self.gr1.mi.c2 = Checkbutton(self.gr1.mi, + text = "OVERLAP", + variable = self.OVERLAP ) + self.balloon.bind(self.gr1.mi.c2,'Fix overlaping sidechains.') + self.gr1.mi.c2.pack(side=LEFT) + + self.gr1.mi.c3 = Checkbutton(self.gr1.mi, + text = "NOSEARCHSC", + variable = self.NOSEARCHSC ) + #self.balloon.bind(self.gr1.mi.c3,'Minimize in virtual-bond vectors instead of angles.') + 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 @@ -291,7 +430,10 @@ class UNRESInpGenerator(Toplevel): 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) @@ -526,10 +668,48 @@ class UNRESInpGenerator(Toplevel): # Hide all 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