view test/usecase2.py @ 735:632a0708ab33
blocks3d/www: allow blocks not to be continuous
Changes:
* javascript
* blocks_to_html method of AlignmentMixin
* test for blocks viewer (add one non-continuous block)
Currently block can have either "start" and "end" or "positions" attribute,
but not both. "start" and "end" attributes are not deprecated and can be
used if blocks are known to be continuous or while writting blocks
javascript by hands.
close #71
author |
boris <bnagaev@gmail.com> |
date |
Fri, 08 Jul 2011 20:21:39 +0200 |
parents |
bed32775625a |
children |
ddf85d0a8924 |
line source
3 from allpy.processors import Needle, Left
4 from allpy.fileio import FastaFile
5 from collections import deque
10 def has_identity(column):
11 as_list = column.values()
12 return len(column) == 2 and as_list[0] == as_list[1]
14 def is_good_window(window):
15 sum_id = sum(int(has_identity(column)) for column in window)
16 return len(window) == width and sum_id >= threshold
18 def find_runs(alignment):
19 window = deque([], width)
22 for column in alignment.columns:
24 in_block, was_in_block = is_good_window(window), in_block
25 if in_block and not was_in_block:
26 block = dna.Block.from_alignment(alignment, columns=list(window))
29 block.columns.append(column)
32 def blocks_markup(alignment, blocks):
33 for column in alignment.columns:
36 for column in block.columns:
38 return "".join(column.in_block for column in alignment.columns)
41 alignment = dna.Alignment().append_file(sys.stdin)
42 assert len(alignment.sequences) == 2, "Input must have TWO sequences!"
43 alignment.realign(Left())
44 alignment.realign(Needle())
45 blocks = find_runs(alignment)
47 for n, block in enumerate(blocks, 1):
48 block.to_file(open("block_%02d.fasta" % n, "w"))
50 alignment.to_file(sys.stdout)
51 FastaFile(sys.stdout).write_string(
52 blocks_markup(alignment, blocks),
54 "In run with window %s and threshold %s" % (width, threshold)
60 print "An error has occured:", e