Introduction
Neuron_Reduce provides an analytical method for reducing neuron model complexity. It enables the mapping of synapses and active ion channels to a computationally simpler model while accelerating simulation speed by up to 200-fold for inputs consisting of thousands of dendritic synapses.
Full details are available in the accompanied paper: An efficient analytical reduction of detailed nonlinear neuron models. Nat. Commun., 11 (2020), p. 288 - https://www.nature.com/articles/s41467-019-13932-6
Installation
pip install --user neuron_reduce
Quick Start
The following code show the main function that is used to reduce a complex cell.
complex_cell # The model cell
synapses_list # A list of all synapse on this cell
netcon_list # A list of all netcons for the synapses on the cell
import neuron_reduce
reduced_cell, synapses_list, netcons_list = neuron_reduce.subtree_reductor(complex_cell, synapses_list, netcons_list)
Detailed example
Copy example folder from github
git clone https://github.com/orena1/neuron_reduce.git
Go to example folder
cd neuron_reduce
cd example
nrnivmodl mod #compile the mod files
Open python and run the following code
from __future__ import division
from neuron import gui,h
import numpy as np
import neuron_reduce
import time
import matplotlib.pyplot as plt
#Create a L5_PC model
h.load_file('L5PCbiophys3.hoc')
h.load_file("import3d.hoc")
h.load_file('L5PCtemplate.hoc')
complex_cell = h.L5PCtemplate('cell1.asc')
h.celsius = 37
h.v_init = complex_cell.soma[0].e_pas
#Add synapses to the model
synapses_list, netstims_list, netcons_list, randoms_list = [], [], [] ,[]
all_segments = [i for j in map(list,list(complex_cell.apical)) for i in j] + [i for j in map(list,list(complex_cell.basal)) for i in j]
len_per_segment = np.array([seg.sec.L/seg.sec.nseg for seg in all_segments])
rnd = np.random.RandomState(10)
for i in range(10000):
seg_for_synapse = rnd.choice(all_segments, p=len_per_segment/sum(len_per_segment))
synapses_list.append(h.Exp2Syn(seg_for_synapse))
if rnd.uniform()<0.85:
e_syn, tau1, tau2, spike_interval, syn_weight = 0, 0.3, 1.8, 1000/2.5, 0.0016
else:
e_syn, tau1, tau2, spike_interval, syn_weight = -86, 1, 8, 1000/15.0, 0.0008
#set synaptic varibales
synapses_list[i].e, synapses_list[i].tau1, synapses_list[i].tau2 = e_syn, tau1, tau2
#set netstim variables
netstims_list.append(h.NetStim())
netstims_list[i].interval, netstims_list[i].number, netstims_list[i].start, netstims_list[i].noise = spike_interval, 9e9, 100, 1
#set random
randoms_list.append(h.Random())
randoms_list[i].Random123(i)
randoms_list[i].negexp(1)
netstims_list[i].noiseFromRandom(randoms_list[i])
#set netcon varibales
netcons_list.append(h.NetCon(netstims_list[i], synapses_list[i] ))
netcons_list[i].delay, netcons_list[i].weight[0] = 0, syn_weight
#Simulate the full neuron for 1 seconds
soma_v = h.Vector()
soma_v.record(complex_cell.soma[0](0.5)._ref_v)
time_v = h.Vector()
time_v.record(h._ref_t)
h.tstop = 1000
st = time.time()
h.run()
print('complex cell simulation time {:.4f}'.format(time.time()-st))
complex_cell_v = list(soma_v)
#apply Neuron_Reduce to simplify the cell
reduced_cell, synapses_list, netcons_list = neuron_reduce.subtree_reductor(complex_cell, synapses_list, netcons_list, reduction_frequency=0, total_segments_manual=-1)
for r in randoms_list:r.seq(1) #reset random
#Running the simulation again but now on the reduced cell
st = time.time()
h.run()
print('reduced cell simulation time {:.4f}'.format(time.time()-st))
reduced_celll_v = list(soma_v)
#plotting the results
plt.figure()
plt.plot(time_v, complex_cell_v, label='complex cell')
plt.plot(time_v, reduced_celll_v, label='redcued cell')
plt.show()
Citation
O. Amsalem, G. Eyal, N. Rogozinski, M. Gevaert, P. Kumbhar, F. Schürmann, I. Segev. An efficient analytical reduction of detailed nonlinear neuron models. Nat. Commun., 11 (2020), p. 288
Metadata
Release files for neuron-reduce 0.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| neuron_reduce-0.0.7.tar.gz | 18.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| neuron_reduce-0.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.5 kB
Release files / neuron_reduce-0.0.7.tar.gz
| Download URL | neuron_reduce-0.0.7.tar.gz |
|---|---|
| Size | 18.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
672b717dd28cc56605660f142eb407f2db864fa529dc4d9df70ab6e4e872bb3f
|
|
BLAKE2b-256 checksum How to use checksums |
5258f8b3b6eb352cfc4f027e7a1ebebc9aaecfe1eb9eeafa9e039c7ec3b2b702
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.7
|
Release files / neuron_reduce-0.0.7-py3-none-any.whl
| Download URL | neuron_reduce-0.0.7-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3f038d2e082098bf92b8b03995ae58ef359fab3ba806c6448b10479fdd80745
|
|
BLAKE2b-256 checksum How to use checksums |
21b66ace32c7b86c7eacb9e41a304817546f08bca12db861c7cacf1f841abe2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.7
|
Security for neuron-reduce 0.0.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.