Mercurial > repos > yufei-luo > s_mart
view commons/launcher/NWalignProgramLauncher.py @ 19:9bcfa7936eec
Deleted selected files
author | m-zytnicki |
---|---|
date | Mon, 29 Apr 2013 03:23:29 -0400 |
parents | 94ab73e8a190 |
children |
line wrap: on
line source
#!/usr/bin/env python ##@file # Launch NWalign (pairwise alignment). # # options: # -h: this help # -i: name of the input file (queries, format='fasta') # -s: name of the subject file (format='fasta') # -p: parameters for 'NWalign' (default='-d 2') # -o: name of the output file (format='align', default=inFile+'.align') # -c: clean # -v: verbosity level (default=0/1) import os import sys from pyRepet.launcher.AbstractProgramLauncher import AbstractProgramLauncher from commons.core.seq.AlignedBioseqDB import AlignedBioseqDB from commons.core.coord.AlignUtils import AlignUtils class NWalignProgramLauncher( AbstractProgramLauncher ): """ Launch NWalign (pairwise alignment). """ def __init__( self ): """ Constructor. """ AbstractProgramLauncher.__init__( self ) self._prgName = "NWalign" self._formatInFile = "fasta" self._sbjFile = "" self._prgParam = "" self._cmdLineSpecificOptions = "s:p:o:" def getSpecificHelpAsString( self ): """ Return the specific help as a string. """ string = "" string += "\nspecific options:" string += "\n -s: name of the subject file (format='fasta')" string += "\n -p: parameters for '%s'" % ( self.getProgramName() ) string += "\n -o: name of the output file (format='align', default=inFile+'.align')" return string def setASpecificAttributeFromCmdLine( self, o, a="" ): """ Set a specific attribute from the command-line arguments. """ if o =="-s": self.setSubjectFile( a ) elif o == "-p": self.setProgramParameters( a ) elif o == "-o": self.setOutputFile( a ) def setSubjectFile( self, arg ): self._sbjFile = arg def getSubjectFile( self ): return self._sbjFile def checkSpecificAttributes( self ): """ Check the specific attributes before running the program. """ if self._sbjFile == "": string = "ERROR: missing subject file (-s)" print string print self.getHelpAsString() sys.exit(1) if self.getOutputFile() == "": self.setOutputFile( "%s.align" % ( self.getInputFile() ) ) def setWrapperCommandLine( self ): """ Set the command-line of the wrapper. Required for NWalignClusterLauncher. """ self._wrpCmdLine = self.getWrapperName() self._wrpCmdLine += " -i %s" % ( self.getInputFile() ) self._wrpCmdLine += " -s %s" % ( self.getSubjectFile() ) if self.getProgramParameters() != "": self._wrpCmdLine += " -p '%s'" % ( self.getProgramParameters() ) if self.getOutputFile() == "": self.setOutputFile( "%s.align" % ( self.getInputFile() ) ) self._wrpCmdLine += " -o %s" % ( self.getOutputFile() ) if self.getClean(): self._wrpCmdLine += " -c" self._wrpCmdLine += " -v %i" % ( self.getVerbosityLevel() ) def setProgramCommandLine( self ): """ Set the command-line of the program. """ self._prgCmdLine = self.getProgramName() if self.getProgramParameters() != "": self._prgCmdLine += " %s" % ( self.getProgramParameters() ) self._prgCmdLine += " -o %s.afa" % ( self.getInputFile() ) self._prgCmdLine += " -v %i" % ( self.getVerbosityLevel() ) self._prgCmdLine += " %s" % ( self.getSubjectFile() ) self._prgCmdLine += " %s" % ( self.getInputFile() ) def setListFilesToKeep( self ): """ Set the list of files to keep. """ if self.getOutputFile() == "": self.setOutputFile( "%s.afa" % ( self.getInputFile() ) ) self.appendFileToKeep( self.getOutputFile() ) def postprocess( self ): absDB = AlignedBioseqDB( "%s.afa" % ( self.getInputFile() ) ) lHeaders = absDB.getHeaderList() queryHeader = lHeaders[0] subjectHeader = lHeaders[1] queryLength = absDB.fetch( queryHeader ).getLength() subjectLength = absDB.fetch( subjectHeader ).getLength() lAligns = absDB.getAlignList( queryHeader, subjectHeader ) for i in lAligns: if "re-oriented" in i.getQueryName(): i.setQueryName( queryHeader.replace(" re-oriented","") ) start = i.getQueryStart() end = i.getQueryEnd() i.setQueryStart( queryLength - end + 1 ) i.setQueryEnd( queryLength - start + 1 ) if "re-oriented" in i.getSubjectName(): i.setSubjectName( subjectHeader.replace(" re-oriented","") ) start = i.getSubjectStart() end = i.getSubjectEnd() i.setSubjectEnd( subjectLength - end + 1 ) i.setSubjectStart( subjectLength - start + 1 ) if not i.isQueryOnDirectStrand(): i.reverse() AlignUtils.writeListInFile( lAligns, self.getOutputFile() ) os.remove( "%s.afa" % ( self.getInputFile() ) ) def setSummary( self ): self._summary = "input file: %s" % ( self.getInputFile() ) self._summary += "\nsubject file: %s" % ( self.getSubjectFile() ) self._summary += "\nparameters: %s" % ( self.getProgramParameters() ) if self.getOutputFile() == "": self.setOutputFile( "%s.align" % ( self.getInputFile() ) ) self._summary += "\noutput file: %s" % ( self.getOutputFile() ) def run( self ): """ Run the program. """ self.start() self.setProgramCommandLine() cmd = self.getProgramCommandLine() if self.getVerbosityLevel() > 0: print "LAUNCH: %s" % ( cmd ) sys.stdout.flush() exitStatus = os.system( cmd ) if exitStatus != 0: string = "ERROR: program '%s' returned exit status '%i'" % ( self.getProgramName(), exitStatus ) print string sys.exit(1) self.postprocess() self.end() if __name__ == "__main__": i = NWalignProgramLauncher() i.setAttributesFromCmdLine() i.run()