Skip to content

Instantly share code, notes, and snippets.

@astrofrog
Created March 6, 2019 11:51
Show Gist options
  • Select an option

  • Save astrofrog/c70b65f62db38f23dda576ca6d7b83b5 to your computer and use it in GitHub Desktop.

Select an option

Save astrofrog/c70b65f62db38f23dda576ca6d7b83b5 to your computer and use it in GitHub Desktop.
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