コード例 #1
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        os.chdir('./')  # Set directory to current folder.
        self.setFont(QFont("Arial"))

        #        self.setMinimumSize(900, 1020)
        self.setWindowTitle("Screening Analysis")
        self.layout = QGridLayout(self)

        self.popnexttopimgcounter = 0
        self.Tag_round_infor = []
        self.Lib_round_infor = []
        #**************************************************************************************************************************************
        #-----------------------------------------------------------GUI for Billboard display------------------------------------------------------
        #**************************************************************************************************************************************
        ImageDisplayContainer = QGroupBox("Billboard")
        ImageDisplayContainerLayout = QGridLayout()

        self.GraphyDisplayTab = QTabWidget()

        #----------------------------------------------------------------------
        MatDsiplayPart = QWidget()
        MatDsiplayPart.layout = QGridLayout()

        # a figure instance to plot on
        self.Matdisplay_Figure = Figure()
        self.Matdisplay_Canvas = FigureCanvas(self.Matdisplay_Figure)

        self.Matdisplay_toolbar = NavigationToolbar(self.Matdisplay_Canvas,
                                                    self)
        MatDsiplayPart.layout.addWidget(self.Matdisplay_toolbar, 0, 0)
        MatDsiplayPart.layout.addWidget(self.Matdisplay_Canvas, 1, 0)
        MatDsiplayPart.setLayout(MatDsiplayPart.layout)

        self.OriginalImgWidget = pg.ImageView()
        self.OriginalImg_item = self.OriginalImgWidget.getImageItem(
        )  #setLevels
        self.OriginalImg_view = self.OriginalImgWidget.getView()
        self.OriginalImg_item.setAutoDownsample(True)

        self.OriginalImgWidget.ui.roiBtn.hide()
        self.OriginalImgWidget.ui.menuBtn.hide()
        self.OriginalImgWidget.ui.normGroup.hide()
        self.OriginalImgWidget.ui.roiPlot.hide()

        self.GraphyDisplayTab.addTab(self.OriginalImgWidget, "Image loaded")
        self.GraphyDisplayTab.addTab(MatDsiplayPart, "Scatter")

        ImageDisplayContainerLayout.addWidget(self.GraphyDisplayTab, 1, 1)

        #----------------------------------------------------------------------
        ImageButtonContainer = QGroupBox()
        ImageButtonContainerLayout = QGridLayout()

        ButtonRankResetCoordImg = QPushButton('Reset coord', self)
        ButtonRankResetCoordImg.clicked.connect(self.ResetRankCoord)
        ImageButtonContainerLayout.addWidget(ButtonRankResetCoordImg, 0, 6)

        ButtonRankPreviousCoordImg = QPushButton('Previous', self)
        ButtonRankPreviousCoordImg.setShortcut('a')
        ButtonRankPreviousCoordImg.clicked.connect(
            lambda: self.GoThroughTopCells('previous'))
        ImageButtonContainerLayout.addWidget(ButtonRankPreviousCoordImg, 1, 6)

        self.ButtonShowInScatter = QPushButton('Show in scatter', self)
        self.ButtonShowInScatter.setShortcut('s')
        self.ButtonShowInScatter.setCheckable(True)
        self.ButtonShowInScatter.clicked.connect(self.ShowScatterPos)
        ImageButtonContainerLayout.addWidget(self.ButtonShowInScatter, 2, 6)

        ButtonRankNextCoordImg = QPushButton('Next', self)
        ButtonRankNextCoordImg.setShortcut('d')
        ButtonRankNextCoordImg.clicked.connect(
            lambda: self.GoThroughTopCells('next'))
        ImageButtonContainerLayout.addWidget(ButtonRankNextCoordImg, 1, 7)

        GoSeqButton = QPushButton('Go to IDNumber: ', self)
        GoSeqButton.clicked.connect(self.GotoSequence)
        ImageButtonContainerLayout.addWidget(GoSeqButton, 3, 6)

        self.ShowSequenceScatterButton = QPushButton('Show this in scatter',
                                                     self)
        self.ShowSequenceScatterButton.setCheckable(True)
        self.ShowSequenceScatterButton.clicked.connect(
            self.ShowSequenceScatter)
        ImageButtonContainerLayout.addWidget(self.ShowSequenceScatterButton, 3,
                                             8)

        self.CellSequenceBox = QSpinBox(self)
        self.CellSequenceBox.setMaximum(9000)
        self.CellSequenceBox.setValue(0)
        self.CellSequenceBox.setSingleStep(1)
        ImageButtonContainerLayout.addWidget(self.CellSequenceBox, 3, 7)

        ButtonRankDeleteFromList = QPushButton('Delete', self)
        ButtonRankDeleteFromList.clicked.connect(self.DeleteFromTopCells)
        ImageButtonContainerLayout.addWidget(ButtonRankDeleteFromList, 2, 7)

        ButtonRankSaveList = QPushButton('Save array', self)
        ButtonRankSaveList.clicked.connect(self.SaveCellsProArray)
        ImageButtonContainerLayout.addWidget(ButtonRankSaveList, 4, 6)

        self.ConsoleTextDisplay = QTextEdit()
        self.ConsoleTextDisplay.setFontItalic(True)
        self.ConsoleTextDisplay.setPlaceholderText(
            'Notice board from console.')
        self.ConsoleTextDisplay.setMaximumHeight(300)
        ImageButtonContainerLayout.addWidget(self.ConsoleTextDisplay, 5, 6, 3,
                                             2)

        ImageButtonContainer.setLayout(ImageButtonContainerLayout)

        ImageDisplayContainer.setLayout(ImageDisplayContainerLayout)
        ImageDisplayContainer.setMinimumHeight(700)
        ImageDisplayContainer.setMinimumWidth(700)

        self.layout.addWidget(ImageDisplayContainer, 0, 0, 2, 2)
        self.layout.addWidget(ImageButtonContainer, 0, 2)
        #**************************************************************************************************************************************
        #-----------------------------------------------------------GUI for Image processing settings------------------------------------------
        #**************************************************************************************************************************************
        self.PostProcessTab = QTabWidget()
        self.PostProcessTab.setMaximumWidth(400)
        self.PostProcessTab.setFixedHeight(250)

        ImageProcessingContainer = QGroupBox()
        IPLayout = QGridLayout()

        self.IPsizetextbox = QSpinBox(self)
        self.IPsizetextbox.setMaximum(2000)
        self.IPsizetextbox.setValue(800)
        self.IPsizetextbox.setSingleStep(1)
        IPLayout.addWidget(self.IPsizetextbox, 1, 7)
        IPLayout.addWidget(QLabel("Cell smallest size:"), 1, 6)

        self.opening_factorBox = QSpinBox(self)
        self.opening_factorBox.setMaximum(2000)
        self.opening_factorBox.setValue(2)
        self.opening_factorBox.setSingleStep(1)
        IPLayout.addWidget(self.opening_factorBox, 2, 5)
        IPLayout.addWidget(QLabel("Mask opening factor:"), 2, 4)

        self.closing_factorBox = QSpinBox(self)
        self.closing_factorBox.setMaximum(2000)
        self.closing_factorBox.setValue(3)
        self.closing_factorBox.setSingleStep(1)
        IPLayout.addWidget(self.closing_factorBox, 2, 7)
        IPLayout.addWidget(QLabel("Mask closing factor:"), 2, 6)

        self.binary_adaptive_block_sizeBox = QSpinBox(self)
        self.binary_adaptive_block_sizeBox.setMaximum(2000)
        self.binary_adaptive_block_sizeBox.setValue(335)
        self.binary_adaptive_block_sizeBox.setSingleStep(50)
        IPLayout.addWidget(self.binary_adaptive_block_sizeBox, 1, 1)
        IPLayout.addWidget(QLabel("Adaptive mask size:"), 1, 0)

        self.contour_dilation_box = QSpinBox(self)
        self.contour_dilation_box.setMaximum(2000)
        self.contour_dilation_box.setValue(11)
        self.contour_dilation_box.setSingleStep(1)
        IPLayout.addWidget(self.contour_dilation_box, 1, 3)
        IPLayout.addWidget(QLabel("Contour thickness:"), 1, 2)

        IPLayout.addWidget(QLabel("Threshold-contour:"), 1, 4)
        self.find_contour_thres_box = QDoubleSpinBox(self)
        self.find_contour_thres_box.setDecimals(4)
        self.find_contour_thres_box.setMinimum(-10)
        self.find_contour_thres_box.setMaximum(10)
        self.find_contour_thres_box.setValue(0.001)
        self.find_contour_thres_box.setSingleStep(0.0001)
        IPLayout.addWidget(self.find_contour_thres_box, 1, 5)

        self.cellopening_factorBox = QSpinBox(self)
        self.cellopening_factorBox.setMaximum(2000)
        self.cellopening_factorBox.setValue(1)
        self.cellopening_factorBox.setSingleStep(1)
        IPLayout.addWidget(self.cellopening_factorBox, 2, 1)
        IPLayout.addWidget(QLabel("Cell opening factor:"), 2, 0)

        self.cellclosing_factorBox = QSpinBox(self)
        self.cellclosing_factorBox.setMaximum(20000)
        self.cellclosing_factorBox.setValue(2)
        self.cellclosing_factorBox.setSingleStep(1)
        IPLayout.addWidget(self.cellclosing_factorBox, 2, 3)
        IPLayout.addWidget(QLabel("Cell closing factor:"), 2, 2)

        ImageProcessingContainer.setLayout(IPLayout)

        #---------------------------Loading------------------------------------
        LoadSettingContainer = QGroupBox()
        LoadSettingLayout = QGridLayout()

        self.FilepathSwitchBox = QComboBox()
        self.FilepathSwitchBox.addItems(['Tag', 'Lib', 'All'])
        LoadSettingLayout.addWidget(self.FilepathSwitchBox, 0, 0)

        self.AnalysisRoundBox = QSpinBox(self)
        self.AnalysisRoundBox.setMaximum(2000)
        self.AnalysisRoundBox.setValue(1)
        self.AnalysisRoundBox.setSingleStep(1)
        LoadSettingLayout.addWidget(self.AnalysisRoundBox, 0, 2)

        self.AddAnalysisRoundButton = QtWidgets.QPushButton('Add Round:')
        self.AddAnalysisRoundButton.clicked.connect(self.SetAnalysisRound)
        LoadSettingLayout.addWidget(self.AddAnalysisRoundButton, 0, 1)

        self.datasavedirectorytextbox = QLineEdit(self)
        self.datasavedirectorytextbox.setPlaceholderText('Data directory')
        LoadSettingLayout.addWidget(self.datasavedirectorytextbox, 1, 0, 1, 2)

        self.toolButtonOpenDialog = QtWidgets.QPushButton('Set path')
        self.toolButtonOpenDialog.clicked.connect(self.SetAnalysisPath)
        LoadSettingLayout.addWidget(self.toolButtonOpenDialog, 1, 2)

        ExecuteAnalysisButton = QPushButton('Load images', self)
        #        ExecuteAnalysisButton.setObjectName('Startbutton')
        ExecuteAnalysisButton.clicked.connect(
            lambda: self.StartScreeningAnalysisThread())
        LoadSettingLayout.addWidget(ExecuteAnalysisButton, 2, 1)

        self.ClearAnalysisInforButton = QtWidgets.QPushButton('Clear infor')
        self.ClearAnalysisInforButton.clicked.connect(self.ClearAnalysisInfor)
        LoadSettingLayout.addWidget(self.ClearAnalysisInforButton, 2, 2)

        LoadSettingContainer.setLayout(LoadSettingLayout)

        #**************************************************************************************************************************************
        #-----------------------------------------------------------GUI for Selection settings Container---------------------------------------
        #**************************************************************************************************************************************
        SelectionsettingTab = QWidget()
        SelectionsettingTab.layout = QGridLayout()

        self.SeleParaBox = QComboBox()
        self.SeleParaBox.addItems(
            ['Mean intensity divided by tag/Contour soma ratio'])
        SelectionsettingTab.layout.addWidget(self.SeleParaBox, 0, 2)
        SelectionsettingTab.layout.addWidget(QLabel('Scatter axes'), 0, 1)

        self.AnalysisTypeSwitchBox = QComboBox()
        self.AnalysisTypeSwitchBox.addItems(['Brightness screening', 'Lib'])
        SelectionsettingTab.layout.addWidget(self.AnalysisTypeSwitchBox, 0, 0)

        UpdateProcessTab = QTabWidget()
        UpdateProcessTab.layout = QGridLayout()

        UpdateProcessTab_1 = QWidget()
        UpdateProcessTab_1.layout = QGridLayout()

        UpdateProcessTab_1.layout.addWidget(QLabel("Selection boundary:"), 0,
                                            0)

        self.Selection_boundaryBox = QComboBox()
        self.Selection_boundaryBox.addItems(['Circular radius', 'Rank'])
        UpdateProcessTab_1.layout.addWidget(self.Selection_boundaryBox, 0, 1)

        UpdateScattersButton = QtWidgets.QPushButton('Update scatters')
        UpdateScattersButton.clicked.connect(self.UpdateSelectionScatter)
        UpdateProcessTab_1.layout.addWidget(UpdateScattersButton, 0, 4)

        UpdateProcessTab_2 = QWidget()
        UpdateProcessTab_2.layout = QGridLayout()

        self.WeightBoxSelectionFactor_1 = QDoubleSpinBox(self)
        self.WeightBoxSelectionFactor_1.setDecimals(2)
        self.WeightBoxSelectionFactor_1.setMinimum(0)
        self.WeightBoxSelectionFactor_1.setMaximum(1)
        self.WeightBoxSelectionFactor_1.setValue(1)
        self.WeightBoxSelectionFactor_1.setSingleStep(0.1)
        UpdateProcessTab_2.layout.addWidget(self.WeightBoxSelectionFactor_1, 0,
                                            1)
        UpdateProcessTab_2.layout.addWidget(QLabel("Axis 1:"), 0, 0)

        self.WeightBoxSelectionFactor_2 = QDoubleSpinBox(self)
        self.WeightBoxSelectionFactor_2.setDecimals(2)
        self.WeightBoxSelectionFactor_2.setMinimum(0)
        self.WeightBoxSelectionFactor_2.setMaximum(1)
        self.WeightBoxSelectionFactor_2.setValue(0.5)
        self.WeightBoxSelectionFactor_2.setSingleStep(0.1)
        UpdateProcessTab_2.layout.addWidget(self.WeightBoxSelectionFactor_2, 0,
                                            3)
        UpdateProcessTab_2.layout.addWidget(QLabel("Axis 2:"), 0, 2)

        self.WeightBoxSelectionFactor_3 = QDoubleSpinBox(self)
        self.WeightBoxSelectionFactor_3.setDecimals(2)
        self.WeightBoxSelectionFactor_3.setMinimum(0)
        self.WeightBoxSelectionFactor_3.setMaximum(1)
        self.WeightBoxSelectionFactor_3.setValue(1)
        self.WeightBoxSelectionFactor_3.setSingleStep(0.1)
        UpdateProcessTab_2.layout.addWidget(self.WeightBoxSelectionFactor_3, 0,
                                            5)
        UpdateProcessTab_2.layout.addWidget(QLabel("Axis 3:"), 0, 4)

        SelectionthresholdsettingTab = QWidget()
        SelectionthresholdsettingTab.layout = QGridLayout()

        SelectionthresholdsettingTab.layout.addWidget(
            QLabel("Intensity threshold:"), 0, 0)
        self.SelectionMeanInten_thres_box = QDoubleSpinBox(self)
        self.SelectionMeanInten_thres_box.setDecimals(4)
        self.SelectionMeanInten_thres_box.setMinimum(0)
        self.SelectionMeanInten_thres_box.setMaximum(10)
        self.SelectionMeanInten_thres_box.setValue(0.150)
        self.SelectionMeanInten_thres_box.setSingleStep(0.0001)
        SelectionthresholdsettingTab.layout.addWidget(
            self.SelectionMeanInten_thres_box, 0, 1)

        SelectionthresholdsettingTab.layout.addWidget(
            QLabel("Contour/Soma threshold:"), 1, 0)
        self.SelectionCSratio_thres_box = QDoubleSpinBox(self)
        self.SelectionCSratio_thres_box.setDecimals(3)
        self.SelectionCSratio_thres_box.setMinimum(0)
        self.SelectionCSratio_thres_box.setMaximum(10)
        self.SelectionCSratio_thres_box.setValue(0.80)
        self.SelectionCSratio_thres_box.setSingleStep(0.0001)
        SelectionthresholdsettingTab.layout.addWidget(
            self.SelectionCSratio_thres_box, 1, 1)

        SelectionthresholdsettingTab.layout.addWidget(
            QLabel("Roundness threshold:"), 0, 2)
        self.SelectionRoundness_thres_box = QDoubleSpinBox(self)
        self.SelectionRoundness_thres_box.setDecimals(3)
        self.SelectionRoundness_thres_box.setMinimum(0)
        self.SelectionRoundness_thres_box.setMaximum(10)
        self.SelectionRoundness_thres_box.setValue(1.10)
        self.SelectionRoundness_thres_box.setSingleStep(0.0001)
        SelectionthresholdsettingTab.layout.addWidget(
            self.SelectionRoundness_thres_box, 0, 3)

        SelectionthresholdsettingTab.setLayout(
            SelectionthresholdsettingTab.layout)

        UpdateProcessTab_2.layout.addWidget(SelectionthresholdsettingTab, 1, 0,
                                            1, 6)

        UpdateProcessTab_1.setLayout(UpdateProcessTab_1.layout)
        UpdateProcessTab_2.setLayout(UpdateProcessTab_2.layout)
        UpdateProcessTab.addTab(UpdateProcessTab_1, "Normalized distance")
        UpdateProcessTab.addTab(UpdateProcessTab_2, "Axes weights")
        SelectionsettingTab.layout.addWidget(UpdateProcessTab, 1, 0, 4, 3)

        SelectionsettingTab.setLayout(SelectionsettingTab.layout)

        #**************************************************************************************************************************************
        #-----------------------------------------------------------GUI for Selection threshold settings---------------------------------------
        #**************************************************************************************************************************************

        self.PostProcessTab.addTab(LoadSettingContainer, "Loading settings")
        self.PostProcessTab.addTab(SelectionsettingTab, "Analysis selection")
        self.PostProcessTab.addTab(ImageProcessingContainer,
                                   "Image analysis settings")

        self.layout.addWidget(self.PostProcessTab, 1, 2)

        self.setLayout(self.layout)