def init_gui(self):
        layout = QGridLayout()

        # self.setFixedSize(320,100)

        self.box = roundQGroupBox()
        self.box.setTitle("Stage")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        self.setLayout(layout)

        self.collect_data_button = QPushButton('Collect data')
        self.collect_data_button.clicked.connect(self.start_aqcuisition)

        box_layout.addWidget(self.collect_data_button)

        layout.addWidget(self.box)
示例#2
0
    def init_gui(self):
        # self.setFixedSize(325,100)

        layout = QGridLayout()
        self.setLayout(layout)

        self.box = roundQGroupBox()
        self.box.setTitle("Manual registration")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        layout.addWidget(self.box)

        self.open_button = QPushButton("Open")
        self.open_button.clicked.connect(self.open_window)
        box_layout.addWidget(self.open_button)

        self.show()
示例#3
0
    def init_gui(self):
        layout = QGridLayout()

        # self.setFixedSize(240,200)
        self.setFixedHeight(200)
        self.box = roundQGroupBox()
        self.box.setTitle("Galvo control")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        self.setLayout(layout)

        self.register_button = QPushButton('Register')

        self.create_voltage_button = QPushButton('Create voltage')

        self.points_per_contour_textbox = QLineEdit()
        self.points_per_contour_textbox.setValidator(QtGui.QIntValidator())
        self.points_per_contour_textbox.setText('100')

        self.sampling_rate_textbox = QLineEdit()
        self.sampling_rate_textbox.setValidator(QtGui.QIntValidator())
        self.sampling_rate_textbox.setText('50000')

        self.scan_button = QPushButton('Start scan')
        self.scan_button.clicked.connect(self.scan)

        self.register_button.clicked.connect(self.register)
        self.create_voltage_button.clicked.connect(
            self.request_mask_coordinates)

        box_layout.addWidget(self.register_button, 1, 0)
        box_layout.addWidget(QLabel('Points per contour:'))
        box_layout.addWidget(self.points_per_contour_textbox, 2, 1)
        box_layout.addWidget(QLabel('Sampling rate:'), 3, 0)
        box_layout.addWidget(self.sampling_rate_textbox, 3, 1)
        box_layout.addWidget(self.create_voltage_button, 4, 0)
        box_layout.addWidget(self.scan_button, 4, 1)

        layout.addWidget(self.box)

        self.open_latest_transformation()
示例#4
0
    def __init__(self, *args, **kwargs):
        super().__init__()

        # self.setFixedSize(100,500)

        layout = QGridLayout()
        self.setLayout(layout)

        self.image_viewer = SelectPointImageView()
        layout.addWidget(self.image_viewer, 0, 0, 1, 3)

        open_image_button = QPushButton("Open image from file")
        retreive_image_from_camera_button = QPushButton("Load camera image")
        open_image_button.clicked.connect(self.open_image_file)
        retreive_image_from_camera_button.clicked.connect(
            lambda: self.sig_request_camera_image.emit())
        layout.addWidget(open_image_button, 1, 0, 1, 1)
        layout.addWidget(retreive_image_from_camera_button, 1, 1, 1, 1)

        self.coordinate_counter = QLabel("Saved coordinates: 0")
        layout.addWidget(self.coordinate_counter, 2, 0)
        self.filename_textbox = QLabel("File: ")
        layout.addWidget(self.filename_textbox, 2, 1)

        transformation_box = roundQGroupBox()
        transformation_box.setTitle("Transformation")
        transformation_box_layout = QGridLayout()
        transformation_box.setLayout(transformation_box_layout)

        self.transformation_order_spinbox = QSpinBox()
        transformation_box_layout.addWidget(QLabel("Polynomial order:"), 0, 0)
        transformation_box_layout.addWidget(self.transformation_order_spinbox,
                                            0, 1)

        find_transform_button = QPushButton("Find transform")
        find_transform_button.clicked.connect(self.get_transformation)
        transformation_box_layout.addWidget(find_transform_button, 2, 0, 1, 2)

        layout.addWidget(transformation_box, 1, 2, 3, 1)

        coords_container = roundQGroupBox()
        coords_container.setTitle("Coordinates")
        coords_container_layout = QGridLayout()
        coords_container.setLayout(coords_container_layout)

        abs_coordinate_label_x = QLabel("x: ")
        self.abs_coordinate_textbox_x = QtWidgets.QLineEdit()
        self.abs_coordinate_textbox_x.setValidator(QtGui.QDoubleValidator())

        abs_coordinate_label_y = QLabel("y: ")
        self.abs_coordinate_textbox_y = QtWidgets.QLineEdit()
        self.abs_coordinate_textbox_y.setValidator(QtGui.QDoubleValidator())

        img_coordinate_label_x = QLabel("x: ")
        self.img_coordinate_textbox_x = QtWidgets.QLineEdit()
        self.img_coordinate_textbox_x.setValidator(QtGui.QDoubleValidator())

        img_coordinate_label_y = QLabel("y: ")
        self.img_coordinate_textbox_y = QtWidgets.QLineEdit()
        self.img_coordinate_textbox_y.setValidator(QtGui.QDoubleValidator())

        get_crosshair_coords_button = QPushButton("Pick coordinate")
        get_crosshair_coords_button.clicked.connect(
            self.get_crosshair_coordinates)

        save_coords_button = QPushButton("Save coordinates")
        save_coords_button.clicked.connect(self.save_coords)

        coords_container_layout.addWidget(QLabel("Absolute coordinates"), 0, 1,
                                          1, 2)
        coords_container_layout.addWidget(abs_coordinate_label_x, 1, 0)
        coords_container_layout.addWidget(self.abs_coordinate_textbox_x, 1, 1)
        coords_container_layout.addWidget(abs_coordinate_label_y, 2, 0)
        coords_container_layout.addWidget(self.abs_coordinate_textbox_y, 2, 1)

        coords_container_layout.addWidget(QLabel("Image coordinates"), 0, 4, 1,
                                          1)
        coords_container_layout.addWidget(img_coordinate_label_x, 1, 3)
        coords_container_layout.addWidget(self.img_coordinate_textbox_x, 1, 4)
        coords_container_layout.addWidget(img_coordinate_label_y, 2, 3)
        coords_container_layout.addWidget(self.img_coordinate_textbox_y, 2, 4)
        coords_container_layout.addWidget(get_crosshair_coords_button, 3, 4, 1,
                                          1)
        coords_container_layout.addWidget(save_coords_button, 4, 0, 1, 5)

        layout.addWidget(coords_container, 3, 0, 3, 2)

        self.found_transformation_container = roundQGroupBox()
        self.found_transformation_container.setTitle("Result")
        found_transformation_container_layout = QGridLayout()
        self.found_transformation_container.setLayout(
            found_transformation_container_layout)
        self.found_transformation_text = QLabel("No transformation")
        found_transformation_container_layout.addWidget(
            self.found_transformation_text, 0, 0)

        self.devices_dropdown = QComboBox()
        devices = ["DMD: 640", "DMD: 532", "DMD: 488", "Galvos"]
        self.devices_dropdown.addItems(devices)
        self.cast_transformation_button = QPushButton("Cast")
        self.cast_transformation_button.clicked.connect(
            self.cast_transformation)

        found_transformation_container_layout.addWidget(
            QLabel("Cast to:"), 1, 0)
        found_transformation_container_layout.addWidget(
            self.devices_dropdown, 1, 1)
        found_transformation_container_layout.addWidget(
            self.cast_transformation_button, 2, 0, 1, 2)

        layout.addWidget(self.found_transformation_container, 4, 2, 2, 1)
        self.setMinimumSize(800, 1000)
        self.show()
示例#5
0
    def init_gui(self):
        self.setWindowTitle("Coordinate control")

        self.layout = QGridLayout()
        self.setMinimumSize(1250, 1000)
        self.setLayout(self.layout)

        self.image_mask_stack = QTabWidget()

        self.selection_view = DrawingWidget(self)
        self.selection_view.enable_drawing(True)
        self.selection_view.getView().setLimits(xMin=0,
                                                xMax=2048,
                                                yMin=0,
                                                yMax=2048,
                                                minXRange=2048,
                                                minYRange=2048,
                                                maxXRange=2048,
                                                maxYRange=2048)
        self.selection_view.ui.roiBtn.hide()
        self.selection_view.ui.menuBtn.hide()
        self.selection_view.ui.normGroup.hide()
        self.selection_view.ui.roiPlot.hide()
        # self.selection_view.setImage(plt.imread('CoordinatesManager/Registration_Images/StageRegistration/Distance200_Offset0/A1.png'))

        self.mask_view = SquareImageView()
        self.mask_view.getView().setLimits(xMin=0,
                                           xMax=2048,
                                           yMin=0,
                                           yMax=2048,
                                           minXRange=2048,
                                           minYRange=2048,
                                           maxXRange=2048,
                                           maxYRange=2048)
        self.mask_view.ui.roiBtn.hide()
        self.mask_view.ui.menuBtn.hide()
        self.mask_view.ui.normGroup.hide()
        self.mask_view.ui.roiPlot.hide()
        self.mask_view.ui.histogram.hide()

        self.image_mask_stack.addTab(self.selection_view, 'Select')
        self.image_mask_stack.addTab(self.mask_view, 'Mask')

        self.layout.addWidget(self.image_mask_stack, 0, 0, 5, 1)

        # ---------------------- Mask generation Container  --------------

        self.maskGeneratorContainer = roundQGroupBox()
        self.maskGeneratorContainer.setFixedSize(320, 220)
        self.maskGeneratorContainer.setTitle("Mask generator")
        self.maskGeneratorContainerLayout = QGridLayout()

        self.maskGeneratorLayout = QGridLayout()
        self.maskGeneratorContainer.setLayout(
            self.maskGeneratorContainerLayout)

        self.loadMaskFromFileButton = QPushButton('Open mask')
        self.loadMaskFromFileButton.clicked.connect(self.load_mask_from_file)

        self.addRoiButton = QPushButton("Add ROI")
        self.createMaskButton = QPushButton("Create mask")
        self.removeSelectionButton = QPushButton("Remove ROIs")
        self.addRoiButton.clicked.connect(self.add_polygon_roi)

        self.createMaskButton.clicked.connect(self.create_mask)
        self.removeSelectionButton.clicked.connect(self.remove_selection)

        self.maskGeneratorContainerLayout.addWidget(self.addRoiButton, 1, 0)
        self.maskGeneratorContainerLayout.addWidget(self.createMaskButton, 2,
                                                    0)
        self.maskGeneratorContainerLayout.addWidget(self.removeSelectionButton,
                                                    1, 1)
        self.selectionOptionsContainer = roundQGroupBox()
        self.selectionOptionsContainer.setTitle('Options')
        self.selectionOptionsLayout = QGridLayout()
        self.fillContourButton = QCheckBox()
        self.invertMaskButton = QCheckBox()
        self.thicknessSpinBox = QSpinBox()
        self.thicknessSpinBox.setRange(1, 25)
        self.selectionOptionsLayout.addWidget(QLabel('Fill contour:'), 0, 0)
        self.selectionOptionsLayout.addWidget(self.fillContourButton, 0, 1)
        self.selectionOptionsLayout.addWidget(QLabel('Invert mask:'), 1, 0)
        self.selectionOptionsLayout.addWidget(self.invertMaskButton, 1, 1)
        self.selectionOptionsLayout.addWidget(QLabel('Thickness:'), 2, 0)
        self.selectionOptionsLayout.addWidget(self.thicknessSpinBox, 2, 1)
        self.selectionOptionsContainer.setLayout(self.selectionOptionsLayout)

        self.snapFovButton = QPushButton('Image FOV')
        self.snapFovButton.clicked.connect(self.snap_fov)

        self.maskGeneratorContainerLayout.addWidget(self.snapFovButton, 0, 0,
                                                    1, 1)
        self.maskGeneratorContainerLayout.addWidget(
            self.loadMaskFromFileButton, 0, 1, 1, 1)
        self.maskGeneratorContainerLayout.addWidget(
            self.selectionOptionsContainer, 2, 1, 2, 1)

        self.layout.addWidget(self.maskGeneratorContainer, 0, 1)

        self.DMDWidget = DMDWidget.DMDWidget()
        self.layout.addWidget(self.DMDWidget, 1, 1)

        self.DMDWidget.sig_request_mask_coordinates.connect(
            lambda: self.cast_mask_coordinates('dmd'))
        self.sig_cast_mask_coordinates_to_dmd.connect(
            self.DMDWidget.receive_mask_coordinates)
        self.DMDWidget.sig_start_registration.connect(
            lambda: self.sig_start_registration.emit())
        self.DMDWidget.sig_finished_registration.connect(
            lambda: self.sig_finished_registration.emit())

        self.GalvoWidget = GalvoWidget.GalvoWidget()
        self.layout.addWidget(self.GalvoWidget, 2, 1)

        self.GalvoWidget.sig_request_mask_coordinates.connect(
            lambda: self.cast_mask_coordinates('galvo'))
        self.sig_cast_mask_coordinates_to_galvo.connect(
            self.GalvoWidget.receive_mask_coordinates)
        self.GalvoWidget.sig_start_registration.connect(
            lambda: self.sig_start_registration.emit())
        self.GalvoWidget.sig_finished_registration.connect(
            lambda: self.sig_finished_registration.emit())

        self.ManualRegistrationWidget = ManualRegistration.ManualRegistrationWidget(
            self)
        self.ManualRegistrationWidget.sig_request_camera_image.connect(
            self.cast_camera_image)
        self.sig_cast_camera_image.connect(
            self.ManualRegistrationWidget.receive_camera_image)

        self.layout.addWidget(self.ManualRegistrationWidget, 3, 1)

        self.StageRegistrationWidget = StageRegistrationWidget.StageWidget(
            self)
        self.layout.addWidget(self.StageRegistrationWidget, 4, 1)
示例#6
0
    def init_gui(self):
        layout = QGridLayout()

        # In microsec, the dark time between frame changes.
        self.ALP_OFF_TIME = 44

        self.setFixedSize(320, 450)

        self.box = roundQGroupBox()
        self.box.setTitle("DMD control")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        self.setLayout(layout)

        self.connect_button = QPushButton("Connect")
        self.connect_button.setStyleSheet(
            "QPushButton {background-color: #A3C1DA;}")
        self.register_button = QPushButton("Register")

        lasers = ["640", "532", "488"]
        self.transform_for_laser_menu = QListWidget()
        self.transform_for_laser_menu.addItems(lasers)
        self.transform_for_laser_menu.setFixedHeight(52)
        self.transform_for_laser_menu.setFixedWidth(82)
        self.transform_for_laser_menu.setCurrentRow(0)
        self.project_button = QPushButton("Start projecting")
        self.project_button.setStyleSheet(
            "QPushButton {background-color: #99FFCC;}")
        self.clear_button = QPushButton("Clear memory")
        self.white_project_button = QPushButton("Full illum.")
        self.white_project_button.setStyleSheet(
            "QPushButton {background-color: #FFE5CC;}")
        self.load_mask_container_stack = QStackedWidget()

        self.connect_button.clicked.connect(self.connect)
        self.register_button.clicked.connect(lambda: self.register(
            self.transform_for_laser_menu.selectedItems()[0].text()))
        self.project_button.clicked.connect(self.project)
        self.clear_button.clicked.connect(self.clear)
        self.white_project_button.clicked.connect(self.project_full_white)

        # Stack page 1
        self.load_mask_container_1 = roundQGroupBox()
        self.load_mask_container_1.setTitle("Load mask")
        load_mask_container_layout_1 = QGridLayout()
        self.load_mask_container_1.setLayout(load_mask_container_layout_1)
        self.load_mask_from_widget_button = QPushButton("From mask generator")
        self.load_mask_from_file_button = QPushButton("From file")
        self.load_mask_from_widget_button.clicked.connect(
            self.load_mask_from_widget)
        self.load_mask_from_file_button.clicked.connect(
            self.load_mask_from_memory)
        load_mask_container_layout_1.addWidget(
            self.load_mask_from_widget_button, 0, 0)
        load_mask_container_layout_1.addWidget(self.load_mask_from_file_button,
                                               1, 0)

        # Stack page 2
        self.load_mask_container_2 = roundQGroupBox()
        self.load_mask_container_2.setTitle("Load mask")
        load_mask_container_layout_2 = QGridLayout()
        self.load_mask_container_2.setLayout(load_mask_container_layout_2)
        self.load_image = QPushButton("Image")
        self.load_folder = QPushButton("Folder")
        self.load_video = QPushButton("Video")
        self.back_load_mask_container_index0 = QPushButton("Back")

        self.load_image.clicked.connect(self.load_mask_from_file)
        self.load_folder.clicked.connect(self.load_mask_from_folder)
        self.back_load_mask_container_index0.clicked.connect(
            lambda: self.load_mask_container_stack.setCurrentIndex(0))

        load_mask_container_layout_2.addWidget(self.load_image, 0, 0, 1, 2)
        load_mask_container_layout_2.addWidget(self.load_folder, 1, 0, 1, 2)
        load_mask_container_layout_2.addWidget(self.load_video, 2, 0)
        load_mask_container_layout_2.addWidget(
            self.back_load_mask_container_index0, 2, 1)

        ## Add layers to stack
        self.load_mask_container_stack.addWidget(self.load_mask_container_1)
        self.load_mask_container_stack.addWidget(self.load_mask_container_2)

        # Detailed settings
        self.settings_container = roundQGroupBox()
        self.settings_container.setTitle("Settings")
        settings_container_layout = QGridLayout()
        self.settings_container.setLayout(settings_container_layout)

        settings_container_layout.addWidget(QLabel("ALP_PROJ_MODE"), 0, 0)
        self.ALP_PROJ_MODE_Combox = QComboBox()
        self.ALP_PROJ_MODE_Combox.addItems(["ALP_MASTER", "ALP_SLAVE"])
        self.ALP_PROJ_MODE_Combox.setToolTip(
            "This ControlType is used to select from an internal or external trigger source."
        )
        settings_container_layout.addWidget(self.ALP_PROJ_MODE_Combox, 0, 1)

        settings_container_layout.addWidget(QLabel("ALP_PROJ_STEP"), 2, 0)
        self.ALP_PROJ_STEP_Combox = QComboBox()
        self.ALP_PROJ_STEP_Combox.addItems(["ALP_DEFAULT", "ALP_EDGE_RISING"])
        self.ALP_PROJ_STEP_Combox.setToolTip(
            "Set frame switching trigger method in the sequence.(Only in ALP_MASTER mode)"
        )
        settings_container_layout.addWidget(self.ALP_PROJ_STEP_Combox, 2, 1)

        settings_container_layout.addWidget(QLabel("ALP_BIN_MODE"), 3, 0)
        self.ALP_ALP_BIN_MODE_Combox = QComboBox()
        self.ALP_ALP_BIN_MODE_Combox.addItems(
            ["ALP_BIN_UNINTERRUPTED", "ALP_BIN_NORMAL"])
        self.ALP_ALP_BIN_MODE_Combox.setToolTip(
            "Binary mode: select from ALP_BIN_NORMAL and ALP_BIN_UNINTERRUPTED (No dark phase between frames)"
        )
        # self.ALP_ALP_BIN_MODE_Combox.currentIndexChanged.connect(self.set_repeat_from_BIN_MODE)
        settings_container_layout.addWidget(self.ALP_ALP_BIN_MODE_Combox, 3, 1)

        self.Illumination_time_textbox = QLineEdit()
        self.Illumination_time_textbox.setValidator(QtGui.QIntValidator())
        self.Illumination_time_textbox.setText("1000000")  # Default 33334

        self.repeat_imgseq_button = QCheckBox()
        self.repeat_imgseq_button.setChecked(True)
        self.repeat_imgseq_button.setToolTip("Repeat the sequence.")

        Illumination_time_label = QLabel("Illumination time(µs):")
        Illumination_time_label.setToolTip(
            "Display time of a single image of the sequence in microseconds. PictureTime is set to minimize the dark time according to illuminationTime, +44 us e.g."
        )

        settings_container_layout.addWidget(Illumination_time_label, 4, 0)
        settings_container_layout.addWidget(self.Illumination_time_textbox, 4,
                                            1)

        illumination_time_calculation_button = QPushButton(
            "Fill in illu. time for Hz:")
        settings_container_layout.addWidget(
            illumination_time_calculation_button, 5, 0)
        illumination_time_calculation_button.clicked.connect(
            self.calculate_illumination_time_for_frequency)

        self.expected_projection_frequency_textbox = QLineEdit()
        self.expected_projection_frequency_textbox.setValidator(
            QtGui.QIntValidator())
        self.expected_projection_frequency_textbox.setText("2000")
        settings_container_layout.addWidget(
            self.expected_projection_frequency_textbox, 5, 1)

        settings_container_layout.addWidget(QLabel("Repeat sequence:"), 6, 0)
        settings_container_layout.addWidget(self.repeat_imgseq_button, 6, 1)

        box_layout.addWidget(self.connect_button, 0, 0)
        box_layout.addWidget(self.register_button, 0, 1)
        box_layout.addWidget(QLabel("Register with laser:"), 1, 1)
        box_layout.addWidget(self.transform_for_laser_menu, 2, 1, 2, 1)
        box_layout.addWidget(self.project_button, 2, 0)
        box_layout.addWidget(self.clear_button, 3, 0)
        box_layout.addWidget(self.white_project_button, 1, 0)

        box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2)
        box_layout.addWidget(self.settings_container, 5, 0, 1, 2)

        layout.addWidget(self.box)

        self.open_latest_transformation()
示例#7
0
    def init_gui(self):
        self.setWindowTitle("Coordinate control")

        self.layout = QGridLayout()
        self.setMinimumSize(1250, 1000)
        self.setLayout(self.layout)

        self.image_mask_stack = QTabWidget()

        #---------------------------ROIs win----------------------------------
        self.selection_view = DrawingWidget(self)
        self.selection_view.setMinimumWidth(900)
        self.selection_view.enable_drawing(True)
        # self.selection_view.getView().setLimits(xMin = 0, xMax = 2048, yMin = 0, yMax = 2048, \
        #                                         minXRange = 2048, minYRange = 2048, maxXRange = 2048, maxYRange = 2048)
        self.selection_view.ui.roiBtn.hide()
        self.selection_view.ui.menuBtn.hide()
        self.selection_view.ui.normGroup.hide()
        self.selection_view.ui.roiPlot.hide()
        # self.selection_view.setImage(plt.imread('CoordinatesManager/Registration_Images/StageRegistration/Distance200_Offset0/A1.png'))

        #---------------------------Mask win----------------------------------
        self.mask_view = SquareImageView()
        self.mask_view.getView().setLimits(xMin = 0, xMax = 2048, yMin = 0, yMax = 2048, \
                                           minXRange = 2048, minYRange = 2048, maxXRange = 2048, maxYRange = 2048)
        self.mask_view.ui.roiBtn.hide()
        self.mask_view.ui.menuBtn.hide()
        self.mask_view.ui.normGroup.hide()
        self.mask_view.ui.roiPlot.hide()
        self.mask_view.ui.histogram.hide()

        #-------------------------MAsk RCNN-----------------------------------
        MLmaskviewBox = QWidget()
        MLmaskviewBoxLayout = QGridLayout()

        self.Matdisplay_Figure = Figure()
        self.Matdisplay_Canvas = FigureCanvas(self.Matdisplay_Figure)
        # self.Matdisplay_Canvas.setFixedWidth(900)
        # self.Matdisplay_Canvas.setFixedHeight(900)
        self.Matdisplay_Canvas.mpl_connect('button_press_event', self._onclick)

        self.Matdisplay_toolbar = NavigationToolbar(self.Matdisplay_Canvas,
                                                    self)

        MLmaskviewBoxLayout.addWidget(self.Matdisplay_toolbar, 0, 0)
        MLmaskviewBoxLayout.addWidget(self.Matdisplay_Canvas, 1, 0)

        MLmaskviewBox.setLayout(MLmaskviewBoxLayout)

        self.image_mask_stack.addTab(self.selection_view, 'Select')
        self.image_mask_stack.addTab(self.mask_view, 'Mask')
        self.image_mask_stack.addTab(MLmaskviewBox, 'Mask-RCNN')

        self.layout.addWidget(self.image_mask_stack, 0, 0, 4, 7)

        # ---------------------- Mask generation Container  --------------

        self.maskGeneratorContainer = roundQGroupBox()
        self.maskGeneratorContainer.setFixedSize(320, 220)
        self.maskGeneratorContainer.setTitle("Mask generator")
        self.maskGeneratorContainerLayout = QGridLayout()

        self.maskGeneratorLayout = QGridLayout()
        self.maskGeneratorContainer.setLayout(
            self.maskGeneratorContainerLayout)

        # self.loadMaskFromFileButton = QPushButton('Load mask')
        # self.loadMaskFromFileButton.clicked.connect(self.load_mask_from_file)

        self.addRoiButton = QPushButton("Add ROI")
        self.createMaskButton = QPushButton("Add mask")
        self.deleteMaskButton = QPushButton("Delete mask")
        self.removeSelectionButton = cleanButton()
        self.removeSelectionButton.setFixedHeight(25)
        self.removeSelectionButton.setToolTip("Remove rois and output signals")
        self.addRoiButton.clicked.connect(self.add_polygon_roi)

        self.createMaskButton.clicked.connect(self.create_mask)
        self.deleteMaskButton.clicked.connect(self.delete_mask)
        self.removeSelectionButton.clicked.connect(self.remove_selection)

        self.maskGeneratorContainerLayout.addWidget(self.addRoiButton, 0, 0)
        self.maskGeneratorContainerLayout.addWidget(self.createMaskButton, 2,
                                                    0)
        self.maskGeneratorContainerLayout.addWidget(self.deleteMaskButton, 2,
                                                    2)
        self.maskGeneratorContainerLayout.addWidget(self.removeSelectionButton,
                                                    2, 3)
        # self.maskGeneratorContainerLayout.addWidget(self.loadMaskFromFileButton, 2, 1)

        self.clearRoiButton = QPushButton("Clear ROI")
        self.clearRoiButton.clicked.connect(
            lambda: self.selection_view.clear_rois())
        self.maskGeneratorContainerLayout.addWidget(self.clearRoiButton, 0, 1)

        self.maskGeneratorContainerLayout.addWidget(QLabel("Mask index:"), 1,
                                                    0)
        self.mask_index_spinbox = QSpinBox()
        self.mask_index_spinbox.setMinimum(1)
        self.mask_index_spinbox.setValue(1)
        self.maskGeneratorContainerLayout.addWidget(self.mask_index_spinbox, 1,
                                                    1)

        self.previous_mask_button = QPushButton()
        self.previous_mask_button.setStyleSheet(
            "QPushButton {color:white;background-color: #FFCCE5;}"
            "QPushButton:hover:!pressed {color:white;background-color: #CCFFFF;}"
        )
        self.previous_mask_button.setToolTip(
            "Click arrow to enable WASD keyboard control")
        self.previous_mask_button.setFixedWidth(60)
        self.previous_mask_button.setIcon(QIcon('./Icons/LeftArrow.png'))
        self.previous_mask_button.clicked.connect(
            lambda: self.show_mask_with_index(-1))
        self.maskGeneratorContainerLayout.addWidget(self.previous_mask_button,
                                                    1, 2)

        self.next_mask_button = QPushButton()
        self.next_mask_button.setStyleSheet(
            "QPushButton {color:white;background-color: #FFCCE5;}"
            "QPushButton:hover:!pressed {color:white;background-color: #CCFFFF;}"
        )
        self.next_mask_button.setToolTip(
            "Click arrow to enable WASD keyboard control")
        self.next_mask_button.setFixedWidth(60)
        self.next_mask_button.setIcon(QIcon('./Icons/RightArrow.png'))
        self.next_mask_button.clicked.connect(
            lambda: self.show_mask_with_index(1))
        self.maskGeneratorContainerLayout.addWidget(self.next_mask_button, 1,
                                                    3)

        self.selectionOptionsContainer = roundQGroupBox()
        self.selectionOptionsContainer.setTitle('Options')
        self.selectionOptionsLayout = QGridLayout()
        self.fillContourButton = QCheckBox()
        self.invertMaskButton = QCheckBox()
        self.thicknessSpinBox = QSpinBox()
        self.thicknessSpinBox.setRange(1, 25)
        self.selectionOptionsLayout.addWidget(QLabel('Fill contour:'), 0, 0)
        self.selectionOptionsLayout.addWidget(self.fillContourButton, 0, 1)
        self.selectionOptionsLayout.addWidget(QLabel('Invert mask:'), 1, 0)
        self.selectionOptionsLayout.addWidget(self.invertMaskButton, 1, 1)
        self.selectionOptionsLayout.addWidget(QLabel('Thickness:'), 2, 0)
        self.selectionOptionsLayout.addWidget(self.thicknessSpinBox, 2, 1)

        lasers = ['640', '532', '488']
        self.transform_for_laser_menu = QListWidget()
        self.transform_for_laser_menu.addItems(lasers)
        self.transform_for_laser_menu.setFixedHeight(48)
        self.transform_for_laser_menu.setFixedWidth(65)
        self.transform_for_laser_menu.setCurrentRow(0)

        self.selectionOptionsLayout.addWidget(QLabel('To be used with laser:'),
                                              0, 2)
        self.selectionOptionsLayout.addWidget(self.transform_for_laser_menu, 1,
                                              2)

        self.selectionOptionsContainer.setLayout(self.selectionOptionsLayout)

        self.maskGeneratorContainerLayout.addWidget(
            self.selectionOptionsContainer, 3, 0, 2, 3)

        #----------------------------Mask-RCNN--------------------------------
        self.MLOptionsContainer = roundQGroupBox()
        self.MLOptionsContainer.setTitle('Mask-RCNN')
        self.MLOptionsContainerLayout = QGridLayout()

        self.init_ML_button = QPushButton('Init. ML', self)
        self.MLOptionsContainerLayout.addWidget(self.init_ML_button, 0, 0)
        self.init_ML_button.clicked.connect(
            lambda: self.run_in_thread(self.init_ML))

        self.run_ML_button = QPushButton('Analysis', self)
        self.MLOptionsContainerLayout.addWidget(self.run_ML_button, 1, 0)
        self.run_ML_button.clicked.connect(self.run_ML_onImg_and_display)

        self.generate_MLmask_button = QPushButton('To ROIs', self)
        self.MLOptionsContainerLayout.addWidget(self.generate_MLmask_button, 2,
                                                0)
        self.generate_MLmask_button.clicked.connect(
            lambda: self.run_in_thread(self.generate_MLmask))

        self.MLOptionsContainer.setLayout(self.MLOptionsContainerLayout)

        self.maskGeneratorContainerLayout.addWidget(self.MLOptionsContainer, 3,
                                                    3, 2, 1)

        self.layout.addWidget(self.maskGeneratorContainer, 0, 8, 1, 3)

        self.DMDWidget = DMDWidget.DMDWidget()
        self.layout.addWidget(self.DMDWidget, 1, 8, 1, 3)
        """--------------------------------------------------------------------
        # Singal sent out from DMDWidget to ask for mask generated here.
        # And then the generated roi list is sent back to function:receive_mask_coordinates in DMDWidget.
        #  --------------------------------------------------------------------
        """
        self.DMDWidget.sig_request_mask_coordinates.connect(
            lambda: self.cast_mask_coordinates('dmd'))
        self.sig_cast_mask_coordinates_to_dmd.connect(
            self.DMDWidget.receive_mask_coordinates)

        self.DMDWidget.sig_start_registration.connect(
            lambda: self.sig_start_registration.emit())
        self.DMDWidget.sig_finished_registration.connect(
            lambda: self.sig_finished_registration.emit())

        #---------------------------Galvo control-----------------------------
        self.GalvoWidget = GalvoWidget.GalvoWidget()
        self.GalvoWidget.setFixedWidth(200)
        self.GalvoWidget.setFixedHeight(180)
        self.layout.addWidget(self.GalvoWidget, 2, 8, 2, 1)

        self.GalvoWidget.sig_request_mask_coordinates.connect(
            lambda: self.cast_mask_coordinates('galvo'))
        self.sig_cast_mask_coordinates_to_galvo.connect(
            self.GalvoWidget.receive_mask_coordinates)
        self.GalvoWidget.sig_start_registration.connect(
            lambda: self.sig_start_registration.emit())
        self.GalvoWidget.sig_finished_registration.connect(
            lambda: self.sig_finished_registration.emit())

        #-------------------------Manual registration-------------------------
        self.ManualRegistrationWidget = ManualRegistration.ManualRegistrationWidget(
        )
        self.ManualRegistrationWidget.setFixedWidth(100)
        self.ManualRegistrationWidget.sig_request_camera_image.connect(
            self.cast_camera_image)
        self.sig_cast_camera_image.connect(
            self.ManualRegistrationWidget.receive_camera_image)

        self.layout.addWidget(self.ManualRegistrationWidget, 2, 9, 1, 1)

        #-------------------------Stage collect-------------------------------
        self.StageRegistrationWidget = StageRegistrationWidget.StageWidget()
        self.StageRegistrationWidget.setFixedWidth(100)
        self.layout.addWidget(self.StageRegistrationWidget, 3, 9, 1, 1)
示例#8
0
    def init_gui(self):
        layout = QGridLayout()

        self.setFixedSize(320, 400)

        self.box = roundQGroupBox()
        self.box.setTitle("DMD control")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        self.setLayout(layout)

        self.connect_button = QPushButton('Connect')
        self.connect_button.setStyleSheet(
            'QPushButton {background-color: #A3C1DA;}')
        self.register_button = QPushButton('Register')

        lasers = ['640', '532', '488']
        self.transform_for_laser_menu = QListWidget()
        self.transform_for_laser_menu.addItems(lasers)
        self.transform_for_laser_menu.setFixedHeight(52)
        self.transform_for_laser_menu.setFixedWidth(82)
        self.transform_for_laser_menu.setCurrentRow(0)
        self.project_button = QPushButton('Start projecting')
        self.project_button.setStyleSheet(
            'QPushButton {background-color: #99FFCC;}')
        self.clear_button = QPushButton('Clear memory')
        self.white_project_button = QPushButton('Full illum.')
        self.white_project_button.setStyleSheet(
            'QPushButton {background-color: #FFE5CC;}')
        self.load_mask_container_stack = QStackedWidget()

        self.connect_button.clicked.connect(self.connect)
        self.register_button.clicked.connect(lambda: self.register(
            self.transform_for_laser_menu.selectedItems()[0].text()))
        self.project_button.clicked.connect(self.project)
        self.clear_button.clicked.connect(self.clear)
        self.white_project_button.clicked.connect(self.project_full_white)

        # Stack page 1
        self.load_mask_container_1 = roundQGroupBox()
        self.load_mask_container_1.setTitle('Load mask')
        load_mask_container_layout_1 = QGridLayout()
        self.load_mask_container_1.setLayout(load_mask_container_layout_1)
        self.load_mask_from_widget_button = QPushButton('From mask generator')
        self.load_mask_from_file_button = QPushButton('From file')
        self.load_mask_from_widget_button.clicked.connect(
            self.load_mask_from_widget)
        self.load_mask_from_file_button.clicked.connect(
            self.load_mask_from_memory)
        load_mask_container_layout_1.addWidget(
            self.load_mask_from_widget_button, 0, 0)
        load_mask_container_layout_1.addWidget(self.load_mask_from_file_button,
                                               1, 0)

        # Stack page 2
        self.load_mask_container_2 = roundQGroupBox()
        self.load_mask_container_2.setTitle('Load mask')
        load_mask_container_layout_2 = QGridLayout()
        self.load_mask_container_2.setLayout(load_mask_container_layout_2)
        self.load_image = QPushButton('Image')
        self.load_folder = QPushButton('Folder')
        self.load_video = QPushButton('Video')
        self.back_load_mask_container_index0 = QPushButton('Back')

        self.load_image.clicked.connect(self.load_mask_from_file)
        self.load_folder.clicked.connect(self.load_mask_from_folder)
        self.back_load_mask_container_index0.clicked.connect(
            lambda: self.load_mask_container_stack.setCurrentIndex(0))

        load_mask_container_layout_2.addWidget(self.load_image, 0, 0, 1, 2)
        load_mask_container_layout_2.addWidget(self.load_folder, 1, 0, 1, 2)
        load_mask_container_layout_2.addWidget(self.load_video, 2, 0)
        load_mask_container_layout_2.addWidget(
            self.back_load_mask_container_index0, 2, 1)

        ## Add layers to stack
        self.load_mask_container_stack.addWidget(self.load_mask_container_1)
        self.load_mask_container_stack.addWidget(self.load_mask_container_2)

        # Detailed settings
        self.settings_container = roundQGroupBox()
        self.settings_container.setTitle('Settings')
        settings_container_layout = QGridLayout()
        self.settings_container.setLayout(settings_container_layout)

        settings_container_layout.addWidget(QLabel('ALP_PROJ_MODE'), 0, 0)
        self.ALP_PROJ_MODE_Combox = QComboBox()
        self.ALP_PROJ_MODE_Combox.addItems(['ALP_MASTER', 'ALP_SLAVE'])
        self.ALP_PROJ_MODE_Combox.setToolTip(
            "This ControlType is used to select from an internal or external trigger source."
        )
        settings_container_layout.addWidget(self.ALP_PROJ_MODE_Combox, 0, 1)

        settings_container_layout.addWidget(QLabel('ALP_PROJ_STEP'), 2, 0)
        self.ALP_PROJ_STEP_Combox = QComboBox()
        self.ALP_PROJ_STEP_Combox.addItems(['ALP_DEFAULT', 'ALP_EDGE_RISING'])
        self.ALP_PROJ_STEP_Combox.setToolTip(
            "Set frame switching trigger method in the sequence.(Only in ALP_MASTER mode)"
        )
        settings_container_layout.addWidget(self.ALP_PROJ_STEP_Combox, 2, 1)

        settings_container_layout.addWidget(QLabel('ALP_BIN_MODE'), 3, 0)
        self.ALP_ALP_BIN_MODE_Combox = QComboBox()
        self.ALP_ALP_BIN_MODE_Combox.addItems(
            ['ALP_BIN_UNINTERRUPTED', 'ALP_BIN_NORMAL'])
        self.ALP_ALP_BIN_MODE_Combox.setToolTip(
            "Binary mode: select from ALP_BIN_NORMAL and ALP_BIN_UNINTERRUPTED (No dark phase between frames)"
        )
        # self.ALP_ALP_BIN_MODE_Combox.currentIndexChanged.connect(self.set_repeat_from_BIN_MODE)
        settings_container_layout.addWidget(self.ALP_ALP_BIN_MODE_Combox, 3, 1)

        self.frame_rate_textbox = QLineEdit()
        self.frame_rate_textbox.setValidator(QtGui.QIntValidator())
        self.frame_rate_textbox.setText('1000000')  # Default 33334

        self.repeat_imgseq_button = QCheckBox()
        self.repeat_imgseq_button.setChecked(True)
        self.repeat_imgseq_button.setToolTip("Repeat the sequence.")

        Illumination_time_label = QLabel(u"Illumination time(µs):")
        Illumination_time_label.setToolTip(
            "Display time of a single image of the sequence in microseconds. PictureTime is set to minimize the dark time according to illuminationTime, +44 us e.g."
        )

        settings_container_layout.addWidget(Illumination_time_label, 4, 0)
        settings_container_layout.addWidget(self.frame_rate_textbox, 4, 1)
        settings_container_layout.addWidget(QLabel('Repeat sequence:'), 5, 0)
        settings_container_layout.addWidget(self.repeat_imgseq_button, 5, 1)

        box_layout.addWidget(self.connect_button, 0, 0)
        box_layout.addWidget(self.register_button, 0, 1)
        box_layout.addWidget(QLabel('Register with laser:'), 1, 1)
        box_layout.addWidget(self.transform_for_laser_menu, 2, 1, 2, 1)
        box_layout.addWidget(self.project_button, 2, 0)
        box_layout.addWidget(self.clear_button, 3, 0)
        box_layout.addWidget(self.white_project_button, 1, 0)

        box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2)
        box_layout.addWidget(self.settings_container, 5, 0, 1, 2)

        layout.addWidget(self.box)

        self.open_latest_transformation()
示例#9
0
    def init_gui(self):
        layout = QGridLayout()

        self.setFixedSize(320, 300)

        self.box = roundQGroupBox()
        self.box.setTitle("DMD control")
        box_layout = QGridLayout()
        self.box.setLayout(box_layout)

        self.setLayout(layout)

        self.connect_button = QPushButton('Connect')
        self.register_button = QPushButton('Register')

        lasers = ['640', '532', '488']
        self.transform_for_laser_menu = QListWidget()
        self.transform_for_laser_menu.addItems(lasers)
        self.transform_for_laser_menu.setFixedHeight(55)
        self.transform_for_laser_menu.setCurrentRow(0)
        self.project_button = QPushButton('Start projecting')
        self.clear_button = QPushButton('Clear memory')
        self.white_project_button = QPushButton('Full illum.')
        self.load_mask_container_stack = QStackedWidget()

        self.connect_button.clicked.connect(self.connect)
        self.register_button.clicked.connect(lambda: self.register(
            self.transform_for_laser_menu.selectedItems()[0].text()))
        self.project_button.clicked.connect(self.project)
        self.clear_button.clicked.connect(self.clear)
        self.white_project_button.clicked.connect(self.project_full_white)

        # Stack page 1
        self.load_mask_container_1 = roundQGroupBox()
        self.load_mask_container_1.setTitle('Load mask')
        load_mask_container_layout_1 = QGridLayout()
        self.load_mask_container_1.setLayout(load_mask_container_layout_1)
        self.load_mask_from_widget_button = QPushButton('From mask generator')
        self.load_mask_from_file_button = QPushButton('From file')
        self.load_mask_from_widget_button.clicked.connect(
            self.load_mask_from_widget)
        self.load_mask_from_file_button.clicked.connect(
            self.load_mask_from_memory)
        load_mask_container_layout_1.addWidget(
            self.load_mask_from_widget_button, 0, 0)
        load_mask_container_layout_1.addWidget(self.load_mask_from_file_button,
                                               1, 0)

        # Stack page 2
        self.load_mask_container_2 = roundQGroupBox()
        self.load_mask_container_2.setTitle('Load mask')
        load_mask_container_layout_2 = QGridLayout()
        self.load_mask_container_2.setLayout(load_mask_container_layout_2)
        self.load_image = QPushButton('Image')
        self.load_folder = QPushButton('Folder')
        self.load_video = QPushButton('Video')

        self.load_image.clicked.connect(self.load_mask_from_file)
        self.load_folder.clicked.connect(self.load_mask_from_folder)

        load_mask_container_layout_2.addWidget(self.load_image, 0, 0)
        load_mask_container_layout_2.addWidget(self.load_folder, 1, 0)
        load_mask_container_layout_2.addWidget(self.load_video, 2, 0)

        # Stack page 3
        self.load_mask_container_3 = roundQGroupBox()
        self.load_mask_container_3.setTitle('Load mask')
        load_mask_container_layout_3 = QGridLayout()
        self.load_mask_container_3.setLayout(load_mask_container_layout_3)
        self.frame_rate_textbox = QLineEdit()
        self.frame_rate_textbox.setValidator(QtGui.QIntValidator())
        self.frame_rate_textbox.setText('1000000')

        self.repeat_imgseq_button = QCheckBox()

        self.confirm_button = QPushButton('Set')
        self.confirm_button.clicked.connect(self.set_movie_settings_on_DMD)

        load_mask_container_layout_3.addWidget(QLabel(u"Frame duration (µs):"),
                                               0, 0)
        load_mask_container_layout_3.addWidget(self.frame_rate_textbox, 0, 1)
        load_mask_container_layout_3.addWidget(QLabel('Repeat sequence:'), 1,
                                               0)
        load_mask_container_layout_3.addWidget(self.repeat_imgseq_button, 1, 1)
        load_mask_container_layout_3.addWidget(self.confirm_button, 2, 1)

        ## Add layers to stack
        self.load_mask_container_stack.addWidget(self.load_mask_container_1)
        self.load_mask_container_stack.addWidget(self.load_mask_container_2)
        self.load_mask_container_stack.addWidget(self.load_mask_container_3)

        box_layout.addWidget(self.connect_button, 0, 0)
        box_layout.addWidget(self.register_button, 1, 0)
        box_layout.addWidget(QLabel('To be used with laser:'), 0, 1)
        box_layout.addWidget(self.transform_for_laser_menu, 1, 1, 2, 1)
        box_layout.addWidget(self.project_button, 2, 0)
        box_layout.addWidget(self.clear_button, 3, 0)
        box_layout.addWidget(self.white_project_button, 3, 1)

        box_layout.addWidget(self.load_mask_container_stack, 4, 0, 1, 2)

        layout.addWidget(self.box)

        self.open_latest_transformation()