-
Notifications
You must be signed in to change notification settings - Fork 0
/
CheckEigs.py
executable file
·153 lines (141 loc) · 6.02 KB
/
CheckEigs.py
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/python
from msmbuilder import Trajectory, Project, io, msm_analysis, tpt
import glob
import random
from scipy.io import *
from msmbuilder import Conformation
from msmbuilder import MSMLib, msm_analysis
import optparse
import numpy
import os
from numpy import linalg
import pylab
def map_size(x):
if x==0.5:
size=500
elif abs(x-0.5) < 0.1 and abs(x-0.5) > 0:
size=300
elif abs(x-0.5) < 0.2 and abs(x-0.5) > 0.1:
size=200
elif abs(x-0.5) < 0.3 and abs(x-0.5) > 0.2:
size=100
elif x==0:
size=10
elif x==1:
size=10
else:
size=50
return size
def get_structure(modeldir, eig, gen_states, states, gens, project, ass, type=None):
# for assignments, take mapped states
# for gens, take gen states
for (state, gstate) in zip(states, gen_states):
sample=project.empty_traj()
(a, b, c) =gens['XYZList'].shape
sample['XYZList']=numpy.zeros((1, b, c), dtype=numpy.float32)
sample['XYZList'][0]=gens['XYZList'][gstate]
sample.save_to_pdb('%s/eig-states/eig%s-%s-state%s-centroid.pdb' % (modeldir, eig, type, int(state)))
t=project.get_random_confs_from_states(ass['arr_0'], [int(state),], 5)
for j in range(0, 5):
sample=project.empty_traj()
(a, b, c) =gens['XYZList'].shape
sample['XYZList']=numpy.zeros((1, b, c), dtype=numpy.float32)
sample['XYZList'][0]=t[0]['XYZList'][j]
sample.save_to_pdb('%s/eig-states/eig%s-%s-state%s-%s.pdb' % (modeldir, eig, type, int(state), j))
def main(modeldir, gensfile, write=False):
if not os.path.exists('%s/eig-states/' % modeldir):
os.mkdir('%s/eig-states/' % modeldir)
ohandle=open('%s/eig-states/eiginfo.txt' % modeldir, 'w')
project=Project.load_from('%s/ProjectInfo.yaml' % modeldir.split('Data')[0])
ass=io.loadh('%s/Assignments.Fixed.h5' % modeldir)
gens=Trajectory.load_from_lhdf(gensfile)
T=mmread('%s/tProb.mtx' % modeldir)
data=dict()
data['rmsd']=numpy.loadtxt('%s.rmsd.dat' % gensfile.split('.lh5')[0])
com=numpy.loadtxt('%s.vmd_com.dat' % gensfile.split('.lh5')[0], usecols=(1,))
data['com']=com[1:]
pops=numpy.loadtxt('%s/Populations.dat' % modeldir)
map=numpy.loadtxt('%s/Mapping.dat' % modeldir)
map_rmsd=[]
map_com=[]
for x in range(0, len(data['rmsd'])):
if map[x]!=-1:
map_com.append(data['com'][x])
map_rmsd.append(data['rmsd'][x])
map_com=numpy.array(map_com)
map_rmsd=numpy.array(map_rmsd)
T=mmread('%s/tProb.mtx' % modeldir)
eigs_m=msm_analysis.get_eigenvectors(T, 10)
cm=pylab.cm.get_cmap('RdYlBu_r') #blue will be negative components, red positive
print numpy.shape(eigs_m[1][:,1])
for i in range(0,1):
order=numpy.argsort(eigs_m[1][:,i])
if i==0:
maxes=[]
gen_maxes=[]
values=[]
ohandle.write('eig%s maxes\n' % i)
ohandle.write('state\tgenstate\tmagnitude\trmsd\tcom\n')
for n in order[::-1][:5]:
gen_maxes.append(numpy.where(map==n)[0])
maxes.append(n)
values.append(eigs_m[1][n,i])
ohandle.write('%s\t%s\t%s\t%s\t%s\n' % (n, numpy.where(map==n)[0], eigs_m[1][n,i], map_rmsd[n], map_com[n]))
print "maxes at ", maxes, values
maxes=numpy.array(maxes)
if write==True:
get_structure(modeldir, i, gen_maxes, maxes, gens, project, ass, type='max')
else:
maxes=[]
gen_maxes=[]
values=[]
ohandle.write('eig%s maxes\n' % i)
for n in order[::-1][:5]:
gen_maxes.append(numpy.where(map==n)[0])
maxes.append(n)
values.append(eigs_m[1][n,i])
ohandle.write('%s\t%s\t%s\t%s\t%s\n' % (n, numpy.where(map==n)[0], eigs_m[1][n,i], map_rmsd[n], map_com[n]))
print "maxes at ", maxes, values
order=numpy.argsort(eigs_m[1][:,i])
mins=[]
gen_mins=[]
values=[]
ohandle.write('eig%s mins\n' % i)
for n in order[:5]:
gen_mins.append(numpy.where(map==n)[0])
mins.append(n)
values.append(eigs_m[1][n,i])
ohandle.write('%s\t%s\t%s\t%s\t%s\n' % (n, numpy.where(map==n)[0], eigs_m[1][n,i], map_rmsd[n], map_com[n]))
print "mins at ", mins, values
if write==True:
get_structure(modeldir, i, gen_maxes, maxes, gens, project, ass, type='max')
get_structure(modeldir, i, gen_mins, mins, gens, project, ass, type='min')
pylab.scatter(map_com[order], map_rmsd[order], c=eigs_m[1][order,i], cmap=cm, s=1000*abs(eigs_m[1][order,i]), alpha=0.5)
print map_com[order][numpy.argmax(eigs_m[1][order,i])]
print eigs_m[1][order,i][1]
CB=pylab.colorbar()
l,b,w,h=pylab.gca().get_position().bounds
ll, bb, ww, hh=CB.ax.get_position().bounds
CB.ax.set_position([ll, b+0.1*h, ww, h*0.8])
CB.set_label('Eig%s Magnitudes' % i)
ylabel=pylab.ylabel('Ligand RMSD to Xtal ($\AA$)')
xlabel=pylab.xlabel(r'P Active Site - L COM Distance ($\AA$)')
pylab.legend(loc=8, frameon=False)
pylab.savefig('%s/2deigs%i_com_prmsd.png' %(modeldir, i),dpi=300)
#pylab.show()
def parse_commandline():
parser = optparse.OptionParser()
parser.add_option('-d', '--modeldir', dest='modeldir',
help='msm directory')
parser.add_option('-g', '--gensfile', dest='gensfile',
help='gens files')
parser.add_option('-w', action="store_true", dest="write")
(options, args) = parser.parse_args()
return (options, args)
#run the function main if namespace is main
if __name__ == "__main__":
(options, args) = parse_commandline()
if options.write==True:
main(modeldir=options.modeldir, gensfile=options.gensfile, write=True)
else:
main(modeldir=options.modeldir, gensfile=options.gensfile)