Hier mein Problem:
weil compute_field keine Funktion ist, die eigens in main aufgerufen wird, kann ich info_for_click nicht uebergeben...
zuvor habe ich die rechnung in der anderen Funktion nochmal durchgefuehrt, was ziemlich bescheuert ist, aber ich weiss nicht, wie ich es sonst umgehen soll...
Code: Alles auswählen
from math import*
from string import*
table = display.getWidget("Table").getTable()
table1 = display.getWidget("Table1").getTable()
c0 = 299792458.0
betaS = 0.041
geff = 0.067539767
#big letter because lambda seems to be predefined
Lambda = 3.724129913
# should help not to use not defined functions until this moment
k = 2
s = 2
Vebit0 = 1
# find a better solution
Qout = []
numberout = []
Energyout = []
fieldout = []
def main():
Qcont, A1, Around, nameiso, abu, qdivbya, abu2, information = readcontaminationfile()
cavmaxCSS, cavmaxreal, factor = readcavmaxfile()
phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, check2, check1, check3, check4, checks,\
number, numbers, diffqa0, cavlist, combo = getInputs(A1, Around, nameiso, Qcont, factor)
alarm(cavlist, cavmaxCSS, number)
decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal)
clickrow(Qcont, A1, nameiso, abu, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
phi, minimumf, maximumf, cavmaxreal, combo)
def refresh():
table.setContent([[" ", " ", " ", " "]])
table1.setContent([[" ", " ", " ", " ", " ", " "]])
...
...
...
def alarm(cavlist, cavmaxCSS, number):
for i in range(1, number + 1):
if number >= i and cavlist[i-1] > cavmaxCSS[i-1]:
display.getWidget("cav" + str(i)).setPropertyValue("foreground_color",RED)
def compute_field(s, A, phi, k, Vebit0, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E):
E_average = (600 + E)/2
v_averge = sqrt(2*E_average*1.602177*10**(-16)/1.6726*10**27)
beta_average = v_averge/c0
tmp = pi * geff / (beta_average * Lambda)
T_average = sin(tmp)/tmp*sin(pi*betaS/(2*beta_average))
fieldreal = diffE*A/(27.98*k*float(s)*T_average*cos(phi))
listfields = [fieldreal]* int(s)
# cannot be defined earlier because otherwise listfields not already defined
condition_field = (
all(fieldreal > minimumf and fieldreal < maximumf and t < u for t, u in zip(listfields, cavmaxreal)) and Vebit0 < Vebitmax
)
if condition_field:
Qout.append(k)
fieldout.append(fieldreal)
numberout.append(s)
Energyout.append(E)
set_cells(table, len(Qout) - 1, k, Vebit0, s, E)
# no provide information for click
info_for_click = zip(Qout, fieldout, numberout, Energyout)
# else:
# refresh()
return info_for_click
def decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal):
Q = range(1 , Qin + 1, 1)
for i in Q:
Vebit = 12*A/i
# Ist possibility: fixed number, compute Energy
if checks == [1, 0, 0, 1]:
compute_energy(number, A, phi, i, cavlist, Vebit, Vebitmax, cavmaxCSS, factor, betaS)
elif checks == [1, 0, 1, 0]:
compute_field(number, A, phi, i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
elif checks == [0, 1, 1, 0]:
# for some reason: after checks no for..
normann = 3
for j in numbers:
compute_field(j, A, phi, i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
else:
refresh()
def clickrow(Qcont, A1, nameiso, abu, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
phi, minimumf, maximumf, cavmaxreal, combo):
class SelectionListener(ITableSelectionChangedListener):
def selectionChanged(self, selection):
text=""
for row in selection:
i=0
for s in row:
text += s;
if i != (len(row)-1):
text += " "
i+=1
text1 = text.split()
Qchosen = float(text1[0])
Number = float(text1[2])
Energy = float(text1[3])
if check4 == 0 and check3 == 1:
for Qchosen, Number, Energy, fieldreal in info_for_click
do something
if __name__ == '__main__': main()