import numpy as np
[docs]
def step(t, tau1, tau2, dI1, dI2):
"""
Part of the expression for bb_single and bb_double, describing an onset single bistable bias step.
"""
return np.where(t>=0, dI1*(1 - np.exp(-t/tau1)) + dI2*(1 - np.exp(-t/tau2)), np.zeros(shape=t.shape))
[docs]
def step_diff(t, w, tau1, tau2, dI1, dI2):
"""
Part of the expression for bb_single and bb_double, describing a single bistable bias step.
"""
return step(t, tau1, tau2, dI1, dI2) - step(t-w, tau1, tau2, dI1, dI2)
[docs]
def step_diff_periodic(t, t0, w, tau1, tau2, dI1, dI2, dt):
"""
Part of the expression for bb_single and bb_double, describing a single bistable bias step repeated periodically.
"""
step_start = np.arange(t0 - 3*dt, t[-1] + 4*dt, dt)
return step_diff(t[np.newaxis, :] - step_start[:, np.newaxis], w, tau1, tau2, dI1, dI2).sum(axis=0)
[docs]
def bb_single(t, t0, w, tau1, tau2, dI1, dI2, I0, dt):
"""
Model of bistable bias with a single step.
"""
return I0 - step_diff_periodic(t, t0, w, tau1, tau2, dI1, dI2, dt)
[docs]
def bb_double(t, t01, w1, tau11, tau21, dI11, dI21, t02, w2, tau12, tau22, dI12, dI22, I0, dt):
"""
Model of bistable bias with two steps.
"""
return I0 - step_diff_periodic(t, t01, w1, tau11, tau21, dI11, dI21, dt) - step_diff_periodic(t, t02, w2, tau12, tau22, dI12, dI22, dt)