def replace_fig(self, beam, var_x, var_y, title, xtitle, ytitle, xrange, yrange, nbins, nolost, xum, yum): if self.plot_canvas is None: self.plot_canvas = ShadowPlot.DetailedPlotWidget(y_scale_factor=1.14) self.image_box.layout().addWidget(self.plot_canvas) try: if self.autosave == 1: if self.autosave_file is None: self.autosave_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(self.autosave_file_name)) elif self.autosave_file.filename != congruence.checkFileName(self.autosave_file_name): self.autosave_file.close() self.autosave_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(self.autosave_file_name)) if self.keep_result == 1: self.cumulated_ticket, last_ticket = self.plot_canvas.plot_xy(beam, var_x, var_y, title, xtitle, ytitle, xrange=xrange, yrange=yrange, nbins=nbins, nolost=nolost, xum=xum, yum=yum, conv=self.workspace_units_to_cm, ref=self.weight_column_index, ticket_to_add=self.cumulated_ticket) self.plotted_ticket = self.cumulated_ticket if self.autosave == 1: self.autosave_prog_id += 1 self.autosave_file.write_coordinates(self.cumulated_ticket) dataset_name = self.weight_column.itemText(self.weight_column_index) self.autosave_file.add_plot_xy(self.cumulated_ticket, dataset_name=dataset_name) if self.autosave_partial_results == 1: if last_ticket is None: self.autosave_file.add_plot_xy(self.cumulated_ticket, plot_name="Plot XY #" + str(self.autosave_prog_id), dataset_name=dataset_name) else: self.autosave_file.add_plot_xy(last_ticket, plot_name="Plot X #" + str(self.autosave_prog_id), dataset_name=dataset_name) self.autosave_file.flush() else: ticket, _ = self.plot_canvas.plot_xy(beam, var_x, var_y, title, xtitle, ytitle, xrange=xrange, yrange=yrange, nbins=nbins, nolost=nolost, xum=xum, yum=yum, conv=self.workspace_units_to_cm, ref=self.weight_column_index) self.cumulated_ticket = None self.plotted_ticket = ticket if self.autosave == 1: self.autosave_prog_id += 1 self.autosave_file.write_coordinates(ticket) self.autosave_file.add_plot_xy(ticket, dataset_name=self.weight_column.itemText(self.weight_column_index)) self.autosave_file.flush() except Exception as e: if not self.IS_DEVELOP: raise Exception("Data not plottable: No good rays or bad content") else: raise e
def save_results(self): if not self.plotted_ticket is None: try: file_name, _ = QFileDialog.getSaveFileName( self, "Save Current Plot", filter="HDF5 Files (*.hdf5 *.h5 *.hdf)") if not file_name is None and not file_name.strip() == "": if not (file_name.endswith("hd5") or file_name.endswith("hdf5") or file_name.endswith("hdf")): file_name += ".hdf5" save_file = ShadowPlot.PlotXYHdf5File( congruence.checkDir(file_name)) save_file.write_coordinates(self.plotted_ticket) dataset_name = self.weight_column.itemText( self.weight_column_index) save_file.add_plot_xy(self.plotted_ticket, dataset_name=dataset_name) save_file.close() except Exception as exception: QMessageBox.critical(self, "Error", str(exception), QMessageBox.Ok) if self.IS_DEVELOP: raise exception
def selectPlotFile(self): file_name = oasysgui.selectFileFromDialog(self, None, "Select File", file_extension_filter="HDF5 Files (*.hdf5 *.h5 *.hdf)") if not file_name is None: self.le_loaded_plot_file_name.setText(os.path.basename(os.path.normpath(file_name))) plot_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(file_name), mode="r") ticket = {} ticket["histogram"], ticket["histogram_h"], ticket["histogram_v"], attributes = plot_file.get_last_plot(dataset_name="power_density") ticket["bin_h_center"], ticket["bin_v_center"], ticket["h_label"], ticket["v_label"] = plot_file.get_coordinates() ticket["intensity"] = attributes["intensity"] ticket["nrays"] = attributes["total_rays"] ticket["good_rays"] = attributes["good_rays"] if self.plot_canvas is None: self.plot_canvas = PowerPlotXYWidget() self.image_box.layout().addWidget(self.plot_canvas) else: if not self.plotted_ticket is None: if QMessageBox.question(self, "Load Plot", "Merge with current Plot?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes: if ticket["histogram"].shape == self.plotted_ticket["histogram"].shape and \ ticket["bin_h_center"].shape == self.plotted_ticket["bin_h_center"].shape and \ ticket["bin_v_center"].shape == self.plotted_ticket["bin_v_center"].shape and \ ticket["bin_h_center"][0] == self.plotted_ticket["bin_h_center"][0] and \ ticket["bin_h_center"][-1] == self.plotted_ticket["bin_h_center"][-1] and \ ticket["bin_v_center"][0] == self.plotted_ticket["bin_v_center"][0] and \ ticket["bin_v_center"][-1] == self.plotted_ticket["bin_v_center"][-1]: ticket["histogram"] += self.plotted_ticket["histogram"] if QMessageBox.question(self, "Load Plot", "Average with current Plot?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) == QMessageBox.Yes: ticket["histogram"] *= 0.5 else: raise ValueError("The plots cannot be merged: the should have same dimensions and ranges") cumulated_power_plot = numpy.sum(ticket["histogram"])*(ticket["bin_h_center"][1]-ticket["bin_h_center"][0])*(ticket["bin_v_center"][1]-ticket["bin_v_center"][0]) try: energy_min=0.0 energy_max=0.0 energy_step=0.0 self.plot_canvas.cumulated_power_plot = cumulated_power_plot self.plot_canvas.plot_power_density_ticket(ticket, ticket["h_label"], ticket["v_label"], cumulated_total_power=0.0, energy_min=energy_min, energy_max=energy_max, energy_step=energy_step) self.cumulated_ticket = None self.plotted_ticket = ticket self.plotted_ticket_original = ticket.copy() except Exception as e: QMessageBox.critical(self, "Error", str(e), QMessageBox.Ok) if self.IS_DEVELOP: raise e
def save_cumulated_data_hdf5(self, file_name): if not self.plotted_ticket is None: try: save_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(os.path.splitext(file_name)[0] + ".hdf5")) save_file.write_coordinates(self.plotted_ticket) save_file.add_plot_xy(self.plotted_ticket, dataset_name="power_density") save_file.close() except Exception as exception: QMessageBox.critical(self, "Error", str(exception), QMessageBox.Ok) if self.IS_DEVELOP: raise exception
def replace_fig(self, shadow_beam, var_x, var_y, xrange, yrange, nbins, nolost): if self.plot_canvas is None: self.plot_canvas = PowerPlotXYWidget() self.image_box.layout().addWidget(self.plot_canvas) try: if self.autosave == 1: if self.autosave_file is None: self.autosave_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(self.autosave_file_name)) elif self.autosave_file.filename != congruence.checkFileName(self.autosave_file_name): self.autosave_file.close() self.autosave_file = ShadowPlot.PlotXYHdf5File(congruence.checkDir(self.autosave_file_name)) if self.keep_result == 1: self.cumulated_ticket, last_ticket = self.plot_canvas.plot_power_density(shadow_beam, var_x, var_y, self.total_power, self.cumulated_total_power, self.energy_min, self.energy_max, self.energy_step, nbins=nbins, xrange=xrange, yrange=yrange, nolost=nolost, ticket_to_add=self.cumulated_ticket, to_mm=self.workspace_units_to_mm, show_image=self.view_type==1, kind_of_calculation=self.kind_of_calculation, replace_poor_statistic=self.replace_poor_statistic, good_rays_limit=self.good_rays_limit, center_x=self.center_x, center_y=self.center_y, sigma_x=self.sigma_x, sigma_y=self.sigma_y, gamma=self.gamma) self.plotted_ticket = self.cumulated_ticket self.plotted_ticket_original = self.plotted_ticket.copy() if self.autosave == 1: self.autosave_file.write_coordinates(self.cumulated_ticket) dataset_name = "power_density" self.autosave_file.add_plot_xy(self.cumulated_ticket, dataset_name=dataset_name) if self.autosave_partial_results == 1: if last_ticket is None: self.autosave_file.add_plot_xy(self.cumulated_ticket, plot_name="Energy Range: " + str(round(self.energy_max-self.energy_step, 2)) + "-" + str(round(self.energy_max, 2)), dataset_name=dataset_name) else: self.autosave_file.add_plot_xy(last_ticket, plot_name="Energy Range: " + str(round(self.energy_max-self.energy_step, 2)) + "-" + str(round(self.energy_max, 2)), dataset_name=dataset_name) self.autosave_file.flush() else: ticket, _ = self.plot_canvas.plot_power_density(shadow_beam, var_x, var_y, self.total_power, self.cumulated_total_power, self.energy_min, self.energy_max, self.energy_step, nbins=nbins, xrange=xrange, yrange=yrange, nolost=nolost, to_mm=self.workspace_units_to_mm, show_image=self.view_type==1, kind_of_calculation=self.kind_of_calculation, replace_poor_statistic=self.replace_poor_statistic, good_rays_limit=self.good_rays_limit, center_x=self.center_x, center_y=self.center_y, sigma_x=self.sigma_x, sigma_y=self.sigma_y, gamma=self.gamma) self.cumulated_ticket = None self.plotted_ticket = ticket self.plotted_ticket_original = self.plotted_ticket.copy() if self.autosave == 1: self.autosave_file.write_coordinates(ticket) self.autosave_file.add_plot_xy(ticket, dataset_name="power_density") self.autosave_file.flush() except Exception as e: if not self.IS_DEVELOP: raise Exception("Data not plottable: No good rays or bad content") else: raise e