Created
March 6, 2019 11:51
-
-
Save astrofrog/c70b65f62db38f23dda576ca6d7b83b5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from glue.core.data import BaseCartesianData | |
| from glue.core.message import NumericalDataChangedMessage | |
| class IndexedData(BaseCartesianData): | |
| """ | |
| A dataset where some dimensions have been removed via indexing. | |
| """ | |
| def __init__(self, original_data, indices): | |
| super(IndexedData, self).__init__() | |
| self.original_data = original_data | |
| self._indices = indices | |
| @property | |
| def indices(self): | |
| return self._indices | |
| @indices.setter | |
| def indices(self, value): | |
| self._indices = value | |
| if self.hub is not None: | |
| msg = NumericalDataChangedMessage(self) | |
| self.hub.broadcast(msg) | |
| @property | |
| def label(self): | |
| return "Indexed Data" | |
| @property | |
| def shape(self): | |
| shape = [] | |
| for idim in range(self.original_data.ndim): | |
| if self.indices[idim] is None: | |
| shape.append(self.original_data.shape[idim]) | |
| return shape | |
| @property | |
| def main_components(self): | |
| return self.original_data.main_components | |
| def get_kind(self, cid): | |
| return self.original_data.get_kind(cid) | |
| def _to_original_view(self, view): | |
| original_view = list(self.indices) | |
| idim_reduced = 0 | |
| for idim in range(self.original_data.ndim): | |
| if original_view[idim] is None: | |
| if view is None: | |
| original_view[idim] = slice(None) | |
| else: | |
| original_view[idim] = view[idim_reduced] | |
| idim_reduced += 1 | |
| return original_view | |
| def get_data(self, cid, view=None): | |
| original_view = self._to_original_view(view) | |
| return self.original_data.get_data(cid, view=original_view) | |
| def get_mask(self, subset_state, view=None): | |
| original_view = self._to_original_view(view) | |
| return self.original_data.get_mask(subset_state, view=original_view) | |
| def compute_fixed_resolution_buffer(self, *args, **kwargs): | |
| from glue.core.fixed_resolution_buffer import compute_fixed_resolution_buffer | |
| return compute_fixed_resolution_buffer(self, *args, **kwargs) | |
| # The following aren't correct yet | |
| def compute_statistic(self, *args, **kwargs): | |
| return self.original_data.compute_statistic(*args, **kwargs) | |
| def compute_histogram(self, *args, **kwargs): | |
| return self.original_data.compute_histogram(*args, **kwargs) | |
| if __name__ == "__main__": | |
| # We now create a data object using the above class, | |
| # and launch a a glue session | |
| import numpy as np | |
| from glue.core import DataCollection | |
| from glue.core.data_factories import load_data | |
| from glue.app.qt.application import GlueApplication | |
| from glue.viewers.image.qt import ImageViewer | |
| data1 = load_data('/Users/tom/Data/PPV/l1448_13co_small.fits') | |
| data2 = IndexedData(data1, (None, 10, None)) | |
| dc = DataCollection([data1, data2]) | |
| ga = GlueApplication(dc) | |
| ga.new_data_viewer(ImageViewer, data=data1) | |
| ga.new_data_viewer(ImageViewer, data=data2) | |
| ga.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment