Skip to content

Commit f8750cf

Browse files
committed
hub score, no test yet
1 parent add4a31 commit f8750cf

1 file changed

Lines changed: 30 additions & 9 deletions

File tree

csnanalysis/matrix.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def symmetrize_matrix(countmat):
2121
"""
2222
return scipy.sparse.coo_matrix(0.5*(countmat + countmat.transpose()))
2323

24-
def make_sink(transmat,sink_states):
24+
def _make_sink(transmat,sink_states):
2525
"""
2626
Constructs a transition matrix with "sink states", where the columns are
2727
replaced with identity vectors (diagonal element = 1, off-diagonals = 0).
@@ -95,7 +95,7 @@ def mult_weights(transmat,tol=1e-6):
9595
banded_mat = trans_mult_iter(transmat,tol)
9696
return banded_mat[:,0]
9797

98-
def trans_mult_iter(transmat,tol,maxstep=20):
98+
def _trans_mult_iter(transmat,tol,maxstep=20):
9999
"""
100100
Performs iterative multiplication of transmat until the maximum variation in
101101
the rows is less than tol.
@@ -139,9 +139,9 @@ def committor(transmat,basins,tol=1e-6,maxstep=20):
139139
# make sink_matrix
140140

141141
flat_sink = [i for b in basins for i in b]
142-
sink_mat = make_sink(transmat,flat_sink)
142+
sink_mat = _make_sink(transmat,flat_sink)
143143

144-
sink_results = trans_mult_iter(sink_mat,tol,maxstep)
144+
sink_results = _trans_mult_iter(sink_mat,tol,maxstep)
145145

146146
committor = np.zeros((transmat.shape[0],len(basins)),dtype=float)
147147

@@ -160,7 +160,7 @@ def committor(transmat,basins,tol=1e-6,maxstep=20):
160160

161161
return committor
162162

163-
def extend(transmat,hubstates):
163+
def _extend(transmat,hubstates):
164164
"""
165165
This function returns an extended transition matrix (2N x 2N)
166166
where one set of states (0..N-1) have NOT yet visited hubstates,
@@ -198,6 +198,27 @@ def extend(transmat,hubstates):
198198
ext_mat = scipy.sparse.coo_matrix((data, (rows, cols)), shape=(2*n,2*n))
199199
return ext_mat
200200

201+
def _getring(transmat,basin,eig_weights,tol,maxstep):
202+
"""
203+
Given a transition matrix, and a set of states that form a basin,
204+
this returns a vector describing how probability exits that basin.
205+
"""
206+
# make a matrix with sink states in every non-basin state
207+
n = transmat.shape[0]
208+
flat_sink = [i for i in range(n) if i not in basin]
209+
sink_mat = _make_sink(transmat,flat_sink)
210+
211+
# see where the probability goes
212+
sink_results = _trans_mult_iter(sink_mat,tol,maxstep)
213+
214+
ringprob = np.zeros((n))
215+
for b in basin:
216+
for i in range(n):
217+
if i not in basin:
218+
ringprob[i] += sink_results[i][b]
219+
220+
return ringprob
221+
201222
def hubscores(transmat,hubstates,basins,tol=1e-6,maxstep=20,wts=None):
202223
"""
203224
This function computes hub scores, which are the probabilities that
@@ -228,20 +249,20 @@ def hubscores(transmat,hubstates,basins,tol=1e-6,maxstep=20,wts=None):
228249

229250
# make extended sink_matrix
230251
n = transmat.shape[0]
231-
ext_transmat = extend(transmat,hubstates)
252+
ext_transmat = _extend(transmat,hubstates)
232253

233254
flat_sink = [i for b in basins for i in b]
234255
flat_sink_ext = flat_sink + [i + n for i in flat_sink]
235256

236-
sink_mat = make_sink(ext_transmat,flat_sink_ext)
257+
sink_mat = _make_sink(ext_transmat,flat_sink_ext)
237258

238-
sink_results = trans_mult_iter(sink_mat,tol,maxstep)
259+
sink_results = _trans_mult_iter(sink_mat,tol,maxstep)
239260

240261
if wts is None:
241262
wts = eig_weights(transmat)
242263

243264
h = np.zeros((2,2),dtype=float)
244-
ring = [getring(transmat,b,eig_weights) for b in basins]
265+
ring = [_getring(transmat,b,eig_weights,tol,maxstep) for b in basins]
245266

246267
for source,sink in [[0,1],[1,0]]:
247268
for i,p in enumerate(ring[source]):

0 commit comments

Comments
 (0)