Esempio n. 1
0
    def apply_roi(self, roi):
        # every editable subset is updated
        # using specified ROI

        if isinstance(roi, RangeROI):
            lo, hi = roi.range()
            att = self.xatt if roi.ori == 'x' else self.yatt
            if self._check_categorical(att):
                comp = list(self._get_data_components(roi.ori))
                if comp:
                    subset_state = CategoricalRoiSubsetState.from_range(comp[0], att, lo, hi)
                else:
                    subset_state = None
            else:
                subset_state = RangeSubsetState(lo, hi, att)
        else:
            if self._check_categorical(self.xatt) or self._check_categorical(self.yatt):
                subset_state = self._process_categorical_roi(roi)
            else:
                subset_state = RoiSubsetState()
                subset_state.xatt = self.xatt
                subset_state.yatt = self.yatt
                x, y = roi.to_polygon()
                subset_state.roi = PolygonalROI(x, y)

        mode = EditSubsetMode()
        visible = [d for d in self._data if self.is_visible(d)]
        focus = visible[0] if len(visible) > 0 else None
        mode.update(self._data, subset_state, focus_data=focus)
Esempio n. 2
0
    def apply_roi(self, roi):
        x, _ = roi.to_polygon()
        lo = min(x)
        hi = max(x)

        # expand roi to match bin edges
        bins = self.bins

        if lo >= bins.min():
            lo = bins[bins <= lo].max()
        if hi <= bins.max():
            hi = bins[bins >= hi].min()

        if self.xlog:
            lo = 10 ** lo
            hi = 10 ** hi

        comp = list(self._get_data_components('x'))
        if comp:
            comp = comp[0]
            if comp.categorical:
                state = CategoricalRoiSubsetState.from_range(comp, self.component,
                                                             lo, hi)
            else:
                state = RangeSubsetState(lo, hi)
                state.att = self.component
            mode = EditSubsetMode()
            visible = [d for d in self.data if self.is_layer_visible(d)]
            focus = visible[0] if len(visible) > 0 else None
            mode.update(self.data, state, focus_data=focus)
Esempio n. 3
0
    def _process_categorical_roi(self, roi):
        """ Returns a RoiSubsetState object.
        """

        if isinstance(roi, RectangularROI):
            subsets = []
            axes = [('x', roi.xmin, roi.xmax),
                    ('y', roi.ymin, roi.ymax)]

            for coord, lo, hi in axes:
                comp = list(self._get_data_components(coord))
                if comp:
                    if comp[0].categorical:
                        subset = CategoricalRoiSubsetState.from_range(comp[0], self._get_attribute(coord), lo, hi)
                    else:
                        subset = RangeSubsetState(lo, hi, self._get_attribute(coord))
                else:
                    subset = None
                subsets.append(subset)
        else:
            raise AssertionError
        return AndState(*subsets)