back_jump_prob_discrete
- mdtools.dtrj.back_jump_prob_discrete(dtrj1, dtrj2, continuous=False, discard_neg=False, discard_neg_btw=False, verbose=False)[source]
Calculate the back-jump probability resolved with respect to the states in a second discrete trajectory.
Take a discrete trajectory and calculate the probability to return back to the initial state at time \(t_0 + \Delta t\), given that a state transition has occurred at time \(t_0\) and given that the compound was in a specific state of another discrete trajectory at time \(t_0\).
- Parameters:
dtrj1, dtrj2 (
array_like
) – The discrete trajectories. Arrays of shape(n, f)
, wheren
is the number of compounds andf
is the number of frames. The shape can also be(f,)
, in which case the array is expanded to shape(1, f)
. Both arrays must have the same shape. The elements of the arrays are interpreted as the indices of the states in which a given compound is at a given frame.continuous (
bool
) – IfFalse
, calculate the probability that a compound returns back to its initial state at time \(t_0 + \Delta t\). This probability might be regarded as the “discontinuous” or “intermittent” back-jump probability.If
True
, calculate the probability that a compound returns back to its initial state at time \(t_0 + \Delta t\) under the condition that it has continuously been in the new state from time \(t_0\) until \(t_0 + \Delta t\), i.e. that the compound does not visit other states in between. This probability might be regarded as the “continuous” or “true” back-jump probability.discard_neg (
bool
, optional) – IfTrue
, discard negative states, i.e. discard back jumps starting from (and consequently ending in) a negative state.discard_neg_btw (
bool
, optional) – IfTrue
, discard back jumps when the compound has visited a negative state between \(t_0\) and \(t_0 + \Delta t\).verbose (
bool
, optional) – IfTrue
print a progress bar.
- Returns:
bj_prob (
numpy.ndarray
) – Array of shape(m, f-1)
, wherem
is the number of states in the second discrete trajectory. The ij-th element of bj_prob is the probability that a compound returns back to its initial state j frames after a state transition has occurred, given that the compound was in state i of the second discrete trajectory at time \(t_0\).
See also
mdtools.dtrj.back_jump_prob()
Calculate the back-jump probability averaged over all states
mdtools.dtrj.remain_prob_discrete()
Calculate the probability that a compound is still (or again) in the same state as at time \(t_0\) after a lag time \(\Delta t\) resolved with respect to the states in a second discrete trajectory
mdtools.dtrj.leave_prob_discrete()
Calculate the probability that a compound leaves its state after a lag time \(\Delta t\) given that it has entered the state at time \(t_0\) resolved with respect to the states in a second discrete trajectory
Notes
If you parse the same discrete trajectory to dtrj1 and dtrj2 you will get the back-jump probability for each individual state of the input trajectory.
Examples
>>> dtrj = np.array([1, 3, 3, 3, 1, 2, 2]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[ 0., 0., 0., 1., 0., 0.], [nan, nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[ 0., 0., 0., 1., 0., 0.], [nan, nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan]]) >>> dtrj = np.array([1, 3, 3, 3, 2, 2, 1]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[ 0., 0., 0., 0., 0., 1.], [ 0., nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[ 0., 0., 0., 0., 0., 0.], [ 0., nan, nan, nan, nan, nan], [ 0., 0., 0., nan, nan, nan]])
>>> dtrj = np.array([[1, 3, 3, 3, 1, 2, 2], ... [1, 3, 3, 3, 2, 2, 1]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[0. , 0. , 0. , 0.5, 0. , 0.5], [0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[0. , 0. , 0. , 0.5, 0. , 0. ], [0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , nan, nan, nan]]) >>> dtrj = np.array([[1, 2, 2, 1, 3, 3, 3], ... [1, 2, 2, 3, 3, 3, 1]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[0. , 0. , 0.33333333, 0. , 0. , 0. ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> dtrj = np.array([[1, 2, 2, 1, 3, 3, 3], ... [1, 5, 5, 5, 5, 5, 1]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> dtrj = np.array([[1, 2, 2, 1, 2, 2], ... [2, 2, 1, 2, 2, 1]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[ 0., 0., 1., 0., 0.], [ 0., 1., 0., 0., nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[ 0., 0., 1., 0., 0.], [ 0., 1., 0., 0., nan]])
Discard negative states:
>>> dtrj = np.array([[ 1, 2, 2, 1, 3, 3, 3], ... [-1, 2, 2, -1, 3, 3, 3], ... [ 1, -2, -2, 1, 3, 3, 3], ... [ 1, 2, 2, 3, 3, 3, 1], ... [-1, 2, 2, 3, 3, 3, -1], ... [ 1, 2, 2, -3, -3, -3, 1]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj) array([[0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , 0. , nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, discard_neg=True) array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete( ... dtrj, dtrj, discard_neg_btw=True ... ) array([[0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , 0. , nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0.5 ], [0. , 0. , 0.25 , 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete( ... dtrj, dtrj, discard_neg=True, discard_neg_btw=True ... ) array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0. , 0.25, 0. , 0. , 0.5 ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete(dtrj, dtrj, continuous=True) array([[0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , 0. , nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0. ], [0. , 0. , 0.33333333, 0. , 0. , 0. ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete( ... dtrj, dtrj, continuous=True, discard_neg=True ... ) array([[ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0. ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete( ... dtrj, dtrj, continuous=True, discard_neg_btw=True ... ) array([[0. , nan, nan, nan, nan, nan], [0. , 0. , 0. , 0. , nan, nan], [0. , 0. , 0.33333333, 0. , 0. , 0. ], [0. , 0. , 0.2 , 0. , 0. , 0. ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]]) >>> mdt.dtrj.back_jump_prob_discrete( ... dtrj, ... dtrj, ... continuous=True, ... discard_neg=True, ... discard_neg_btw=True, ... ) array([[nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan], [0. , 0. , 0.2, 0. , 0. , 0. ], [0. , 0. , 0. , 0. , nan, nan], [0. , nan, nan, nan, nan, nan]])