Ewindow.py 10 KB
Newer Older
1
# -*- coding: iso-8859-15 -*-
2
3
import Tkinter as tk
from PTE import *
Matheus Müller's avatar
Matheus Müller committed
4
5
6
from pylab import *
from numpy import zeros
import os
7
import tkFileDialog
8
import shutil
9

10
11
##############################################################################
# Control variables and lists
Matheus Müller's avatar
Matheus Müller committed
12
Edict = dict()
13
Ebuttons = list()
14
Labentrys = list()
15
i=0
16
17
Econtrol = 0

Matheus Müller's avatar
Matheus Müller committed
18
##############################################################################
19
# Element callback
20
21
22
def elem_callback(x, edict , ebutton):
    global Labentrys
    PTable(edict[x] , ebutton[x], Labentrys)
23
24
25

##############################################################################
# Element selection
26
def elem_select(i, button):
27

28
    global Econtrol, Edict, Labentrys
29
    button[Econtrol]['relief']='raised'
30
    Econtrol = i
31
32
    button[i]['relief']='sunken'

33
34
35
36
37
38
    Labentrys[0].configure(text = '%s' %Edict[i]['name'])
    Labentrys[1].configure(text = 'Mass - %f' %Edict[i]['mass'])
    Labentrys[2].configure(text = 'Z - %f' %Edict[i]['Z'])
    Labentrys[3].configure(text = 'Symbol - %s' %Edict[i]['symbol'])
    Labentrys[4].configure(text = 'Line Shape α - %f' %Edict[i]['LineShape'])
    Labentrys[5].configure(text = 'Max Depht - %f' %Edict[i]['profundidademax'])
39

40
41
    for i in arange(6,12):
        Labentrys[i].delete (0, len(Labentrys[i].get()))
42

43
44
45
46
47
48
    Labentrys[6].insert(0, Edict[int(Econtrol)]['name'])
    Labentrys[7].insert(0, Edict[int(Econtrol)]['mass'])
    Labentrys[8].insert(0, int(Edict[int(Econtrol)]['Z']))
    Labentrys[9].insert(0, Edict[int(Econtrol)]['symbol'])
    Labentrys[10].insert(0, Edict[int(Econtrol)]['LineShape'])
    Labentrys[11].insert(0, Edict[int(Econtrol)]['profundidademax'])
49

Matheus Müller's avatar
Matheus Müller committed
50
##############################################################################
51
# Init
52
def ewin_build(window, OFlabentries):
53

54
55
##############################################################################
# Element addition
56
57
    def create():
        global i, Edict, Ebuttons
58
        Edict[i] = dict(name = "New", symbol = "Hf", mass = 178.00, Z = 72, dist = zeros(int(10./float(OFlabentries[17].get()) )), LineShape = 200., profundidademax=10.)
59
60
61
        Ebuttons.insert(i, tk.Button(Eframe, text=i, width=1, height=1, command = lambda i=i : elem_select(i,Ebuttons)) )
        Ebuttons[i].grid(column = ((len(Ebuttons)-1)%14), row = int(math.floor((len(Ebuttons)-1)/14)))
        i = i+1
62

63
64
##############################################################################
# Element deletion
65
    def remove():
66
        global i, Edict, Ebuttons, Econtrol
67
        if i > 1:
68
            i = i-1
69
70
71
            del Edict[i]
            Ebuttons[i].destroy()
            del Ebuttons[i]
72
73
74
            if Econtrol == i:
                Econtrol = Econtrol -1
                Ebuttons[Econtrol]['relief']='sunken'
75
        elem_select(0, Ebuttons)
76

Matheus Müller's avatar
Matheus Müller committed
77
##############################################################################
78
79
# Element Frames

Matheus Müller's avatar
Matheus Müller committed
80
81
82
    Labelprop = tk.LabelFrame(window, text = 'Properties', relief='raised', bd=2)
    Labelprop.pack(side = 'top')

83
    Label1 = tk.LabelFrame(window, text = 'Elements', relief='raised', bd=2)
Matheus Müller's avatar
Matheus Müller committed
84
    Label1.pack(side = 'top') 
85
86
87

    Eframe = tk.Canvas(Label1)
    Eframe.pack(fill='both',expand=0)
Matheus Müller's avatar
Matheus Müller committed
88

89
90
91
##############################################################################
# Init
    create()
Matheus Müller's avatar
Matheus Müller committed
92
    
93
94
95
##############################################################################
# Properties

96
    global Econtrol, Edict, Labentrys
97
    def update(i):
98
99
100
101
102
103
104
105
106
107
108
109
        Edict[i]['name'] = str(Labentrys[6].get())
        Labentrys[0].configure(text = '%s' %Edict[i]['name'])
        Edict[i]['mass'] = float(Labentrys[7].get())
        Labentrys[1].configure(text = 'Mass - %f' %Edict[i]['mass'])
        Edict[i]['Z'] = float(Labentrys[8].get())
        Labentrys[2].configure(text = 'Z - %f' %Edict[i]['Z'])
        Edict[i]['symbol'] = str(Labentrys[9].get())
        Labentrys[3].configure(text = 'Symbol - %s' %Edict[i]['symbol'])
        Edict[i]['LineShape'] = float(Labentrys[10].get())
        Labentrys[4].configure(text = 'Line Shape α - %f' %Edict[i]['LineShape'])
        Edict[i]['profundidademax'] = float(Labentrys[11].get())
        Labentrys[5].configure(text = 'Max Depht - %f' %Edict[i]['profundidademax'])
Matheus Müller's avatar
Matheus Müller committed
110
        Edict[i]['dist'] = np.loadtxt(Edict[i]['symbol']+".prof")
111

112
113
114
115
116
117
118
119
    LpFrame1 = tk.Frame(Labelprop)
    LpFrame1.pack(side='left')
    LpFrame2 = tk.Frame(Labelprop)
    LpFrame2.pack(side='top')
    LpFrame3 = tk.Frame(Labelprop)
    LpFrame3.pack(side='right')

    EPframel = tk.Frame(LpFrame1)
120
    EPframel.pack(side='left')
121
    EPframee = tk.Frame(LpFrame1)
122
123
    EPframee.pack(side='right')

124
125
126
127
128
    EPframel2 = tk.Frame(LpFrame2)
    EPframel2.pack(side='left')
    EPframee2 = tk.Frame(LpFrame2)
    EPframee2.pack(side='right')

129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
    # Label // Entries numbers:
    # 0 // 6 = Name
    # 1 // 7 = Mass
    # 2 // 8 = Z (Atomic number)
    # 3 // 9 = Symbol
    # 4 // 10 = Line shape
    # 5 // 11 = Max Depht
    Labentrys.insert(0, tk.Label(EPframel, width=26, pady=2, text='%s' %Edict[int(Econtrol)]['name']) )
    Labentrys.insert(1, tk.Label(EPframel, width=26, pady=2, text='Mass - %f' %Edict[int(Econtrol)]['mass']) )
    Labentrys.insert(2, tk.Label(EPframel, width=26, pady=2, text='Z - %f' %Edict[int(Econtrol)]['Z']) )
    Labentrys.insert(3, tk.Label(EPframel, width=26, pady=2, text= 'Symbol - %s' %Edict[int(Econtrol)]['symbol']) )
    Labentrys.insert(4, tk.Label(EPframel, width=26, pady=2, text='Line Shape α - %f' %Edict[int(Econtrol)]['LineShape']) )
    Labentrys.insert(5, tk.Label(EPframel, width=26, pady=2, text='Max Depht - %f' %Edict[int(Econtrol)]['profundidademax']) )

    for i in range(6):
        Labentrys[i].pack()

    for i in arange(6, 12):
        Labentrys.insert(i, tk.Entry(EPframee, width=18) )
        Labentrys[i].pack()

    # Declaration of interpolation method variable
151
152
153
    methodvar = tk.StringVar()
    methodvar.set('reta')

154
155
156
##############################################################################
# Load/Save sample
    def LOADSAMPLE():
157
158
159
160
161
162
163
164
165
        global i, Econtrol
        arquivo = tkFileDialog.askopenfile()
        for n in arange(9,18):
            OFlabentries[n].delete(0,len(OFlabentries[n].get()))
            OFlabentries[n].insert(0,float(arquivo.readline()))
        for n in arange(21,24):
            OFlabentries[n].delete(0,len(OFlabentries[n].get()))
            OFlabentries[n].insert(0,float(arquivo.readline()))
        f = loadtxt(arquivo.name + '.elm', dtype="string")
166
167
168
169
170
171
        els = f[:, 0]
        eln = f[:, 1]
        elm = f[:, 2]
        elz = f[:, 3]
        LSs = f[:, 4]
        eld = f[:, 5]
172
173
174
175
176
177
        Edict.clear()
        for n in range(len(Ebuttons)):
            Ebuttons[n].destroy()
        del Ebuttons[:]
        i = 0
        Econtrol = 0
178
        for n in range(len(els)):
179
            create()           
180
181
182
183
184
185
186
            Edict[n]['LineShape'] = float(LSs[n])
            Edict[n]['symbol'] = str(els[n])
            Edict[n]['name'] = str(eln[n])
            Edict[n]['mass'] = float(elm[n])
            Edict[n]['Z'] = float(elz[n])
            Edict[n]['profundidademax'] = float(eld[n])
            Ebuttons[n]['text'] = str(els[n])
187
188
            shutil.copy(arquivo.name + '-' + Edict[n]['symbol'] + '.dat' , Edict[n]['symbol']+'.dat')
            shutil.copy(arquivo.name + '-' + Edict[n]['symbol'] + '.prof' , Edict[n]['symbol']+'.prof')
189
        elem_select(0,Ebuttons)
190
        arquivo.close()
191
192

    def SAVESAMPLE():
193
194
195
196
197
198
199
200
201
        config = tkFileDialog.asksaveasfile(mode='w')
        elist = open(config.name + '.elm', 'w+')
        for k in arange(9,18):
            config.write( (OFlabentries[k].get())+'\n' )
        for j in arange(21,24):
            config.write( (OFlabentries[j].get())+'\n' )
        config.write( '##############################################################################\n' )
        config.write( '# dƐ/dx\n# dω²/dx\n# θ out\n# θ in\n# FWHM\n# E min\n# E max\n# E step\n# Depth step\n# Ion energy\n# Ion mass\n# Ion Z\n' )
        for n in range(len(Edict)):
202
203
204
205
            elist.write(Edict[n]['symbol']+' ')
            elist.write(Edict[n]['name']+' ')
            elist.write(str(Edict[n]['mass'])+' ')
            elist.write(str(Edict[n]['Z'])+' ')
206
            elist.write(str(Edict[n]['LineShape'])+' ')
207
            elist.write(str(Edict[n]['profundidademax'])+'\n')
208
209
210
            shutil.copy(Edict[n]['symbol']+'.prof', config.name  + '-' + Edict[n]['symbol'] + '.prof')
            shutil.copy(Edict[n]['symbol']+'.dat', config.name  + '-' + Edict[n]['symbol'] + '.dat')
            shutil.copy('temp.sim', config.name  + '.sim')
211
        elist.close()
212
        config.close()
213

214
215
216
##############################################################################
# Buttons

217
    but = tk.Button(EPframel2, command=create, text='Add element', bd=1, height=1,width=15)
218
    but.pack()
219
    butrmv = tk.Button(EPframel2, command=remove, text='Remove element', bd=1, height=1,width=15)
220
221
222
    butrmv.pack()
    butPTE = tk.Button(EPframel2, text='Show PTE', bd=1, width=15, command=lambda i=i :elem_callback(Econtrol,Edict,Ebuttons) )
    butPTE.pack()
Matheus Müller's avatar
Matheus Müller committed
223
    BUpdate = tk.Button(EPframel2, text ='Update properties', command=lambda i=int(Econtrol) :update(Econtrol), width=15)
224
225
    BUpdate.pack()

226
    BUpdateD = tk.Button(EPframel2, text ='Distribution', command =lambda i=int(Econtrol) : os.system("python profiler.py %s %s %s %s &" %( Edict[int(Econtrol)]['symbol'], str(methodvar.get()), str(Labentrys[11].get()), str(OFlabentries[17].get()) ) ), width=15)
227
228
229
230
231
232
    BUpdateD.pack()

    BLoad = tk.Button(EPframel, text ='Load Sample', command=lambda i=int(Econtrol) :LOADSAMPLE(), width=15)
    BLoad.pack()
    BSave = tk.Button(EPframee, text ='Save Sample', command=lambda i=int(Econtrol) :SAVESAMPLE(), width=15)
    BSave.pack()
233

234
235
236
237
##############################################################################
# Interpolation methods

    RS = tk.Radiobutton(Labelprop, text="Step", variable=methodvar, value='step')
238
    RS.pack(side='left')
239
    RL = tk.Radiobutton(Labelprop, text="Lines", variable=methodvar, value='reta')
240
    RL.pack(side='right')
241

Matheus Müller's avatar
Matheus Müller committed
242
##############################################################################
Matheus Müller's avatar
Matheus Müller committed
243
# Init
244
    RS.select()
Matheus Müller's avatar
Matheus Müller committed
245
    Ebuttons[0].invoke()
246

Matheus Müller's avatar
Matheus Müller committed
247
##############################################################################
248