Source code for allensdk.internal.model.glif.rc
import numpy as np
import logging
from allensdk.internal.model.glif.find_spikes import find_spikes_list
from allensdk.ephys.extract_cell_features import get_stim_characteristics
[docs]def least_squares_RCEl_calc_tested(voltage_list, current_list, dt):
'''Calculate resistance, capacitance and resting potential by performing
least squares on current and voltage.
Parameters
----------
voltage_list: list of arrays
voltage responses for several sweep repeats
current_list: list of arrays
current injections for several sweep repeats
dt: float
time step size in voltage and current traces
Returns
-------
r_list: list of floats
each value corresponds to the resistance of a sweep
c_list: list of floats
each value corresponds to the capacitance of a sweep
el_list: list of floats
each value corresponds to the resting potential of a sweep
'''
r_list=[]
c_list=[]
el_list=[]
for voltage, current in zip(voltage_list, current_list):
matrix=np.ones((len(voltage)-1, 3))
matrix[:,0]=voltage[0:len(voltage)-1]
matrix[:,1]=current[0:len(current)-1]
lsq_non_der_raw=np.linalg.lstsq(matrix, voltage[1:])[0]
# (r_lsq_non_der_raw, c_lsq_non_der_raw, El_lsq_non_der_raw)=RCEL_from_standard_space(lsq_non_der_raw)
c_lsq_non_der_raw=dt/lsq_non_der_raw[1]
r_lsq_non_der_raw=-lsq_non_der_raw[1]/(lsq_non_der_raw[0]-1)
El_lsq_non_der_raw=-lsq_non_der_raw[2]/(lsq_non_der_raw[0]-1)
r_list.append(r_lsq_non_der_raw)
c_list.append(c_lsq_non_der_raw)
el_list.append(El_lsq_non_der_raw)
return r_list, c_list, el_list