Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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()