Ejemplo n.º 1
0
    def RunEnd(self):
        """Restart GUI and needed variables. This is a minimal implementation. 
			Override as needed 
		"""
        #region ---------------------------------------------------------> Msg
        if self.runEnd:
            dtsWindow.MessageDialog(
                'success',
                f"{config.msg['Success']}\n\nRunning time: {self.deltaT}",
                parent=self.parent,
            )
        else:
            pass
        #endregion ------------------------------------------------------> Msg
        #region -------------------------------------------------> Restart GUI
        self.btnGroup.btnRun.Enable()
        self.btnGroup.btnRun.SetLabel(config.label['ButtonGroup']['Run'])
        self.statusbar.SetStatusText("")
        if self.runEnd:
            #--> Remove value of Output File to avoid overwriting it
            self.outFile.tc.SetValue("")
        else:
            pass
        #endregion ----------------------------------------------> Restart GUI

        #region -------------------------------------------> Restart variables
        self.runEnd = False
        #endregion ----------------------------------------> Restart variables
        return True
Ejemplo n.º 2
0
    def WriteOutput(self):
        """ Write the output """
        #region ---------------------------------------------------------> Msg
        msg = config.msg['Step']['Output']
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #endregion ------------------------------------------------------> Msg

        #region ---------------------------> Check there is something to write
        if self.ptotal == 0:
            msg = config.msg['Error'][self.name]['NoPeptide']
            dtsWindow.MessageDialog('errorF', msg, self)
            return False
        else:
            pass
        #endregion ------------------------> Check there is something to write

        #region -------------------------------------------------------> Write
        #--> Write input data
        oFile = open(self.oFile, 'w')
        oFile.write('Input data:\n')
        dtsFF.WriteDict2File(oFile, self.d)
        oFile.write('\n')
        #---
        #--> Write output
        oFile.write('Output data:\n')
        oFile.write(str(self.header) + '\n')
        dtsFF.WriteList2File(oFile, self.dataO)
        oFile.write('\n')
        #---
        #--> File last line
        dtsFF.WriteLastLine2File(oFile, config.title['MainW'])
        #---
        #--> Close file and final summary in statusbar
        oFile.close()

        msg = (f"Final count --> Total Lines: {self.ltotal}, "
               f"Empty Lines: {self.lempty}, "
               f"Peptides: {self.ptotal}")
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #---
        #endregion ----------------------------------------------------> Write

        return True

    #---
    #endregion ------------------------------------------------> Class methods


#---
#endregion ----------------------------------------------------------> Classes
Ejemplo n.º 3
0
    def WriteOutput(self):
        """ Write the output """
        #region ---------------------------------------------------------> Msg
        msg = config.msg['Step']['Output']
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #endregion ------------------------------------------------------> Msg

        #region ---------------------------> Check there is something to write
        if self.protsselT == 0:
            msg = config.msg['Error'][self.name]['NoProtFound']
            dtsWindow.MessageDialog('errorF', msg, self)
            return False
        else:
            pass
        #endregion ------------------------> Check there is something to write

        #region -------------------------------------------------------> Write
        #--> Write input data
        oFile = open(self.oFile, 'w')
        oFile.write('Input data:\n')
        dtsFF.WriteDict2File(oFile, self.d)
        oFile.write('\n')
        #---
        #--> Write output
        oFile.write('Output data:\n')
        header = 'Gene\tProtein\t' + "\t".join(
            ['1-' + str(x) for x in self.resExt])
        oFile.write(header + '\n')

        self.dataO.sort(key=itemgetter(0, 1))
        dtsFF.WriteList2File(oFile, self.dataO)
        oFile.write('\n')
        #---
        #--> File last line
        dtsFF.WriteLastLine2File(oFile, config.title['MainW'])
        #---
        #--> Close file and final summary in statusbar
        oFile.close()
        msg = (f"Final count --> Total lines: {self.ltotal}, "
               f"Empty lines: {self.lempty}, "
               f"Total Proteins: {self.prottotal}, "
               f"Matched Proteins:  {self.protsselT}")
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #---
        #endregion ----------------------------------------------------> Write

        return True
Ejemplo n.º 4
0
    def OnOkCheck(self, event):
        """Check widgets created after window initialization and perform checks
			involving several widgets 
		
			Parameters
			----------
			event : wx.Event
				Information about the event
		"""
        #region ----------------------------------------------> Skip if Cancel
        if event.GetEventObject().GetId() == wx.ID_OK:
            pass
        else:
            event.Skip()
            return True
        #endregion -------------------------------------------> Skip if Cancel

        #region ---------------------------------------------------> Variables
        #--> For unique values
        values = []
        #--> For numbers increase. Starts in 0 because validator check n > 0
        a = 0
        #--> To track all NA
        valuesNA = 0
        #endregion ------------------------------------------------> Variables

        #region -------------------------------------------------------> Check
        #--> Make sure there are widgets to check
        if self.tcPosList is None:
            event.Skip()
            return False
        else:
            pass
        #--> Check values
        for k, v in enumerate(self.tcPosList):
            #--> Skip first elements, it is the header
            if k == 0:
                continue
            else:
                pass
            #--> Get value and fill valuesNA
            if (val := v.GetValue()) == 'NA':
                valuesNA += 1
            else:
                pass
            #--> If all NA continue
            if valuesNA == k:
                continue
            elif valuesNA > 0:
                msg = config.msg['Error'][self.name]['Position']
                dtsWindow.MessageDialog('errorF', msg, parent=self)
                return False
            else:
                pass
            #--> Check value
            if v.GetValidator().Validate(self):
                pass
            else:
                return False
            #--> Check unique values & increasing
            if (p := int(val)) not in values:
                if p > a:
                    values.append(p)
                    a = p
                else:
                    msg = config.msg['Error'][self.name]['PosIncrease']
                    dtsWindow.MessageDialog('errorF', msg, parent=self)
                    return False
Ejemplo n.º 5
0
                pass
            else:
                return False
            #--> Check unique values & increasing
            if (p := int(val)) not in values:
                if p > a:
                    values.append(p)
                    a = p
                else:
                    msg = config.msg['Error'][self.name]['PosIncrease']
                    dtsWindow.MessageDialog('errorF', msg, parent=self)
                    return False
            else:
                msg = config.msg['Error'][self.name]['PosUnique']
                msg = msg + f"\n\nIncorrect value: {p}\n"
                dtsWindow.MessageDialog('errorF', msg, parent=self)
                return False
        #--> Set Pos
        if valuesNA == k:
            self.Pos = False
        else:
            self.Pos = True
        #endregion ----------------------------------------------------> Check

        event.Skip()

    #---

    def OnExport(self, tc):
        """Export the postions & AA to the given wx.TextCtrl
Ejemplo n.º 6
0
    def CheckInput(self):
        """Chek user input. Overrides BaseTab.CheckInput"""
        #region ---------------------------------------------------------> Msg
        msgM = config.msg['Step']['Check']
        #endregion ------------------------------------------------------> Msg

        #region -------------------------------------------> Individual Fields
        msg = f"{msgM}: {config.label[self.name]['FastaFile']}"
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        if self.fastaFile.tc.GetValidator().Validate(self):
            pass
        else:
            return False

        msg = f"{msgM}: {config.label[self.name]['GeneFile']}"
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        if self.geneFile.tc.GetValidator().Validate(self):
            pass
        else:
            return False

        msg = f"{msgM}: {config.label[self.name]['OutFile']}"
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        if self.outFile.tc.GetValidator().Validate(self):
            pass
        else:
            return False

        msg = f"{msgM}: {config.label[self.name]['ResidueExtract']}"
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        if self.residueExtract.tc.GetValidator().Validate(self):
            pass
        else:
            return False
        #endregion ----------------------------------------> Individual Fields

        #region ------------------------------------------------> File content
        #--> Gene names
        self.gFile = self.geneFile.tc.GetValue()
        self.geneList = []
        with open(self.gFile, 'r') as gFile:
            for line in gFile:
                g = "".join(line.split())
                g = g.replace('"', "")
                if g == '':
                    continue
                else:
                    pass
                self.geneList.append(g)
                if ";" in g:
                    [self.geneList.append(x) for x in g.split(";")]
                else:
                    pass
        if not self.geneList:
            msg = config.error[self.name]['NoGene']
            dtsWindow.MessageDialog('errorF', msg, parent=self.parent)
            return False
        else:
            pass
        #---
        #endregion ---------------------------------------------> File content

        return True
Ejemplo n.º 7
0
    def WriteOutput(self):
        """"""
        #region ---------------------------------------------------------> Msg
        msg = config.msg['Step']['Output']
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #endregion ------------------------------------------------------> Msg

        #region ---------------------------> Check there is something to write
        if self.countTotal == 0:
            msg = config.msg['Error'][self.name]['NoConsensusFound']
            dtsWindow.MessageDialog('errorF', msg, self)
            return False
        else:
            pass
        #endregion ------------------------> Check there is something to write

        #region -------------------------------------------------------> Write
        #--> Write input data
        oFile = open(self.oFile, 'w')
        oFile.write('Input data:\n')
        dtsFF.WriteDict2File(oFile, self.d)
        oFile.write('\n')
        #---
        #--> Write output
        oFile.write('Output data:\n')
        oFile.write(f"Total proteins\t{self.prottotal}\n")
        oFile.write(f"Complete proteins\t{self.prottotal-self.protfrag}\n")
        oFile.write(f"Fragment proteins\t{self.protfrag}\n")
        oFile.write(f"Consensus sequence in proteins\t{len(self.protSeq)}\n")

        header = f'\nCount\tSequence\tPercent\tProtein IDs'
        oFile.write(header + '\n')
        for k, v in self.seqProt.items():
            oFile.write(
                f"{v['Count']}\t{k}\t{v['PerCent']}\t{v['pID'][0:-2]}\n")

        if not self.Pos:
            oFile.write(f"\nProtein IDs\tSequences\n")
            for k, v in self.protSeq.items():
                oFile.write(f"{k}\t{v[0:-2]}\n")
            oFile.write("\n")
        else:
            pass
        #---
        #--> File last line
        if self.Pos:
            oFile.write("\n")
        else:
            pass
        dtsFF.WriteLastLine2File(oFile, config.title['MainW'])
        #---
        #--> Close file and final summary in statusbar
        oFile.close()
        msg = (f"Analysing --> Total lines: {self.ltotal}, "
               f"Empty lines: {self.lempty}, "
               f"Total proteins: {self.prottotal}, "
               f"Matched proteins: {len(self.protSeq)}")
        wx.CallAfter(dtsWidget.StatusBarUpdate, self.statusbar, msg)
        #---
        #endregion ----------------------------------------------------> Write

        return True