Exemplo n.º 1
0
 def __init__(self, settings, database, project=None):
     super(PlotsMath, self).__init__()
     self.ui = Ui_PlotsMath()
     self.ui.setupUi(self)
     self.settings = settings
     self.project=project
     self.plot = QtCommons.nestWidget(self.ui.plot, QMathPlotWidget())
     self.reference_dialog = ReferenceSpectraDialog(database)
     self.reference_dialog.fits_picked.connect(self.open_fits)
     self.toolbar = QToolBar('Instrument Response Toolbar')
     open_btn = QtCommons.addToolbarPopup(self.toolbar, text="Open...", icon_file=':/new_open_20')
     open_file_action = open_btn.menu().addAction('FITS file')
     open_btn.menu().addAction('Reference library', self.reference_dialog.show)
     self.blackbody_menu = blackbody.BlackBodyAction(self.blackbody, open_btn.menu())
     
     if project:
         save_result = QtCommons.addToolbarPopup(self.toolbar, text='Save', icon_file=':/save_20')
         save_result.menu().addAction('As File', lambda: QtCommons.save_file('Save Operation Result...', FITS_EXTS, lambda f: self.save(f[0]), project.path))
         save_result.menu().addAction('As Instrument Response', self.save_project_instrument_response)
         open_file_action.triggered.connect(lambda: QtCommons.open_file('Open FITS Spectrum',FITS_EXTS, lambda f: self.open_fits(f[0]), project.path))
     else:
         open_file_action.triggered.connect(lambda: open_file_sticky('Open FITS Spectrum',FITS_EXTS, lambda f: self.open_fits(f[0]), self.settings, CALIBRATED_PROFILE, [RAW_PROFILE]))
         self.toolbar.addAction(QIcon(':/save_20'), 'Save', lambda: save_file_sticky('Save Operation Result...', 'FITS file (.fit)', lambda f: self.save(f[0]), self.settings, MATH_OPERATION, [CALIBRATED_PROFILE]))
         
     self.toolbar.addAction('Set operand', self.set_operand)
     self.toolbar.addSeparator()
     self.toolbar.addAction(self.ui.actionZoom)
     self.ui.actionZoom.triggered.connect(self.start_zoom)
     self.toolbar.addAction(self.ui.actionReset_Zoom)
     self.ui.actionReset_Zoom.triggered.connect(self.reset_zoom)
     self.toolbar.addSeparator()
     self.operands_model = QStandardItemModel()
     self.ui.operands_listview.setModel(self.operands_model)
     remove_btn = QtCommons.addToolbarPopup(self.toolbar, text='Remove...')
     remove_btn.menu().addAction(self.ui.actionSelectPointsToRemove)
     remove_btn.menu().addAction("Before point", lambda: spectrum_trim_dialog(self.spectrum, 'before', self.plot.axes, lambda: self.draw(), self, before_removal=self.undo.save_undo))
     remove_btn.menu().addAction("After point", lambda: spectrum_trim_dialog(self.spectrum, 'after', self.plot.axes, lambda: self.draw(), self, before_removal=self.undo.save_undo))
     self.ui.clear_operands.clicked.connect(self.operands_model.clear)
     self.ui.remove_operand.clicked.connect(lambda: self.operands_model.removeRows(self.ui.operands_listview.selectionModel().selectedRows()[0].row(), 1))
         
     self.operands_model.rowsInserted.connect(lambda: self.ui.clear_operands.setEnabled(self.operands_model.rowCount() > 0) )
     self.operands_model.rowsRemoved.connect(lambda: self.ui.clear_operands.setEnabled(self.operands_model.rowCount() > 0) )
     self.ui.operands_listview.selectionModel().selectionChanged.connect(lambda s, u: self.ui.remove_operand.setEnabled(len(s)))
     self.ui.actionSelectPointsToRemove.triggered.connect(self.pick_rm_points)
     self.undo = Undo(None, self.draw)
     self.undo.add_actions(self.toolbar)
     self.ui.spline_factor.valueChanged.connect(self.factor_valueChanged)
     self.ui.spline_degrees.valueChanged.connect(lambda v: self.draw())
     self.ui.spline_factor_auto.toggled.connect(lambda v: self.draw())
     self.ui.spline_factor_auto.toggled.connect(lambda v: self.ui.spline_factor.setEnabled(not v))
     self.ui.execute.clicked.connect(self.execute_operation)
     self.plot.figure.tight_layout()
Exemplo n.º 2
0
 def __init__(self):
     # Default size
     self._width = _WORLD_WIDTH
     self._height = _WORLD_HEIGHT
     self._depth = _WORLD_DEPTH
     # Our undo buffer
     self._undo = Undo()
     # Init data
     self._initialise_data()
     # Callback when our data changes
     self.notify_changed = None
     # Ambient occlusion type effect
     self._occlusion = True
Exemplo n.º 3
0
    def __init__(self, fits_file, settings, database, project=None):
        super(FinishSpectrum, self).__init__()
        self.settings = settings
        self.ui = Ui_FinishSpectrum()
        self.ui.setupUi(self)
        self.profile_line = None
        self.project = project
        self.fits_spectrum = FitsSpectrum(fits_file)
        self.undo = Undo(self.fits_spectrum.spectrum, self.draw)
        try:
            fits_file.index_of('ORIGINAL_DATA')
        except KeyError:
            hdu = fits.ImageHDU(data=fits_file[0].data,
                                header=fits_file[0].header,
                                name='ORIGINAL_DATA')
            fits_file.append(hdu)

        self.fits_spectrum.spectrum.normalize_to_max()
        self.spectrum = self.fits_spectrum.spectrum
        self.spectrum_plot = QtCommons.nestWidget(self.ui.plot,
                                                  QMathPlotWidget())
        self.spectrum_plot.mouse_moved.connect(
            Instances.MainWindow.print_coordinates)

        self.split_view()
        self.toolbar = QToolBar('Finish Spectrum Toolbar')
        if project:
            instrument_response_action = QtCommons.addToolbarPopup(
                self.toolbar, "Instrument Response")
            instrument_response_action.menu().addAction(
                'From FITS file...', lambda: open_file_sticky(
                    'Open Instrument Response Profile', FITS_EXTS, lambda f:
                    self.instrument_response(f[
                        0]), settings, MATH_OPERATION, [RAW_PROFILE]))
            for instrument_response in project.get_instrument_responses():
                print("Adding instrument response {}".format(
                    instrument_response))
                instrument_response_action.menu().addAction(
                    os.path.basename(instrument_response[1]),
                    lambda: self.instrument_response(instrument_response[1]))
        else:
            self.toolbar.addAction(
                'Instrument Response', lambda: open_file_sticky(
                    'Open Instrument Response Profile', FITS_EXTS, lambda f:
                    self.instrument_response(f[
                        0]), settings, MATH_OPERATION, [RAW_PROFILE]))
        self.toolbar.addAction(
            "Zoom",
            lambda: self.spectrum_plot.select_zoom(self.profile_plot.axes))
        self.toolbar.addAction(
            "Reset Zoom", lambda: self.spectrum_plot.reset_zoom(
                self.spectrum.wavelengths, self.spectrum.fluxes.min(),
                self.spectrum.fluxes.max(), self.profile_plot.axes))
        remove_action = QtCommons.addToolbarPopup(self.toolbar, "Remove")
        remove_action.menu().addAction(
            "Before point",
            lambda: spectrum_trim_dialog(self.spectrum,
                                         'before',
                                         self.profile_plot.axes,
                                         lambda: self.draw(),
                                         self,
                                         before_removal=self.undo.save_undo))
        remove_action.menu().addAction(
            "After point",
            lambda: spectrum_trim_dialog(self.spectrum,
                                         'after',
                                         self.profile_plot.axes,
                                         lambda: self.draw(),
                                         self,
                                         before_removal=self.undo.save_undo))
        self.undo.add_actions(self.toolbar)
        self.toolbar.addSeparator()

        self.reference_spectra_dialog = ReferenceSpectraDialog(
            database, self.fits_spectrum.spectrum)
        self.reference_spectra_dialog.setup_menu(self.toolbar,
                                                 self.profile_plot.axes,
                                                 settings)

        lines_menu = QtCommons.addToolbarPopup(self.toolbar,
                                               "Spectral Lines..")
        lines_menu.menu().addAction('Lines Database',
                                    lambda: self.lines_dialog.show())
        lines_menu.menu().addAction('Custom line', self.add_custom_line)
        labels_action = QtCommons.addToolbarPopup(self.toolbar, "Labels..")
        self.object_properties = ObjectProperties(fits_file, project=project)
        labels_action.menu().addAction('Title', self.add_title)
        if self.object_properties:
            labels_action.menu().addAction('Information from FITS file',
                                           self.add_fits_information_label)
        labels_action.menu().addAction('Custom', self.add_label)

        self.object_properties_dialog = ObjectPropertiesDialog(
            settings, self.object_properties)
        self.toolbar.addAction("Object properties",
                               self.object_properties_dialog.show)

        self.labels, self.lines = [], []
        for label in self.fits_spectrum.labels():
            self.add_label(text=label['text'],
                           coords=label['coords'],
                           type=label['type'],
                           fontsize=label['fontsize'])

        self.toolbar.addSeparator()
        if project:
            self.toolbar.addAction(
                QIcon(':/image_20'), "Export Image...",
                lambda: QtCommons.save_file(
                    'Export plot to image',
                    'PNG (*.png);;PDF (*.pdf);;PostScript (*.ps);;SVG (*.svg)',
                    lambda f: self.save_image(f[0]),
                    project.directory_path(Project.EXPORTED_IMAGES)))
            self.toolbar.addAction(QIcon(':/save_20'), 'Save',
                                   self.save_finished_in_project)
        else:
            self.toolbar.addAction(
                QIcon(':/image_20'), "Export Image...",
                lambda: save_file_sticky(
                    'Export plot to image',
                    'PNG (*.png);;PDF (*.pdf);;PostScript (*.ps);;SVG (*.svg)',
                    lambda f: self.save_image(f[0]), self.settings,
                    EXPORT_IMAGES, [CALIBRATED_PROFILE]))
            self.toolbar.addAction(
                QIcon(':/save_20'), 'Save', lambda: save_file_sticky(
                    'Save plot...', 'FITS file (.fit)', lambda f: self.__save(
                        f[0]), self.settings, CALIBRATED_PROFILE))

        self.lines_dialog = LinesDialog(database, settings, self.spectrum_plot,
                                        self.profile_plot.axes)
        self.lines_dialog.lines.connect(self.add_lines)
        for line in self.fits_spectrum.lines_labels():
            self.lines.append(
                ReferenceLine(line['text'],
                              line['wavelength'],
                              self.profile_plot.axes,
                              lambda line: self.lines.remove(line),
                              show_wavelength=line['display_wavelength'],
                              fontsize=line['fontsize'],
                              position=line['position']))