-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplot_profiles.py
More file actions
43 lines (38 loc) · 1.48 KB
/
plot_profiles.py
File metadata and controls
43 lines (38 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import pylab
import modeller
def r_enumerate(seq):
"""Enumerate a sequence in reverse order"""
# Note that we don't use reversed() since Python 2.3 doesn't have it
num = len(seq) - 1
while num >= 0:
yield num, seq[num]
num -= 1
def get_profile(profile_file, seq):
"""Read `profile_file` into a Python array, and add gaps corresponding to
the alignment sequence `seq`."""
# Read all non-comment and non-blank lines from the file:
f = open(profile_file)
vals = []
for line in f:
if not line.startswith('#') and len(line) > 10:
spl = line.split()
vals.append(float(spl[-1]))
# Insert gaps into the profile corresponding to those in seq:
for n, res in r_enumerate(seq.residues):
for gap in range(res.get_leading_gaps()):
vals.insert(n, None)
# Add a gap at position '0', so that we effectively count from 1:
vals.insert(0, None)
return vals
e = modeller.Environ()
a = modeller.Alignment(e, file='PmOmpH-6ehdA.ali')
template = get_profile('6ehdA.profile', a['6ehdA'])
model = get_profile('PmOmpH.profile', a['PmOmpH'])
# Plot the template and model profiles in the same plot for comparison:
pylab.figure(1, figsize=(10,6))
pylab.xlabel('Alignment position')
pylab.ylabel('DOPE per-residue score')
pylab.plot(model, color='red', linewidth=2, label='Model')
pylab.plot(template, color='green', linewidth=2, label='Template')
pylab.legend()
pylab.savefig('dope_profile.png', dpi=65)