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