1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
import numpy as np
from glue.core.component_id import ComponentID
from glue.core.data import BaseCartesianData
from glue.utils import view_shape
class RandomData(BaseCartesianData):
def __init__(self):
super(RandomData, self).__init__()
self.data_cid = ComponentID(label='data', parent=self)
@property
def label(self):
return "Random Data"
@property
def shape(self):
return (512, 512, 512)
@property
def main_components(self):
return [self.data_cid]
def get_kind(self, cid):
return 'numerical'
def get_data(self, cid, view=None):
if cid in self.pixel_component_ids:
return super(RandomData, self).get_data(cid, view=view)
else:
return np.random.random(view_shape(self.shape, view))
def get_mask(self, subset_state, view=None):
return subset_state.to_mask(self, view=view)
def compute_statistic(self, statistic, cid,
axis=None, finite=True,
positive=False, subset_state=None,
percentile=None, random_subset=None):
if axis is None:
if statistic == 'minimum':
return 0
elif statistic == 'maximum':
if cid in self.pixel_component_ids:
return self.shape[cid.axis]
else:
return 1
elif statistic == 'mean' or statistic == 'median':
return 0.5
elif statistic == 'percentile':
return percentile / 100
elif statistic == 'sum':
return self.size / 2
else:
final_shape = tuple(self.shape[i] for i in range(self.ndim)
if i not in axis)
return np.random.random(final_shape)
def compute_histogram(self, cid,
range=None, bins=None, log=False,
subset_state=None, subset_group=None):
return np.random.random(bins) * 100
# We now create a data object using the above class,
# and launch a a glue session
from glue.core import DataCollection
from glue.app.qt.application import GlueApplication
d = RandomData()
dc = DataCollection([d])
ga = GlueApplication(dc)
ga.start()
|