Esempio n. 1
0
 def create_rectangle(proto_bits, pulse_len=100):
     """
     :type proto_bits: list of str
     """
     ones = np.ones(pulse_len, dtype=np.float32) * 1
     zeros = np.ones(pulse_len, dtype=np.float32) * -1
     n = 0
     y = []
     for msg in proto_bits:
         for bit in msg:
             n += pulse_len
             if bit == "0":
                 y.extend(zeros)
             else:
                 y.extend(ones)
     x = np.arange(0, n).astype(np.int64)
     scene = ZoomableScene()
     scene.setSceneRect(0, -1, n, 2)
     scene.setBackgroundBrush(constants.BGCOLOR)
     scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
     if len(y) > 0:
         y = np.array(y)
     else:
         y = np.array(y).astype(np.float32)
     path = path_creator.array_to_QPath(x, y)
     scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
     return scene, n
Esempio n. 2
0
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.__plot_data = None  # type: np.ndarray
        self.line_item = self.scene.addLine(0, 0, 0, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect

        self.padding = 1.25
Esempio n. 3
0
 def create_rectangle(proto_bits, pulse_len=100):
     """
     :type proto_bits: list of str
     """
     ones = np.ones(pulse_len, dtype=np.float32) * 1
     zeros = np.ones(pulse_len, dtype=np.float32) * -1
     n = 0
     y = []
     for msg in proto_bits:
         for bit in msg:
             n += pulse_len
             if bit == "0":
                 y.extend(zeros)
             else:
                 y.extend(ones)
     x = np.arange(0, n).astype(np.int64)
     scene = ZoomableScene()
     scene.setSceneRect(0, -1, n, 2)
     scene.setBackgroundBrush(constants.BGCOLOR)
     scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
     if len(y) > 0:
         y = np.array(y)
     else:
         y = np.array(y).astype(np.float32)
     path = path_creator.array_to_QPath(x, y)
     scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
     return scene, n
Esempio n. 4
0
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.plot_data = np.array([0] * 100)
        self.line_item = self.scene.addLine(
            0, 0, 0, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        self.text_item = self.scene.addText("", QFont("Helvetica"))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect

        self.padding = 1.25
Esempio n. 5
0
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.plot_data = np.array([0] * 100)
        self.line_item = self.scene.addLine(0, 0, 0, 0, QPen(constants.AXISCOLOR,  Qt.FlatCap))
        self.text_item = self.scene.addText("",  QFont("Helvetica", 20))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect
        self.path_item = self.scene.addPath(QPainterPath(), QPen(constants.LINECOLOR,  Qt.FlatCap))
        """:type: QGraphicsPathItem """

        self.padding = 1.25
Esempio n. 6
0
 def data_scene(self) -> QGraphicsScene:
     ones = np.ones(self.samples_per_bit, dtype=np.float32) * 1
     zeros = np.ones(self.samples_per_bit, dtype=np.float32) * -1
     n = self.samples_per_bit * len(self.display_bits)
     y = []
     for bit in self.display_bits:
         if bit == "0":
             y.extend(zeros)
         elif bit == "1":
             y.extend(ones)
     x = np.arange(0, n).astype(np.int64)
     scene = ZoomableScene()
     scene.setSceneRect(0, -1, n, 2)
     scene.setBackgroundBrush(constants.BGCOLOR)
     scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
     y = np.array(y) if len(y) > 0 else np.array(y).astype(np.float32)
     path = path_creator.array_to_QPath(x, y)
     scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
     return scene
Esempio n. 7
0
 def data_scene(self) -> QGraphicsScene:
     ones = np.ones(self.samples_per_bit, dtype=np.float32) * 1
     zeros = np.ones(self.samples_per_bit, dtype=np.float32) * -1
     n = self.samples_per_bit * len(self.display_bits)
     y = []
     for bit in self.display_bits:
         if bit == "0":
             y.extend(zeros)
         elif bit == "1":
             y.extend(ones)
     x = np.arange(0, n).astype(np.int64)
     scene = ZoomableScene()
     scene.setSceneRect(0, -1, n, 2)
     scene.setBackgroundBrush(constants.BGCOLOR)
     scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
     y = np.array(y) if len(y) > 0 else np.array(y).astype(np.float32)
     path = path_creator.array_to_QPath(x, y)
     scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
     return scene
Esempio n. 8
0
class SceneManager(QObject):
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.plot_data = np.array([0] * 100)
        self.line_item = self.scene.addLine(
            0, 0, 0, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        self.text_item = self.scene.addText("", QFont("Helvetica"))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect

        self.padding = 1.25

    @property
    def num_samples(self):
        return len(self.plot_data)

    def show_scene_section(self,
                           x1: float,
                           x2: float,
                           subpath_ranges=None,
                           colors=None):
        """

        :param x1: start of section to show
        :param x2: end of section to show
        :param subpath_ranges: for coloring subpaths
        :type subpath_ranges: list of tuple
        :param colors: for coloring the subpaths
        :type color: list of QColor
        :return:
        """
        paths = path_creator.create_path(self.plot_data,
                                         start=self.__limit_value(x1),
                                         end=self.__limit_value(x2),
                                         subpath_ranges=subpath_ranges)
        self.set_path(paths, colors=colors)

    def set_path(self, paths: list, colors=None):
        self.clear_path()
        colors = [constants.LINECOLOR
                  ] * len(paths) if colors is None else colors
        assert len(paths) == len(colors)
        for path, color in zip(paths, colors):
            self.scene.addPath(
                path, QPen(color if color else constants.LINECOLOR,
                           Qt.FlatCap))

    def __limit_value(self, val: float) -> int:
        return 0 if val < 0 else self.num_samples if val > self.num_samples else int(
            val)

    def show_full_scene(self):
        self.show_scene_section(0, self.num_samples)

    def init_scene(self, apply_padding=True):
        self.set_text("")

        if self.num_samples == 0:
            return

        if math.isnan(self.minimum) or math.isnan(self.maximum):
            minimum, maximum = util.minmax(self.plot_data)
        else:
            minimum, maximum = self.minimum, self.maximum

        padding = self.padding if apply_padding else 1

        if abs(minimum) > abs(maximum):
            minimum = -padding * abs(minimum)
            maximum = -padding * minimum
        else:
            maximum = padding * abs(maximum)
            minimum = -padding * maximum

        self.scene.setSceneRect(0, minimum, self.num_samples,
                                maximum - minimum)
        self.scene.setBackgroundBrush(constants.BGCOLOR)
        self.line_item.setLine(0, 0, self.num_samples, 0)

    def clear_path(self):
        for item in self.scene.items():
            if isinstance(item, QGraphicsPathItem):
                self.scene.removeItem(item)
                item.setParentItem(None)
                del item

    def set_text(self, text):
        self.text_item.setPlainText(text)

    @staticmethod
    def create_rectangle(proto_bits, pulse_len=100):
        """
        :type proto_bits: list of str
        """
        ones = np.ones(pulse_len, dtype=np.float32) * 1
        zeros = np.ones(pulse_len, dtype=np.float32) * -1
        n = 0
        y = []
        for msg in proto_bits:
            for bit in msg:
                n += pulse_len
                if bit == "0":
                    y.extend(zeros)
                else:
                    y.extend(ones)
        x = np.arange(0, n).astype(np.int64)
        scene = ZoomableScene()
        scene.setSceneRect(0, -1, n, 2)
        scene.setBackgroundBrush(constants.BGCOLOR)
        scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        if len(y) > 0:
            y = np.array(y)
        else:
            y = np.array(y).astype(np.float32)
        path = path_creator.array_to_QPath(x, y)
        scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
        return scene, n
Esempio n. 9
0
class SceneManager(QObject):
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.plot_data = np.array([0] * 100)
        self.line_item = self.scene.addLine(0, 0, 0, 0, QPen(constants.AXISCOLOR,  Qt.FlatCap))
        self.text_item = self.scene.addText("",  QFont("Helvetica", 20))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect
        self.path_item = self.scene.addPath(QPainterPath(), QPen(constants.LINECOLOR,  Qt.FlatCap))
        """:type: QGraphicsPathItem """

        self.padding = 1.25

    @property
    def num_samples(self):
        return len(self.plot_data)

    def show_scene_section(self, x1: float, x2: float):
        path = path_creator.create_path(self.plot_data, self.__limit_value(x1), self.__limit_value(x2))
        self.path_item.setPath(path)

    def __limit_value(self, val):
        if val < 0:
            return 0
        elif val > self.num_samples:
            return self.num_samples
        return int(val)

    def show_full_scene(self):
        self.show_scene_section(0, self.num_samples)

    def init_scene(self):
        self.set_text("")

        if self.num_samples == 0:
            return

        if math.isnan(self.minimum) or math.isnan(self.maximum):
            minimum, maximum = util.minmax(self.plot_data)
        else:
            minimum, maximum = self.minimum, self.maximum

        if abs(minimum) > abs(maximum):
            minimum = -self.padding*abs(minimum)
            maximum = -self.padding*minimum
        else:
            maximum = abs(maximum)
            minimum = -maximum

        # self.scene.setSceneRect(0, -1, num_samples, 2)
        self.scene.setSceneRect(0, minimum, self.num_samples, maximum - minimum)
        self.scene.setBackgroundBrush(constants.BGCOLOR)
        self.line_item.setLine(0, 0, self.num_samples, 0)

    def clear_path(self):
        self.path_item.setPath(QPainterPath())

    def set_text(self, text):
        self.text_item.setPlainText(text)

    @staticmethod
    def create_rectangle(proto_bits, pulse_len=100):
        """
        :type proto_bits: list of str
        """
        ones = np.ones(pulse_len, dtype=np.float32) * 1
        zeros = np.ones(pulse_len, dtype=np.float32) * -1
        n = 0
        y = []
        for block in proto_bits:
            for bit in block:
                n += pulse_len
                if bit == "0":
                    y.extend(zeros)
                else:
                    y.extend(ones)
        x = np.arange(0, n).astype(np.int64)
        scene = ZoomableScene()
        scene.setSceneRect(0, -1, n, 2)
        scene.setBackgroundBrush(constants.BGCOLOR)
        scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        if len(y) > 0:
            y = np.array(y)
        else:
            y = np.array(y).astype(np.float32)
        path = path_creator.array_to_QPath(x, y)
        scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
        return scene, n
Esempio n. 10
0
class SceneManager(QObject):
    def __init__(self, parent):
        super().__init__(parent)
        self.scene = ZoomableScene()
        self.__plot_data = None  # type: np.ndarray
        self.line_item = self.scene.addLine(0, 0, 0, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        self.minimum = float("nan")  # NaN = AutoDetect
        self.maximum = float("nan")  # NaN = AutoDetect

        self.padding = 1.25

    @property
    def plot_data(self):
        return self.__plot_data

    @plot_data.setter
    def plot_data(self, value):
        self.__plot_data = value

    @property
    def num_samples(self):
        return len(self.plot_data)

    def show_scene_section(self, x1: float, x2: float, subpath_ranges=None, colors=None):
        """

        :param x1: start of section to show
        :param x2: end of section to show
        :param subpath_ranges: for coloring subpaths
        :type subpath_ranges: list of tuple
        :param colors: for coloring the subpaths
        :type color: list of QColor
        :return:
        """
        paths = path_creator.create_path(self.plot_data, start=self.__limit_value(x1),
                                         end=self.__limit_value(x2),
                                         subpath_ranges=subpath_ranges)
        self.set_path(paths, colors=colors)

    def set_path(self, paths: list, colors=None):
        self.clear_path()
        colors = [constants.LINECOLOR] * len(paths) if colors is None else colors
        assert len(paths) == len(colors)
        for path, color in zip(paths, colors):
            self.scene.addPath(path, QPen(color if color else constants.LINECOLOR, Qt.FlatCap))

    def __limit_value(self, val: float) -> int:
        return 0 if val < 0 else self.num_samples if val > self.num_samples else int(val)

    def show_full_scene(self):
        self.show_scene_section(0, self.num_samples)

    def init_scene(self, apply_padding=True):
        if self.num_samples == 0:
            return

        if math.isnan(self.minimum) or math.isnan(self.maximum):
            minimum, maximum = util.minmax(self.plot_data)
        else:
            minimum, maximum = self.minimum, self.maximum

        padding = self.padding if apply_padding else 1

        if abs(minimum) > abs(maximum):
            minimum = -padding * abs(minimum)
            maximum = -padding * minimum
        else:
            maximum = padding * abs(maximum)
            minimum = -padding * maximum

        self.scene.setSceneRect(0, minimum, self.num_samples, maximum - minimum)
        self.scene.setBackgroundBrush(constants.BGCOLOR)

        if self.line_item is not None:
            self.line_item.setLine(0, 0, self.num_samples, 0)

    def clear_path(self):
        for item in self.scene.items():
            if isinstance(item, QGraphicsPathItem):
                self.scene.removeItem(item)
                item.setParentItem(None)
                del item

    def eliminate(self):
        self.plot_data = None
        self.line_item = None
        self.scene.clear()
        self.scene.setParent(None)

    @staticmethod
    def create_rectangle(proto_bits, pulse_len=100):
        """
        :type proto_bits: list of str
        """
        ones = np.ones(pulse_len, dtype=np.float32) * 1
        zeros = np.ones(pulse_len, dtype=np.float32) * -1
        n = 0
        y = []
        for msg in proto_bits:
            for bit in msg:
                n += pulse_len
                if bit == "0":
                    y.extend(zeros)
                else:
                    y.extend(ones)
        x = np.arange(0, n).astype(np.int64)
        scene = ZoomableScene()
        scene.setSceneRect(0, -1, n, 2)
        scene.setBackgroundBrush(constants.BGCOLOR)
        scene.addLine(0, 0, n, 0, QPen(constants.AXISCOLOR, Qt.FlatCap))
        if len(y) > 0:
            y = np.array(y)
        else:
            y = np.array(y).astype(np.float32)
        path = path_creator.array_to_QPath(x, y)
        scene.addPath(path, QPen(constants.LINECOLOR, Qt.FlatCap))
        return scene, n