def on_pattern_file_set(self, button, dialog): # TODO # This should allow more flexibility: # Patterns should be allowed to not have the exact same shape, # add an x-shift variable to align them filename = dialog.filename parser = dialog.parser data_objects = None message = "An unexpected error has occurred when trying to parse %s:\n\n<i>" % os.path.basename(filename) message += "{}</i>\n\n" message += "This is most likely caused by an invalid or unsupported file format." with DialogFactory.error_dialog_handler(message, parent=self.view.get_toplevel(), reraise=settings.DEBUG): # Parse the pattern file data_objects = parser.parse(filename) pattern = data_objects[0].data bg_pattern_x = pattern[:, 0].copy() bg_pattern_y = pattern[:, 1].copy() del pattern # Interpolate/Extrapolate where needed to match data shape and range from scipy.interpolate import interp1d f = interp1d( bg_pattern_x, bg_pattern_y, bounds_error=False, fill_value=0 ) bg_xnew = self.model.data_x bg_ynew = f(bg_xnew) self.model.bg_pattern = bg_ynew
def on_pattern_file_set(self, dialog): # TODO # This should allow more flexibility: # Patterns should be allowed to not have the exact same shape, # add an x-shift variable to align them filename = dialog.filename parser = dialog.parser data_objects = None message = "An unexpected error has occurred when trying to parse %s:\n\n<i>" % os.path.basename( filename) message += "{}</i>\n\n" message += "This is most likely caused by an invalid or unsupported file format." with DialogFactory.error_dialog_handler( message, parent=self.view.get_toplevel(), reraise=False): # Parse the pattern file data_objects = parser.parse(filename) pattern = data_objects[0].data bg_pattern_x = pattern[:, 0].copy() bg_pattern_y = pattern[:, 1].copy() del pattern # Interpolate/Extrapolate where needed to match data shape and range from scipy.interpolate import interp1d f = interp1d(bg_pattern_x, bg_pattern_y, bounds_error=False, fill_value=0) bg_xnew = self.model.data_x bg_ynew = f(bg_xnew) self.model.bg_pattern = bg_ynew
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to parse '%s'.\n" % os.path.basename(filename) message += "This is most likely caused by an invalid or unsupported file format." with DialogFactory.error_dialog_handler(message, parent=self.view.get_toplevel(), reraise=False): self.model.experimental_pattern.load_data(parser, filename, clear=True)
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to save '%s'.\n" % os.path.basename(filename) message += "Contact the developer about this!" with DialogFactory.error_dialog_handler(message, parent=self.view.get_toplevel(), reraise=False): header = "%s %s" % (self.model.name, self.model.sample_name) self.model.exclusion_ranges.save_data(parser, filename, header=header)
def on_accept(dialog): # Try to load the project: with DialogFactory.error_dialog_handler( "An error has occurred:\n<i>{0}</i>\n Your project was not loaded!", parent=self.view.get_toplevel(), reraise=False): self.model.current_project = dialog.parser.parse(dialog.filename) self.model.current_project.parent = self.model # Update the title self.update_title()
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to save to '%s'." % os.path.basename( filename) with DialogFactory.error_dialog_handler( message, parent=self.view.get_toplevel(), reraise=False): line.save_data(parser, filename, **self.model.get_export_meta_data())
def on_accept(dialog): # Try to load the project: with DialogFactory.error_dialog_handler( "An error has occurred:\n<i>{0}</i>\n Your project was not loaded!", parent=self.view.get_toplevel(), title="Parsing error", reraise=False): self.model.current_project = dialog.parser.parse(dialog.filename) self.model.current_project.parent = self.model self.model.update_project_last_save_hash() # Update the title self.update_title()
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to parse '%s'.\n" % os.path.basename( filename) message += "This is most likely caused by an invalid or unsupported file format." with DialogFactory.error_dialog_handler( message, parent=self.view.get_toplevel(), reraise=False): self.model.experimental_pattern.load_data(parser, filename, clear=True)
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to save '%s'.\n" % os.path.basename( filename) message += "Contact the developer about this!" with DialogFactory.error_dialog_handler( message, parent=self.view.get_toplevel(), reraise=False): header = "%s, %s" % ("Wavelength", "Factor") self.model.wavelength_distribution.save_data(parser, filename, header=header)
def _save_project(self, filename=None): # Set the filename to the current location if None or "" was given: filename = filename or self.model.current_filename # Try to save the project: with DialogFactory.error_dialog_handler( "An error has occurred while saving!\n<i>{0}</i>", parent=self.view.get_toplevel(), reraise=False): JSONProjectParser.write(self.model.current_project, filename, zipped=True) self.model.current_project.filename = filename # Update the title self.update_title()
def _save_project(self, filename=None): # Set the filename to the current location if None or "" was given: filename = filename or self.model.current_filename # Try to save the project: with DialogFactory.error_dialog_handler( "An error has occurred while saving!\n<i>{0}</i>", parent=self.view.get_toplevel(), reraise=False): JSONProjectParser.write(self.model.current_project, filename, zipped=True) self.model.current_project.filename = filename self.model.update_project_last_save_hash() # Update the title self.update_title()
def load_specimens(stop=None): for filename in filenames: if stop is not None and stop.is_set(): return # Error message is case parsing fails: message = "An unexpected error has occurred when trying to parse %s:\n\n<i>" % os.path.basename(filename) message += "%s</i>\n\n" message += "This is most likely caused by an invalid or unsupported file format." # Run & report any errors: with DialogFactory.error_dialog_handler( message, self.view.get_top_widget(), title="Failed to load file", reraise=False): specimens = Specimen.from_experimental_data(filename=filename, parent=self.model, parser=parser) status_dict["specimens"] += specimens status_dict["current_file"] += 1
def on_refine_clicked(self, event): with self.model.mixture.needs_update.hold(): with self.model.mixture.data_changed.hold(): if len(self.model.mixture.specimens) > 0: # Create the refiner object with DialogFactory.error_dialog_handler( "There was an error when creating the refinement setup:\n{}", parent=self.view.get_toplevel(), reraise=False): refiner = self.model.get_refiner() # Setup results controller self.results_view = RefinerView( parent=self.view.parent) self.results_controller = RefinerController( refiner=refiner, model=self.model, view=self.results_view, parent=self) # Gtk timeout loop for our GUI updating: gui_timeout_id = self._launch_gui_updater(refiner) # This creates a thread that will run the refiner.refine method: thread = self._launch_refine_thread( refiner, gui_timeout_id) # Connect the cancel button: self._connect_cancel_button(refiner, gui_timeout_id, thread) # Show the context updates in the gui: self.view.show_refinement_info() self.view.start_spinner() else: DialogFactory.get_information_dialog( "Cannot refine an empty mixture!", parent=self.view.get_toplevel()).run()
def on_refine_clicked(self, event): with self.model.mixture.needs_update.hold(): with self.model.mixture.data_changed.hold(): if len(self.model.mixture.specimens) > 0: # Create the refiner object with DialogFactory.error_dialog_handler( "There was an error when creating the refinement setup:\n{}", parent=self.view.get_toplevel(), reraise=False): refiner = self.model.get_refiner() # Setup results controller self.results_view = RefinerView(parent=self.view.parent) self.results_controller = RefinerController( refiner=refiner, model=self.model, view=self.results_view, parent=self ) # Gtk timeout loop for our GUI updating: gui_timeout_id = self._launch_gui_updater(refiner) # This creates a thread that will run the refiner.refine method: thread = self._launch_refine_thread(refiner, gui_timeout_id) # Connect the cancel button: self._connect_cancel_button(refiner, gui_timeout_id, thread) # Show the context updates in the gui: self.view.show_refinement_info() self.view.start_spinner() else: DialogFactory.get_information_dialog( "Cannot refine an empty mixture!", parent=self.view.get_toplevel() ).run()
def on_accept(dialog): filename = dialog.filename parser = dialog.parser message = "An unexpected error has occurred when trying to save to '%s'." % os.path.basename(filename) with DialogFactory.error_dialog_handler(message, parent=self.view.get_toplevel(), reraise=False): line.save_data(parser, filename, **self.model.get_export_meta_data())