3 matplotlib.use(
'TkAgg')
7 from numpy
import arange, sin, pi,log10,max,min,cos,isnan, meshgrid,sqrt,abs
8 from matplotlib.backends.backend_tkagg
import FigureCanvasTkAgg,NavigationToolbar2TkAgg
9 from matplotlib.figure
import Figure
26 frame.grid(ipadx=10,ipady=10)
33 self.
datatype = sys.argv[1].split(
'--')[1]
36 print "GUI currently doesnot support pyPLUTO AMR Reader!!"
44 self.
lb1=Label(frame, text=
"Nstep").grid(row=0,column=0)
49 self.enstep.grid(row=0,column=1)
50 self.enstep.insert(0,
"0")
57 self.
wdir = self.myData.wdir
60 if self.myData.n3 != 1:
62 elif self.myData.n3 == 1
and self.myData.n2 != 1:
70 self.ldatabutton.grid(row=0,column=2)
74 self.ex1 = Entry(frame,width=5)
75 self.ex1.grid(row=2,column=0)
76 self.ex1.insert(0,
"x1")
78 self.ex2 = Entry(frame,width=5)
79 self.ex2.grid(row=2,column=1)
80 self.ex2.insert(0,
"x2")
82 self.ex3 = Entry(frame,width=5)
83 self.ex3.grid(row=2,column=2)
84 self.ex3.insert(0,
"x3")
87 self.ex3.config(state=
'disabled')
90 self.ex3.config(state=
'disabled')
91 self.ex2.config(state=
'disabled')
92 self.ex1.config(state=
'disabled')
96 self.f = Figure(figsize=(7,7), dpi=100)
97 self.
a = self.f.add_subplot(111)
98 self.canvas = FigureCanvasTkAgg(self.f, master=root)
100 self.canvas.get_tk_widget().grid(row=0,column=3,columnspan=10,rowspan=10,sticky=E)
110 for i
in [
'bx1s',
'bx2s',
'bx3s']:
112 self.varkeys.remove(i)
116 for j
in range(len(self.
varkeys)):
117 self.ldata = Radiobutton(frame,text=self.
varkeys[j],variable=self.v,value=self.
varkeys[j],command=self.
getmyvar)
118 self.ldata.grid(row=3+j,column=0,sticky=W)
123 self.slvar = StringVar()
124 self.slvar.set(
"Choose Slice")
125 if self.
Geom ==
'3D' :
126 SliceList = (
"Along x1",
"Along x2",
"Along x3",
"Along x1-x2",
"Along x2-x3",
"Along x3-x1")
127 elif self.
Geom ==
'2D' :
128 SliceList = (
"Along x1",
"Along x2",
"Along x1-x2")
132 for j
in range(len(SliceList)):
133 self.sldata = Radiobutton(frame,text=SliceList[j],variable=self.slvar,value=SliceList[j],command=self.
setslice)
134 self.sldata.grid(row=3+j,column=1,sticky=W)
138 self.logvar = IntVar()
139 self.chkb = Checkbutton(frame,text=
"Log ",variable=self.logvar,onvalue=1,offvalue=0,command=self.
logchkcall)
140 self.chkb.grid(row=3,column=2,sticky=W)
142 self.polarvar = IntVar()
143 self.polchkb = Checkbutton(frame,text=
"Polar",variable=self.polarvar,onvalue=1,offvalue=0,command=self.
polchkcall)
144 self.polchkb.grid(row=4,column=2,sticky=W)
145 if self.
Geom ==
'1D':
146 self.polchkb.config(state=
'disabled')
149 self.preaspect = IntVar()
150 self.aspectb = Checkbutton(frame,text=
"Aspect",variable=self.preaspect,onvalue=1,offvalue=0,command=self.
aspchkcall)
151 self.aspectb.grid(row=5,column=2,sticky=W)
152 if self.
Geom ==
'1D':
153 self.aspectb.config(state=
'disabled')
162 self.lb2=Label(frame,text=
"Labels").grid(row=22,column=0)
164 self.xlb = Entry(frame,width=15)
165 self.xlb.grid(row=22,column=1)
166 self.xlb.insert(0,
"xlabel")
168 self.ylb = Entry(frame,width=15)
169 self.ylb.grid(row=22,column=2)
170 self.ylb.insert(0,
"ylabel")
174 self.lb2a=Label(frame,text=
"XRange").grid(row=24,column=0)
175 self.lb2b=Label(frame,text=
"YRange").grid(row=26,column=0)
176 self.lb2c=Label(frame,text=
"VarRange").grid(row=28,column=0)
178 self.xrmin = Entry(frame,width=15)
179 self.xrmin.grid(row=24,column=1)
180 self.xrmin.insert(0,
'')
181 self.xrmax = Entry(frame,width=15)
182 self.xrmax.grid(row=24,column=2)
183 self.xrmax.insert(0,
'')
185 self.yrmin = Entry(frame,width=15)
186 self.yrmin.grid(row=26,column=1)
187 self.yrmin.insert(0,
'')
188 self.yrmax = Entry(frame,width=15)
189 self.yrmax.grid(row=26,column=2)
190 self.yrmax.insert(0,
'')
192 self.varmin = Entry(frame,width=15)
193 self.varmin.grid(row=28,column=1)
194 self.varmin.insert(0,
'')
195 self.varmax = Entry(frame,width=15)
196 self.varmax.grid(row=28,column=2)
197 self.varmax.insert(0,
'')
198 if self.
Geom ==
'1D':
199 self.yrmin.config(state=
'disabled')
200 self.yrmax.config(state=
'disabled')
205 self.lb3=Label(frame,text=
"Contours").grid(row=16,column=0)
207 self.contvar = IntVar()
208 self.chkb = Checkbutton(frame,text=
"Contour",variable=self.contvar,onvalue=1,offvalue=0,command=self.
contchkcall)
209 self.chkb.grid(row=6,column=2,sticky=W)
211 self.plcont = StringVar()
212 self.contkeys = [
"None"]
215 self.contkeys.append(item)
216 self.contkeys.append(
"x1*bx3")
218 self.contkeys.append(
"x1*Ax3")
221 self.contkeys.append(item)
222 self.plcont.set(
"None")
223 self.contmenu = OptionMenu(frame, self.plcont,*self.contkeys)
224 self.contmenu.grid(row=16,column=1)
226 self.xlevb = Entry(frame,width=15)
227 self.xlevb.grid(row=16,column=2,sticky=W)
228 self.xlevb.insert(0,
"Levels")
229 self.xlevb.config(state=
'disabled')
230 self.contmenu.config(state=
'disabled')
232 if self.
Geom ==
'1D':
233 self.chkb.config(state =
'disabled')
237 self.lb4=Label(frame,text=
"Arrows").grid(row=19,column=0)
239 self.arrowvar = IntVar()
240 self.arrowchkb = Checkbutton(frame,text=
"Arrows",variable=self.arrowvar,onvalue=1,offvalue=0,command=self.
arrchkcall)
241 self.arrowchkb.grid(row=7,column=2,sticky=W)
243 self.arrspb = Entry(frame,width=15)
244 self.arrspb.grid(row=19,column=2,sticky=W)
245 self.arrspb.insert(0,
"20")
248 self.plarr = StringVar()
249 self.arrkeys = [
"None"]
250 self.arrkeys.append(
"Vp")
251 self.arrkeys.append(
"Vp_norm")
253 self.arrkeys.append(
"Bp")
254 self.arrkeys.append(
"Bp_norm")
255 self.plarr.set(
"None")
256 self.arrmenu = OptionMenu(frame,self.plarr,*self.arrkeys)
257 self.arrmenu.grid(row=19,column=1)
258 self.arrmenu.config(state=
'disabled')
259 self.arrspb.config(state=
'disabled')
261 if self.
Geom ==
'1D':
262 self.arrowchkb.config(state =
'disabled')
268 self.pltbutton=Button(frame,text=
"Plot",command=self.
plotfinal)
269 self.pltbutton.grid(row=36,column=0)
270 if self.
Geom ==
'1D':
271 self.pltbutton.config(state=
'active')
273 self.pltbutton.config(state=
'disabled')
275 self.surfbutton=Button(frame,text=
"Surface",command=self.
plotsurface)
276 self.surfbutton.grid(row=36,column=1)
277 self.surfbutton.config(state=
'disabled')
282 self.clrbutton=Button(frame,text=
"Clear",command=self.
plotclear)
283 self.clrbutton.grid(row=36,column=2)
287 self.lbinf0 = Label(frame,text=
"Information",font=(
"Times",12,
"bold"))
288 self.lbinf0.grid(row=47,column=0,sticky=W,columnspan=3)
290 self.lbinf1a = Label(frame,text=
"Dir :",font=(
"Times",10,
"bold")).grid(row=49,column=0,sticky=W,columnspan=3)
291 self.lbinf1 = Label(frame,text=self.
wdir).grid(row=50,column=0,sticky=W,columnspan=3)
292 self.lbinf2a = Label(frame,text=
"Domain :",font=(
"Times",10,
"bold")).grid(row=51,column=0,sticky=W,columnspan=3)
293 self.lbinf2 = Label(frame,text=
"n1 x n2 x n3 = %d x %d x %d " % (self.myData.n1,self.myData.n2,self.myData.n3)).grid(row=52,column=0,sticky=W,columnspan=3)
294 self.lbinf3a = Label(frame,text=
"Time Status",font=(
"Times",10,
"bold")).grid(row=53,column=0,sticky=W,columnspan=3)
295 self.lbinf4 = Label(frame,text=
"Nlast = %d"% pp.nlast_info(w_dir=self.
wdir,datatype=self.
datatype)[
'nlast']).grid(row=54,column=0,sticky=W,columnspan=3)
296 self.lbinf5 = Label(frame,textvariable = self.
LoadedNstep).grid(row=55,column=0,sticky=W,columnspan=3)
297 self.lbinf6 = Label(frame,textvariable = self.
PresentTime).grid(row=56,column=0,sticky=W,columnspan=3)
306 int(self.enstep.get().strip().split()[0])
307 except (ValueError, IndexError):
308 print "Specify the proper value of Nstep"
310 mynstep=int(self.enstep.get())
312 self.LoadedNstep.set(
"Loaded Nstep = "+self.enstep.get())
313 self.PresentTime.set(
"Present Time = "+str(self.D.SimTime) +
" [cu]")
319 self.v.get() !=
"None"
321 print "Specify the variable to plot"
331 self.contmenu.config(state=
'normal')
332 self.xlevb.config(state=
'normal')
334 self.contmenu.config(state=
'disabled')
335 self.xlevb.config(state=
'disabled')
340 self.arrmenu.config(state=
'normal')
341 self.arrspb.config(state=
'normal')
343 self.arrmenu.config(state=
'disabled')
344 self.arrspb.config(state=
'disabled')
355 self.surfbutton.config(state=
'disabled')
356 self.arrowchkb.config(state =
'disabled')
358 self.chkb.config(state =
'disabled')
360 self.pltbutton.config(state=
'active')
361 self.polchkb.config(state=
'disabled')
364 self.pltbutton.config(state=
'disabled')
365 self.arrowchkb.config(state =
'normal')
366 self.chkb.config(state =
'normal')
367 self.surfbutton.config(state=
'active')
368 self.polchkb.config(state=
'normal')
371 self.polchkb.config(state=
'disabled')
379 self.
a = self.f.add_subplot(111)
385 self.a.plot(self.
x,self.
var)
386 self.a.set_aspect(
'auto')
387 self.a.set_xlabel(self.xlb.get())
388 self.a.set_ylabel(self.ylb.get())
395 if self.preaspect.get() == 1:
396 self.a.set_aspect(
'equal')
398 self.a.set_aspect(
'auto')
401 if self.polarvar.get() == 1:
405 self.f.colorbar(self.
image)
410 self.f.colorbar(self.
image)
413 if self.contvar.get() == 1:
415 self.plcont.get() !=
"None"
417 print "Specify the variable for Contour"
436 self.contlevlist.append(float(self.
contlevstr[j]))
440 self.a.clabel(self.
cs1,inline=
True)
443 if self.arrowvar.get() == 1:
445 self.plarr.get() !=
"None"
447 print "Specify the variable for plotting the arrow"
452 self.a.set_xlabel(self.xlb.get())
453 self.a.set_ylabel(self.ylb.get())
460 float(self.varmin.get())
462 if self.polarvar.get() != 1:
467 self.
varminval = float(self.varmin.get())
470 float(self.varmax.get())
472 if self.polarvar.get() != 1:
477 self.
varmaxval = float(self.varmax.get())
484 float(self.xrmin.get())
486 if self.polarvar.get() != 1:
489 self.
xminval = min(self.R.flat)
491 self.
xminval = float(self.xrmin.get())
494 float(self.xrmax.get())
496 if self.polarvar.get() != 1:
501 self.
xmaxval = float(self.xrmax.get())
507 float(self.yrmin.get())
509 if self.polarvar.get() != 1:
512 self.
yminval = min(self.Z.flat)
514 self.
yminval = float(self.yrmin.get())
517 float(self.yrmax.get())
519 if self.polarvar.get() != 1:
524 self.
ymaxval = float(self.yrmax.get())
531 if self.logvar.get() == 1:
532 self.
var = log10(self.D.__getattribute__(self.
myvar))
534 self.
var = self.D.__getattribute__(self.
myvar)
536 if self.
Geom ==
'1D':
544 int(self.ex2.get().strip().split()[0])
545 except (ValueError, IndexError):
546 print "Specify the value of x2 cut"
548 self.
var = self.
var[:,int(self.ex2.get())]
552 int(self.ex2.get().strip().split()[0])
553 int(self.ex3.get().strip().split()[0])
554 except (ValueError, IndexError):
555 print "Specify the value of x2 or x3 cut"
557 self.
var = self.
var[:,int(self.ex2.get()),int(self.ex3.get())]
564 int(self.ex1.get().strip().split()[0])
565 except (ValueError, IndexError):
566 print "Specify the value of x1 cut"
568 self.
var = self.
var[int(self.ex1.get()),:]
572 int(self.ex1.get().strip().split()[0])
573 int(self.ex3.get().strip().split()[0])
574 except (ValueError, IndexError):
575 print "Specify the value of x1 or x3 cut"
577 self.
var = self.
var[int(self.ex1.get()),:,int(self.ex3.get())]
583 int(self.ex1.get().strip().split()[0])
584 int(self.ex2.get().strip().split()[0])
585 except (ValueError, IndexError):
586 print "Specify the value of x1 or x2 cut"
588 self.
var = self.
var[int(self.ex1.get()),int(self.ex2.get()),:]
595 if self.logvar.get() == 1:
596 self.
var = log10(self.D.__getattribute__(self.
myvar))
598 self.
var = self.D.__getattribute__(self.
myvar)
607 self.
x = self.
x[xmineed:xmaneed]
608 self.
y = self.
y[ymineed:ymaneed]
610 self.
var = self.
var[xmineed:xmaneed,ymineed:ymaneed].T
614 int(self.ex3.get().strip().split()[0])
615 except (ValueError, IndexError):
616 print "Specify the value of x3 cut"
618 self.
var = self.
var[xmineed:xmaneed,ymineed:ymaneed,int(self.ex3.get())].T
628 self.
x = self.
x[xmineed:xmaneed]
629 self.
y = self.
y[ymineed:ymaneed]
631 int(self.ex1.get().strip().split()[0])
632 except (ValueError, IndexError):
633 print "Specify the value of x1 cut"
635 self.
var = self.
var[int(self.ex1.get()),xmineed:xmaneed,ymineed:ymaneed].T
644 self.
x = self.
x[xmineed:xmaneed]
645 self.
y = self.
y[ymineed:ymaneed]
647 int(self.ex2.get().strip().split()[0])
648 except (ValueError, IndexError):
649 print "Specify the value of x2 cut"
651 self.
var = self.
var[xmineed:xmaneed,int(self.ex2.get()),ymineed:ymaneed].T
664 int(self.ex3.get().strip().split()[0])
665 except (ValueError, IndexError):
666 print "Specify the value of x3 cut"
668 self.R,self.Z,self.
SphData = self.I.getSphData(self.
D,w_dir=self.
wdir,datatype=self.
datatype, rphi=
False,x3cut=int(self.ex3.get()))
673 int(self.ex2.get().strip().split()[0])
674 except (ValueError, IndexError):
675 print "Specify the value of x2 cut"
677 self.R,self.Z,self.
SphData = self.I.getSphData(self.
D,w_dir=self.
wdir,datatype=self.
datatype, rphi=
True, x2cut=int(self.ex2.get()))
681 self.
extent=(min(self.R.flat),
max(self.R.flat),min(self.Z.flat),
max(self.Z.flat))
682 self.
dRR=
max(self.R.flat)-min(self.R.flat)
683 self.
dZZ=
max(self.Z.flat)-min(self.Z.flat)
698 if self.logvar.get() == 1:
705 if self.polarvar.get() != 1:
709 self.Xmesh, self.
Ymesh = meshgrid(self.D.x1.T,self.D.x2.T)
711 if self.plcont.get() ==
'x1*Ax3':
712 self.
varcont = self.Xmesh*(self.D.Ax3.T)
713 elif self.plcont.get() ==
'x1*bx3':
714 self.
varcont = self.Xmesh*(self.D.bx3.T)
716 self.
varcont = self.D.__getattribute__(self.plcont.get())[:,:].T
718 if self.plcont.get() ==
'x1*Ax3':
719 self.
varcont = self.Xmesh*(self.D.Ax3[:,:,int(self.ex3.get())].T)
720 elif self.plcont.get() ==
'x1*bx3':
721 self.
varcont = self.Xmesh*(self.D.bx3[:,:,int(self.ex3.get())].T)
723 self.
varcont = self.D.__getattribute__(self.plcont.get())[:,:,int(self.ex3.get())].T
726 self.
xcont = self.D.x2
727 self.
ycont = self.D.x3
728 self.
varcont = self.D.__getattribute__(self.plcont.get())[int(self.ex1.get()),:,:].T
730 self.
xcont = self.D.x1
731 self.
ycont = self.D.x3
732 self.
varcont = self.D.__getattribute__(self.plcont.get())[:,int(self.ex2.get()),:].T
736 if self.plcont.get() ==
'x1*Ax3':
738 elif self.plcont.get() ==
'x1*bx3':
741 if self.logvar.get() == 1
and self.plcont.get() == self.
myvar:
747 if self.polarvar.get() != 1:
749 self.Xmesh, self.
Ymesh = meshgrid(self.D.x1.T,self.D.x2.T)
750 self.
xcong = self.Tool.congrid(self.Xmesh,2*(int(self.arrspb.get()),),method=
'linear')
751 self.
ycong = self.Tool.congrid(self.
Ymesh,2*(int(self.arrspb.get()),),method=
'linear')
752 if self.plarr.get() ==
'Vp' or self.plarr.get() ==
'Vp_norm':
757 self.
vel1 = self.D.vx1[:,:,int(self.ex3.get())].T
758 self.
vel2 = self.D.vx2[:,:,int(self.ex3.get())].T
760 self.
xveccong = self.Tool.congrid(self.
vel1,2*(int(self.arrspb.get()),),method=
'linear')
761 self.
yveccong = self.Tool.congrid(self.
vel2,2*(int(self.arrspb.get()),),method=
'linear')
763 if self.plarr.get() ==
'Vp_norm':
766 if self.plarr.get() ==
'Bp' or self.plarr.get() ==
'Bp_norm':
771 self.
mag1 = self.D.bx1[:,:,int(self.ex3.get())].T
772 self.
mag2 = self.D.bx2[:,:,int(self.ex3.get())].T
774 self.
xveccong = self.Tool.congrid(self.
mag1,2*(int(self.arrspb.get()),),method=
'linear')
775 self.
yveccong = self.Tool.congrid(self.
mag2,2*(int(self.arrspb.get()),),method=
'linear')
777 if self.plarr.get() ==
'Bp_norm':
782 self.Xmesh, self.
Ymesh = meshgrid(self.D.x2.T,self.D.x3.T)
783 self.
xcong = self.Tool.congrid(self.Xmesh,2*(int(self.arrspb.get()),),method=
'linear')
784 self.
ycong = self.Tool.congrid(self.
Ymesh,2*(int(self.arrspb.get()),),method=
'linear')
785 if self.plarr.get() ==
'Vp' or self.plarr.get() ==
'Vp_norm':
786 self.
vel1 = self.D.vx2[int(self.ex1.get()),:,:].T
787 self.
vel2 = self.D.vx3[int(self.ex1.get()),:,:].T
788 self.
xveccong = self.Tool.congrid(self.
vel1,2*(int(self.arrspb.get()),),method=
'linear')
789 self.
yveccong = self.Tool.congrid(self.
vel2,2*(int(self.arrspb.get()),),method=
'linear')
791 if self.plarr.get() ==
'Vp_norm':
794 if self.plarr.get() ==
'Bp' or self.plarr.get() ==
'Bp_norm':
795 self.
mag1 = self.D.bx2[int(self.ex1.get()),:,:].T
796 self.
mag2 = self.D.bx3[int(self.ex1.get()),:,:].T
797 self.
xveccong = self.Tool.congrid(self.
mag1,2*(int(self.arrspb.get()),),method=
'linear')
798 self.
yveccong = self.Tool.congrid(self.
mag2,2*(int(self.arrspb.get()),),method=
'linear')
800 if self.plarr.get() ==
'Bp_norm':
804 self.Xmesh, self.
Ymesh = meshgrid(self.D.x1.T,self.D.x3.T)
805 self.
xcong = self.Tool.congrid(self.Xmesh,2*(int(self.arrspb.get()),),method=
'linear')
806 self.
ycong = self.Tool.congrid(self.
Ymesh,2*(int(self.arrspb.get()),),method=
'linear')
807 if self.plarr.get() ==
'Vp' or self.plarr.get() ==
'Vp_norm':
808 self.
vel1 = self.D.vx1[:,int(self.ex2.get()),:].T
809 self.
vel2 = self.D.vx3[:,int(self.ex2.get()),:].T
810 self.
xveccong = self.Tool.congrid(self.
vel1,2*(int(self.arrspb.get()),),method=
'linear')
811 self.
yveccong = self.Tool.congrid(self.
vel2,2*(int(self.arrspb.get()),),method=
'linear')
813 if self.plarr.get() ==
'Vp_norm':
816 if self.plarr.get() ==
'Bp' or self.plarr.get() ==
'Bp_norm':
817 self.
mag1 = self.D.bx1[:,int(self.ex2.get()),:].T
818 self.
mag2 = self.D.bx3[:,int(self.ex2.get()),:].T
819 self.
xveccong = self.Tool.congrid(self.
mag1,2*(int(self.arrspb.get()),),method=
'linear')
820 self.
yveccong = self.Tool.congrid(self.
mag2,2*(int(self.arrspb.get()),),method=
'linear')
822 if self.plarr.get() ==
'Bp_norm':
826 self.
xcong = self.Tool.congrid(self.R,2*(int(self.arrspb.get()),),method=
'linear')
827 self.
ycong = self.Tool.congrid(self.Z,2*(int(self.arrspb.get()),),method=
'linear')
828 if self.plarr.get() ==
'Vp' or self.plarr.get() ==
'Vp_norm':
836 self.
xveccong = self.Tool.congrid(self.
vel1,2*(int(self.arrspb.get()),),method=
'linear')
837 self.
yveccong = self.Tool.congrid(self.
vel2,2*(int(self.arrspb.get()),),method=
'linear')
839 if self.plarr.get() ==
'Vp_norm':
842 if self.plarr.get() ==
'Bp' or self.plarr.get() ==
'Bp_norm':
851 self.
xveccong = self.Tool.congrid(self.
mag1,2*(int(self.arrspb.get()),),method=
'linear')
852 self.
yveccong = self.Tool.congrid(self.
mag2,2*(int(self.arrspb.get()),),method=
'linear')
854 if self.plarr.get() ==
'Bp_norm':
859 self.f.savefig(self.
myvar+
'_'+self.enstep.get()+
'.eps')
861 self.f.savefig(self.
myvar+
'_'+self.enstep.get()+
'.png')
863 self.f.savefig(self.
myvar+
'_'+self.enstep.get()+
'.pdf')
865 self.f.savefig(self.
myvar+
'_'+self.enstep.get()+
'.jpg')
876 root.title(
"pyPLUTO")
879 savemenu = Menu(menubar,tearoff=0)
880 savemenu.add_command(label=
'EPS',command=app.epssave)
881 savemenu.add_command(label=
'PDF',command=app.pdfsave)
882 savemenu.add_command(label=
'PNG',command=app.pngsave)
883 savemenu.add_command(label=
'JPG',command=app.jpgsave)
884 menubar.add_cascade(label=
"Save As", menu=savemenu)
891 menubar.add_command(label=
'Quit',command=root.quit)
893 root.config(menu=menubar)
def loaddata(self)
PLOT PROPERTIES #################################.
def __init__(self, master)