def test_fluxes_1(): # depends on tpt.committors msm = MarkovStateModel(lag_time=1) assignments = np.random.randint(3, size=(10, 1000)) msm.fit(assignments) tprob = msm.transmat_ pop = msm.populations_ # forward committors qplus = tpt.committors(0, 2, msm) ref_fluxes = np.zeros((3, 3)) ref_net_fluxes = np.zeros((3, 3)) for i in range(3): for j in range(3): if i != j: # Eq. 2.24 in Metzner et al. Transition Path Theory. # Multiscale Model. Simul. 2009, 7, 1192-1219. ref_fluxes[i, j] = (pop[i] * tprob[i, j] * (1 - qplus[i]) * qplus[j]) for i in range(3): for j in range(3): ref_net_fluxes[i, j] = np.max([0, ref_fluxes[i, j] - ref_fluxes[j, i]]) fluxes = tpt.fluxes(0, 2, msm) net_fluxes = tpt.net_fluxes(0, 2, msm) npt.assert_array_almost_equal(ref_fluxes, fluxes) npt.assert_array_almost_equal(ref_net_fluxes, net_fluxes)
def test_fluxes_2(): # depends on tpt.committors bmsm = BayesianMarkovStateModel(lag_time=1) assignments = np.random.randint(3, size=(10, 1000)) bmsm.fit(assignments) # forward committors qplus = tpt.committors(0, 2, bmsm) ref_fluxes = np.zeros((3, 3)) ref_net_fluxes = np.zeros((3, 3)) for el in zip(bmsm.all_populations_, bmsm.all_transmats_): pop = el[0] tprob = el[1] for i in range(3): for j in range(3): if i != j: # Eq. 2.24 in Metzner et al. Transition Path Theory. # Multiscale Model. Simul. 2009, 7, 1192-1219. ref_fluxes[i, j] += (pop[i] * tprob[i, j] * (1 - qplus[i]) * qplus[j]) ref_fluxes /= 100. for i in range(3): for j in range(3): ref_net_fluxes[i, j] = np.max([0, ref_fluxes[i, j] - ref_fluxes[j, i]]) fluxes = tpt.fluxes(0, 2, bmsm) net_fluxes = tpt.net_fluxes(0, 2, bmsm) npt.assert_array_almost_equal(ref_fluxes, fluxes, decimal=2) npt.assert_array_almost_equal(ref_net_fluxes, net_fluxes, decimal=2)
def test_fluxes(): # depends on tpt.committors msm = MarkovStateModel(lag_time=1) assignments = np.random.randint(3, size=(10, 1000)) msm.fit(assignments) tprob = msm.transmat_ pop = msm.populations_ # forward committors qplus = tpt.committors(0, 2, msm) ref_fluxes = np.zeros((3, 3)) ref_net_fluxes = np.zeros((3, 3)) for i in xrange(3): for j in xrange(3): if i != j: # Eq. 2.24 in Metzner et al. Transition Path Theory. # Multiscale Model. Simul. 2009, 7, 1192-1219. ref_fluxes[i, j] = (pop[i] * tprob[i, j] * (1 - qplus[i]) * qplus[j]) for i in xrange(3): for j in xrange(3): ref_net_fluxes[i, j] = np.max( [0, ref_fluxes[i, j] - ref_fluxes[j, i]]) fluxes = tpt.fluxes(0, 2, msm) net_fluxes = tpt.net_fluxes(0, 2, msm) # print(fluxes) # print(ref_fluxes) npt.assert_array_almost_equal(ref_fluxes, fluxes) npt.assert_array_almost_equal(ref_net_fluxes, net_fluxes)
pos13 = dict(zip(range(len(middles2)), middles2[:,0:3:2])) ax = msme.plot_tpaths(msm, start_ind[0], [pop_ind], pos=pos) plt.tight_layout() plt.savefig('tpath.eps') plt.clf() ax = msme.plot_tpaths(msm, start_ind[0], [pop_ind], pos=pos13) plt.tight_layout() plt.savefig('tpath_13.eps') plt.clf() net_flux_matrix = net_fluxes(start_ind[0], [pop_ind], msm) flux_matrix = fluxes(start_ind[0], [pop_ind], msm) paths_list, fluxes1 = paths(start_ind[0], [pop_ind], net_flux_matrix) paths_list_d, fluxes1_d = paths(start_ind[0], [pop_ind], net_flux_matrix, remove_path='bottleneck') print('num states in path 1', len(paths_list[0])) test_3 = np.unique(np.concatenate((paths_list[0],paths_list[1], paths_list[2]), 0)) test_5 = np.unique(np.concatenate((paths_list[0],paths_list[1], paths_list[2], paths_list[3], paths_list[4]), 0)) test_3d = np.unique(np.concatenate((paths_list_d[0],paths_list_d[1], paths_list_d[2]), 0)) test_5d = np.unique(np.concatenate((paths_list_d[0],paths_list_d[1], paths_list_d[2], paths_list_d[3], paths_list_d[4]), 0)) tot_flux = fluxes1.sum()