예제 #1
0
    def calcEmittance(self, timestep):
        f = h5py.File(self.filename + "/h5/simData_{}.h5".format(timestep),
                      "r")
        N_all = np.shape(f['/data/{}/particles/{}/momentum/x/'.format(
            timestep, self.species)])[0]
        handler = f['/data/{}/particles/{}/'.format(timestep, self.species)]
        w = handler['weighting']
        slices = np.arange(0, N_all, self.slice)
        uxSI = (handler['momentum/' + self.coordinate].attrs['unitSI']
                ) / const.speed_of_light / const.electron_mass
        positionSI = handler['position/' + self.coordinate].attrs['unitSI']
        position_sq_s = 0.
        pos_mom_s = 0.
        momentum_sq_s = 0.
        #### Hier noch die Bin Größen raus nehmen
        Calc = Auswertung.Auswertung(self.filename, 1024, 20, 100,
                                     self.species, self.slice, self.m,
                                     timestep)
        startsUnfiltered, startsFiltered = Calc.chunks(self.slice)
        for i in range(len(startsFiltered) - 1):
            w_s = w[startsUnfiltered[i]:startsUnfiltered[i + 1]][
                self.m[startsUnfiltered[i]:startsUnfiltered[i + 1]]]
            position = (handler['position/' + self.coordinate]
                        [startsUnfiltered[i]:startsUnfiltered[i + 1]]
                        [self.m[startsUnfiltered[i]:startsUnfiltered[i + 1]]] +
                        handler['positionOffset/' + self.coordinate]
                        [startsUnfiltered[i]:startsUnfiltered[i + 1]]
                        [self.m[startsUnfiltered[i]:startsUnfiltered[i + 1]]]
                        ) * positionSI
            momentum = (handler['momentum/' + self.coordinate]
                        [startsUnfiltered[i]:startsUnfiltered[i + 1]]
                        [self.m[startsUnfiltered[i]:startsUnfiltered[i + 1]]]
                        ) / w_s * uxSI
            N_e_slice = np.size(w_s)
            if np.sum(w_s) > 0:
                position_sq_s += N_e_slice * np.average(
                    (position**2), weights=w_s)
                pos_mom_s += N_e_slice * np.average(
                    (position * momentum), weights=w_s)
                momentum_sq_s += N_e_slice * np.average(
                    (momentum**2), weights=w_s)

        No = Calc.N(timestep)
        if No > 0:
            position_sq = position_sq_s / No
            pos_mom = pos_mom_s / No
            momentum_sq = momentum_sq_s / No
            emit = np.sqrt(position_sq * momentum_sq - pos_mom**2) / 1e-6
        else:
            print('alle Teilchen wurden weggefiltert')
            emit = 0

        f.close()
        return (emit)
예제 #2
0
    def SliceEmittance(self, args):  #timestep, FilterDictValues):
        timestep, FilterDictValues = args
        f = h5py.File(self.filename + "/h5/simData_{}.h5".format(timestep),
                      "r")
        handler = f['/data/{}/particles/{}/'.format(timestep, self.species)]
        w = handler['weighting']
        handlerE = f['/data/{}/fields/E'.format(timestep)]
        grit_size = np.array(np.shape(handlerE['x']))
        gritSpacing = handlerE.attrs['gridSpacing'] * handlerE.attrs[
            'gridUnitSI']
        globalPosition = np.round((handlerE.attrs['gridGlobalOffset'] *
                                   handlerE.attrs['gridUnitSI'] * 1e6)[1],
                                  decimals=2)
        f.close()
        L = grit_size[1] * gritSpacing[1] * 1e6
        y = np.zeros(11)
        emitS = np.zeros(11)

        #args2 = []
        #for i in range(0,11,1):
        #    args.append([i,timestep, FilterDictValues,L,globalPosition])
        #pool = Pool(15)
        #work=pool.map(self.workSliceEmittance,args2)
        #for index in range(0,11,1):
        #    y[index],emitS[index] = work[index]

        for i in range(0, 11, 1):
            neuerFilter = h5filter.h5filter(self.filename, timestep,
                                            self.species, self.slice_size)
            self.filtern(FilterDictValues, timestep)
            y[i] = globalPosition + i * L / 10
            if i < 10:
                y[i + 1] = globalPosition + (i + 1) * L / 10
                neuerFilter.filterPosition('y', y[i] * 1e-6, y[i + 1] * 1e-6,
                                           timestep)
                #m=self.filtern(FilterDictValues,timestep)
            if i == 10:
                neuerFilter.filterPosition('y', y[i] * 1e-6,
                                           (y[i] + L / 2) * 1e-6, timestep)
            # m=self.filtern(FilterDictValues,timestep)
            y[i] -= globalPosition
            m = neuerFilter.maske
            b = Auswertung.Auswertung(self.filename, 1024, 0, 150,
                                      self.species, self.slice_size, m,
                                      timestep)
            emitS[i] = b.calcEmittance('x', timestep)
        print('timestep=', timestep, 'emitS=', emitS)
        return (y, emitS)
예제 #3
0
 def workSliceEmittance(self, args2):
     i, timestep, FilterDictValues, L, globalPosition = args2
     y1 = globalPosition + i * L / 10
     if i < 10:
         y2 = globalPosition + (i + 1) * L / 10
         neuerFilter.filterPosition('y', y1 * 1e-6, y2 * 1e-6, timestep)
         m = self.filtern(FilterDictValues, timestep)
     if i == 10:
         neuerFilter.filterPosition('y', y1 * 1e-6, (y1 + L / 2) * 1e-6,
                                    timestep)
         m = self.filtern(FilterDictValues, timestep)
     y1 -= globalPosition
     b = Auswertung.Auswertung(self.filename, 1024, 0, 150, self.species,
                               self.slice_size, m, timestep)
     emitS = b.calcEmittance('x', timestep)
     return (y1, emitS)
예제 #4
0
def old_histogram():
    darstellungen = PlotFkt.PlotFkt(filename, species, slice_size, [])
    m = darstellungen.filtern({}, timestep.value)
    b = Auswertung.Auswertung(filename, n_bins, bin_min, bin_max, species, slice_size, m, timestep.value)
    return b.EnergyHistogram(timestep.value)
예제 #5
0
 def workEnergyHist(self, args):
     timestep, FilterDictValues = args
     m = self.filtern(FilterDictValues, timestep)
     b = Auswertung.Auswertung(self.filename, 1024, 0, 150, self.species,
                               self.slice_size, m, timestep)
     return (b.EnergyHistogram(timestep))
예제 #6
0
 def workEmittance(self, args):
     timestep, FilterDictValues = args
     m = self.filtern(FilterDictValues, timestep)
     b = Auswertung.Auswertung(self.filename, 1024, 20, 100, self.species,
                               self.slice_size, m, timestep)
     return (b.calcEmittance('x', timestep))
예제 #7
0
    def useFilter(sophie):
        clear_output()
        display(tslider, filterCheckbox, button1, FilterContainer,
                EnergyContainer, PhasenraumContainer, EmittanceContainer,
                FieldContainer, button2)

        #### Filtern:
        FilterDictValues = {}
        if filterCheckbox.children[1].value:
            FilterDictValues['gamma'] = (gamma.children[0].value,
                                         gamma.children[1].value)
        if filterCheckbox.children[2].value:
            FilterDictValues['x'] = [
                x.children[0].value * 1e-6, x.children[1].value * 1e-6
            ]
        if filterCheckbox.children[3].value:
            FilterDictValues['y'] = [
                y.children[0].value * 1e-6, y.children[1].value * 1e-6
            ]
        if filterCheckbox.children[4].value:
            FilterDictValues['z'] = [
                z.children[0].value * 1e-6, z.children[1].value * 1e-6
            ]
        if filterCheckbox.children[5].value:
            FilterDictValues['ux'] = [
                ux.children[0].value, ux.children[1].value
            ]
        if filterCheckbox.children[6].value:
            FilterDictValues['uz'] = [
                uz.children[0].value, uz.children[1].value
            ]
        m = Darstellungen.filtern(FilterDictValues, timestep.value)
        b = Auswertung.Auswertung(filename, 1024, 20, 150, species, slice_size,
                                  m, timestep.value)

        args = []
        for i in (ts_2d.iterations):
            args.append([i, FilterDictValues])

        ####Darstellungen:
        if EnergyContainer.children[1].value:
            bins = np.linspace(b.bin_min, b.bin_max, b.n_bins)
            plt.figure(num='Energyhistogram')
            plt.plot(bins, b.EnergyHistogram(timestep.value))
            plt.ylim((0, 2e7))
            #plt.yscale('log')
            plt.xlabel(r'E$_\mathrm{kin}$ [MeV]')
            plt.ylabel(r'Anzahl Elektronen')
            plt.show()
        if EnergyContainer.children[2].value:
            pool = Pool(15)
            work = pool.map(Darstellungen.workEnergyHist, args)
            Energy_list = np.zeros((1024, len(ts_2d.iterations)))
            for index, iterT in enumerate(ts_2d.iterations):
                Energy_list[:, index] = work[index]
            plt.figure(num='Energyverlauf')
            timebins = np.linspace(0, 10000, 11)
            enegybins = np.linspace(0, 150, 1024)
            plt.pcolormesh(timebins,
                           enegybins,
                           Energy_list,
                           norm=LogNorm(),
                           vmin=1e6,
                           vmax=1e8)
            plt.colorbar()
        if PhasenraumContainer.children[
                1].value or PhasenraumContainer.children[
                    2].value or PhasenraumContainer.children[3].value:
            plt.figure(figsize=(13.5, 4.5), num='Phasenraum')
            if PhasenraumContainer.children[1].value:
                positionx, momentumx = b.Phasenraum(timestep.value, 'x')
                plt.subplot(131)
                plt.hist2d(positionx, momentumx, bins=256, norm=LogNorm())
                plt.xlabel(r'x [$\mu$m]')
                plt.ylabel(r'ux [$\beta \gamma$]')
                plt.colorbar()
            if PhasenraumContainer.children[2].value:
                positionz, momentumz = b.Phasenraum(timestep.value, 'z')
                plt.subplot(
                    132)  #sublot(Anzahl Zeilen Anzahl Spalten Bild Nummer)
                plt.hist2d(positionz, momentumz, bins=256, norm=LogNorm())
                plt.xlabel(r'z [$\mu$m]')
                plt.ylabel(r'uz [$\beta \gamma$]')
                plt.colorbar()
                plt.tight_layout(pad=0.4, w_pad=1.5)
            if PhasenraumContainer.children[3].value:
                positiony, momentumy = b.Phasenraum(timestep.value, 'y')
                plt.subplot(133)
                plt.hist2d(positiony, momentumy, bins=256, norm=LogNorm())
                plt.xlabel(r'y [$\mu$m]')
                plt.ylabel(r'uy [$\beta \gamma$]')
                plt.colorbar()
            plt.show()
        if EmittanceContainer.children[1].value:
            e = Emittance.Emittance(filename, species, slice_size, 'x', m)
            print('Emittance x=', e.calcEmittance(timestep.value),
                  'pi mm mrad')
        if EmittanceContainer.children[2].value:
            e = Emittance.Emittance(filename, species, slice_size, 'y', m)
            print('Emittance y=', e.calcEmittance(timestep.value),
                  'pi mm mrad')
        if EmittanceContainer.children[3].value:
            e = Emittance.Emittance(filename, species, slice_size, 'z', m)
            print('Emittance z=', e.calcEmittance(timestep.value),
                  'pi mm mrad')
        if EmittanceContainer.children[4].value:
            emit_x_list = np.zeros(len(ts_2d.iterations))
            pool = Pool(15)
            work = pool.map(Darstellungen.workEmittance, args)
            for index, iterT in enumerate(ts_2d.iterations):
                emit_x_list[index] = work[index]
            plt.figure(num='Emittance')
            plt.plot(ts_2d.iterations[1:], emit_x_list[1:])
            plt.ylabel(r'$\epsilon_{n,x}$ [$\pi$ mm mrad]')
            plt.xlabel('Zeitschritt')
            plt.show()
        if EmittanceContainer.children[5].value:
            pool = Pool(15)
            work = pool.map(Darstellungen.SliceEmittance, args)
            plt.figure(figsize=(10, 17),
                       num='normierte slice Emittance in pi mm mrad'
                       )  #'Verlauf Slice Emittance')
            i = 0
            l = len(work)
            ylim_j = np.zeros(l + 1)
            for res in work:
                y_j, emitS_j = res
                print('i=', i, 'emitS_j=', emitS_j)
                ylim_j[i] = np.max(emitS_j)
                i += 1
            ylim = np.max(ylim_j)
            i = 0
            for res in work:
                y_i, emitS = res  #Darstellungen.SliceEmittance(timestep.value, FilterDictValues)
                print('i=', i, 'emitS=', emitS)
                plt.subplot(l, 1, i + 1)
                plt.plot(y_i, emitS)  #,label=np.str(ts_2d.iterations[i]))
                plt.ylabel(np.str(ts_2d.iterations[i])
                           )  #plt.ylabel(r'$\epsilon_{n,x}$ [$\pi$ mm mrad]')
                if ylim > 0: plt.ylim(0, ylim)
                i += 1
            plt.xlabel('y in µm')
            plt.show()
        if FieldContainer.children[1].value or FieldContainer.children[
                2].value or FieldContainer.children[3].value:
            plt.figure(figsize=(13.5, 4.5), num='Felder')
            if FieldContainer.children[1].value:
                E_y, gritSpacing, grit_size = b.EField(timestep.value)
                plt.subplot(131)
                plt.title('E-Feld')
                plt.imshow(E_y,
                           aspect="auto",
                           origin="lower",
                           extent=(-0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   +0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   0, grit_size[1] * gritSpacing[1] *
                                   1e6))  #, norm=LogNorm())
                plt.colorbar()
                plt.xlabel(r"$x \, \mathrm{[\mu m]}$")
                plt.ylabel(r"$y \, \mathrm{[\mu m]}$")
            if FieldContainer.children[2].value:
                B_y, gritSpacing, grit_size = b.BField(timestep.value)
                plt.subplot(132)
                plt.title('B-Feld')
                plt.imshow(B_y,
                           aspect="auto",
                           origin="lower",
                           extent=(-0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   +0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   0, grit_size[1] * gritSpacing[1] *
                                   1e6))  #, norm=LogNorm())
                plt.colorbar()
                plt.xlabel(r"$x \, \mathrm{[\mu m]}$")
                plt.ylabel(r"$y \, \mathrm{[\mu m]}$")
                plt.tight_layout(pad=0.4, w_pad=1.5)
            if FieldContainer.children[3].value:
                D, gritSpacing, grit_size = b.Density(timestep.value)
                plt.subplot(133)
                plt.title('Charge-Density')
                plt.imshow(D,
                           aspect="auto",
                           origin="lower",
                           norm=LogNorm(),
                           extent=(-0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   +0.5 * grit_size[0] * gritSpacing[0] * 1e6,
                                   0, grit_size[1] * gritSpacing[1] * 1e6))
                plt.colorbar()
                plt.xlabel(r"$x \, \mathrm{[\mu m]}$")
                plt.ylabel(r"$y \, \mathrm{[\mu m]}$")
            plt.show()
예제 #8
0
timestep = timestep()
timestep.value = 5000

#FilterDictValues
FDV = {
    'gamma': (0, 250),
    # coords in meters
    'x': [-5 * 1e-6, 5 * 1e-6],
    'y': [-5 * 1e-6, 5 * 1e-6],
    'z': [-5 * 1e-6, 5 * 1e-6],
    # units gamma beta
    'ux': [-5, 5],
    'uz': [-5, 5]
}

filterselection = ['Gamma', 'x', 'y', 'z', 'ux', 'uz']
Darstellungen = PlotFkt.PlotFkt(filename, species, slice_size, filterselection)

# line 70
m = Darstellungen.filtern(FDV, timestep.value)
b = Auswertung.Auswertung(filename, 1024, 20, 150, species, slice_size, m,
                          timestep.value)

filterselection = ['Gamma', 'x', 'y', 'z', 'ux', 'uz']

filterCheckbox = Darstellungen.createCheckbox(filterselection,
                                              '<b>Filter:</b>')

button1.on_click(createFilter)