Ejemplo n.º 1
0
    def populateConfIntervCoverageTable(self, tableData):
        confIntervMethodStr = str(self.ui.cboConfIntervMethods.currentText())
        coverageStr = str(self.ui.cboCoverage.currentText()) + '%'
        self.ui.lblCoverageTableTitle.setText('Method = ' +
                                              confIntervMethodStr +
                                              '; Nominal coverage = ' +
                                              coverageStr)

        tableHeadings = [str(self.ui.cboProfileLevel.currentText())]
        tableHeadings += [
            str(self.ui.cboSample1.currentText()),
            str(self.ui.cboSample2.currentText())
        ]
        tableHeadings += ['Parent seq. 1', 'Parent seq. 2']
        tableHeadings += ['Rel. freq. 1 (%)', 'Rel. freq. 2 (%)']
        tableHeadings += ['Mean coverage', 'Std. dev. coverage']
        tableHeadings += [
            'Mean coverage (features <= 5 seq.)',
            'Std. dev. (features <= 5 seq.)'
        ]
        tableHeadings += [
            'Mean coverage (features > 5 seq.)',
            'Std. dev. (features > 5 seq.)'
        ]

        self.coverageTable = GenericTable(tableData, tableHeadings, self)

        self.coverageTable.sort(0, QtCore.Qt.AscendingOrder
                                )  # start with features in alphabetical order
        self.ui.tableConfInterCoverage.setModel(self.coverageTable)
        self.ui.tableConfInterCoverage.verticalHeader().setVisible(False)
        self.ui.tableConfInterCoverage.resizeColumnsToContents()
Ejemplo n.º 2
0
    def populateSummaryTable(self):
        tableData = self.statsTest.results.tableData(
            self.ui.chkShowActiveFeatures.isChecked())

        oneMinAlphaStr = str(self.statsTest.results.oneMinusAlpha() * 100)
        tableHeadings = list(self.profile.hierarchyHeadings)
        tableHeadings += [
            str(self.ui.cboSample1.currentText()),
            str(self.ui.cboSample2.currentText())
        ]
        tableHeadings += ['Parent seq. 1', 'Parent seq. 2']
        tableHeadings += ['Rel. freq. 1 (%)', 'Rel. freq. 2 (%)']
        tableHeadings += ['p-values', 'p-values (corrected)']
        tableHeadings += ['Effect size']
        tableHeadings += [oneMinAlphaStr + '% lower CI']
        tableHeadings += [oneMinAlphaStr + '% upper CI']
        tableHeadings += [
            'Power (alpha = ' + str(self.statsTest.results.alpha) + ')'
        ]
        tableHeadings += [
            'Equal sample size (alpha = ' + str(self.statsTest.results.alpha) +
            '; power = ' + str(self.statsTest.results.oneMinusBeta()) + ')'
        ]

        self.summaryTable = GenericTable(tableData, tableHeadings, self)
        self.summaryTable.sort(0, QtCore.Qt.AscendingOrder
                               )  # start with features in alphabetical order
        self.ui.tableSummary.setModel(self.summaryTable)
        self.ui.tableSummary.verticalHeader().setVisible(False)
        self.ui.tableSummary.resizeColumnsToContents()
Ejemplo n.º 3
0
    def populatePowerTestTable(self, tableData):
        testStr = str(self.ui.cboStatTests.currentText())
        signLevel = float(self.ui.cboPowerSignLevel.currentText())
        self.ui.lblPowerTestTitle.setText('Test = ' + testStr +
                                          '; Significance level = ' +
                                          str(signLevel))

        tableHeadings = [str(self.ui.cboProfileLevel.currentText())]
        tableHeadings += [
            str(self.ui.cboSample1.currentText()),
            str(self.ui.cboSample2.currentText())
        ]
        tableHeadings += ['Parent seq. 1', 'Parent seq. 2']
        tableHeadings += ['Rel. freq. 1 (%)', 'Rel. freq. 2 (%)']
        tableHeadings += ['Mean power', 'Std. dev. power']
        tableHeadings += [
            'Mean power (features <= 5 seq.)', 'Std. dev. (features <= 5 seq.)'
        ]
        tableHeadings += [
            'Mean power (features > 5 seq.)', 'Std. dev. (features > 5 seq.)'
        ]

        self.powerTable = GenericTable(tableData, tableHeadings, self)

        self.powerTable.sort(0, QtCore.Qt.AscendingOrder
                             )  # start with features in alphabetical order
        self.ui.tablePower.setModel(self.powerTable)
        self.ui.tablePower.verticalHeader().setVisible(False)
        self.ui.tablePower.resizeColumnsToContents()
Ejemplo n.º 4
0
    def __updateTable(self):
        if self.statsTest.results.profile != None:
            tableData, tableHeadings = self.statsTest.results.tableData(
                self.ui.chkShowActiveFeatures.isChecked())

            self.table = GenericTable(tableData, tableHeadings, self)
            self.table.sort(0, QtCore.Qt.AscendingOrder
                            )  # start with features in alphabetical order

            self.ui.tableStatisticalSummary.setModel(self.table)
            self.ui.tableStatisticalSummary.verticalHeader().setVisible(False)
            self.ui.tableStatisticalSummary.resizeColumnsToContents()
Ejemplo n.º 5
0
    def __init__(self, preferences, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.preferences = preferences

        # initialize GUI
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.lastDirectory = ''

        # load plot plugins
        self.exploratoryPlots = PlotsManager(self.ui.cboExploratoryPlots,
                                             self.ui.plotExploratoryScrollArea,
                                             'Profile scatter plot')
        self.exploratoryPlots.loadPlots(self.preferences,
                                        'plugins/exploratoryPlots/')

        self.statPlots = PlotsManager(self.ui.cboStatPlots,
                                      self.ui.plotStatScrollArea,
                                      'Extended error bar')
        self.statPlots.loadPlots(self.preferences, 'plugins/statPlots/')

        # load statistical technique plugins
        pluginManager = PluginManager(self.preferences)
        self.effectSizeDict = pluginManager.loadPlugins(
            'plugins/effectSizeFilters/')
        pluginManager.populateComboBox(self.effectSizeDict,
                                       self.ui.cboEffectSizeMeasure1,
                                       'Difference between proportions')
        pluginManager.populateComboBox(self.effectSizeDict,
                                       self.ui.cboEffectSizeMeasure2,
                                       'Ratio of proportions')

        self.statTestDict = pluginManager.loadPlugins(
            'plugins/statisticalTests/')
        pluginManager.populateComboBox(self.statTestDict, self.ui.cboStatTests,
                                       'Fisher\'s exact test')

        self.multCompDict = pluginManager.loadPlugins(
            'plugins/multipleComparisonCorrections/')
        pluginManager.populateComboBox(self.multCompDict,
                                       self.ui.cboMultCompMethod,
                                       'No correction')

        self.confIntervMethodDict = pluginManager.loadPlugins(
            'plugins/confidenceIntervalMethods/')
        pluginManager.populateComboBox(self.confIntervMethodDict,
                                       self.ui.cboConfIntervMethods,
                                       'DP: Newcombe-Wilson')

        # initialize class variables
        self.profileTree = ProfileTree()
        self.profile = Profile()
        self.statsTest = StatsTests()
        self.plotWindows = []

        # initialize tables
        self.summaryTable = GenericTable([], [], self)
        self.coverageTable = GenericTable([], [], self)
        self.powerTable = GenericTable([], [], self)

        # connect menu items signals to slots
        self.connect(self.ui.mnuFileOpenProfile, QtCore.SIGNAL('triggered()'),
                     self.loadProfile)
        self.connect(self.ui.mnuFileCreateProfile,
                     QtCore.SIGNAL('triggered()'), self.createProfile)
        self.connect(self.ui.mnuFileAppendCategoryCOG,
                     QtCore.SIGNAL('triggered()'), self.appendCategoriesCOG)
        self.connect(self.ui.mnuFileSavePlot, QtCore.SIGNAL('triggered()'),
                     self.saveImageDlg)
        self.connect(self.ui.mnuFileSaveTable, QtCore.SIGNAL('triggered()'),
                     self.saveTableDlg)
        self.connect(self.ui.mnuFileExit, QtCore.SIGNAL('triggered()'),
                     QtCore.SLOT('close()'))

        self.connect(self.ui.mnuViewSendPlotToWindow,
                     QtCore.SIGNAL('triggered()'), self.sendPlotToWindow)

        self.connect(self.ui.mnuSettingsPreferences,
                     QtCore.SIGNAL('triggered()'), self.prefrencesDlg)

        self.connect(self.ui.mnuHelpAbout, QtCore.SIGNAL('triggered()'),
                     self.openAboutDlg)

        # widget controls in sidebar
        self.connect(self.ui.btnProfileTab, QtCore.SIGNAL('clicked()'),
                     self.profileTabClicked)
        self.connect(self.ui.btnProfileArrow, QtCore.SIGNAL('clicked()'),
                     self.profileTabClicked)
        self.connect(self.ui.btnStatisticsTab, QtCore.SIGNAL('clicked()'),
                     self.statPropTabClicked)
        self.connect(self.ui.btnStatisticsArrow, QtCore.SIGNAL('clicked()'),
                     self.statPropTabClicked)
        self.connect(self.ui.btnFilteringTab, QtCore.SIGNAL('clicked()'),
                     self.filteringTabClicked)
        self.connect(self.ui.btnFilteringArrow, QtCore.SIGNAL('clicked()'),
                     self.filteringTabClicked)

        # connect profile widget signals to slots
        self.connect(self.ui.cboSample1, QtCore.SIGNAL('activated(QString)'),
                     self.hierarchicalLevelsChanged)
        self.connect(self.ui.cboSample2, QtCore.SIGNAL('activated(QString)'),
                     self.hierarchicalLevelsChanged)
        self.connect(self.ui.btnSample1Colour, QtCore.SIGNAL('clicked()'),
                     self.sample1ColourDlg)
        self.connect(self.ui.btnSample2Colour, QtCore.SIGNAL('clicked()'),
                     self.sample2ColourDlg)
        self.connect(self.ui.cboProfileLevel,
                     QtCore.SIGNAL('activated(QString)'),
                     self.profileLevelChanged)
        self.connect(self.ui.cboParentalLevel,
                     QtCore.SIGNAL('activated(QString)'),
                     self.parentLevelChanged)

        # connect statistical test widget signals to slots
        self.connect(self.ui.cboStatTests, QtCore.SIGNAL('activated(QString)'),
                     self.statTestPropChanged)
        self.connect(self.ui.cboSignTestType,
                     QtCore.SIGNAL('activated(QString)'),
                     self.statTestPropChanged)
        self.connect(self.ui.cboConfIntervMethods,
                     QtCore.SIGNAL('activated(QString)'),
                     self.statTestPropChanged)
        self.connect(self.ui.cboNominalCoverage,
                     QtCore.SIGNAL('activated(QString)'),
                     self.statTestPropChanged)
        self.connect(self.ui.btnRunTest, QtCore.SIGNAL('clicked()'),
                     self.runTest)
        self.connect(self.ui.cboMultCompMethod,
                     QtCore.SIGNAL('activated(QString)'),
                     self.multCompCorrectionChanged)
        self.connect(self.ui.btnMultCompCorrectionInfo,
                     QtCore.SIGNAL('clicked()'), self.multCompCorrectionInfo)

        # connect filtering test widget signals to slots
        self.connect(self.ui.chkSelectFeatures, QtCore.SIGNAL('toggled(bool)'),
                     self.selectFeaturesCheckbox)
        self.connect(self.ui.btnSelectFeatures, QtCore.SIGNAL('clicked()'),
                     self.selectFeaturesDlg)

        self.connect(self.ui.chkEnableSignLevelFilter,
                     QtCore.SIGNAL('toggled(bool)'), self.filteringPropChanged)
        self.connect(self.ui.spinSignLevelFilter,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)

        self.connect(self.ui.cboSeqFilter, QtCore.SIGNAL('activated(QString)'),
                     self.seqFilterChanged)
        self.connect(self.ui.chkEnableSeqFilter,
                     QtCore.SIGNAL('toggled(bool)'), self.filteringPropChanged)
        self.connect(self.ui.spinFilterSample1,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)
        self.connect(self.ui.spinFilterSample2,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)

        self.connect(self.ui.cboParentSeqFilter,
                     QtCore.SIGNAL('activated(QString)'),
                     self.parentSeqFilterChanged)
        self.connect(self.ui.chkEnableParentSeqFilter,
                     QtCore.SIGNAL('toggled(bool)'), self.filteringPropChanged)
        self.connect(self.ui.spinParentFilterSample1,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)
        self.connect(self.ui.spinParentFilterSample2,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)

        self.connect(self.ui.radioOR, QtCore.SIGNAL('clicked()'),
                     self.filteringPropChanged)
        self.connect(self.ui.radioAND, QtCore.SIGNAL('clicked()'),
                     self.filteringPropChanged)

        self.connect(self.ui.cboEffectSizeMeasure1,
                     QtCore.SIGNAL('activated(QString)'),
                     self.changeEffectSizeMeasure)
        self.connect(self.ui.cboEffectSizeMeasure2,
                     QtCore.SIGNAL('activated(QString)'),
                     self.changeEffectSizeMeasure)
        self.connect(self.ui.spinMinEffectSize1,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)
        self.connect(self.ui.spinMinEffectSize2,
                     QtCore.SIGNAL('valueChanged(QString)'),
                     self.filteringPropChanged)
        self.connect(self.ui.chkEnableEffectSizeFilter1,
                     QtCore.SIGNAL('toggled(bool)'), self.filteringPropChanged)
        self.connect(self.ui.chkEnableEffectSizeFilter2,
                     QtCore.SIGNAL('toggled(bool)'), self.filteringPropChanged)

        self.connect(self.ui.btnApplyFilters, QtCore.SIGNAL('clicked()'),
                     self.applyFilters)

        # connect exploratory plot page widget signals to slots
        self.connect(self.ui.cboExploratoryPlots,
                     QtCore.SIGNAL('activated(QString)'),
                     self.exploratoryPlotUpdate)
        self.connect(self.ui.btnExploratoryConfigurePlot,
                     QtCore.SIGNAL('clicked()'), self.exploratoryPlotConfigure)

        # connect statistical plot page widget signals to slots
        self.connect(self.ui.cboStatPlots, QtCore.SIGNAL('activated(QString)'),
                     self.statPlotUpdate)
        self.connect(self.ui.btnStatConfigurePlot, QtCore.SIGNAL('clicked()'),
                     self.statPlotConfigure)
        self.connect(self.ui.cboHighlightHierarchyExploratory,
                     QtCore.SIGNAL('activated(QString)'),
                     self.highlightHierarchyExploratoryChanged)
        self.connect(self.ui.cboHighlightFeatureExploratory,
                     QtCore.SIGNAL('activated(QString)'),
                     self.highlightFeatureExploratoryChanged)
        self.connect(self.ui.cboHighlightHierarchyStats,
                     QtCore.SIGNAL('activated(QString)'),
                     self.highlightHierarchyStatsChanged)
        self.connect(self.ui.cboHighlightFeatureStats,
                     QtCore.SIGNAL('activated(QString)'),
                     self.highlightFeatureStatsChanged)

        # connect paired profile page widget signals to slots
        self.connect(self.ui.chkShowActiveFeatures,
                     QtCore.SIGNAL('toggled(bool)'), self.populateSummaryTable)

        # connect CI coverage page widget signals to slots
        self.connect(self.ui.btnConfIntervCoverage, QtCore.SIGNAL('clicked()'),
                     self.confIntervCoverage)

        # connect CI coverage page widget signals to slots
        self.connect(self.ui.btnPowerTest, QtCore.SIGNAL('clicked()'),
                     self.powerTest)

        # initialize dynamic GUI elements
        self.seqFilterChanged()
        self.parentSeqFilterChanged()
        self.setSample1Colour(self.preferences['Sample 1 colour'])
        self.setSample2Colour(self.preferences['Sample 2 colour'])

        # show window maximized
        self.resize(1100, 700)
        self.showMaximized()