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)
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)
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)