Merge branch 'master' of https://github.com/Nyxas/neuronModel
This commit is contained in:
commit
7f0c89b65f
@ -226,7 +226,7 @@ def binary_search_base_freq(model: LifacNoiseModel, base_stimulus, goal_frequenc
|
|||||||
raise ValueError("binary_search_base_freq() - LifacNoiseModel: Goal frequency might be nan?")
|
raise ValueError("binary_search_base_freq() - LifacNoiseModel: Goal frequency might be nan?")
|
||||||
|
|
||||||
if abs(upper_bound - lower_bound) < 0.0001:
|
if abs(upper_bound - lower_bound) < 0.0001:
|
||||||
warn("Search was stopped no value was found!")
|
warn("Search was stopped. Upper and lower bounds converged without finding a value closer than threshold!")
|
||||||
return middle
|
return middle
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,16 +49,14 @@ def fit_cell_base(parameter):
|
|||||||
"\n error: {:.2f}".format(sum(error)))
|
"\n error: {:.2f}".format(sum(error)))
|
||||||
|
|
||||||
|
|
||||||
def fit_all_cells_parallel_sync(cells, start_parameters, results_base_folder):
|
def fit_all_cells_parallel_sync(cells, start_parameters, thread_pool, results_base_folder):
|
||||||
parameter = []
|
parameter = []
|
||||||
for cell in cells:
|
for cell in cells:
|
||||||
for i, s_pars in enumerate(start_parameters):
|
for i, s_pars in enumerate(start_parameters):
|
||||||
parameter.append((cell, i, s_pars, results_base_folder))
|
parameter.append((cell, i, s_pars, results_base_folder))
|
||||||
|
|
||||||
core_count = mp.cpu_count()
|
|
||||||
pool = mp.Pool(core_count - 1)
|
|
||||||
time1 = time.time()
|
time1 = time.time()
|
||||||
pool.map(fit_cell_base, parameter)
|
thread_pool.map(fit_cell_base, parameter)
|
||||||
time2 = time.time()
|
time2 = time.time()
|
||||||
print("Time taken for all cells and start parameters ({:}): {:.2f}s".format(len(parameter), time2 - time1))
|
print("Time taken for all cells and start parameters ({:}): {:.2f}s".format(len(parameter), time2 - time1))
|
||||||
|
|
||||||
@ -273,17 +271,29 @@ def save_fitting_run_info(cell_data, parameters, start_parameters, plot=False, s
|
|||||||
|
|
||||||
|
|
||||||
def test_effect_of_refractory_period():
|
def test_effect_of_refractory_period():
|
||||||
ref_periods = np.arange(0.0006, 0.001, 0.0015)
|
ref_periods = [0.0006, 0.001, 0.0015]
|
||||||
|
counter = 0
|
||||||
|
core_count = mp.cpu_count()
|
||||||
|
pool = mp.Pool(core_count - 1)
|
||||||
|
for cell in icelldata_of_dir("./data/"):
|
||||||
|
counter += 1
|
||||||
|
if counter < 10:
|
||||||
|
continue
|
||||||
|
elif counter >= 14:
|
||||||
|
return
|
||||||
|
start_parameters_base = [p for p in iget_start_parameters()]
|
||||||
|
for ref_period in ref_periods:
|
||||||
|
print(cell.get_data_path())
|
||||||
|
print("ref period: {:.4f}".format(ref_period))
|
||||||
|
results_base_folder = "./test_routines/ref_period_{:.4f}/".format(ref_period)
|
||||||
|
all_start_parameters = copy.deepcopy(start_parameters_base)
|
||||||
|
|
||||||
|
for par_set in all_start_parameters:
|
||||||
|
par_set["refractory_period"] = ref_period
|
||||||
|
fit_all_cells_parallel_sync([cell], all_start_parameters, pool, results_base_folder)
|
||||||
|
|
||||||
cells = [c for c in icelldata_of_dir("./data/")]
|
del cell
|
||||||
start_parameters_base = [p for p in iget_start_parameters()]
|
|
||||||
for ref_period in ref_periods:
|
|
||||||
results_base_folder = "./test_routines/ref_period_{:.3f}/".format(ref_period)
|
|
||||||
all_start_parameters = copy.deepcopy(start_parameters_base)
|
|
||||||
|
|
||||||
for par_set in all_start_parameters:
|
|
||||||
par_set["refractory_period"] = ref_period
|
|
||||||
fit_all_cells_parallel_sync(cells, all_start_parameters, results_base_folder)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
@ -4,6 +4,7 @@ from models.LIFACnoise import LifacNoiseModel
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import helperFunctions as hF
|
import helperFunctions as hF
|
||||||
|
from CellData import CellData
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@ -12,8 +13,23 @@ def main():
|
|||||||
'v_base': 0, 'step_size': 5e-05, 'dend_tau': 0.0008667253013050408, 'v_zero': 0, 'v_offset': -6.25,
|
'v_base': 0, 'step_size': 5e-05, 'dend_tau': 0.0008667253013050408, 'v_zero': 0, 'v_offset': -6.25,
|
||||||
'noise_strength': 0.03337309379328535, 'a_zero': 2, 'threshold': 1, 'delta_a': 0.0726267312975076}
|
'noise_strength': 0.03337309379328535, 'a_zero': 2, 'threshold': 1, 'delta_a': 0.0726267312975076}
|
||||||
eod_freq = 658
|
eod_freq = 658
|
||||||
|
cell_data = CellData("./data/2012-12-13-ao-invivo-1/")
|
||||||
model = LifacNoiseModel(parameters)
|
model = LifacNoiseModel(parameters)
|
||||||
|
mean_duration = np.mean(cell_data.get_sam_durations())
|
||||||
|
contrasts = cell_data.get_sam_contrasts()
|
||||||
|
spiketimes = cell_data.get_sam_spiketimes()
|
||||||
|
for i, m_freq in enumerate(cell_data.get_sam_delta_frequencies()):
|
||||||
|
|
||||||
|
stimulus = SAM(eod_freq, contrasts[i], m_freq)
|
||||||
|
prob_desnity_function_model = generate_pdf(model, stimulus, sim_length=mean_duration)
|
||||||
|
for spikes in spiketimes[i]:
|
||||||
|
prob_density_cell = spiketimes_calculate_pdf(spikes, cell_data.get_sampling_interval())
|
||||||
|
|
||||||
|
plt.plot(prob_density_cell)
|
||||||
|
plt.plot(prob_desnity_function_model)
|
||||||
|
plt.show()
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
# __init__(carrier_frequency, contrast, modulation_frequency, start_time=0, duration=np.inf, amplitude=1)
|
# __init__(carrier_frequency, contrast, modulation_frequency, start_time=0, duration=np.inf, amplitude=1)
|
||||||
mod_freqs = np.arange(-60, eod_freq*4 + 61, 10)
|
mod_freqs = np.arange(-60, eod_freq*4 + 61, 10)
|
||||||
@ -58,6 +74,19 @@ def generate_pdf(model, stimulus, trials=4, sim_length=3, kernel_width=0.005):
|
|||||||
return mean_rate
|
return mean_rate
|
||||||
|
|
||||||
|
|
||||||
|
def spiketimes_calculate_pdf(spikes, step_size, kernel_width=0.005):
|
||||||
|
length = int(spikes[-1] / step_size)+1
|
||||||
|
binary = np.zeros(length)
|
||||||
|
spikes = [int(s / step_size) for s in spikes]
|
||||||
|
for s_idx in spikes:
|
||||||
|
binary[s_idx] = 1
|
||||||
|
|
||||||
|
kernel = gaussian_kernel(kernel_width, step_size)
|
||||||
|
rate = np.convolve(binary, kernel, mode='same')
|
||||||
|
|
||||||
|
return rate
|
||||||
|
|
||||||
|
|
||||||
def gaussian_kernel(sigma, dt):
|
def gaussian_kernel(sigma, dt):
|
||||||
x = np.arange(-4. * sigma, 4. * sigma, dt)
|
x = np.arange(-4. * sigma, 4. * sigma, dt)
|
||||||
y = np.exp(-0.5 * (x / sigma) ** 2) / np.sqrt(2. * np.pi) / sigma
|
y = np.exp(-0.5 * (x / sigma) ** 2) / np.sqrt(2. * np.pi) / sigma
|
||||||
|
@ -46,8 +46,8 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
def test_effect_of_two_variables():
|
def test_effect_of_two_variables():
|
||||||
eod_freqs = np.arange(100, 1001, 20)
|
eod_freqs = np.arange(100, 1001, 50)
|
||||||
ref_periods = np.arange(0, 0.00201, 0.0001)
|
ref_periods = np.arange(0, 0.00201, 0.0002)
|
||||||
variables = ("bf", "vs", "sc", "cv", "burst", "f_inf_s", "f_zero_s")
|
variables = ("bf", "vs", "sc", "cv", "burst", "f_inf_s", "f_zero_s")
|
||||||
colorbar_labels = ("Frequency in Hz", "Vector strength", "serial correlation lag=1", "Coefficient of Variation",
|
colorbar_labels = ("Frequency in Hz", "Vector strength", "serial correlation lag=1", "Coefficient of Variation",
|
||||||
"Burstiness", "f_inf slope", "f_zero slope")
|
"Burstiness", "f_inf slope", "f_zero slope")
|
||||||
|
Loading…
Reference in New Issue
Block a user