Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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()
Ejemplo n.º 6
0
 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())
Ejemplo n.º 7
0
 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()
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
    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()
Ejemplo n.º 11
0
    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()
Ejemplo n.º 12
0
 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
Ejemplo n.º 13
0
    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()
Ejemplo n.º 14
0
    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()
Ejemplo n.º 15
0
 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())