Beispiel #1
0
    def completeOperations(self, shadow_oe=None):
        self.setStatusMessage("Running SHADOW")

        if self.trace_shadow:
            grabber = TTYGrabber()
            grabber.start()

        self.progressBarSet(50)

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

        beam_out = ShadowBeam.traceFromOE(self.input_beam, shadow_oe)

        self.adjust_divergence_and_intensity(beam_out)

        if self.trace_shadow:
            grabber.stop()

            for row in grabber.ttyData:
                self.writeStdOut(row)

        self.setStatusMessage("Plotting Results")

        self.plot_results(beam_out)

        self.setStatusMessage("")

        self.send("Beam", beam_out)
        self.send("Trigger", ShadowTriggerIn(new_beam=True))
    def reconstructWavefront(self):
        try:
            self.error(self.error_id)
            self.setStatusMessage("")
            self.progressBarInit()

            if ShadowCongruence.checkEmptyBeam(self.input_beam):
                if ShadowCongruence.checkGoodBeam(self.input_beam):
                    sys.stdout = EmittingStream(textWritten=self.writeStdOut)

                    self.progressBarSet(10)

                    self.checkFields()

                    self.setStatusMessage(
                        "Modifing coordinates to equal optical paths")

                    if self.trace_shadow:
                        grabber = TTYGrabber()
                        grabber.start()

                    self.progressBarSet(50)

                    beam_out = self.input_beam.duplicate()

                    reference_distance = 0.0

                    for history_element in beam_out.getOEHistory():
                        if not history_element._shadow_oe_end is None:
                            reference_distance += history_element._shadow_oe_end._oe.SSOUR + history_element._shadow_oe_end._oe.SIMAG

                    for index in range(0, len(beam_out._beam.rays)):
                        optical_path_difference = beam_out._beam.rays[
                            index, 12] - reference_distance

                        beam_out._beam.rays[index, 0] = beam_out._beam.rays[
                            index,
                            0] + optical_path_difference * beam_out._beam.rays[
                                index, 3]
                        beam_out._beam.rays[index, 1] = beam_out._beam.rays[
                            index,
                            1] + optical_path_difference * beam_out._beam.rays[
                                index, 4]
                        beam_out._beam.rays[index, 2] = beam_out._beam.rays[
                            index,
                            2] + optical_path_difference * beam_out._beam.rays[
                                index, 5]
                        beam_out._beam.rays[index, 12] = reference_distance

                    last_element = beam_out.getOEHistory(
                    )[-self.element_before]

                    alpha = last_element._shadow_oe_end._oe.T_INCIDENCE
                    beta = last_element._shadow_oe_end._oe.T_REFLECTION

                    delta_calculated = numpy.round(
                        numpy.degrees(
                            numpy.arctan(
                                numpy.tan(beta) -
                                (numpy.sin(alpha) / numpy.cos(beta)))), 4)

                    # y max
                    cursor_1 = numpy.where(beam_out._beam.rays[:, 1] ==
                                           numpy.max(beam_out._beam.rays[:,
                                                                         1]))
                    cursor_2 = numpy.where(beam_out._beam.rays[:, 1] ==
                                           numpy.min(beam_out._beam.rays[:,
                                                                         1]))

                    point_1 = [
                        beam_out._beam.rays[cursor_1, 2][0][0],
                        beam_out._beam.rays[cursor_1, 1][0][0]
                    ]
                    point_2 = [
                        beam_out._beam.rays[cursor_2, 2][0][0],
                        beam_out._beam.rays[cursor_2, 1][0][0]
                    ]

                    delta_shadow = numpy.round(
                        numpy.degrees(
                            numpy.arctan((point_1[1] - point_2[1]) /
                                         (point_1[0] - point_2[0]))), 4)

                    self.delta_angle_calculated = delta_calculated
                    self.delta_angle_shadow = delta_shadow

                    if self.trace_shadow:
                        grabber.stop()

                        for row in grabber.ttyData:
                            self.writeStdOut(row)

                    self.setStatusMessage("Plotting Results")

                    self.plot_results(beam_out)

                    self.setStatusMessage("")

                    self.send("Beam", beam_out)
                    self.send("Trigger", ShadowTriggerIn(new_beam=True))
                else:
                    raise Exception("Input Beam with no good rays")
            else:
                raise Exception("Empty Input 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()
Beispiel #3
0
    def traceOpticalElement(self):
        try:
            self.error(self.error_id)
            self.setStatusMessage("")
            self.progressBarInit()

            if ShadowCongruence.checkEmptyBeam(self.input_beam):
                if ShadowCongruence.checkGoodBeam(self.input_beam):
                    sys.stdout = EmittingStream(textWritten=self.writeStdOut)

                    self.progressBarSet(10)

                    self.checkFields()

                    self.setStatusMessage("Running SHADOW")

                    if self.trace_shadow:
                        grabber = TTYGrabber()
                        grabber.start()

                    self.progressBarSet(50)

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

                    shadow_oe_1 = ShadowOpticalElement.create_screen_slit()
                    self.populateFields_1(shadow_oe_1)

                    beam_out = ShadowBeam.traceFromOE(self.input_beam,
                                                      shadow_oe_1)

                    self.adjust_first_divergence(beam_out)

                    self.progressBarSet(60)

                    shadow_oe_2 = ShadowOpticalElement.create_screen_slit()
                    self.populateFields_2(shadow_oe_2)

                    beam_out = ShadowBeam.traceFromOE(beam_out, shadow_oe_2)

                    self.adjust_second_divergence_and_intensity(beam_out)

                    self.progressBarSet(70)

                    shadow_oe_3 = ShadowOpticalElement.create_screen_slit()
                    self.populateFields_3(shadow_oe_3)

                    beam_out = ShadowBeam.traceFromOE(beam_out, shadow_oe_3)

                    if self.trace_shadow:
                        grabber.stop()

                        for row in grabber.ttyData:
                            self.writeStdOut(row)

                    self.setStatusMessage("Plotting Results")

                    self.plot_results(beam_out)

                    self.setStatusMessage("")

                    self.send("Beam", beam_out)
                    self.send("Trigger", ShadowTriggerIn(new_beam=True))
                else:
                    raise Exception("Input Beam with no good rays")
            else:
                raise Exception("Empty Input 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()