示例#1
0
def get_delta(input_parameters, calculation_parameters):
    density = xraylib.ElementDensity(xraylib.SymbolToAtomicNumber(input_parameters.crl_material))

    energy_in_KeV = ShadowPhysics.getEnergyFromWavelength(calculation_parameters.gwavelength*input_parameters.widget.workspace_units_to_m*1e10)/1000
    delta = 1-xraylib.Refractive_Index_Re(input_parameters.crl_material, energy_in_KeV, density)

    return delta
示例#2
0
    def plot_efficiency(self):
        if self.type_of_zp == PHASE_ZP:
            if self.energy_plot == 1:
                if self.plot_canvas[5] is None:
                    self.plot_canvas[5] = oasysgui.plotWindow(roi=False, control=False, position=True, logScale=False)
                    self.tab[5].layout().addWidget(self.plot_canvas[5] )

                self.plot_canvas[5].clear()

                self.plot_canvas[5].setDefaultPlotLines(True)
                self.plot_canvas[5].setActiveCurveColor(color='blue')
    
                self.plot_canvas[5].setGraphTitle('Thickness: ' + str(self.zone_plate_thickness) + " nm")
                self.plot_canvas[5].getXAxis().setLabel('Energy [eV]')
                self.plot_canvas[5].getYAxis().setLabel('Efficiency [%]')
    
                x_values = numpy.linspace(self.energy_from, self.energy_to, 100)
                y_values = numpy.zeros(100)
    
                for index in range(len(x_values)):
                    y_values[index], _, _ = ZonePlate.calculate_efficiency(ShadowPhysics.getWavelengthFromEnergy(x_values[index])/10,
                                                                           self.zone_plate_material,
                                                                           self.zone_plate_thickness)
                y_values = numpy.round(100.0*y_values, 3)
    
                self.plot_canvas[5].addCurve(x_values, y_values, "Efficiency vs Energy", symbol='', color='blue', replace=True)
            else:
                if not self.plot_canvas[5] is None: self.plot_canvas[5].clear()

            if self.thickness_plot == 1:
                if self.plot_canvas[6] is None:
                    self.plot_canvas[6] = oasysgui.plotWindow(roi=False, control=False, position=True, logScale=False)
                    self.tab[6].layout().addWidget(self.plot_canvas[6] )
    
                self.plot_canvas[6].setDefaultPlotLines(True)
                self.plot_canvas[6].setActiveCurveColor(color='blue')
    
                self.plot_canvas[6].setGraphTitle('Energy: ' + str(round(ShadowPhysics.getEnergyFromWavelength(self.avg_wavelength*10), 3)) + " eV")
                self.plot_canvas[6].getXAxis().setLabel('Thickness [nm]')
                self.plot_canvas[6].getYAxis().setLabel('Efficiency [%]')
    
                x_values = numpy.linspace(self.thickness_from, self.thickness_to, 100)
                y_values = numpy.zeros(100)
    
                for index in range(len(x_values)):
                    y_values[index], _, _ = ZonePlate.calculate_efficiency(self.avg_wavelength,
                                                                           self.zone_plate_material,
                                                                           x_values[index])
                y_values = numpy.round(100*y_values, 3)
    
                self.plot_canvas[6].addCurve(x_values, y_values, "Efficiency vs Thickness", symbol='', color='blue', replace=True)
            else:
                if not self.plot_canvas[6] is None: self.plot_canvas[6].clear()

        else:
            if not self.plot_canvas[5] is None: self.plot_canvas[5].clear()
            if not self.plot_canvas[6] is None: self.plot_canvas[6].clear()
示例#3
0
    def calculate_efficiency(cls, wavelength, zone_plate_material, zone_plate_thickness):
        energy_in_KeV = ShadowPhysics.getEnergyFromWavelength(wavelength*10)/1000

        density = xraylib.ElementDensity(xraylib.SymbolToAtomicNumber(zone_plate_material))
        delta   = (1-xraylib.Refractive_Index_Re(zone_plate_material, energy_in_KeV, density))
        beta    = xraylib.Refractive_Index_Im(zone_plate_material, energy_in_KeV, density)
        phi     = 2*numpy.pi*zone_plate_thickness*delta/wavelength
        rho     = beta/delta

        efficiency     = (1/(numpy.pi**2))*(1 + numpy.exp(-2*rho*phi)      - (2*numpy.exp(-rho*phi)*numpy.cos(phi)))
        max_efficiency = (1/(numpy.pi**2))*(1 + numpy.exp(-2*rho*numpy.pi) + (2*numpy.exp(-rho*numpy.pi)))
        thickness_max_efficiency = numpy.round(wavelength/(2*delta), 2)

        return efficiency, max_efficiency, thickness_max_efficiency