Example #1
0
class Window(QDialog):
    "https://stackoverflow.com/questions/12459811/how-to-embed-matplotib-in-pyqt-for-dummies"

    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.raw_data = None
        self.scan = None

        # First figure
        self.figure1 = plt.figure()
        self.canvas1 = FigureCanvas(self.figure1)
        self.toolbar1 = NavigationToolbar(self.canvas1, self)
        self.figure_element1 = QVBoxLayout()
        self.figure_element1.addWidget(self.canvas1)
        self.figure_element1.addWidget(self.toolbar1)
        # Second figure
        self.figure2 = plt.figure()
        self.canvas2 = FigureCanvas(self.figure2)
        self.toolbar2 = NavigationToolbar(self.canvas2, self)
        self.figure_element2 = QVBoxLayout()
        self.figure_element2.addWidget(self.canvas2)
        self.figure_element2.addWidget(self.toolbar2)
        # Third figure
        self.figure3 = plt.figure()
        self.canvas3 = FigureCanvas(self.figure3)
        self.toolbar3 = NavigationToolbar(self.canvas3, self)
        self.figure_element3 = QVBoxLayout()
        self.figure_element3.addWidget(self.canvas3)
        self.figure_element3.addWidget(self.toolbar3)
        # Fourth figure
        self.figure4 = plt.figure()
        self.canvas4 = FigureCanvas(self.figure4)
        self.toolbar4 = NavigationToolbar(self.canvas4, self)
        self.figure_element4 = QVBoxLayout()
        self.figure_element4.addWidget(self.canvas4)
        self.figure_element4.addWidget(self.toolbar4)
        # Fifth figure
        self.figure5 = plt.figure()
        self.canvas5 = FigureCanvas(self.figure5)
        self.toolbar5 = NavigationToolbar(self.canvas5, self)
        self.figure_element5 = QVBoxLayout()
        self.figure_element5.addWidget(self.canvas5)
        self.figure_element5.addWidget(self.toolbar5)
        # Sixth figure
        self.figure6 = plt.figure()
        self.canvas6 = FigureCanvas(self.figure6)
        self.toolbar6 = NavigationToolbar(self.canvas6, self)
        self.figure_element6 = QVBoxLayout()
        self.figure_element6.addWidget(self.canvas6)
        self.figure_element6.addWidget(self.toolbar6)

        # Buttons
        self.button_load_raw = QPushButton("Load raw data")
        self.button_load_raw.clicked.connect(self.load_raw)
        self.button_process_raw = QPushButton("Process raw data")
        self.button_process_raw.clicked.connect(self.process_raw)
        self.button_load_ascans = QPushButton("Load ascans")
        self.button_load_ascans.clicked.connect(self.load_ascans)
        self.button_process_ascans = QPushButton("Process ascans")
        self.button_process_ascans.clicked.connect(self.process_ascans)

        # Text Edit's
        self.diameter_min = QLabel("Diameter (min): ")
        self.diameter_max = QLabel("Diameter (max): ")
        self.diameter_average = QLabel("Diameter (average): ")

        self.diameter_min_text = QPlainTextEdit("...")
        self.diameter_min_text.setMaximumHeight(30)
        self.diameter_max_text = QPlainTextEdit("...")
        self.diameter_max_text.setMaximumHeight(30)
        self.diameter_average_text = QPlainTextEdit("...")
        self.diameter_average_text.setMaximumHeight(30)

        self.layout_diameter = QHBoxLayout()
        self.layout_diameter.addWidget(self.diameter_min)
        self.layout_diameter.addWidget(self.diameter_min_text)
        self.layout_diameter.addWidget(self.diameter_max)
        self.layout_diameter.addWidget(self.diameter_max_text)
        self.layout_diameter.addWidget(self.diameter_average)
        self.layout_diameter.addWidget(self.diameter_average_text)

        # Layouts
        self.layout_buttons1 = QHBoxLayout()
        self.layout_buttons1.addWidget(self.button_load_raw)
        self.layout_buttons1.addWidget(self.button_process_raw)

        self.layout_buttons2 = QHBoxLayout()
        self.layout_buttons2.addWidget(self.button_load_ascans)
        self.layout_buttons2.addWidget(self.button_process_ascans)

        self.layout_tab_raw = QVBoxLayout()
        self.layout_tab_ascan = QVBoxLayout()

        self.layout_raw_first_row = QHBoxLayout()
        self.layout_raw_first_row.addLayout(self.figure_element1)
        self.layout_raw_first_row.addWidget(self.VLine())
        self.layout_raw_first_row.addLayout(self.figure_element2)

        self.layout_raw_second_row = QHBoxLayout()
        self.layout_raw_second_row.addLayout(self.figure_element3)
        self.layout_raw_second_row.addWidget(self.VLine())
        self.layout_raw_second_row.addLayout(self.figure_element4)

        self.layout_ascan_first_row = QHBoxLayout()
        self.layout_ascan_first_row.addLayout(self.figure_element5)
        self.layout_ascan_first_row.addWidget(self.VLine())
        self.layout_ascan_first_row.addLayout(self.figure_element6)

        self.layout_tab_raw.addLayout(self.layout_buttons1)
        self.layout_tab_raw.addWidget(self.HLine())
        self.layout_tab_raw.addLayout(self.layout_raw_first_row)
        self.layout_tab_raw.addWidget(self.HLine())
        self.layout_tab_raw.addLayout(self.layout_raw_second_row)

        self.layout_tab_ascan.addLayout(self.layout_buttons2)
        self.layout_tab_ascan.addWidget(self.HLine())
        self.layout_tab_ascan.addLayout(self.layout_ascan_first_row)
        self.layout_tab_ascan.addWidget(self.HLine())
        self.layout_tab_ascan.addLayout(self.layout_diameter)

        # Tab Widget
        self.tab_widget = QTabWidget()
        self.tab_raw_data = QWidget()
        self.tab_ascans = QWidget()

        self.tab_raw_data.setLayout(self.layout_tab_raw)
        self.tab_ascans.setLayout(self.layout_tab_ascan)

        self.tab_widget.addTab(self.tab_raw_data, "Raw data from OCT system")
        self.tab_widget.addTab(self.tab_ascans,
                               "Preprocessed image from IVOCT")

        # set the layout
        layout = QVBoxLayout()
        layout.addWidget(self.tab_widget)
        self.status_bar = QStatusBar()
        self.status_bar_text = QLabel("Starting succesfully finished")
        self.status_bar.addWidget(self.status_bar_text)
        layout.addWidget(self.status_bar)
        self.setLayout(layout)

    def HLine(self):
        toto = QFrame()
        toto.setFrameShape(QFrame.HLine)
        toto.setFrameShadow(QFrame.Sunken)
        return toto

    def VLine(self):
        toto = QFrame()
        toto.setFrameShape(QFrame.VLine)
        toto.setFrameShadow(QFrame.Sunken)
        return toto

    def load_raw(self):
        path, _ = QFileDialog.getOpenFileName(self, 'Open binary file', '',
                                              "Binary (*.bin)")
        if path != "":
            self.status_bar_text.setText("Loading raw data")
            # Loading raw data
            self.raw_data = RawData(20000)
            self.raw_data.load_raw_data(path)
            # 5 raw ascans
            self.figure1.clear()
            ax = self.figure1.add_subplot(111)
            ax.plot(self.raw_data.cut_spectra[:, 120:125])
            self.canvas1.draw()
            # 5000 raw ascans
            self.figure3.clear()
            ax = self.figure3.add_subplot(111)
            ax.imshow(self.raw_data.cut_spectra)
            self.canvas3.draw()
            self.status_bar_text.setText("Finished loading raw data")
        else:
            self.status_bar_text.setText("Path was empty!")

    def process_raw(self):
        if self.raw_data is not None:
            self.status_bar_text.setText("Processing raw data")
            self.raw_data.process_raw_data()
            # 5 processed ascans
            self.figure2.clear()
            ax = self.figure2.add_subplot(111)
            ax.plot(self.raw_data.cut_spectra[:, 120:125])
            self.canvas2.draw()
            # processed image
            self.figure4.clear()
            ax = self.figure4.add_subplot(111)
            ax.imshow(self.raw_data.cut_spectra)
            self.canvas4.draw()
            self.status_bar_text.setText("Finished processing raw data")

    def load_ascans(self):
        path, _ = QFileDialog.getOpenFileName(self, 'Open b-scan file', '',
                                              "B Scans (*.bin)")
        if path != "":
            self.status_bar_text.setText("Loading processed data")
            # Loading Scan
            self.scan = Scan(20000)
            self.scan.load_data(path)
            # 5000 processed ascans
            self.figure5.clear()
            ax = self.figure5.add_subplot(111)
            ax.imshow(self.scan.cut_matrix)
            self.canvas5.draw()

            self.status_bar_text.setText("Finished loading processed data")
        else:
            self.status_bar_text.setText("Path was empty!")

    def process_ascans(self):
        if self.scan is not None:
            self.status_bar_text.setText("Processing polar view")
            self.scan.find_peaks()
            self.scan.plot_cut_matrix()
            self.scan.create_polar_views()
            # polar_view = self.scan.interpolation_polar_view(self.scan.polar_views[2], 3)
            # Show polar view
            self.figure6.clear()
            ax = self.figure6.add_subplot(111)
            for i in range(0, len(self.scan.polar_views)):
                ax(i).imshow(self.scan.polar_views[i])
            self.canvas6.draw()

            self.status_bar_text.setText("Finished processing polar view")