Seite 2 von 2

Re: top-down-design: Funktionen allgemein definieren

Verfasst: Mittwoch 21. August 2013, 15:11
von BlackJack
@BlackJack: Nein, so meinte ich das nicht. Die Funktionen haben ja wohl auch nicht zu einem `NameError` geführt.

Re: top-down-design: Funktionen allgemein definieren

Verfasst: Mittwoch 21. August 2013, 15:45
von peter99

Code: Alles auswählen

def compute_energy(number, A, phi,  k, cavlist, Vebit, Vebitmax, cavmaxCSS, factor, betaS):
    #
    condition_energy = (
    Vebit0 < Vebitmax and all(t < u for t, u in zip(cavlist, cavmaxCSS)) 
    )
    E0 = 600
    for s in range(1,number + 1):
        # 10**(-16), because keV
        beta = sqrt(2 * E0 * 1.602177 * 10**(-16) / 1.6726 * 10**27) /c0
        tmp = pi * geff / (beta * Lambda)
        T = sin(tmp) / tmp * sin(pi * betaS / (2 * beta))
        E0 = E0 + (k*35*cavlist[s-1]/factor[s-1])/A*T*cos(phi)
    if condition_energy:
        Qout.append(k)
        set_cells(table, len(Qout) - 1, k, Vebit, number, E0)
    else:
        refresh()
 
def compute_field(s, A, phi,  k, Vebit, 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))
    # cannot be defined earlier because otherwise listfields not already defined
    condition_field = (
    fieldreal > minimumf and fieldreal < maximumf and all(fieldreal < u for u in  cavmaxreal) and Vebit < Vebitmax
    )
    if condition_field:
        Qout.append(k)
        fieldout.append(fieldreal)
        numberout.append(s)
        Energyout.append(E)
        set_cells(table, len(Qout) - 1, k, Vebit, s, E)
    # no provide information for click
  #  info_for_click = zip(Qout, fieldout, numberout, Energyout)
   # else:
      #  refresh()
    #return info_for_click

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)
    info_for_click = decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
             number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal)
    clickrow(info_for_click, Qcont, A1, nameiso, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
             phi, minimumf, maximumf, cavmaxreal, combo)

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)
            # does not provide any information - not needed
        elif checks == [1, 0, 1, 0]:
            compute_field(number, A, phi,  i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
            info_for_click = zip(Qout, fieldout, numberout, Energyout)
        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)
                info_for_click = zip(Qout, fieldout, numberout, Energyout)
   	else:
            refresh()
    return info_for_click
Das scheint zu funktionieren, wobei mir nicht klar ist wie die Funktionen Vebit in der decision-Struktur einlesen... es scheint zu funktionieren, aber es ist mir nicht wirklich klar warum.