{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/combine-org/combine-notebooks/main?labpath=notebooks%2Fneuroml.ipynb)\n", "\"Open" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Simple NeuroML example\n", "\n", "This notebook creates a simple model in [NeuroML version 2](https://docs.neuroml.org/Userdocs/NeuroMLv2.html). It adds a [simple spiking neuron model](https://docs.neuroml.org/Userdocs/Schemas/Cells.html#schema-izhikevich2007cell) to a [population](https://docs.neuroml.org/Userdocs/Schemas/Networks.html#schema-population) and then the population to a [network](https://docs.neuroml.org/Userdocs/Schemas/Networks.html#network). Then we create a [LEMS simulation file](https://docs.neuroml.org/Userdocs/LEMSSimulation.html) to specify how to to a simulate the model, and finally we execute it using [jNeuroML](https://docs.neuroml.org/Userdocs/Software/jNeuroML.html#jneuroml). The results of that simulation are plotted below.\n", "\n", "
\n", "\"NeuroML\n", "
\n", "\n", "## 1) Including libraries\n", "\n", "Note: Please uncomment the line below if you use the Google Colab." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "#%pip install pyneuroml" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from neuroml import NeuroMLDocument\n", "from pyneuroml import pynml\n", "import neuroml.writers as writers\n", "from neuroml.utils import validate_neuroml2\n", "from pyneuroml.lems import LEMSSimulation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2) Declaring the NeuroML model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a NeuroML document\n", "\n", "This is the container document to which the cells and the network will be added. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "nml_doc = NeuroMLDocument(id=\"IzhNeuron\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the Izhikevich cell and add it\n", "\n", "The [Izhikevich model](https://www.izhikevich.org/publications/spikes.htm) is a simple, 2 variable neuron model exhibiting a range of neurophysiologically realistic spiking behaviours depending on the parameters given. We use the [izhikevich2007cell](https://docs.neuroml.org/Userdocs/Schemas/Cells.html#izhikevich2007cell) version here. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "izh0 = nml_doc.add(\n", " \"Izhikevich2007Cell\",\n", " id=\"izh2007RS0\", v0=\"-60mV\", C=\"100pF\", k=\"0.7nS_per_mV\", vr=\"-60mV\",\n", " vt=\"-40mV\", vpeak=\"35mV\", a=\"0.03per_ms\", b=\"-2nS\", c=\"-50.0mV\", d=\"100pA\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a network and add it to the model\n", "\n", "We add a [network](https://docs.neuroml.org/Userdocs/Schemas/Networks.html#network) to the document created above. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "net = nml_doc.add(\"Network\", id=\"IzNet\", validate=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a population of defined cells and add it to the network\n", "\n", "A [population](https://docs.neuroml.org/Userdocs/Schemas/Networks.html#schema-population) of size 1 of these cells is created and then added to the network. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "\n", "pop0 = net.add(\"Population\", id=\"IzhPop0\", component=izh0.id, size=1)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define an external stimulus and add it to the model\n", "\n", "On its own the cell will not spike, so we add a small current to it in the form of a [pulse generator](https://docs.neuroml.org/Userdocs/Schemas/Inputs.html#pulsegenerator) which will apply a square pulse of current. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "pg = nml_doc.add(\n", " \"PulseGenerator\",\n", " id=\"pulseGen_%i\" % 0, delay=\"100ms\", duration=\"800ms\",\n", " amplitude=\"0.07 nA\"\n", ")\n", "exp_input = net.add(\"ExplicitInput\", target=\"%s[%i]\" % (pop0.id, 0), input=pg.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3) Write, print and validate the generated file " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Write the NeuroML model to a file" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Written network file to: hello_world_neuroml.nml\n" ] } ], "source": [ "\n", "nml_file = 'hello_world_neuroml.nml'\n", "writers.NeuroMLWriter.write(nml_doc, nml_file)\n", "print(\"Written network file to: \" + nml_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Print out the file\n", "\n", "Here we print the XML for the saved NeuroML file. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n" ] } ], "source": [ "with open(nml_file) as f: \n", " print(f.read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Validate the NeuroML model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "It's valid!\n" ] } ], "source": [ "validate_neuroml2(nml_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4) Simulating the model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a simulation instance of the model\n", "\n", "The NeuroML file does not contain any information on how long to simulate the model for or what to save etc. For this we will need a [LEMS simulation file](https://docs.neuroml.org/Userdocs/LEMSSimulation.html).\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "pyNeuroML >>> INFO - Loading NeuroML2 file: /Users/padraig/git/combine-notebooks/notebooks/hello_world_neuroml.nml\n" ] } ], "source": [ "simulation_id = \"example-single-izhikevich2007cell-sim\"\n", "simulation = LEMSSimulation(sim_id=simulation_id,\n", " duration=1000, dt=0.1, simulation_seed=123)\n", "simulation.assign_simulation_target(net.id)\n", "simulation.include_neuroml2_file(nml_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the output file to store simulation outputs\n", "\n", "Here, we record the neuron's membrane potential to the specified data file." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "simulation.create_output_file(\n", " \"output0\", \"%s.v.dat\" % simulation_id\n", ")\n", "simulation.add_column_to_output_file(\"output0\", 'IzhPop0[0]', 'IzhPop0[0]/v')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Save the simulation to a file" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", "\n" ] } ], "source": [ "lems_simulation_file = simulation.save_to_file()\n", "with open(lems_simulation_file) as f: \n", " print(f.read())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run the simulation using the jNeuroML simulator\n", "\n", "[jNeuroML](https://docs.neuroml.org/Userdocs/Software/jNeuroML.html#jneuroml) is a simple NeuroML simulator which can quickly execute the generated model. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "pyNeuroML >>> INFO - Loading LEMS file: LEMS_example-single-izhikevich2007cell-sim.xml and running with jNeuroML\n", "pyNeuroML >>> INFO - Executing: (java -Xmx2G -Djava.awt.headless=true -jar \"/opt/homebrew/anaconda3/envs/py39n/lib/python3.9/site-packages/pyneuroml/lib/jNeuroML-0.12.1-jar-with-dependencies.jar\" LEMS_example-single-izhikevich2007cell-sim.xml -nogui -I '') in directory: .\n", "pyNeuroML >>> INFO - Command completed successfully!\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pynml.run_lems_with_jneuroml(\n", " lems_simulation_file, max_memory=\"2G\", nogui=True, plot=False\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot the recorded data" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "pyNeuroML >>> INFO - Generating plot: Membrane potential\n" ] }, { "data": { "image/png": "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tm2b4ODgIAAQXnjhhXosbeNVl3p+6623BJlMJowZM0b4+uuvhVWrVgkRERHCDz/80AAlb1wMreedO3cKMplM6N+/v7Bq1Srhiy++EAYNGiQAEFasWNFApW88bty4IQAQ/P39hSFDhggAhMjIyBqtq1arhf79+wsODg7CkiVLhC+++ELo1KmT4OTkJMTExNRLeRmwGoETJ04IAITly5frlxUVFQlt27YV+vXrV+26H374oQBAiIqK0i+7cuWKIJfLhQULFtRbmRujutTz/v37Kyz7/vvvBQDCmjVrjF3URq0u9Vz6/a1btxbefvttBqwq1KWejx8/LshkMp7ka6Au9TxixAjB19dXKC4u1i8rKSkR2rZtK3Tr1q3eytxYFRcXCykpKYIgCMLJkydrFbA2bdokABC2bNmiX5aamiq4uroK48ePr4/iCuwibAS2bt0KuVyO6dOn65fZ2tpi2rRpOH78OBITE6tdt3fv3ujdu7d+WYcOHTBs2DBs3ry5Xsvd2NSlnocMGVJh2RNPPAEAuHLlitHL2pjVpZ51PvroI2g0GsydO7c+i9qo1aWeP/30UzRv3hyzZ8+GIAjIz89viCI3SnWp59zcXLi5uZWZENPS0hKenp6ws7Or13I3RjY2NmjevLlB627duhXe3t4YPXq0fpmXlxfCw8Oxc+dOKBQKYxVTjwGrETh79iyCgoIqPLQyJCQEAHDu3LlK19NoNLhw4QJ69epV4bWQkBDExsYiLy/P6OVtrAyt56rcvn0bAODp6WmU8jUVda3nhIQEfPDBB/jwww95EqpGXep537596N27Nz7//HN4eXnByckJPj4++OKLL+qzyI1SXep5yJAhuHTpEhYvXozr168jNjYW77zzDk6dOoX58+fXZ7El5+zZs+jRowcsLMrGnpCQEBQWFiImJsbo32lp9E8ko0tJSYGPj0+F5bplycnJla6XmZkJhUJxz3Xbt29vxNI2XobWc1U+/PBDyOVyhIWFGaV8TUVd6/nVV19F9+7dMW7cuHopX1NhaD1nZWUhPT0dR48exT///IO33noL/v7+iIyMxEsvvQQrKytERETUa9kbk7psz4sXL8aNGzfw3nvv4d133wUA2NvbY9u2bXjsscfqp8ASlZKSgkGDBlVYXvq/U9euXY36nQxYjUBRUVGlz1SytbXVv17VegAMWleKDK3nymzY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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Load the data from the file and plot the graph for the membrane potential\n", "# using the pynml generate_plot utility function.\n", "\n", "import numpy as np\n", "data_array = np.loadtxt(\"%s.v.dat\" % simulation_id)\n", "pynml.generate_plot(\n", " [data_array[:, 0]], [data_array[:, 1]],\n", " \"Membrane potential\", show_plot_already=True,\n", " xaxis=\"time (s)\", yaxis=\"membrane potential (V)\"\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 4 }