def read_file(self):
        self.setStatusMessage("")

        try:
            if congruence.checkFileName(self.beam_file_name):
                beam_out = ShadowBeam()
                beam_out.loadFromFile(self.beam_file_name)
                beam_out.history.append(ShadowOEHistoryItem()) # fake Source
                beam_out._oe_number = 0

                # just to create a safe history for possible re-tracing
                beam_out.traceFromOE(beam_out, self.create_dummy_oe(), history=True)

                path, file_name = os.path.split(self.beam_file_name)

                self.setStatusMessage("Current: " + file_name)

                self.send("Beam", beam_out)
        except Exception as exception:
            QtGui.QMessageBox.critical(self, "Error",
                                       str(exception), QtGui.QMessageBox.Ok)
Exemple #2
0
    def read_file(self):
        self.setStatusMessage("")

        try:
            if congruence.checkFileName(self.beam_file_name):
                beam_out = ShadowBeam()
                beam_out.loadFromFile(self.beam_file_name)
                beam_out.history.append(ShadowOEHistoryItem())  # fake Source
                beam_out._oe_number = 0

                # just to create a safe history for possible re-tracing
                beam_out.traceFromOE(beam_out,
                                     self.create_dummy_oe(),
                                     history=True)

                path, file_name = os.path.split(self.beam_file_name)

                self.setStatusMessage("Current: " + file_name)

                self.send("Beam", beam_out)
        except Exception as exception:
            QtWidgets.QMessageBox.critical(self, "Error", str(exception),
                                           QtWidgets.QMessageBox.Ok)
    def from_photon_bunch_to_shadow(self):

        photon_beam = self.incoming_bunch

        N = photon_beam.getArrayByKey("number of photons")
        energies = photon_beam.getArrayByKey("energies")
        S0 = photon_beam.getArrayByKey("s0")
        S1 = photon_beam.getArrayByKey("s1")
        S2 = photon_beam.getArrayByKey("s2")
        S3 = photon_beam.getArrayByKey("s3")
        vx = photon_beam.getArrayByKey("vx")
        vy = photon_beam.getArrayByKey("vy")
        vz = photon_beam.getArrayByKey("vz")

        beam = Shadow.Beam(N)
        A2EV = 2.0 * numpy.pi / (codata.h * codata.c / codata.e * 1e2)

        for i in range(N):
            s0 = S0[i]
            s1 = S1[i]
            s2 = S2[i]
            s3 = S3[i]
            energy = energies[i]

            if (numpy.abs(s1**2 + s2**2 + s3**2 - s0**2) > 1e-4):
                s0 = numpy.sqrt(s1**2 + s2**2 + s3**2)
                print("Warning: Beam is not fully polarized.")

            Ex2 = 0.5 * (s0 + s1)
            Ez2 = 0.5 * (s0 - s1)

            Ex = numpy.sqrt(Ex2)
            Ez = numpy.sqrt(Ez2)

            if s0 == s1:
                sin2delta = 0.0
            else:
                sin2delta = -0.5 * ((s2**2 - s3**2) / (4 * Ex2 * Ez2) - 1)

            delta = numpy.arcsin(numpy.sign(s3) * numpy.sqrt(sin2delta))
            beam.rays[i, 0] = 0.0  # x
            beam.rays[i, 1] = 0.0  # x
            beam.rays[i, 2] = 0.0  # x
            beam.rays[i, 3] = vx[i]  # v
            beam.rays[i, 4] = vy[i]  # v
            beam.rays[i, 5] = vz[i]  # v
            beam.rays[i, 6] = Ex  # Es
            beam.rays[i, 7] = 0.0  # Es
            beam.rays[i, 8] = 0.0  # Es
            beam.rays[i, 9] = 1.0  # lost ray flag
            beam.rays[i, 10] = A2EV * energy  # k
            beam.rays[i, 11] = i  # ray index
            beam.rays[i, 12] = 0.0  # path length
            beam.rays[i, 13] = 0.0  # phase-s
            beam.rays[i, 14] = delta  # phase-ps
            beam.rays[i, 15] = 0.0  # Ep
            beam.rays[i, 16] = 0.0  # Ep
            beam.rays[i, 17] = Ez  # Ep

        beam_out = ShadowBeam(beam=beam)

        beam_out.history.append(ShadowOEHistoryItem())  # fake Source
        beam_out._oe_number = 0

        # just to create a safe history for possible re-tracing
        beam_out.traceFromOE(beam_out, self.create_dummy_oe(), history=True)

        #self.send("Beam", beam_out)

        return beam_out
        empty_element._oe.DUMMY = 1.0  # self.workspace_units_to_cm
        empty_element._oe.T_SOURCE = 0.0
        empty_element._oe.T_IMAGE = 0.0
        empty_element._oe.T_INCIDENCE = 0.0
        empty_element._oe.T_REFLECTION = 180.0
        empty_element._oe.ALPHA = 0.0
        empty_element._oe.FWRITE = 3
        empty_element._oe.F_ANGLE = 0
        return empty_element

    app = QApplication(sys.argv)
    w = PlotScatter()

    # load a Beam
    from orangecontrib.shadow.util.shadow_objects import ShadowOEHistoryItem
    beam_out = ShadowBeam()
    beam_out.loadFromFile("/home/manuel/Oasys/mirr.02")
    beam_out.history.append(ShadowOEHistoryItem())  # fake Source
    beam_out._oe_number = 0

    # just to create a safe history for possible re-tracing
    beam_out.traceFromOE(beam_out, create_dummy_oe(), history=True)

    w.workspace_units_to_cm = 1.0

    w.setBeam(beam_out)

    w.show()
    app.exec()
    w.saveSettings()