Source code for allensdk.internal.model.biophysical.ephys_utils
import numpy as np
[docs]def get_sweep_v_i_t_from_set(data_set, sweep_number):
sweep_data = data_set.get_sweep(sweep_number)
i = sweep_data["stimulus"] # in A
v = sweep_data["response"] # in V
i *= 1e12 # to pA
v *= 1e3 # to mV
sampling_rate = sweep_data["sampling_rate"] # in Hz
t = np.arange(0, len(v)) * (1.0 / sampling_rate)
return v, i, t
[docs]def get_sweeps_of_type(sweep_type, sweeps):
sweeps = [ s for s in sweeps if s['ephys_stimulus']['description'].startswith( sweep_type )]
sweep_numbers = [ s['sweep_number'] for s in sweeps ]
statuses = [ s['workflow_state'] for s in sweeps ]
return sweeps, sweep_numbers, statuses
[docs]def get_step_stim_characteristics(i, t):
# Assumes that there is a test pulse followed by the stimulus step
di = np.diff(i)
up_idx = np.flatnonzero(di > 0)
down_idx = np.flatnonzero(di < 0)
# second step is the stimulus
if len(up_idx) < 2 or len(down_idx) < 2:
return (np.nan, np.nan, np.nan, np.nan, np.nan)
if up_idx[1] < down_idx[1]: # positive step
start_idx = up_idx[1] + 1 # shift by one to compensate for diff()
end_idx = down_idx[1] + 1
else: # negative step
start_idx = down_idx[1] + 1
end_idx = up_idx[1] + 1
stim_start = float(t[start_idx])
stim_dur = float(t[end_idx] - t[start_idx])
stim_amp = float(i[start_idx])
return (stim_start, stim_dur, stim_amp, start_idx, end_idx)