def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. try: self.signal_handler = parent.signal_handler except AttributeError: self.signal_handler = self self.signal_handler.signal_new_data.connect(self._draw) self.signal_handler.signal_viewport_change.connect( self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range)
def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) # Connect us up to the signal handler. self.signals = samp.SAMPIntegratedClient(name=self.__class__.__name__, description='Spectrum Viewer') try: self.signals.connect(hub=parent.hub) except AttributeError: self.signals.connect() self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: and Matplotlib # events. First hadnle Qt events. self.signals.bind_receive_notification('samp.app.new_data', self._draw) self.signals.bind_receive_notification('samp.app.viewport_change', self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range)
def __init__(self, parent=None): super(SpectrumView, self).__init__(parent=parent) self.spectra = SpectrumDataStore() self.spectra_model = SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. self.signals = getattr(parent, 'signals', Signals(signal_class=Signal)) self.signals.ModelAdded.connect(self._draw) self.signals.ModelRemoved.connect(self._draw) self.signals.ModelRefresh.connect(self._refresh) self.signals.ViewportChange.connect(self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range)
def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. try: self.signal_handler = parent.signal_handler except AttributeError: self.signal_handler = self self.signal_handler.signal_new_data.connect(self._draw) self.signal_handler.signal_viewport_change.connect(self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range)
class SpectrumView(QWidget): '''Spectrum viewer. ''' signal_new_data = pyqtSignal() signal_viewport_change = pyqtSignal() def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. try: self.signal_handler = parent.signal_handler except AttributeError: self.signal_handler = self self.signal_handler.signal_new_data.connect(self._draw) self.signal_handler.signal_viewport_change.connect( self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range) def add_spectrum(self, spectrum): self.spectra.append(spectrum) self.spectra_model.appendRow(spectrum) self.signal_handler.signal_new_data.emit() def _mpl_event(self, event): logging.debug('_mpl_event: entered.') logging.debug('_mpl_event: Event name = "{}"'.format(event.name)) def _draw(self): logging.debug('_draw: entered') for spectrum in self.spectra: flux = np.asarray(spectrum.data) self.axes.plot(flux) self.ui.plotView.canvas.draw() def _change_data_range(self, axes): logging.debug('_change_data_range: entered') logging.debug('Axes: {}'.format(id(axes))) self.signal_handler.signal_viewport_change.emit(self, axes) def _viewport_change(self, viewer, axes): logging.debug('_viewport_change: entered.') logging.debug('_viewport_change: viewer is "{}"'.format(viewer)) logging.debug('_viewport_change: Sent from myself is "{}"'.format( viewer == self)) logging.debug('_viewport_change: Axes is "{}"'.format(axes)) if viewer != self: logging.debug('_viewport_change: resetting limits.') limits_new = viewer.axes.get_xlim() if limits_new != self.axes.get_xlim(): self.axes.set_xlim(limits_new) limits_new = viewer.axes.get_ylim() if limits_new != self.axes.get_ylim(): self.axes.set_ylim(limits_new) self.ui.plotView.canvas.draw()
class SpectrumView(QWidget): '''Spectrum viewer. ''' signal_new_data = pyqtSignal() signal_viewport_change = pyqtSignal() def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. try: self.signal_handler = parent.signal_handler except AttributeError: self.signal_handler = self self.signal_handler.signal_new_data.connect(self._draw) self.signal_handler.signal_viewport_change.connect(self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range) def add_spectrum(self, spectrum): self.spectra.append(spectrum) self.spectra_model.appendRow(spectrum) self.signal_handler.signal_new_data.emit() def _mpl_event(self, event): logging.debug('_mpl_event: entered.') logging.debug('_mpl_event: Event name = "{}"'.format(event.name)) def _draw(self): logging.debug('_draw: entered') for spectrum in self.spectra: flux = np.asarray(spectrum.data) self.axes.plot(flux) self.ui.plotView.canvas.draw() def _change_data_range(self, axes): logging.debug('_change_data_range: entered') logging.debug('Axes: {}'.format(id(axes))) self.signal_handler.signal_viewport_change.emit(self, axes) def _viewport_change(self, viewer, axes): logging.debug('_viewport_change: entered.') logging.debug('_viewport_change: viewer is "{}"'.format(viewer)) logging.debug('_viewport_change: Sent from myself is "{}"'.format(viewer == self)) logging.debug('_viewport_change: Axes is "{}"'.format(axes)) if viewer != self: logging.debug('_viewport_change: resetting limits.') limits_new = viewer.axes.get_xlim() if limits_new != self.axes.get_xlim(): self.axes.set_xlim(limits_new) limits_new = viewer.axes.get_ylim() if limits_new != self.axes.get_ylim(): self.axes.set_ylim(limits_new) self.ui.plotView.canvas.draw()
class SpectrumView(QWidget): '''Spectrum viewer. ''' def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) # Connect us up to the signal handler. self.signals = samp.SAMPIntegratedClient(name=self.__class__.__name__, description='Spectrum Viewer') try: self.signals.connect(hub=parent.hub) except AttributeError: self.signals.connect() self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: and Matplotlib # events. First hadnle Qt events. self.signals.bind_receive_notification('samp.app.new_data', self._draw) self.signals.bind_receive_notification('samp.app.viewport_change', self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range) def add_spectrum(self, spectrum): self.spectra.append(spectrum) self.spectra_model.appendRow(spectrum) self.signals.enotify_all('samp.app.new_data') def _mpl_event(self, event): msg_debug('entered.') msg_debug('Event name = "{}"'.format(event.name)) def _draw(self, *args): msg_debug('entered') for spectrum in self.spectra: flux = np.asarray(spectrum.data) self.axes.plot(flux) self.ui.plotView.canvas.draw() def _change_data_range(self, axes): msg_debug('entered') msg_debug('Axes: {}'.format(id(axes))) xlim_low, xlim_high = axes.get_xlim() ylim_low, ylim_high = axes.get_ylim() self.signals.enotify_all('samp.app.viewport_change', xlim_low=str(xlim_low), xlim_high=str(xlim_high), ylim_low=str(ylim_low), ylim_high=str(ylim_high)) def _viewport_change(self, private_key, sender_id, msg_id, mtype, params, extra): msg_debug('entered.') msg_debug('msg info: {} {} {} {} {} {}'.format(private_key, sender_id, msg_id, mtype, params, extra)) msg_debug('my id is "{}"'.format(self.signals.get_public_id())) xlim_new = (float(params['xlim_low']), float(params['xlim_high'])) ylim_new = (float(params['ylim_low']), float(params['ylim_high'])) if sender_id != self.signals.get_public_id(): try: msg_debug('resetting limits.') changed = False xlim_old = self.axes.get_xlim() ylim_old = self.axes.get_ylim() msg_debug('xlim_old = "{}", xlim_new = "{}"'.format( xlim_old, xlim_new)) msg_debug('ylim_old = "{}", ylim_new = "{}"'.format( ylim_old, ylim_new)) if xlim_new != xlim_old: changed = True self.axes.set_xlim(xlim_new) if ylim_new != ylim_old: changed = True self.axes.set_ylim(ylim_new) if changed: self.ui.plotView.canvas.draw() except Exception as e: msg_debug('Exception: {}'.format(sys.exec_info())) finally: msg_debug('finally.') return msg_debug('exiting.')
class SpectrumView(QWidget): '''Spectrum viewer. ''' def __init__(self, parent=None): super(SpectrumView, self).__init__(parent=parent) self.spectra = SpectrumDataStore() self.spectra_model = SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: Qt events and Matplotlib # events. First hadnle Qt events. self.signals = getattr(parent, 'signals', Signals(signal_class=Signal)) self.signals.ModelAdded.connect(self._draw) self.signals.ModelRemoved.connect(self._draw) self.signals.ModelRefresh.connect(self._refresh) self.signals.ViewportChange.connect(self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range) def add_spectrum(self, spectrum): spectrum_store = self.spectra.add(spectrum) spectrum_store['plot_state'] = PlotState() self.spectra_model.add(spectrum) self.signals.ModelAdded() def remove_spectrum(self, name): self.axes.lines.remove(self.spectra[name]['plot_state'].line) self.spectra_model.remove(name) del self.spectra[name] self.signals.ModelRemoved() def add_model(self, model, name, *args, **kwargs): '''Add an astropy model''' if kwargs.get('wcs', None) is None: xlow, xhigh = self.axes.get_xlim() kwargs['wcs'] = np.arange(xlow, xhigh, (xhigh - xlow) / 100.0) spectrum = Model2Spectrum(model, name=name, *args, **kwargs) self.add_spectrum(spectrum) def remove_model(self, name): self.remove_spectrum(name) def _mpl_event(self, event): msg_debug('entered.') msg_debug('Event name = "{}"'.format(event.name)) def _refresh(self): '''Reset plot''' for name, spectrum in six.iteritems(self.spectra): try: spectrum['plot_state'].invalidate() except KeyError: spectrum['plot_state'] = PlotState() self._draw() def _draw(self): msg_debug('entered') for name, spectrum in six.iteritems(self.spectra): nddata = spectrum['spectrum'] flux = np.asarray(nddata.data) wcs_array = getattr(nddata, 'wcs', None) if wcs_array is None: wcs_array = range(len(flux)) try: plot_state = spectrum['plot_state'] except KeyError: spectrum['plot_state'] = PlotState() plot_state = spectrum['plot_state'] if not plot_state.isvalid: if plot_state.line: self.axes.lines.remove(plot_state.line) plot_state.line = self.axes.plot(wcs_array, flux)[0] plot_state.validate() self.ui.plotView.canvas.draw() def _change_data_range(self, axes): msg_debug('entered') msg_debug('Axes: {}'.format(id(axes))) self.signals.ViewportChange(self, axes) def _viewport_change(self, viewer, axes): msg_debug('entered.') msg_debug('viewer is "{}"'.format(viewer)) msg_debug('Sent from myself is "{}"'.format(viewer == self)) msg_debug('Axes is "{}"'.format(axes)) if viewer != self: msg_debug('resetting limits.') limits_new = viewer.axes.get_xlim() if limits_new != self.axes.get_xlim(): self.axes.set_xlim(limits_new) limits_new = viewer.axes.get_ylim() if limits_new != self.axes.get_ylim(): self.axes.set_ylim(limits_new) self.ui.plotView.canvas.draw()
class SpectrumView(QWidget): '''Spectrum viewer. ''' def __init__(self, parent=None): super(SpectrumView, self).__init__(parent) # Connect us up to the signal handler. self.signals = samp.SAMPIntegratedClient(name=self.__class__.__name__, description='Spectrum Viewer') try: self.signals.connect(hub=parent.hub) except AttributeError: self.signals.connect() self.spectra = sd.SpectrumDataStore() self.spectra_model = sd.SpectrumDataModel(self.spectra) self.ui = Ui_mainView() self.ui.setupUi(self) # Initialize the plotting self.axes = self.ui.plotView.figure.add_subplot(111) # Initialize the spectrum manager. self.ui.spectraListView.setModel(self.spectra_model) # There are two sets of events that need to # be watched for: and Matplotlib # events. First hadnle Qt events. self.signals.bind_receive_notification('samp.app.new_data', self._draw) self.signals.bind_receive_notification('samp.app.viewport_change', self._viewport_change) # Handle matplotlib events #self.register_callbacks() self.axes.callbacks.connect('xlim_changed', self._change_data_range) self.axes.callbacks.connect('ylim_changed', self._change_data_range) def add_spectrum(self, spectrum): self.spectra.append(spectrum) self.spectra_model.appendRow(spectrum) self.signals.enotify_all('samp.app.new_data') def _mpl_event(self, event): msg_debug('entered.') msg_debug('Event name = "{}"'.format(event.name)) def _draw(self, *args): msg_debug('entered') for spectrum in self.spectra: flux = np.asarray(spectrum.data) self.axes.plot(flux) self.ui.plotView.canvas.draw() def _change_data_range(self, axes): msg_debug('entered') msg_debug('Axes: {}'.format(id(axes))) xlim_low, xlim_high = axes.get_xlim() ylim_low, ylim_high = axes.get_ylim() self.signals.enotify_all('samp.app.viewport_change', xlim_low=str(xlim_low), xlim_high=str(xlim_high), ylim_low=str(ylim_low), ylim_high=str(ylim_high)) def _viewport_change(self, private_key, sender_id, msg_id, mtype, params, extra): msg_debug('entered.') msg_debug('msg info: {} {} {} {} {} {}'.format(private_key, sender_id, msg_id, mtype, params, extra)) msg_debug('my id is "{}"'.format(self.signals.get_public_id())) xlim_new = (float(params['xlim_low']), float(params['xlim_high'])) ylim_new = (float(params['ylim_low']), float(params['ylim_high'])) if sender_id != self.signals.get_public_id(): try: msg_debug('resetting limits.') changed = False xlim_old = self.axes.get_xlim() ylim_old = self.axes.get_ylim() msg_debug('xlim_old = "{}", xlim_new = "{}"'.format(xlim_old, xlim_new)) msg_debug('ylim_old = "{}", ylim_new = "{}"'.format(ylim_old, ylim_new)) if xlim_new != xlim_old: changed = True self.axes.set_xlim(xlim_new) if ylim_new != ylim_old: changed = True self.axes.set_ylim(ylim_new) if changed: self.ui.plotView.canvas.draw() except Exception as e: msg_debug('Exception: {}'.format(sys.exec_info())) finally: msg_debug('finally.') return msg_debug('exiting.')