Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Build StatuscodecovPyPI version

LFPsimpy: A zero-model-modification, MPI-compatible Python package to compute Local Field Potentials of NEURON simulator models

Zero-modification: With LFPsimpy, there is no need to modify or re-write a NEURON model to fit a particular pattern or style. Given an existing NEURON model (HOC/Python/cell/network), just add a few Python lines to specify the location and parameters of the LFP electrode. Then run the simulation and plot or further process the LFP signal.

Python-based: The package is written in pure Python. Download the Python source code and modify or extend it using a familiar language. A small .HOC file allows plotting the LFP signal using native NEURON graphs.

Multiple LFP algorithms:Line, Point, and RC methods of Parasuram et. al. (2016) are implemented. Extend the Python source code to use a custom algorithm.

Unlimited electrodes: Place any number of LFP electrodes in arbitrary 3D locations to simulate multi-electrode arrays.

MPI-compatible: The package works with single- and multi-process simulations. Rank 0 contains the electrode values of the whole model.

Requirements

LFPsimpy requires a working version of NEURON 7.5+ either installed from a package/installer (easier) or compiled (more challenging). Linux, Mac, and Windows versions are supported.

You must be able to run at least one of these commands in a terminal window without errors:

  • nrniv -python
  • Or python -c 'from neuron import h'

If you cannot run any of these commands, it indicates that there is something amiss with your NEURON installation. Search the error messages on the NEURON forum for help.

Installation

Installation depends on how you installed NEURON simulator (installed vs. compiled).

If you installed a downloaded NEURON package

Download and extract this LFPsimpy ZIP file to a known folder. Then note the location of the LFPsimpy sub-folder.

Then append the LFPsimpy parent folder location to your $PYTHONPATH environmental variable. E.g. export PYTHONPATH=$PYTHONPATH:/path/to/LFPsimpy-master/. Place the line in your shell startup file (e.g. ~/.bashrc) to ensure the variable remains set after an OS restart.

If you compiled NEURON+Python

To install the library, simply type in pip install lfpsimpy in your terminal.

Usage

To use the library, first load your HOC or Python model in NEURON, insert LFP electrode(s), run simulation, and plot/process the electrode signal.

# Load your cell or network model
from neuron import h
run_scripts_build_model_etc()
# Load the LFP library
from LFPsimpy import LfpElectrode
# Place an LFP electrode
# x,y,z in microns
# sampling_period in ms. E.g. 0.1 => 10kHz
# method: either 'Line', 'Point', or 'RC'. See: Parasuram et. al. (2016)
le = LfpElectrode(x=100, y=50, z=0, sampling_period=0.1, method='Line')
# Run the simulation
h.tstop = 100 # <- important!
h.run()
# Plot/process LFP values
le.times # Contains the sampled LFP times
le.values # Contains the corresponding sampled LFP voltage values (nV)

More examples are described in this Jupyter notebook.

NEURON GUI plotting

When using the NEURON GUI, after the electrode is inserted, you can plot the LFP electrode value with:

Graph > Current Axis > Plot What? > Objects > LfpElectrode[0].value then In Tools > RunControl, set Points plotted/ms to 1/sampling_period

Init & Run will show the LFP value of the first inserted electrode

How It Works

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). The original publication estimated LFPs using three different methods and also did not require a NEURON model to be in a specific format. However, the original implementation is in HOC, is not MPI-compatible, and places restrictions on the number of electrodes that can be placed in a simulation.

This library encapsulates the three LFP estimation methods described in the paper and uses the more efficient NEURON's i_membrane_ method. These changes allow arbitrary number of electrodes and allows computing the LFP in MPI-parallelized models.

Issues

While NEURON allows running simulations past the tstop value, this library does not support this usage pattern. If h.t exceeds h.tstop a warning is shown and the LFP signal is not computed.

If you encounter an issue, first make sure it's not due to NEURON itself. If it is, please contact the NEURON team. If the issue is with this library, please create an issue on Github.

Contributing

To contribute, please open an issue first and discuss your plan for contributing. Then fork this repository and commit a pull-request with your changes.

Acknowledgements

LFPsimpy is a Python re-implementation of LFPsim described in Parasuram et. al. (2016). When using LFPsimpy in research projects, please cite the original publication and this repository, which is maintained by Justas Birgiolas.

About

Zero-model-modification, MPI-compatible Python package to compute extracellular Local Field Potentials (LFPs) for NEURON simulator models

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages