[Modèle Hodgkin-Huxley](https: //) utilisant NEURON, un simulateur de cellules nerveuses / circuits neuronaux à usage général développé par Michael Hines et al. De l'Université de Hyeres. En.wikipedia.org/wiki/Hodgkin%E2%80%93Huxley_model) est utilisé pour simuler les cellules nerveuses.
Bien que ce soit un peu difficile à comprendre, il est utilisé comme simulateur standard pour les modèles multi-compartiments de cellules nerveuses, et il peut également être utilisé pour des simulations à grande échelle à l'aide de MPI, donc je pense que ce sera un outil très puissant si vous pouvez le maîtriser.
(En aparté, l'image sur la couverture du livre AGE OF SUPER SENSING The Future of Sensing Design est de NEURON. Il est visualisé sur la base de la simulation du circuit neuronal.)
Si le notebook NEURON + Jupyter fonctionne, je pense qu'il fonctionnera dans d'autres environnements tels que CentOS, Mac et Windows.
Construire un environnement NEURON pour Python est un peu fastidieux, j'ai donc créé une image Docker.
Veuillez vous référer à http://docs.docker.jp/engine/installation/ etc. S'il s'agit d'une version plus ancienne, vous pouvez également l'installer avec la commande suivante.
$ sudo apt-get install docker.io
$ sudo yum install docker-io
Lorsque vous exécutez la commande suivante, le notebook Jupyter avec la configuration NEURON démarre, accédez à l'URL affichée (http: // localhost: 8888 /? Token = 91d2
dans l'exemple ci-dessous).
$ docker run -p 8888:8888 dmiyamoto/neuron:jupyter
/usr/local/lib/python2.7/dist-packages/IPython/paths.py:69: UserWarning: IPython parent '/home/neuron' is not a writable location, using a temp directory.
" using a temp directory.".format(parent))
[I 15:21:30.297 NotebookApp] Writing notebook server cookie secret to /home/neuron/.local/share/jupyter/runtime/notebook_cookie_secret
[W 15:21:30.307 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 15:21:30.311 NotebookApp] Serving notebooks from local directory: /work
[I 15:21:30.311 NotebookApp] 0 active kernels
[I 15:21:30.311 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=91d2
[I 15:21:30.311 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 15:21:30.311 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8888/?token=91d2
Si vous n'utilisez pas le notebook Jupyter, vous pouvez l'utiliser comme interpréteur python avec la commande suivante.
$ docker run -it neuron:jupyter python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
L'exemple de code utilisé cette fois est le suivant.
De plus, puisque le même code est inclus dans les «exemples» sur l'écran des fichiers de Jupyter Notebook, utilisez ceci.
calc_hh()
Sauf pour la fonction calc_hh ()
, vous pouvez la comprendre si vous avez une connaissance générale de Python et Matplotlib, donc je n'expliquerai que le contenu de calc_hh ()
.
soma = neuron.h.Section(name="soma")
soma.nseg = 1
soma.diam = 10 # [um]
soma.L = 10 # [um]
soma.insert("hh")
Dans NEURON Python, une fonction portant le même nom que HOC est définie sous la classe h
. (Explication pour ceux qui comprennent)
Ici, d'abord, la fonction Section
est utilisée pour définir la cellule nouvellement calculée soma
.
Après cela, les paramètres de l'objet soma
sont définis. L'explication de chaque paramètre est la suivante.
--nseg
: nombre de divisions lors du calcul du potentiel cellulaire. Lors du ciblage de cellules allongées, il est nécessaire d'augmenter le nombre de divisions car les potentiels au point central et aux extrémités sont différents.
--diam
: diamètre de la cellule
--L
: longueur de cellule
--ʻInsert ('hh') `: Hodgkin-Définit un modèle de type Huxley (hh). D'autres incluent «pas», qui suppose uniquement un courant de fuite. Vous pouvez également créer votre propre modèle.
De plus, les types de paramètres existants et les valeurs peuvent être affichés avec la fonction psection
. (Cela devrait l'être, mais comme la fonction d'impression à l'intérieur de NEURON ne semble pas bien être affichée sur Jupyter, un exemple d'exécution dans l'interpréteur est montré.) Elle peut être nouvellement définie par ʻinsert le modèle
'hh'`. Vous pouvez également observer où les paramètres augmentent.
>>> soma = neuron.h.Section(name='soma')
>>> neuron.h.psection()
soma { nseg=1 L=100 Ra=35.4
/*location 0 attached to cell 0*/
/* First segment only */
insert morphology { diam=500}
insert capacitance { cm=1}
}
1.0
>>> soma.insert('hh')
<nrn.Section object at 0x7fe655562648>
>>> neuron.h.psection()
soma { nseg=1 L=100 Ra=35.4
/*location 0 attached to cell 0*/
/* First segment only */
insert morphology { diam=500}
insert capacitance { cm=1}
insert hh { gnabar_hh=0.12 gkbar_hh=0.036 gl_hh=0.0003 el_hh=-54.3}
insert na_ion { ena=50}
insert k_ion { ek=-77}
}
1.0
stim = neuron.h.IClamp(soma(0.5))
stim.delay = 50 # [ms]
stim.dur = 200 # [ms]
stim.amp = 0.1 # [nA]
Même si des cellules sont définies et un modèle de type Hodgkin-Huxley est introduit, s'il n'y a pas de stimulation, le potentiel constant ne change pas, donc une stimulation à courant constant est définie. Dans NEURON, un stimulus à courant constant peut être ajouté par la fonction «IClamp». L'explication des paramètres est la suivante.
--deley
: Il est temps de démarrer la stimulation
-- dur
: durée du stimulus
--ʻAmp`: Intensité de la stimulation
rec_t = neuron.h.Vector()
rec_t.record(neuron.h._ref_t)
rec_v = neuron.h.Vector()
rec_v.record(soma(0.5)._ref_v)
Allouez un tableau dans NEUORON avec la fonction Vector
et définissez la valeur à enregistrer avec la fonction enregistrement
.
Par conséquent, la valeur définie pour chaque étape de calcul est ajoutée au tableau.
neuron.h.finitialize(-65)
tstop = 300
neuron.run(tstop)
La fonction finitialize
initialise le potentiel de la cellule à -65 [mV].
Utilisez également la fonction run
pour démarrer réellement la simulation. L'argument est l'heure de fin de la simulation (300 ms dans ce cas).
t = rec_t.as_numpy()
v = rec_v.as_numpy()
return np.array(t), np.array(v)
La valeur enregistrée est convertie du format interne de NEURON en ndarray par la fonction ʻas_numpy. De plus, (probablement) un bogue du côté NEURON peut provoquer la libération de l'objet sans autorisation, utilisez donc
np.array` pour copier la valeur et l'utiliser comme valeur de retour.
Si vous tracez cette valeur avec matplotlib, vous pouvez obtenir les pics de type Hodgkin-Huxley suivants.
L'intelligence artificielle est en plein essor dans le monde, mais pour ceux qui souhaitent simuler des cerveaux et des circuits neuronaux réels plutôt que des modèles extrêmement abstraits comme le Deep Learning, ce texte divers aide. J'espère que ce sera le cas.
Recommended Posts