Size: 6648
Comment: priming condition added
|
Size: 6612
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
#format python | |
Line 62: | Line 61: |
Line 68: | Line 67: |
Line 78: | Line 77: |
for fname, primer in self.pg: | for fname, primer in self.pg: |
Line 86: | Line 85: |
Line 146: | Line 145: |
self.assertEquals(expected, os.listdir('temp')) | expected.sort() self.assertEquals(expected, sorted(os.listdir('temp'))) |
"""PrimerDesign script using Primer3 by yong27, 2005-05-17
priming conditions refer to http://www.rfcgr.mrc.ac.uk/Software/EMBOSS/Apps/eprimer3.html """ import unittest, os, glob from cStringIO import StringIO from Bio import Fasta from Bio.Emboss import Primer
class PrimerDesigner:
- temp_dir = 'temp'
def init(self, ifile):
self.fi = Fasta.Iterator(ifile, Fasta.RecordParser()) self.pg = None
- return self.fi.next()
- self.cleanUp() os.mkdir(self.temp_dir) for fasta in self.fi:
- fasta.title = fasta.title.replace(':','-')
besid = ''.join(fasta.title.split()) file(os.path.join(self.temp_dir, besid), 'w').write(str(fasta))
- fasta.title = fasta.title.replace(':','-')
- if os.path.exists(self.temp_dir):
- for fname in os.listdir(self.temp_dir):
- os.remove(os.path.join(self.temp_dir, fname))
- for fname in os.listdir(self.temp_dir):
- self.saveAllFastas() for fname in os.listdir(self.temp_dir):
- fname = os.path.join(self.temp_dir, fname) cmds = ['eprimer3'] cmds.extend(['-sequence', fname]) cmds.extend(['-outfile', fname+'.eprimer3']) for k,v in keywds.iteritems():
- cmds.extend(['-'+k, v])
- fname = os.path.join(self.temp_dir, fname) cmds = ['eprimer3'] cmds.extend(['-sequence', fname]) cmds.extend(['-outfile', fname+'.eprimer3']) for k,v in keywds.iteritems():
- return self.pg.next()
ppser = Primer.Primer3Parser() for fname in glob.glob(os.path.join(self.temp_dir, '*.eprimer3')):
- try:
- primer = ppser.parse(file(fname)).primers[0]
except IndexError:
- continue
- try:
- seq = getattr(primer, direction+'_seq') tm = getattr(primer, direction+'_tm') return [direction, seq, str(tm), str(primer.size)]
- for fname, primer in self.pg:
words = fname.split('') xfile.write('\t'.join(words+self.getPrimerInfos(primer, 'forward'))+'\n') xfile.write('\t'.join(words+self.getPrimerInfos(primer, 'reverse'))+'\n')
class BreakPrimerDesigner(PrimerDesigner):
def init(self, ifile):
PrimerDesigner.init(self, ifile)
- xfile.write('\t'.join([
- 'BAC', 'BES', 'FPC start', 'FPC end', 'Human match', 'Direction', 'Primer sequence', 'Primer TM', 'Product size' ])+'\n')
besid, bacid, start, end, humanMatch = fname.split('') xfile.write('\t'.join([
- bacid, besid, start, end, humanMatch, ]+self.getPrimerInfos(primer, 'forward'))+'\n')
- bacid, besid, start, end, humanMatch, ]+self.getPrimerInfos(primer, 'reverse'))+'\n')
class ByunsBreakPrimerDesigner:
def init(self, ifile):
self.pd = BreakPrimerDesigner(ifile) self.pd.doPrimer3(otm='55', mintm='53')
- self.pd.writeXls(wfile)
class TestPrimerDesigner(unittest.TestCase):
- def setUp(self):
- inputFile = StringIO("""\
>bE78F16SP6 CH242-78F16 46 72 18:11487196-11487708 GGTTGATGGTTCCCTGGTTTCATAAAACCTCTCAGGAACATTAGACTATGTCCGTGGAGA GAAGTAAAACCCAATTATCCTCAGTGCCAGTAGTTTTTATGTCTCAGAAGAGATTCTGCT GGAAGGATCACTGGGCATTTCAAGATGTTTGGAAACACTGCACTGATGGAGTTATCCTCA GAGGGGTGTCATTAAATGTTTGTTTACGATTGTTGGTGGGTCTATCAAACCCACTTATTT CTGCCAGCGTTAGATTTTTGACTCAATTAGGAAAAAAAAAGTATTAGAGGGAACTAACTT TGCAGCAAAGGGCAGATACTCTTAGGTACTGAAAACTTGCTGAATTCTGTAGGAATAGGA ACCTTGGGAATTATGCTTCCGTAGGAGAAATAATCAGAAAGGTCATTTTAGTCACTTAGG AGTCTGTGGTGCCACTGGAATAATTAAAAACATGATAATTTAAACTGACTGTAGAGGTAA TGGAAGAAACATGAAATTTAGTTAGACTAGGGTAGTTGAGTTTGTTCAAAAATCAAATGG AAATCTTAGGGCACTACGGGAGCAGTTGAGAGTTGATCACAGCTGAGCAAGGCTGGTCTT CTTCCTGCAGGTCCCGGCACCTTTGAGGATCTGACAAAGGCTGGCTGTCTTCTCTCAAGA CAAGGGGCACGGGACCCCCAGTG >bE78F16T7 CH242-78F16 46 72 18:11085776-11086061 TTGCTCTAACAGCCCTGAAATCCCCTGCAGCAGATTACTCTGATATAGGANGAANNGGCC CCCNTTNCCNTTCACTGCTCTTTTTGACTTCCAAAAATAATATTCTGGCCCAGCTGTTCG GTCAGGGCCTCGGTTTATTTGTAGTTAGCCAGAGAGGGGACCATAAATGAAATTCAGATG CCGGGAGGGAGGAATGTCAGTCCTTCCAAATCCAACACTGAAAAGCCTTTCTTGTTTTTG AGCTGAATAAAGAACGTCGGGCAATGGAACTTTGACCCAACATGCCATCCAGTCCAAAGA GGAACGGCCAGAAAAAAGTGGACTTGTCTGGAGATGGTTCTCAGCCTCTAAGCCAGCCAG CTCAGTCCCTTGTTTTAGCCCCCAGGGTATCTGGGCAGCCACAGGTCTGAGACACCCTTG GTAGCTGAGGGCTCCCCTGGGCGCACAGGGCATGAGGGTGCCACCACGAAGAGGGGCCAC AGGGCCCTTTTGTCAGCAAACAGAGCCTGGGCTCCAGGCTCCAGGTCTTGCAACAAATCC CACCTCACC """)
self.pd = PrimerDesigner(inputFile)
- def testGetNextFasta(self):
- expected = "bE78F16SP6 CH242-78F16 46 72 18:11487196-11487708" self.assertEquals(expected, self.pd.getNextFasta().title) expected = "bE78F16T7 CH242-78F16 46 72 18:11085776-11086061" self.assertEquals(expected, self.pd.getNextFasta().title)
- self.pd.saveAllFastas()
expected = ['bE78F16SP6CH242-78F16467218-11487196-11487708',
'bE78F16T7
- ]
- self.pd.doPrimer3()
expected = ['bE78F16SP6CH242-78F16467218-11487196-11487708',
'bE78F16T7
- ]
- self.pd.doPrimer3() fname, primer = self.pd.getNextPrimer() self.assertEquals('TCTGTGGTGCCACTGGAATA', primer.forward_seq)
self.assertEquals('bE78F16SP6CH242-78F16467218-11487196-11487708',fname)
- self.pd.doPrimer3() xfile = StringIO() self.pd.writeXls(xfile) self.assertEquals('bE78F16SP6', xfile.getvalue().splitlines()[1].split('\t')[0])
if name=='main':