annotate uniqprimer-0.5.0/primertools/primermanager.py @ 2:05ae1ce478bc draft default tip

Uploaded
author dereeper
date Fri, 08 Jun 2018 10:49:07 -0400
parents 2321523366d7
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 crossValidatePrimers2( self, primers, includeFile, j ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
78 includeSequences = fastaparser.parseFastaFile( includeFile )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
79 #write a primer search input file with using the primers argument
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
80 primerInputFileName = utils.getTemporaryDirectory( ) + "/tmpinputprimers2.ps" + str(j)
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
81 primerOutputFileName = utils.getTemporaryDirectory( ) + "/tmpoutputprimers2.ps" + str(j)
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
82 primersearchutils.writePrimerSearchInputFile( primers, primerInputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
83
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
84 utils.logMessage( "PrimerManager::crossValidatePrimers", "finding primers that are in the supplied include file" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
85 #run primer search to identify the primers
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
86 self.primersearch.execute( [ includeFile, primerInputFileName, primerOutputFileName, "0" ] )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
87
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
88 #read the found primers from the file
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
89 commonPrimers = primersearchutils.parsePrimerSearchFile( primerOutputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
90
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
91 #compose a list of primers that are not found in the exclude file...
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
92 returnValue = [ ]
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
93
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
94 for primer in primers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
95 if primer.id in commonPrimers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
96 returnValue.append( primer )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
97
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
98 utils.logMessage( "PrimerManager::crossValidatePrimers", "{0} unique primers identified out of {1}".format( len( returnValue ), len( primers ) ) )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
99
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
100 if len( returnValue ) == 0:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
101 raise utils.NoPrimersExistException( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
102
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
103 return returnValue
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
104
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
105
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
106 def crossValidatePrimers( self, primers, excludeFile ):
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
107
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
108 excludeSequences = fastaparser.parseFastaFile( excludeFile )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
109
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
110 #write a primer search input file with using the primers argument
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
111 primerInputFileName = utils.getTemporaryDirectory( ) + "/tmpinputprimers.ps"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
112 primerOutputFileName = utils.getTemporaryDirectory( ) + "/tmpoutputprimers.ps"
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
113 primersearchutils.writePrimerSearchInputFile( primers, primerInputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
114
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
115 utils.logMessage( "PrimerManager::crossValidatePrimers", "finding primers that are not in the supplied exclude file" )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
116 #run primer search to identify the primers
1
2321523366d7 Uploaded
dereeper
parents: 0
diff changeset
117 self.primersearch.execute( [ excludeFile, primerInputFileName, primerOutputFileName, "10" ] )
0
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
118
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
119 #read the found primers from the file
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
120 commonPrimers = primersearchutils.parsePrimerSearchFile( primerOutputFileName )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
121
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
122 #compose a list of primers that are not found in the exclude file...
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
123 returnValue = [ ]
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
124
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
125 for primer in primers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
126 if primer.id not in commonPrimers:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
127 returnValue.append( primer )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
128
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
129 utils.logMessage( "PrimerManager::crossValidatePrimers", "{0} unique primers identified out of {1}".format( len( returnValue ), len( primers ) ) )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
130
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
131 if len( returnValue ) == 0:
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
132 raise utils.NoPrimersExistException( )
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
133
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
134 return returnValue
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
135
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
136
cdd8f911ad91 Uploaded
dereeper
parents:
diff changeset
137