rev |
line source |
BurkovBA@0
|
1 #!usr/bin/python |
BurkovBA@0
|
2 |
BurkovBA@0
|
3 import sys |
BurkovBA@0
|
4 |
BurkovBA@0
|
5 import project |
BurkovBA@0
|
6 import sequence |
BurkovBA@0
|
7 import monomer |
BurkovBA@0
|
8 |
BurkovBA@0
|
9 class Block(object): |
BurkovBA@0
|
10 """ |
BurkovBA@0
|
11 Mandatory data: |
BurkovBA@0
|
12 * self.project -- project object, which the block belongs to |
BurkovBA@1
|
13 * self.sequences - set of sequence objects that contain monomers |
BurkovBA@0
|
14 and/or gaps, that constitute the block |
BurkovBA@1
|
15 * self.positions -- list of positions of the project.alignment that |
BurkovBA@1
|
16 are included in the block |
BurkovBA@0
|
17 |
BurkovBA@0
|
18 How to create a new block: |
BurkovBA@0
|
19 >>> import project |
BurkovBA@0
|
20 >>> import block |
BurkovBA@0
|
21 >>> proj = project.Project(open("test.fasta")) |
BurkovBA@0
|
22 >>> block1 = block.Block(proj, proj.sequences, range(len(proj.alignment[proj.sequences[0]]))) |
BurkovBA@0
|
23 |
BurkovBA@0
|
24 """ |
BurkovBA@0
|
25 |
bnagaev@112
|
26 def __init__(self, project, sequences=None, positions=None): |
bnagaev@112
|
27 """ |
bnagaev@112
|
28 Builds new block from project |
bnagaev@112
|
29 if sequences==None, all sequences are used |
bnagaev@112
|
30 if positions==None, all positions are used |
bnagaev@112
|
31 """ |
bnagaev@112
|
32 if sequences == None: |
bnagaev@112
|
33 sequences = project.sequences |
bnagaev@112
|
34 if positions == None: |
bnagaev@112
|
35 positions = range(len(project)) |
BurkovBA@73
|
36 self.project = project |
BurkovBA@73
|
37 self.sequences = sequences |
BurkovBA@73
|
38 self.positions = positions |
BurkovBA@0
|
39 |
bnagaev@112
|
40 def save_fasta(self, out_file, long_line=60): |
bnagaev@112
|
41 """ |
bnagaev@112
|
42 Saves alignment to given file in fasta-format |
bnagaev@112
|
43 Splits long lines to substrings of length=long_line |
bnagaev@112
|
44 To prevent this, set long_line=None |
bnagaev@112
|
45 |
BurkovBA@0
|
46 No changes in the names, descriptions or order of the sequences |
BurkovBA@0
|
47 are made. |
BurkovBA@0
|
48 """ |
BurkovBA@0
|
49 for sequence in self.sequences: |
bnagaev@112
|
50 out_file.write(">%(name)s %(description)s \n" % sequence.__dict__) |
bnagaev@112
|
51 monomers = [self.project.alignment[i] for i in sorted(self.positions)] |
bnagaev@112
|
52 string = ''.join([m.type.code1 if m else '-' for m in monomers]) |
bnagaev@112
|
53 if long_line: |
bnagaev@112
|
54 for i in range(0, len(string) // long_line + 1): |
bnagaev@112
|
55 out_file.write("%s \n" % string[i*long_line : i*long_line + long_line]) |
bnagaev@112
|
56 else: |
bnagaev@112
|
57 out_file.write("%s \n" % string) |