예제 #1
0
    def checkFields(self):
        ShadowGui.checkPositiveNumber(self.p, "Distance Source - KB center")
        ShadowGui.checkPositiveNumber(self.q, "Distance KB center - Image plane")

        ShadowGui.checkPositiveNumber(self.separation, "Separation between the Mirrors")
        ShadowGui.checkStrictlyPositiveNumber(self.photon_energy_ev, "Photon Energy")

        ShadowGui.checkFile(self.reflectivity_file)

        self.crystal_1_box.checkFields()
        self.crystal_2_box.checkFields()
예제 #2
0
    def checkFields(self):
        ShadowGui.checkPositiveNumber(self.grazing_angles_mrad, "Grazing Angle")

        if self.has_finite_dimensions == 0:
            ShadowGui.checkStrictlyPositiveNumber(self.mirror_width, "Mirror Width")
            ShadowGui.checkStrictlyPositiveNumber(self.mirror_length, "Mirror Length")

        if self.reflectivity_kind != 0:
            ShadowGui.checkFile(self.reflectivity_files)

        if self.has_surface_error == 1:
            ShadowGui.checkFile(self.surface_error_files)
    def runSimulation(self):
        try:
            self.error(self.error_id)
            self.setStatusMessage("")
            self.progressBarInit()

            if not self.beamline_parameters is None:
                driver = ShadowDriver()

                sys.stdout = EmittingStream(textWritten=self.writeStdOut)


                self.setStatusMessage("Running SHADOW simulation")

                self.progressBarSet(50)

                ###########################################
                # TODO: TO BE ADDED JUST IN CASE OF BROKEN
                #       ENVIRONMENT: MUST BE FOUND A PROPER WAY
                #       TO TEST SHADOW
                self.fixWeirdShadowBug()
                ###########################################

                ShadowGui.checkStrictlyPositiveNumber(self.beamline_parameters._energy_min, "Energy Min")
                ShadowGui.checkStrictlyPositiveNumber(self.beamline_parameters._energy_max, "Energy Max")

                shadow_beam = driver.calculate_radiation(self.beamline_parameters._electron_beam,
                                                         self.beamline_parameters._magnetic_structure,
                                                         self.beamline_parameters._beamline,
                                                         self.beamline_parameters._energy_min,
                                                         self.beamline_parameters._energy_max)


                self.setStatusMessage("Plotting Results")

                self.plot_results(shadow_beam)

                self.setStatusMessage("")

                self.send("Beam", shadow_beam)

        except Exception as exception:
            QtGui.QMessageBox.critical(self, "QMessageBox.critical()",
                                       str(exception),
                                       QtGui.QMessageBox.Ok)

            self.error_id = self.error_id + 1
            self.error(self.error_id, "Exception occurred: " + str(exception))

        self.progressBarFinished()
    def runSimulation(self):
        try:
            self.error(self.error_id)
            self.setStatusMessage("")
            self.progressBarInit()

            if not self.beamline_parameters is None:
                driver = SRWDriver()

                self.setStatusMessage("Running SRW simulation")

                self.progressBarSet(50)

                ShadowGui.checkStrictlyPositiveNumber(self.beamline_parameters._energy_min, "Energy Min")
                ShadowGui.checkStrictlyPositiveNumber(self.beamline_parameters._energy_max, "Energy Max")

                srw_wavefront = driver.calculate_radiation(self.beamline_parameters._electron_beam,
                                                           self.beamline_parameters._magnetic_structure,
                                                           self.beamline_parameters._beamline,
                                                           self.beamline_parameters._energy_min,
                                                           self.beamline_parameters._energy_max)

                intensity, dim_x, dim_y = driver.calculate_intensity(srw_wavefront)

                self.setStatusMessage("Calling plots with array shape: ',intensity.shape,'...")

                t0_main = time.time()
                plt.pcolormesh(dim_x,dim_y,intensity.transpose())
                plt.title("Real space for infrared example")
                plt.colorbar()

                self.setStatusMessage("done in " + str(round(time.time() - t0_main)) + " s")

                plt.show()

                self.setStatusMessage("")

        except Exception as exception:
            QtGui.QMessageBox.critical(self, "QMessageBox.critical()",
                                       str(exception),
                                       QtGui.QMessageBox.Ok)

            self.error_id = self.error_id + 1
            self.error(self.error_id, "Exception occurred: " + str(exception))

            #raise exception

        self.progressBarFinished()
예제 #5
0
    def check_fields(self):
        self.number_of_points_x = ShadowGui.checkStrictlyPositiveNumber(self.number_of_points_x, "Number of Points X")
        self.number_of_points_y = ShadowGui.checkStrictlyPositiveNumber(self.number_of_points_y, "Number of Points Y")

        self.dimension_x = ShadowGui.checkStrictlyPositiveNumber(self.dimension_x, "Dimension X")
        self.dimension_y = ShadowGui.checkStrictlyPositiveNumber(self.dimension_y, "Dimension Y")

        self.estimated_slope_error = ShadowGui.checkPositiveNumber(self.estimated_slope_error, "Estimated slope error")
        self.montecarlo_seed = ShadowGui.checkPositiveNumber(self.montecarlo_seed, "Monte Carlo initial seed")

        self.harmonic_maximum_index = ShadowGui.checkPositiveNumber(self.harmonic_maximum_index,
                                                                    "Harmonic Maximum Index")

        if not self.waviness_file_name is None:
            self.waviness_file_name = self.waviness_file_name.strip()

            if self.waviness_file_name == "": raise Exception("Output File Name missing")
        else:
            raise Exception("Output File Name missing")
예제 #6
0
    def checkFields(self):
        ShadowGui.checkPositiveNumber(self.nlenses, "Number of lenses")
        ShadowGui.checkPositiveNumber(self.slots_empty, "Number of empty slots")
        ShadowGui.checkPositiveNumber(self.thickness, "Piling thickness")

        ShadowGui.checkPositiveNumber(self.p, "P")
        ShadowGui.checkPositiveNumber(self.q, "Q")

        if self.has_finite_diameter:
            ShadowGui.checkStrictlyPositiveNumber(self.diameter, "Diameter")

        if self.ri_calculation_mode == 1:
            ShadowGui.checkFile(self.prerefl_file)
        else:
            ShadowGui.checkStrictlyPositiveNumber(self.refraction_index, "Refraction Index")
            ShadowGui.checkStrictlyPositiveNumber(self.attenuation_coefficient, "Attenuation Coefficient")

        ShadowGui.checkStrictlyPositiveNumber(self.radius, "Radius")
        ShadowGui.checkPositiveNumber(self.interthickness, "Lens Thickness")
예제 #7
0
 def checkFields(self):
     if self.has_finite_dimensions == 0:
         ShadowGui.checkStrictlyPositiveNumber(self.mirror_width, "Mirror Width")
         ShadowGui.checkStrictlyPositiveNumber(self.mirror_length, "Mirror Length")