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)