Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/file/ddf85d0a8924/test/usecase2.py
Дата изменения: Unknown
Дата индексирования: Mon Feb 4 05:14:33 2013
Кодировка:
allpy: ddf85d0a8924 test/usecase2.py

allpy

view test/usecase2.py @ 863:ddf85d0a8924

'make tests' now also searches for doctests and runs them. - Added --with-doctest flag to nosetests. - Fixed usecase examples so they don't break from nose searching for doctests - Fixed test_usecase, so it works with the current usecases
author Daniil Alexeyevsky <dendik@kodomo.fbb.msu.ru>
date Thu, 21 Jul 2011 18:34:27 +0400
parents cc1959669928
children 08d892230e8c
line source
1 #!/usr/bin/python
2 import sys
3 from collections import deque
4 from allpy import dna
5 from allpy.processors import Needle, Left
6 from allpy.fileio import FastaFile
7 from allpy.util import open
9 width = 15
10 threshold = 10
11 if __name__ == "__main__":
12 infile = open(sys.argv[1])
13 outfile = open(sys.argv[2])
15 def has_identity(column):
16 as_list = column.values()
17 return len(column) == 2 and as_list[0] == as_list[1]
19 def is_good_window(window):
20 sum_id = sum(int(has_identity(column)) for column in window)
21 return len(window) == width and sum_id >= threshold
23 def find_runs(alignment):
24 window = deque([], width)
25 blocks = []
26 in_block = False
27 for column in alignment.columns:
28 window.append(column)
29 in_block, was_in_block = is_good_window(window), in_block
30 if in_block and not was_in_block:
31 block = dna.Block.from_alignment(alignment, columns=list(window))
32 blocks.append(block)
33 elif in_block:
34 block.columns.append(column)
35 return blocks
37 def blocks_markup(alignment, blocks):
38 for column in alignment.columns:
39 column.in_block = "-"
40 for block in blocks:
41 for column in block.columns:
42 column.in_block = "+"
43 return "".join(column.in_block for column in alignment.columns)
45 def main():
46 alignment = dna.Alignment().append_file(infile)
47 assert len(alignment.sequences) == 2, "Input must have TWO sequences!"
48 alignment.realign(Left())
49 alignment.realign(Needle())
50 blocks = find_runs(alignment)
52 for n, block in enumerate(blocks, 1):
53 block.to_file(open("block_%02d.fasta" % n, "w"))
55 alignment.to_file(outfile)
56 FastaFile(outfile).write_string(
57 blocks_markup(alignment, blocks),
58 "markup",
59 "In run with window %s and threshold %s" % (width, threshold)
60 )
62 try:
63 main()
64 except Exception, e:
65 print "An error has occured:", e