def __init__(self, parent, use_cuts, width): '''Inits widget. Args: parent: A MeasurementTabWidget. use_cuts: A string list representing Cut files. width: A float representing Energy Spectrum histogram's bin width. ''' try: super().__init__() self.parent = parent self.icon_manager = parent.icon_manager self.measurement = self.parent.measurement self.use_cuts = use_cuts self.width = width if self.measurement.statusbar: self.progress_bar = QtGui.QProgressBar() self.measurement.statusbar.addWidget(self.progress_bar, 1) self.progress_bar.show() QtCore.QCoreApplication.processEvents(QtCore.QEventLoop.AllEvents) # Mac requires event processing to show progress bar and its # process. else: self.progress_bar = None self.ui = uic.loadUi(os.path.join("ui_files", "ui_energy_spectrum.ui"), self) title = "{0} - Bin Width: {1}".format(self.ui.windowTitle(), width) self.ui.setWindowTitle(title) # Generate new tof.in file for external programs self.measurement.generate_tof_in() # Do energy spectrum stuff on this self.energy_spectrum = EnergySpectrum(self.measurement, use_cuts, width, progress_bar=self.progress_bar) self.energy_spectrum_data = self.energy_spectrum.calculate_spectrum() # Check for RBS selections. rbs_list = {} for cut in self.use_cuts: filename = os.path.basename(cut) split = filename.split('.') if is_rbs(cut): # This should work for regular cut and split. key = "{0}.{1}.{2}".format(split[1], split[2], split[3]) rbs_list[key] = get_scatter_element(cut) # Graph in matplotlib widget and add to window self.matplotlib = MatplotlibEnergySpectrumWidget( self, self.energy_spectrum_data, rbs_list) except: import traceback msg = "Could not create Energy Spectrum graph. " err_file = sys.exc_info()[2].tb_frame.f_code.co_filename str_err = ", ".join([sys.exc_info()[0].__name__ + ": " + \ traceback._some_str(sys.exc_info()[1]), err_file, str(sys.exc_info()[2].tb_lineno)]) msg += str_err logging.getLogger(self.measurement.measurement_name).error(msg) if hasattr(self, "matplotlib"): self.matplotlib.delete() finally: if self.progress_bar: self.measurement.statusbar.removeWidget(self.progress_bar) self.progress_bar.hide()
class EnergySpectrumWidget(QtGui.QWidget): '''Energy spectrum widget which is added to measurement tab. ''' save_file = "widget_energy_spectrum.save" def __init__(self, parent, use_cuts, width): '''Inits widget. Args: parent: A MeasurementTabWidget. use_cuts: A string list representing Cut files. width: A float representing Energy Spectrum histogram's bin width. ''' try: super().__init__() self.parent = parent self.icon_manager = parent.icon_manager self.measurement = self.parent.measurement self.use_cuts = use_cuts self.width = width if self.measurement.statusbar: self.progress_bar = QtGui.QProgressBar() self.measurement.statusbar.addWidget(self.progress_bar, 1) self.progress_bar.show() QtCore.QCoreApplication.processEvents(QtCore.QEventLoop.AllEvents) # Mac requires event processing to show progress bar and its # process. else: self.progress_bar = None self.ui = uic.loadUi(os.path.join("ui_files", "ui_energy_spectrum.ui"), self) title = "{0} - Bin Width: {1}".format(self.ui.windowTitle(), width) self.ui.setWindowTitle(title) # Generate new tof.in file for external programs self.measurement.generate_tof_in() # Do energy spectrum stuff on this self.energy_spectrum = EnergySpectrum(self.measurement, use_cuts, width, progress_bar=self.progress_bar) self.energy_spectrum_data = self.energy_spectrum.calculate_spectrum() # Check for RBS selections. rbs_list = {} for cut in self.use_cuts: filename = os.path.basename(cut) split = filename.split('.') if is_rbs(cut): # This should work for regular cut and split. key = "{0}.{1}.{2}".format(split[1], split[2], split[3]) rbs_list[key] = get_scatter_element(cut) # Graph in matplotlib widget and add to window self.matplotlib = MatplotlibEnergySpectrumWidget( self, self.energy_spectrum_data, rbs_list) except: import traceback msg = "Could not create Energy Spectrum graph. " err_file = sys.exc_info()[2].tb_frame.f_code.co_filename str_err = ", ".join([sys.exc_info()[0].__name__ + ": " + \ traceback._some_str(sys.exc_info()[1]), err_file, str(sys.exc_info()[2].tb_lineno)]) msg += str_err logging.getLogger(self.measurement.measurement_name).error(msg) if hasattr(self, "matplotlib"): self.matplotlib.delete() finally: if self.progress_bar: self.measurement.statusbar.removeWidget(self.progress_bar) self.progress_bar.hide() def delete(self): '''Delete variables and do clean up. ''' self.energy_spectrum = None self.progress_bar = None self.matplotlib.delete() self.matplotlib = None self.ui.close() self.ui = None self.close() def closeEvent(self, evnt): '''Reimplemented method when closing widget. ''' self.parent.energy_spectrum_widget = Null() file = os.path.join(self.parent.measurement.directory, self.save_file) try: if os.path.isfile(file): os.unlink(file) except: pass super().closeEvent(evnt) def save_to_file(self): '''Save object information to file. ''' files = "\t".join([tmp.replace(self.parent.measurement.directory + "\\", "") for tmp in self.use_cuts]) file = os.path.join(self.parent.measurement.directory, self.save_file) fh = open(file, 'wt') fh.write("{0}\n".format(files)) fh.write("{0}".format(self.width)) fh.close()