annotate uniqprimer-0.5.0/build/lib/primertools/primermanager.py @ 0:cdd8f911ad91 draft

Uploaded
author dereeper
date Fri, 07 Oct 2016 04:18:11 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
1 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
2 Created on Jan 1, 2011
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
3
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
4 @author: John L. Herndon
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
5 @contact: herndon@cs.colostate.edu
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
6 @organization: Colorado State University
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
7 @group: Computer Science Department, Asa Ben-Hur's laboratory
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
8 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
9
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
10 import utils
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
11 import tempfile
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
12 import programs
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
13 import eprimerparser
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
14 import primersearchutils
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
15 import fastaparser
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
16 import exceptions
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
17
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
18
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
19
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
20
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
21 class PrimerManager( object ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
22 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
23 A class used to find primers given a set of sequences.
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
24 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
25
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
26 def __init__( self, eprimerOptions ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
27 self.eprimer = programs.Eprimer( eprimerOptions )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
28 self.primersearch = programs.PrimerSearch( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
29
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
30
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
31 def findPrimers( self, sequences, outputFile, primerpairs = 20, returnPrimers = False ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
32 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
33 A method to find a set of primers based on the given sequences
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
34 '''
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
35
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
36 utils.logMessage( "PrimerManager::findPrimer(s )", "writing sequences to a fasta file" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
37
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
38 #eleminate all sequences that are lees than the desired amplification size...
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
39
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
40 if len( sequences ) == 4 :
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
41 print sequences
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
42 sequences = filter( lambda x: len( x ) >= 200, sequences )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
43
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
44 primerFastaFile = utils.getTemporaryDirectory( ) + "/sequenceForEprimer.fasta"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
45 fastaparser.writeFastaFile( sequences, primerFastaFile )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
46
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
47 utils.logMessage( "PrimerManager::findPrimers( )", "executing eprimer3 program" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
48 self.eprimer.execute( [ primerFastaFile, outputFile ] )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
49 utils.logMessage( "PrimerManager::findPrimer( )", "eprimer3 file {0} created. Parsing for primers.".format( outputFile ) )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
50
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
51 primers = eprimerparser.parsePrimerSequences( outputFile )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
52
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
53 utils.logMessage( "PrimerManager::findPrimers( )", "parsing for sequences complete" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
54
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
55 if returnPrimers == True:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
56 return primers
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
57
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
58
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
59 def getPrimers( self, sequences ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
60
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
61 utils.logMessage( "PrimerManager::getCommonPrimers", "finding primers that are common to all include files" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
62
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
63 if len( sequences ) == 0:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
64 raise utils.NoPrimersExistException( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
65
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
66 referenceEPrimerFile = utils.getTemporaryDirectory( ) + "/referenceprimers.ep3"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
67
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
68 #run eprimer to find primers in the reference file
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
69 primers = self.findPrimers( sequences, referenceEPrimerFile, 20, True )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
70
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
71
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
72 if len( primers ) == 0:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
73 raise utils.NoPrimersExistException( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
74
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
75 return primers
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
76
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
77 def crossValidatePrimers( self, primers, excludeFile ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
78
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
79 excludeSequences = fastaparser.parseFastaFile( excludeFile )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
80
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
81 #write a primer search input file with using the primers argument
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
82 primerInputFileName = utils.getTemporaryDirectory( ) + "/tmpinputprimers.ps"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
83 primerOutputFileName = utils.getTemporaryDirectory( ) + "/tmpoutputprimers.ps"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
84 primersearchutils.writePrimerSearchInputFile( primers, primerInputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
85
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
86 utils.logMessage( "PrimerManager::crossValidatePrimers", "finding primers that are not in the supplied exclude file" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
87 #run primer search to identify the primers
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
88 self.primersearch.execute( [ excludeFile, primerInputFileName, primerOutputFileName, "0" ] )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
89
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
90 #read the found primers from the file
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
91 commonPrimers = primersearchutils.parsePrimerSearchFile( primerOutputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
92
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
93 #compose a list of primers that are not found in the exclude file...
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
94 returnValue = [ ]
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
95
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
96 for primer in primers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
97 if primer.id not in commonPrimers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
98 returnValue.append( primer )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
99
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
100 utils.logMessage( "PrimerManager::crossValidatePrimers", "{0} unique primers identified out of {1}".format( len( returnValue ), len( primers ) ) )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
101
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
102 if len( returnValue ) == 0:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
103 raise utils.NoPrimersExistException( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
104
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
105 return returnValue
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
106
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
107
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
108