diff uniqprimer-0.5.0/primertools/primermanager.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/primertools/primermanager.py	Mon Jan 03 09:56:55 2022 +0000
@@ -0,0 +1,137 @@
+'''
+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 tempfile
+import programs
+import eprimerparser
+import primersearchutils
+import fastaparser
+import exceptions
+
+
+
+
+class PrimerManager( object ):
+    '''
+    A class used to find primers given a set of sequences.
+    '''
+
+    def __init__( self, eprimerOptions ):
+        self.eprimer = programs.Eprimer( eprimerOptions )
+        self.primersearch = programs.PrimerSearch( )
+    
+                
+    def findPrimers( self, sequences, outputFile, primerpairs = 20, returnPrimers = False ):
+        '''
+        A method to find a set of primers based on the given sequences
+        '''
+        
+        utils.logMessage( "PrimerManager::findPrimer(s )", "writing sequences to a fasta file" )
+        
+        #eleminate all sequences that are lees than the desired amplification size...
+       
+        if len( sequences ) == 4 :
+            print sequences
+        sequences = filter( lambda x: len( x ) >= 200, sequences )
+        
+        primerFastaFile = utils.getTemporaryDirectory( ) + "/sequenceForEprimer.fasta"
+        fastaparser.writeFastaFile( sequences, primerFastaFile )
+
+        utils.logMessage( "PrimerManager::findPrimers( )", "executing eprimer3 program" )
+        self.eprimer.execute( [ primerFastaFile, outputFile ] )
+        utils.logMessage( "PrimerManager::findPrimer( )", "eprimer3 file {0} created. Parsing for primers.".format( outputFile ) )
+        
+        primers = eprimerparser.parsePrimerSequences( outputFile )
+        
+        utils.logMessage( "PrimerManager::findPrimers( )", "parsing for sequences complete" )
+        
+        if returnPrimers == True:
+            return primers
+        
+    
+    def getPrimers( self, sequences ):
+        
+        utils.logMessage( "PrimerManager::getCommonPrimers", "finding primers that are common to all include files" )
+            
+        if len( sequences ) == 0:
+            raise utils.NoPrimersExistException( )
+        
+        referenceEPrimerFile = utils.getTemporaryDirectory( ) + "/referenceprimers.ep3"
+        
+        #run eprimer to find primers in the reference file
+        primers = self.findPrimers( sequences, referenceEPrimerFile, 20, True )
+        
+        
+        if len( primers ) == 0:
+             raise utils.NoPrimersExistException( )
+        
+        return primers
+ 
+    def crossValidatePrimers2( self, primers, includeFile, j ):    
+        includeSequences = fastaparser.parseFastaFile( includeFile )
+        #write a primer search input file with using the primers argument
+        primerInputFileName = utils.getTemporaryDirectory( ) + "/tmpinputprimers2.ps" + str(j)
+        primerOutputFileName = utils.getTemporaryDirectory( ) + "/tmpoutputprimers2.ps" + str(j)
+        primersearchutils.writePrimerSearchInputFile( primers, primerInputFileName )
+
+        utils.logMessage( "PrimerManager::crossValidatePrimers", "finding primers that are in the supplied include file" )
+        #run primer search to identify the primers
+        self.primersearch.execute( [ includeFile, primerInputFileName, primerOutputFileName, "0" ] )
+
+        #read the found primers from the file
+        commonPrimers = primersearchutils.parsePrimerSearchFile( primerOutputFileName )
+
+        #compose a list of primers that are not found in the exclude file...
+        returnValue = [ ]
+
+        for primer in primers:
+            if primer.id in commonPrimers:
+                returnValue.append( primer )
+
+        utils.logMessage( "PrimerManager::crossValidatePrimers", "{0} unique primers identified out of {1}".format( len( returnValue ), len( primers ) ) )
+
+        if len( returnValue  ) == 0:
+            raise utils.NoPrimersExistException( )
+
+        return returnValue
+
+    
+    def crossValidatePrimers( self, primers, excludeFile ):             
+        
+        excludeSequences = fastaparser.parseFastaFile( excludeFile )
+        
+        #write a primer search input file with using the primers argument
+        primerInputFileName = utils.getTemporaryDirectory( ) + "/tmpinputprimers.ps"
+        primerOutputFileName = utils.getTemporaryDirectory( ) + "/tmpoutputprimers.ps"
+        primersearchutils.writePrimerSearchInputFile( primers, primerInputFileName )
+        
+        utils.logMessage( "PrimerManager::crossValidatePrimers", "finding primers that are not in the supplied exclude file" )
+        #run primer search to identify the primers
+        self.primersearch.execute( [ excludeFile, primerInputFileName, primerOutputFileName, "10" ] )
+        
+        #read the found primers from the file
+        commonPrimers = primersearchutils.parsePrimerSearchFile( primerOutputFileName )
+        
+        #compose a list of primers that are not found in the exclude file...
+        returnValue = [ ]
+        
+        for primer in primers:
+            if primer.id not in commonPrimers:
+                returnValue.append( primer )
+        
+        utils.logMessage( "PrimerManager::crossValidatePrimers", "{0} unique primers identified out of {1}".format( len( returnValue ), len( primers ) ) )
+        
+        if len( returnValue  ) == 0:
+            raise utils.NoPrimersExistException( )
+        
+        return returnValue
+    
+    
+