def _on_collapse(self): if self.rng_mode.state.x_min is None or self.rng_mode.state.x_max is None: return func = self.collapse_function x_range = self.rng_mode.state.x_range for data in self._visible_data(): pix_cid = is_convertible_to_single_pixel_cid(data, self.viewer.state.x_att_pixel) for viewer in self._viewers_with_data_slice(data, pix_cid): slices = list(viewer.state.slices) # TODO: don't need to fetch axis twice axis, imin = self._get_axis_and_pixel_slice(data, x_range[0]) axis, imax = self._get_axis_and_pixel_slice(data, x_range[1]) current_slice = slices[axis] if isinstance(current_slice, AggregateSlice): current_slice = current_slice.center imin, imax = min(imin, imax), max(imin, imax) slices[axis] = AggregateSlice(slice(imin, imax), current_slice, func) viewer.state.slices = tuple(slices)
def _aggregate(self): func = self.aggregator rng = list(self.grip.range) rng = Extractor.world2pixel(self.data, self.profile_axis, rng) rng[1] += 1 slices = list(self.viewer_state.slices) current_slice = slices[self.profile_axis] if isinstance(current_slice, AggregateSlice): current_slice = current_slice.center slices[self.profile_axis] = AggregateSlice(slice(*rng), current_slice, func) self.viewer_state.slices = tuple(slices) # Save a local copy of the collapsed array for layer_state in self.viewer_state.layers: if layer_state.layer is self.viewer_state.reference_data: break else: raise Exception( "Couldn't find layer corresponding to reference data") self._agg = layer_state.get_sliced_data()
def test_save_aggregate_slice(self, tmpdir): # Regression test to make sure that image viewers that include # aggregate slice objects in the slices can be saved/restored self.viewer.add_data(self.hypercube) self.viewer.state.slices = AggregateSlice(slice(1, 3), 10, np.sum), 3, 0, 0 filename = tmpdir.join('session.glu').strpath self.application.save_session(filename) self.application.close() app2 = GlueApplication.restore_session(filename) viewer_state = app2.viewers[0][0].state slices = viewer_state.slices assert isinstance(slices[0], AggregateSlice) assert slices[0].slice == slice(1, 3) assert slices[0].center == 10 assert slices[0].function is np.sum assert slices[1:] == (3, 0, 0) app2.close()