view test/usecase2.py @ 642:a1307c0bb030
Added necessary hooks for monomer pickling [closes #35]
Current implementation is lazy and does not store all monomer classes
explicitly in some module. They are still generated on the fly.
Some monomer classes have the same name as per PDB database. In order to avoid
name clashes, we add underscores to classes, if same name class already exists.
WARNING.
This may and WILL cause trouble, if such clashes occur between different types
of monomers, in which case different names will be generated for the same class
depending on the order of loading modules.
The only example of such clash in the current database is dna monomer "0AV" and
rna "A2M", which both have name "2'-O-METHYLADENOSINE 5'-(DIHYDROGEN PHOSPHATE)"
author |
Daniil Alexeyevsky <dendik@kodomo.fbb.msu.ru> |
date |
Fri, 03 Jun 2011 16:49:44 +0400 |
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