def merge_beams(self):
        merged_beam = None

        if self.use_weights == 1:
            total_intensity = 0.0
            for index in range(1, 11):
                current_beam = getattr(self, "input_beam" + str(index))
                if not current_beam is None:
                    total_intensity += current_beam._beam.rays[:, 6]**2 + current_beam._beam.rays[:, 7]**2 + current_beam._beam.rays[:, 8]**2 + \
                                       current_beam._beam.rays[:, 15]**2 + current_beam._beam.rays[:, 16]**2 + current_beam._beam.rays[:, 17]**2

        for index in range(1, 11):
            current_beam = getattr(self, "input_beam" + str(index))
            if not current_beam is None:
                current_beam = current_beam.duplicate()

                if self.use_weights == 1:
                    current_intensity = current_beam._beam.rays[:, 6]**2 + current_beam._beam.rays[:, 7]**2 + current_beam._beam.rays[:, 8]**2 + \
                                        current_beam._beam.rays[:, 15]**2 + current_beam._beam.rays[:, 16]**2 + current_beam._beam.rays[:, 17]**2

                    current_weight = current_intensity/total_intensity
                    new_weight = getattr(self, "weight_input_beam" + str(index))
                    ratio = new_weight/current_weight

                    current_beam._beam.rays[:, 6] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 7] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 8] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 15] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 16] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 17] *= numpy.sqrt(ratio)

                if merged_beam is None: merged_beam = current_beam
                else: merged_beam = ShadowBeam.mergeBeams(merged_beam, current_beam)

        self.send("Beam", merged_beam)
    def setBeam(self, beam):
        if ShadowGui.checkEmptyBeam(beam):
            proceed = True

            if not ShadowGui.checkGoodBeam(beam):
                if not ConfirmDialog.confirmed(parent=self, message="Beam contains bad values, skip it?"):
                    proceed = False

            if proceed:
                go = numpy.where(beam.beam.rays[:, 9] == 1)

                self.current_number_of_rays = self.current_number_of_rays + len(beam.beam.rays[go])

                if self.current_number_of_rays <= self.number_of_accumulated_rays:
                    if self.keep_go_rays == 1:
                        beam.beam.rays = copy.deepcopy(beam.beam.rays[go])

                    if not self.input_beam is None:
                        self.input_beam = ShadowBeam.mergeBeams(self.input_beam, beam)
                    else:
                        self.input_beam = beam

                    self.send("Trigger", ShadowTriggerIn(new_beam=True))
                else:
                    if self.is_automatic_run:
                        self.sendSignal()

                        self.current_number_of_rays = 0
                        self.input_beam = None
                    else:
                        QtGui.QMessageBox.critical(self, "QMessageBox.critical()",
                                                   "Number of Accumulated Rays reached, please push \'Send Signal\' button",
                                                   QtGui.QMessageBox.Ok)
Exemple #3
0
    def merge_beams(self):
        merged_beam = None

        if self.use_weights == 1:
            total_intensity = 0.0
            for index in range(1, 11):
                current_beam = getattr(self, "input_beam" + str(index))
                if not current_beam is None:
                    total_intensity += current_beam._beam.rays[:, 6]**2 + current_beam._beam.rays[:, 7]**2 + current_beam._beam.rays[:, 8]**2 + \
                                       current_beam._beam.rays[:, 15]**2 + current_beam._beam.rays[:, 16]**2 + current_beam._beam.rays[:, 17]**2

        for index in range(1, 11):
            current_beam = getattr(self, "input_beam" + str(index))
            if not current_beam is None:
                current_beam = current_beam.duplicate()

                if self.use_weights == 1:
                    current_intensity = current_beam._beam.rays[:, 6]**2 + current_beam._beam.rays[:, 7]**2 + current_beam._beam.rays[:, 8]**2 + \
                                        current_beam._beam.rays[:, 15]**2 + current_beam._beam.rays[:, 16]**2 + current_beam._beam.rays[:, 17]**2

                    current_weight = current_intensity/total_intensity
                    new_weight = getattr(self, "weight_input_beam" + str(index))
                    ratio = new_weight/current_weight

                    current_beam._beam.rays[:, 6] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 7] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 8] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 15] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 16] *= numpy.sqrt(ratio)
                    current_beam._beam.rays[:, 17] *= numpy.sqrt(ratio)

                if merged_beam is None: merged_beam = current_beam
                else: merged_beam = ShadowBeam.mergeBeams(merged_beam, current_beam)

        self.send("Beam", merged_beam)
    def setBeam(self, beam):
        if ShadowCongruence.checkEmptyBeam(beam):
            proceed = True

            if not ShadowCongruence.checkGoodBeam(beam):
                if not ConfirmDialog.confirmed(
                        parent=self,
                        message="Beam contains bad values, skip it?"):
                    proceed = False

            if proceed:
                scanned_variable_data = beam.scanned_variable_data

                go = numpy.where(beam._beam.rays[:, 9] == 1)

                nr_good = len(beam._beam.rays[go])
                nr_total = len(beam._beam.rays)
                nr_lost = nr_total - nr_good
                intensity = beam._beam.histo1(1, nolost=1, ref=23)['intensity']

                self.current_number_of_rays += nr_good
                self.current_intensity += intensity
                self.le_current_intensity.setText("{:10.3f}".format(
                    self.current_intensity))
                self.current_number_of_lost_rays += nr_lost
                self.current_number_of_total_rays += nr_total

                if (self.kind_of_accumulation == 0 and self.current_number_of_rays <= self.number_of_accumulated_rays) or \
                   (self.kind_of_accumulation == 1 and self.current_intensity <= self.number_of_accumulated_rays):
                    if self.keep_go_rays == 1:
                        beam._beam.rays = copy.deepcopy(beam._beam.rays[go])

                    if not self.input_beam is None:
                        self.input_beam = ShadowBeam.mergeBeams(
                            self.input_beam, beam)
                    else:
                        beam._beam.rays[:, 11] = numpy.arange(
                            1,
                            len(beam._beam.rays) + 1, 1)  # ray_index
                        self.input_beam = beam

                    self.input_beam.setScanningData(scanned_variable_data)

                    self.send("Trigger", TriggerIn(new_object=True))
                else:
                    if self.is_automatic_run:
                        self.sendSignal()

                        self.current_number_of_rays = 0
                        self.current_intensity = 0.0
                        self.current_number_of_lost_rays = 0
                        self.current_number_of_total_rays = 0
                        self.input_beam = None
                    else:
                        QtWidgets.QMessageBox.critical(
                            self, "Error",
                            "Number of Accumulated Rays reached, please push \'Send Signal\' button",
                            QtWidgets.QMessageBox.Ok)
Exemple #5
0
    def setBeam(self, beam):
        if ShadowCongruence.checkEmptyBeam(beam):
            if ShadowCongruence.checkGoodBeam(beam):
                if self.keep_result == 1 and not self.input_beam is None:
                    self.input_beam = ShadowBeam.mergeBeams(self.input_beam, beam)
                else:
                    self.input_beam = beam

                if self.is_automatic_run:
                    self.plot_results()
            else:
                QtGui.QMessageBox.critical(self, "Error",
                                           "Data not displayable: No good rays, bad content, bad limits or axes",
                                           QtGui.QMessageBox.Ok)
    def setBeam(self, beam):
        if ShadowCongruence.checkEmptyBeam(beam):
            proceed = True

            if not ShadowCongruence.checkGoodBeam(beam):
                if not ConfirmDialog.confirmed(parent=self, message="Beam contains bad values, skip it?"):
                    proceed = False

            if proceed:
                go = numpy.where(beam._beam.rays[:, 9] == 1)

                nr_good = len(beam._beam.rays[go])
                nr_total = len(beam._beam.rays)
                nr_lost = nr_total - nr_good
                intensity = beam._beam.histo1(1, nolost=1, ref=23)['intensity']

                self.current_number_of_rays += nr_good
                self.current_intensity += intensity
                self.le_current_intensity.setText("{:10.3f}".format(self.current_intensity))
                self.current_number_of_lost_rays += nr_lost
                self.current_number_of_total_rays += nr_total



                if (self.kind_of_accumulation == 0 and self.current_number_of_rays <= self.number_of_accumulated_rays) or \
                   (self.kind_of_accumulation == 1 and self.current_intensity <= self.number_of_accumulated_rays):
                    if self.keep_go_rays == 1:
                        beam._beam.rays = copy.deepcopy(beam._beam.rays[go])

                    if not self.input_beam is None:
                        self.input_beam = ShadowBeam.mergeBeams(self.input_beam, beam)
                    else:
                        beam._beam.rays[:, 11] = numpy.arange(1, len(beam._beam.rays) + 1, 1) # ray_index
                        self.input_beam = beam

                    self.send("Trigger", ShadowTriggerIn(new_beam=True))
                else:
                    if self.is_automatic_run:
                        self.sendSignal()

                        self.current_number_of_rays = 0
                        self.current_intensity = 0.0
                        self.current_number_of_lost_rays = 0
                        self.current_number_of_total_rays = 0
                        self.input_beam = None
                    else:
                        QtGui.QMessageBox.critical(self, "Error",
                                                   "Number of Accumulated Rays reached, please push \'Send Signal\' button",
                                                   QtGui.QMessageBox.Ok)
    def setBeam(self, beam):
        if ShadowGui.checkEmptyBeam(beam):
            if ShadowGui.checkGoodBeam(beam):
                if self.keep_result == 1 and not self.input_beam is None:
                    self.input_beam = ShadowBeam.mergeBeams(self.input_beam, beam)
                else:
                    self.input_beam = beam

                if ShadowGui.checkEmptyBeam(self.input_beam):
                    if (self.input_beam.oe_number == 0):  # IS THE SOURCE
                        self.image_plane = 0
                        self.set_ImagePlane()
                        self.image_plane_combo.setEnabled(False)

                if self.is_automatic_run:
                    self.plot_results()
            else:
                QtGui.QMessageBox.critical(self, "QMessageBox.critical()",
                                           "Data not displayable: No good rays or bad content",
                                           QtGui.QMessageBox.Ok)