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()
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
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']))