Mercurial > repos > dereeper > uniqprimer
diff uniqprimer-0.5.0/build/lib/primertools/programs.py @ 3:3249d78ecfc2 draft
Uploaded
author | dereeper |
---|---|
date | Mon, 03 Jan 2022 09:56:55 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uniqprimer-0.5.0/build/lib/primertools/programs.py Mon Jan 03 09:56:55 2022 +0000 @@ -0,0 +1,141 @@ +''' +Created on Jan 1, 2011 + +@author: John L. Herndon +@contact: herndon@cs.colostate.edu +@organization: Colorado State University +@group: Computer Science Department, Asa Ben-Hur's laboratory +''' + + +import utils +import os +import subprocess + + +class ProgramBase( object ): + + def __init__( self ): + + self.programName = None + self.proc = None + + def getProcessArgs( self, args ): + crash #abstract + + def execute( self, args, async = False ): + ''' + run the nucmer program with a given compare file and an exclude file + ''' + + utils.logMessage( "ProgramBase::Execute( )", "Running the {0} program.".format( self.programName ) ) + + args, outputFile = self.getProcessArgs( args ) + + print "*** Running {0} ***".format( self.programName ) + + utils.logList( "ProgramBase::Execute( )", args ) + + proc = subprocess.Popen( args ) + + if async == False: + #wait for the nucmer instance to finish + proc.wait( ) + print "*** Running {0} Complete ***".format( self.programName ) + + #return the name of the coords file + return outputFile + + def isFinished( self ): + ifIsFinished + +class Nucmer( ProgramBase ): + + def __init__( self ): + #if we can't find the nucemer binary, throw + nucmerPath = utils.search_file( 'nucmer' ) + ProgramBase.__init__( self ) + if nucmerPath is None: + raise utils.ProgramNotFoundException( 'nucmer', "Please ensure that the MUMmer package is installed and configured on your system." ) + + self.nucmer = nucmerPath + + self.programName = "nucmer" + self.outputExtension = ".coords" + + + def getProcessArgs( self, inputArgs ): + + + time = utils.getTimeStamp( ) + + identifier = "nucmer_alignments" + args = [ self.nucmer, '-p', identifier, '-o', '--minmatch', '300', '--maxgap', '1' ] + + args.extend( inputArgs ) + + outputFile = "{0}.coords".format( identifier ) + + return args, outputFile + +class Eprimer( ProgramBase ): + + def __init__( self, eprimerOptions ): + + self.programName = "EPrimer3" + self.options = eprimerOptions + + primer3corePath = utils.search_file( "primer3_core" ) + if primer3corePath is None: + raise utils.ProgramNotFoundException( "primer3_core", "Please ensure that the primer3 package is installed on your system. It can be obtained from http://primer3.sourceforge.net/" ) + + eprimerPath = utils.search_file( "eprimer3" ) + if eprimerPath is None: + raise utils.ProgramNotFoundException( 'eprimer3', "Please ensure that the EMBOSS package is installed and configured on your system." ) + + self.primer3core = primer3corePath + self.eprimer3 = eprimerPath + + def getProcessArgs( self, inputArgs ): + + #todo - allow user to determine output file location/name + + inputFasta = inputArgs[ 0 ] + outputFile = inputArgs[ 1 ] + args = [ self.eprimer3, inputFasta, outputFile, '-numreturn', '2', '-prange', self.options.getProductRange( ), '-osize', str( self.options.getPrimerSize( ) ), + '-minsize', str( self.options.getMinPrimerSize( ) ), '-maxsize', str( self.options.getMaxPrimerSize( ) )] + + return args, outputFile + +class PrimerSearch( ProgramBase ): + def __init__( self ): + + self.programName = "PrimerSearch" + primerSearchPath = utils.search_file( "primersearch" ) + if primerSearchPath is None: + raise utils.ProgramNotFoundException( "primersearch", "Please ensure that the EMBOSS package is installed on your system." ) + + self.primerSearch = primerSearchPath + + def getProcessArgs( self, inputArgs ): + ''' + usage for this program: inputArgs is an array length 4 + inputArgs[0] = sequence file + inputArgs[1] = primer pairs file + inputArgs[2] = output file name + inputArgs[3] = percent mismatch + ''' + + args = [ self.primerSearch ] + args.extend( [ '-seqall', inputArgs[ 0 ] ] ) + args.extend( [ '-infile', inputArgs[ 1 ] ] ) + args.extend( [ '-mismatchpercent', inputArgs[ 3 ] ] ) + args.extend( [ '-outfile', inputArgs[ 2 ] ] ) + + + return args, inputArgs[ 2 ] + + + + +