%global _empty_manifest_terminate_build 0 Name: python-LFPykit Version: 0.5.1 Release: 1 Summary: Electrostatic models for multicompartment neuron models License: GNU General Public License (GPL) URL: https://github.com/LFPy/LFPykit Source0: https://mirrors.nju.edu.cn/pypi/web/packages/b4/e0/b5935801a38839b177267f53cf6781941e36d8f832e06612773fdf89504e/LFPykit-0.5.1.tar.gz BuildArch: noarch Requires: python3-numpy Requires: python3-scipy Requires: python3-meautility Requires: python3-sphinx Requires: python3-numpydoc Requires: python3-sphinx-rtd-theme Requires: python3-recommonmark Requires: python3-pytest Requires: python3-sympy %description # LFPykit This Python module contain freestanding implementations of electrostatic forward models incorporated in LFPy (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). The aim of the `LFPykit` module is to provide electrostatic models in a manner that facilitates forward-model predictions of extracellular potentials and related measures from multicompartment neuron models, but without explicit dependencies on neural simulation software such as NEURON (https://neuron.yale.edu, https://github.com/neuronsimulator/nrn), Arbor (https://arbor.readthedocs.io, https://github.com/arbor-sim/arbor), or even LFPy. The `LFPykit` module can then be more easily incorporated with these simulators, or in various projects that utilize them such as LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy). BMTK (https://alleninstitute.github.io/bmtk/, https://github.com/AllenInstitute/bmtk), etc. Its main functionality is providing class methods that return two-dimensional linear transformation matrices **M** between transmembrane currents **I** of multicompartment neuron models and some measurement **Y** given by **Y**=**MI**. The presently incorporated volume conductor models have been incorporated in LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy), as described in various papers and books: 1. Linden H, Hagen E, Leski S, Norheim ES, Pettersen KH, Einevoll GT (2014) LFPy: a tool for biophysical simulation of extracellular potentials generated by detailed model neurons. Front. Neuroinform. 7:41. doi: 10.3389/fninf.2013.00041 2. Hagen E, Næss S, Ness TV and Einevoll GT (2018) Multimodal Modeling of Neural Network Activity: Computing LFP, ECoG, EEG, and MEG Signals With LFPy 2.0. Front. Neuroinform. 12:92. doi: 10.3389/fninf.2018.00092 3. Ness, T. V., Chintaluri, C., Potworowski, J., Leski, S., Glabska, H., Wójcik, D. K., et al. (2015). Modelling and analysis of electrical potentials recorded in microelectrode arrays (MEAs). Neuroinformatics 13:403–426. doi: 10.1007/s12021-015-9265-6 4. Nunez and Srinivasan, Oxford University Press, 2006 5. Næss S, Chintaluri C, Ness TV, Dale AM, Einevoll GT and Wójcik DK (2017). Corrected Four-sphere Head Model for EEG Signals. Front. Hum. Neurosci. 11:490. doi: 10.3389/fnhum.2017.00490 ## Build Status [![DOI](https://zenodo.org/badge/288660131.svg)](https://zenodo.org/badge/latestdoi/288660131) [![Coverage Status](https://coveralls.io/repos/github/LFPy/LFPykit/badge.svg?branch=master)](https://coveralls.io/github/LFPy/LFPykit?branch=master) [![Documentation Status](https://readthedocs.org/projects/lfpykit/badge/?version=latest)](https://lfpykit.readthedocs.io/en/latest/?badge=latest) [![flake8 lint](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml/badge.svg)](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml) [![Python application](https://github.com/LFPy/LFPykit/workflows/Python%20application/badge.svg)](https://github.com/LFPy/LFPykit/actions?query=workflow%3A%22Python+application%22) [![Upload Python Package](https://github.com/LFPy/LFPykit/workflows/Upload%20Python%20Package/badge.svg)](https://pypi.org/project/LFPykit) [![Conda Recipe](https://img.shields.io/badge/recipe-lfpykit-green.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/LFPy/LFPykit.git/master) [![License](http://img.shields.io/:license-GPLv3+-green.svg)](http://www.gnu.org/licenses/gpl-3.0.html) ## Features `LFPykit` presently incorporates different electrostatic forward models for extracellular potentials and magnetic signals that has been derived using volume conductor theory. In volume-conductor theory the extracellular potentials can be calculated from a distance-weighted sum of contributions from transmembrane currents of neurons. Given the same transmembrane currents, the contributions to the magnetic field recorded both inside and outside the brain can also be computed. The module presently incorporates different classes. To represent the geometry of a multicompartment neuron model we have: * `CellGeometry`: Base class representing a multicompartment neuron geometry in terms of segment x-, y-, z-coordinates and diameter. Different classes built to map transmembrane currents of `CellGeometry` like instances to different measurement modalities: * `LinearModel`: Base class representing a generic forward model for subclassing * `CurrentDipoleMoment`: Class for predicting current dipole moments * `PointSourcePotential`: Class for predicting extracellular potentials assuming point sources and point contacts * `LineSourcePotential`: Class for predicting extracellular potentials assuming line sourcers and point contacts * `RecExtElectrode`: Class for simulations of extracellular potentials * `RecMEAElectrode`: Class for simulations of in vitro (slice) extracellular potentials * `OneSphereVolumeConductor`: For computing extracellular potentials within sand outside a homogeneous sphere * `LaminarCurrentSourceDensity`: For computing the 'ground truth' current source density across cylindrical volumes aligned with the z-axis * `VolumetricCurrentSourceDensity`: For computing the 'ground truth' current source density on regularly spaced 3D grid Different classes built to map current dipole moments (i.e., computed using `CurrentDipoleMoment`) to extracellular measurements: * `eegmegcalc.FourSphereVolumeConductor`: For computing extracellular potentials in 4-sphere head model (brain, CSF, skull, scalp) from current dipole moment * `eegmegcalc.InfiniteVolumeConductor`: To compute extracellular potentials in infinite volume conductor from current dipole moment * `eegmegcalc.InfiniteHomogeneousVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of infinite homogeneous volume conductor model * `eegmegcalc.SphericallySymmetricVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of a spherically symmetric volume conductor model * `eegmegcalc.NYHeadModel`: Class for computing extracellular potentials in detailed head volume conductor model (https://www.parralab.org/nyhead) Each class (except `CellGeometry`) should have a public method `get_transformation_matrix()` that returns the linear map between the transmembrane currents or current dipole moment and corresponding measurements (see Usage below) ## Usage A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source in a linear, isotropic and homogeneous volume conductor, computing the extracellular potential in ten different locations alongside the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, PointSourcePotential >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `PointSourcePotential`: >>> psp = PointSourcePotential(cell, x=np.ones(10) * 10, y=np.zeros(10), z=np.arange(10) * 10, sigma=0.3) >>> # get linear response matrix mapping currents to measurements >>> M = psp.get_transformation_matrix() >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M @ imem >>> V_ex array([[-0.01387397, 0.01387397], [-0.00901154, 0.00901154], [ 0.00901154, -0.00901154], [ 0.01387397, -0.01387397], [ 0.00742668, -0.00742668], [ 0.00409718, -0.00409718], [ 0.00254212, -0.00254212], [ 0.00172082, -0.00172082], [ 0.00123933, -0.00123933], [ 0.00093413, -0.00093413]]) A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source, computing the current dipole moment and computing the potential in ten different remote locations away from the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, CurrentDipoleMoment, \ >>> eegmegcalc >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `CurrentDipoleMoment`: >>> cdp = CurrentDipoleMoment(cell) >>> M_I_to_P = cdp.get_transformation_matrix() >>> # instantiate class `eegmegcalc.InfiniteVolumeConductor` and map dipole moment to >>> # extracellular potential at measurement sites >>> ivc = eegmegcalc.InfiniteVolumeConductor(sigma=0.3) >>> # compute linear response matrix between dipole moment and >>> # extracellular potential >>> M_P_to_V = ivc.get_transformation_matrix(np.c_[np.ones(10) * 1000, np.zeros(10), np.arange(10) * 100]) >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M_P_to_V @ M_I_to_P @ imem >>> V_ex array([[ 0.00000000e+00, 0.00000000e+00], [ 5.22657054e-07, -5.22657054e-07], [ 1.00041193e-06, -1.00041193e-06], [ 1.39855769e-06, -1.39855769e-06], [ 1.69852477e-06, -1.69852477e-06], [ 1.89803345e-06, -1.89803345e-06], [ 2.00697409e-06, -2.00697409e-06], [ 2.04182029e-06, -2.04182029e-06], [ 2.02079888e-06, -2.02079888e-06], [ 1.96075587e-06, -1.96075587e-06]]) ## Physical units Notes on physical units used in `LFPykit`: - There are no explicit checks for physical units - Transmembrane currents are assumed to be in units of (nA) - Spatial information is assumed to be in units of (µm) - Voltages are assumed to be in units of (mV) - Extracellular conductivities are assumed to be in units of (S/m) - current dipole moments are assumed to be in units of (nA µm) - Magnetic fields are assumed to be in units of (nA/µm) ## Dimensionality - Transmembrane currents are represented by arrays with shape `(n_seg, n_timesteps)` where `n_seg` is the number of segments of the neuron model. - Current dipole moments are represented by arrays with shape `(3, n_timesteps)` - Response matrices **M** have shape `(n_points, input.shape[0])` where `n_points` is for instance the number of extracellular recording sites and `input.shape[0]` the first dimension of the input; that is, the number of segments in case of transmembrane currents or 3 in case of current dipole moments. - predicted signals (except magnetic fields using `eegmegcalc.InfiniteHomogeneousVolCondMEG` or `eegmegcalc.SphericallySymmetricVolCondMEG`) have shape `(n_points, n_timesteps)` ## Documentation The online Documentation of `LFPykit` can be found here: https://lfpykit.readthedocs.io/en/latest ## Dependencies `LFPykit` is implemented in Python and is written (and continuously tested) for `Python >= 3.7`. The main `LFPykit` module depends on `numpy`, `scipy` and `MEAutility` (https://github.com/alejoe91/MEAutility, https://meautility.readthedocs.io/en/latest/). Running all unit tests and example files may in addition require `py.test`, `matplotlib`, `neuron` (https://www.neuron.yale.edu), (`arbor` coming) and `LFPy` (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). ## Installation ### From development sources (https://github.com/LFPy/LFPykit) Install the current development version on https://GitHub.com using `git` (https://git-scm.com): $ git clone https://github.com/LFPy/LFPykit.git $ cd LFPykit $ python setup.py install # --user optional or using `pip`: $ pip install . # --user optional For active development, link the repository location $ python setup.py develop # --user optional ### Installation of stable releases on PyPI.org (https://www.pypi.org) Installing from the Python Package Index (https://www.pypi.org/project/lfpykit): $ pip install lfpykit # --user optional To upgrade the installation using pip: $ pip install --upgrade --no-deps lfpykit ### Installation of stable releases on conda-forge (https://conda-forge.org) Installing `lfpykit` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: $ conda config --add channels conda-forge Once the `conda-forge` channel has been enabled, `lfpykit` can be installed with: $ conda install lfpykit It is possible to list all of the versions of `lfpykit` available on your platform with: $ conda search lfpykit --channel conda-forge %package -n python3-LFPykit Summary: Electrostatic models for multicompartment neuron models Provides: python-LFPykit BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-LFPykit # LFPykit This Python module contain freestanding implementations of electrostatic forward models incorporated in LFPy (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). The aim of the `LFPykit` module is to provide electrostatic models in a manner that facilitates forward-model predictions of extracellular potentials and related measures from multicompartment neuron models, but without explicit dependencies on neural simulation software such as NEURON (https://neuron.yale.edu, https://github.com/neuronsimulator/nrn), Arbor (https://arbor.readthedocs.io, https://github.com/arbor-sim/arbor), or even LFPy. The `LFPykit` module can then be more easily incorporated with these simulators, or in various projects that utilize them such as LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy). BMTK (https://alleninstitute.github.io/bmtk/, https://github.com/AllenInstitute/bmtk), etc. Its main functionality is providing class methods that return two-dimensional linear transformation matrices **M** between transmembrane currents **I** of multicompartment neuron models and some measurement **Y** given by **Y**=**MI**. The presently incorporated volume conductor models have been incorporated in LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy), as described in various papers and books: 1. Linden H, Hagen E, Leski S, Norheim ES, Pettersen KH, Einevoll GT (2014) LFPy: a tool for biophysical simulation of extracellular potentials generated by detailed model neurons. Front. Neuroinform. 7:41. doi: 10.3389/fninf.2013.00041 2. Hagen E, Næss S, Ness TV and Einevoll GT (2018) Multimodal Modeling of Neural Network Activity: Computing LFP, ECoG, EEG, and MEG Signals With LFPy 2.0. Front. Neuroinform. 12:92. doi: 10.3389/fninf.2018.00092 3. Ness, T. V., Chintaluri, C., Potworowski, J., Leski, S., Glabska, H., Wójcik, D. K., et al. (2015). Modelling and analysis of electrical potentials recorded in microelectrode arrays (MEAs). Neuroinformatics 13:403–426. doi: 10.1007/s12021-015-9265-6 4. Nunez and Srinivasan, Oxford University Press, 2006 5. Næss S, Chintaluri C, Ness TV, Dale AM, Einevoll GT and Wójcik DK (2017). Corrected Four-sphere Head Model for EEG Signals. Front. Hum. Neurosci. 11:490. doi: 10.3389/fnhum.2017.00490 ## Build Status [![DOI](https://zenodo.org/badge/288660131.svg)](https://zenodo.org/badge/latestdoi/288660131) [![Coverage Status](https://coveralls.io/repos/github/LFPy/LFPykit/badge.svg?branch=master)](https://coveralls.io/github/LFPy/LFPykit?branch=master) [![Documentation Status](https://readthedocs.org/projects/lfpykit/badge/?version=latest)](https://lfpykit.readthedocs.io/en/latest/?badge=latest) [![flake8 lint](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml/badge.svg)](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml) [![Python application](https://github.com/LFPy/LFPykit/workflows/Python%20application/badge.svg)](https://github.com/LFPy/LFPykit/actions?query=workflow%3A%22Python+application%22) [![Upload Python Package](https://github.com/LFPy/LFPykit/workflows/Upload%20Python%20Package/badge.svg)](https://pypi.org/project/LFPykit) [![Conda Recipe](https://img.shields.io/badge/recipe-lfpykit-green.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/LFPy/LFPykit.git/master) [![License](http://img.shields.io/:license-GPLv3+-green.svg)](http://www.gnu.org/licenses/gpl-3.0.html) ## Features `LFPykit` presently incorporates different electrostatic forward models for extracellular potentials and magnetic signals that has been derived using volume conductor theory. In volume-conductor theory the extracellular potentials can be calculated from a distance-weighted sum of contributions from transmembrane currents of neurons. Given the same transmembrane currents, the contributions to the magnetic field recorded both inside and outside the brain can also be computed. The module presently incorporates different classes. To represent the geometry of a multicompartment neuron model we have: * `CellGeometry`: Base class representing a multicompartment neuron geometry in terms of segment x-, y-, z-coordinates and diameter. Different classes built to map transmembrane currents of `CellGeometry` like instances to different measurement modalities: * `LinearModel`: Base class representing a generic forward model for subclassing * `CurrentDipoleMoment`: Class for predicting current dipole moments * `PointSourcePotential`: Class for predicting extracellular potentials assuming point sources and point contacts * `LineSourcePotential`: Class for predicting extracellular potentials assuming line sourcers and point contacts * `RecExtElectrode`: Class for simulations of extracellular potentials * `RecMEAElectrode`: Class for simulations of in vitro (slice) extracellular potentials * `OneSphereVolumeConductor`: For computing extracellular potentials within sand outside a homogeneous sphere * `LaminarCurrentSourceDensity`: For computing the 'ground truth' current source density across cylindrical volumes aligned with the z-axis * `VolumetricCurrentSourceDensity`: For computing the 'ground truth' current source density on regularly spaced 3D grid Different classes built to map current dipole moments (i.e., computed using `CurrentDipoleMoment`) to extracellular measurements: * `eegmegcalc.FourSphereVolumeConductor`: For computing extracellular potentials in 4-sphere head model (brain, CSF, skull, scalp) from current dipole moment * `eegmegcalc.InfiniteVolumeConductor`: To compute extracellular potentials in infinite volume conductor from current dipole moment * `eegmegcalc.InfiniteHomogeneousVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of infinite homogeneous volume conductor model * `eegmegcalc.SphericallySymmetricVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of a spherically symmetric volume conductor model * `eegmegcalc.NYHeadModel`: Class for computing extracellular potentials in detailed head volume conductor model (https://www.parralab.org/nyhead) Each class (except `CellGeometry`) should have a public method `get_transformation_matrix()` that returns the linear map between the transmembrane currents or current dipole moment and corresponding measurements (see Usage below) ## Usage A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source in a linear, isotropic and homogeneous volume conductor, computing the extracellular potential in ten different locations alongside the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, PointSourcePotential >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `PointSourcePotential`: >>> psp = PointSourcePotential(cell, x=np.ones(10) * 10, y=np.zeros(10), z=np.arange(10) * 10, sigma=0.3) >>> # get linear response matrix mapping currents to measurements >>> M = psp.get_transformation_matrix() >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M @ imem >>> V_ex array([[-0.01387397, 0.01387397], [-0.00901154, 0.00901154], [ 0.00901154, -0.00901154], [ 0.01387397, -0.01387397], [ 0.00742668, -0.00742668], [ 0.00409718, -0.00409718], [ 0.00254212, -0.00254212], [ 0.00172082, -0.00172082], [ 0.00123933, -0.00123933], [ 0.00093413, -0.00093413]]) A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source, computing the current dipole moment and computing the potential in ten different remote locations away from the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, CurrentDipoleMoment, \ >>> eegmegcalc >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `CurrentDipoleMoment`: >>> cdp = CurrentDipoleMoment(cell) >>> M_I_to_P = cdp.get_transformation_matrix() >>> # instantiate class `eegmegcalc.InfiniteVolumeConductor` and map dipole moment to >>> # extracellular potential at measurement sites >>> ivc = eegmegcalc.InfiniteVolumeConductor(sigma=0.3) >>> # compute linear response matrix between dipole moment and >>> # extracellular potential >>> M_P_to_V = ivc.get_transformation_matrix(np.c_[np.ones(10) * 1000, np.zeros(10), np.arange(10) * 100]) >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M_P_to_V @ M_I_to_P @ imem >>> V_ex array([[ 0.00000000e+00, 0.00000000e+00], [ 5.22657054e-07, -5.22657054e-07], [ 1.00041193e-06, -1.00041193e-06], [ 1.39855769e-06, -1.39855769e-06], [ 1.69852477e-06, -1.69852477e-06], [ 1.89803345e-06, -1.89803345e-06], [ 2.00697409e-06, -2.00697409e-06], [ 2.04182029e-06, -2.04182029e-06], [ 2.02079888e-06, -2.02079888e-06], [ 1.96075587e-06, -1.96075587e-06]]) ## Physical units Notes on physical units used in `LFPykit`: - There are no explicit checks for physical units - Transmembrane currents are assumed to be in units of (nA) - Spatial information is assumed to be in units of (µm) - Voltages are assumed to be in units of (mV) - Extracellular conductivities are assumed to be in units of (S/m) - current dipole moments are assumed to be in units of (nA µm) - Magnetic fields are assumed to be in units of (nA/µm) ## Dimensionality - Transmembrane currents are represented by arrays with shape `(n_seg, n_timesteps)` where `n_seg` is the number of segments of the neuron model. - Current dipole moments are represented by arrays with shape `(3, n_timesteps)` - Response matrices **M** have shape `(n_points, input.shape[0])` where `n_points` is for instance the number of extracellular recording sites and `input.shape[0]` the first dimension of the input; that is, the number of segments in case of transmembrane currents or 3 in case of current dipole moments. - predicted signals (except magnetic fields using `eegmegcalc.InfiniteHomogeneousVolCondMEG` or `eegmegcalc.SphericallySymmetricVolCondMEG`) have shape `(n_points, n_timesteps)` ## Documentation The online Documentation of `LFPykit` can be found here: https://lfpykit.readthedocs.io/en/latest ## Dependencies `LFPykit` is implemented in Python and is written (and continuously tested) for `Python >= 3.7`. The main `LFPykit` module depends on `numpy`, `scipy` and `MEAutility` (https://github.com/alejoe91/MEAutility, https://meautility.readthedocs.io/en/latest/). Running all unit tests and example files may in addition require `py.test`, `matplotlib`, `neuron` (https://www.neuron.yale.edu), (`arbor` coming) and `LFPy` (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). ## Installation ### From development sources (https://github.com/LFPy/LFPykit) Install the current development version on https://GitHub.com using `git` (https://git-scm.com): $ git clone https://github.com/LFPy/LFPykit.git $ cd LFPykit $ python setup.py install # --user optional or using `pip`: $ pip install . # --user optional For active development, link the repository location $ python setup.py develop # --user optional ### Installation of stable releases on PyPI.org (https://www.pypi.org) Installing from the Python Package Index (https://www.pypi.org/project/lfpykit): $ pip install lfpykit # --user optional To upgrade the installation using pip: $ pip install --upgrade --no-deps lfpykit ### Installation of stable releases on conda-forge (https://conda-forge.org) Installing `lfpykit` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: $ conda config --add channels conda-forge Once the `conda-forge` channel has been enabled, `lfpykit` can be installed with: $ conda install lfpykit It is possible to list all of the versions of `lfpykit` available on your platform with: $ conda search lfpykit --channel conda-forge %package help Summary: Development documents and examples for LFPykit Provides: python3-LFPykit-doc %description help # LFPykit This Python module contain freestanding implementations of electrostatic forward models incorporated in LFPy (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). The aim of the `LFPykit` module is to provide electrostatic models in a manner that facilitates forward-model predictions of extracellular potentials and related measures from multicompartment neuron models, but without explicit dependencies on neural simulation software such as NEURON (https://neuron.yale.edu, https://github.com/neuronsimulator/nrn), Arbor (https://arbor.readthedocs.io, https://github.com/arbor-sim/arbor), or even LFPy. The `LFPykit` module can then be more easily incorporated with these simulators, or in various projects that utilize them such as LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy). BMTK (https://alleninstitute.github.io/bmtk/, https://github.com/AllenInstitute/bmtk), etc. Its main functionality is providing class methods that return two-dimensional linear transformation matrices **M** between transmembrane currents **I** of multicompartment neuron models and some measurement **Y** given by **Y**=**MI**. The presently incorporated volume conductor models have been incorporated in LFPy (https://LFPy.rtfd.io, https://github.com/LFPy/LFPy), as described in various papers and books: 1. Linden H, Hagen E, Leski S, Norheim ES, Pettersen KH, Einevoll GT (2014) LFPy: a tool for biophysical simulation of extracellular potentials generated by detailed model neurons. Front. Neuroinform. 7:41. doi: 10.3389/fninf.2013.00041 2. Hagen E, Næss S, Ness TV and Einevoll GT (2018) Multimodal Modeling of Neural Network Activity: Computing LFP, ECoG, EEG, and MEG Signals With LFPy 2.0. Front. Neuroinform. 12:92. doi: 10.3389/fninf.2018.00092 3. Ness, T. V., Chintaluri, C., Potworowski, J., Leski, S., Glabska, H., Wójcik, D. K., et al. (2015). Modelling and analysis of electrical potentials recorded in microelectrode arrays (MEAs). Neuroinformatics 13:403–426. doi: 10.1007/s12021-015-9265-6 4. Nunez and Srinivasan, Oxford University Press, 2006 5. Næss S, Chintaluri C, Ness TV, Dale AM, Einevoll GT and Wójcik DK (2017). Corrected Four-sphere Head Model for EEG Signals. Front. Hum. Neurosci. 11:490. doi: 10.3389/fnhum.2017.00490 ## Build Status [![DOI](https://zenodo.org/badge/288660131.svg)](https://zenodo.org/badge/latestdoi/288660131) [![Coverage Status](https://coveralls.io/repos/github/LFPy/LFPykit/badge.svg?branch=master)](https://coveralls.io/github/LFPy/LFPykit?branch=master) [![Documentation Status](https://readthedocs.org/projects/lfpykit/badge/?version=latest)](https://lfpykit.readthedocs.io/en/latest/?badge=latest) [![flake8 lint](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml/badge.svg)](https://github.com/LFPy/LFPykit/actions/workflows/flake8.yml) [![Python application](https://github.com/LFPy/LFPykit/workflows/Python%20application/badge.svg)](https://github.com/LFPy/LFPykit/actions?query=workflow%3A%22Python+application%22) [![Upload Python Package](https://github.com/LFPy/LFPykit/workflows/Upload%20Python%20Package/badge.svg)](https://pypi.org/project/LFPykit) [![Conda Recipe](https://img.shields.io/badge/recipe-lfpykit-green.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/lfpykit.svg)](https://anaconda.org/conda-forge/lfpykit) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/LFPy/LFPykit.git/master) [![License](http://img.shields.io/:license-GPLv3+-green.svg)](http://www.gnu.org/licenses/gpl-3.0.html) ## Features `LFPykit` presently incorporates different electrostatic forward models for extracellular potentials and magnetic signals that has been derived using volume conductor theory. In volume-conductor theory the extracellular potentials can be calculated from a distance-weighted sum of contributions from transmembrane currents of neurons. Given the same transmembrane currents, the contributions to the magnetic field recorded both inside and outside the brain can also be computed. The module presently incorporates different classes. To represent the geometry of a multicompartment neuron model we have: * `CellGeometry`: Base class representing a multicompartment neuron geometry in terms of segment x-, y-, z-coordinates and diameter. Different classes built to map transmembrane currents of `CellGeometry` like instances to different measurement modalities: * `LinearModel`: Base class representing a generic forward model for subclassing * `CurrentDipoleMoment`: Class for predicting current dipole moments * `PointSourcePotential`: Class for predicting extracellular potentials assuming point sources and point contacts * `LineSourcePotential`: Class for predicting extracellular potentials assuming line sourcers and point contacts * `RecExtElectrode`: Class for simulations of extracellular potentials * `RecMEAElectrode`: Class for simulations of in vitro (slice) extracellular potentials * `OneSphereVolumeConductor`: For computing extracellular potentials within sand outside a homogeneous sphere * `LaminarCurrentSourceDensity`: For computing the 'ground truth' current source density across cylindrical volumes aligned with the z-axis * `VolumetricCurrentSourceDensity`: For computing the 'ground truth' current source density on regularly spaced 3D grid Different classes built to map current dipole moments (i.e., computed using `CurrentDipoleMoment`) to extracellular measurements: * `eegmegcalc.FourSphereVolumeConductor`: For computing extracellular potentials in 4-sphere head model (brain, CSF, skull, scalp) from current dipole moment * `eegmegcalc.InfiniteVolumeConductor`: To compute extracellular potentials in infinite volume conductor from current dipole moment * `eegmegcalc.InfiniteHomogeneousVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of infinite homogeneous volume conductor model * `eegmegcalc.SphericallySymmetricVolCondMEG`: Class for computing magnetic field from current dipole moments under the assumption of a spherically symmetric volume conductor model * `eegmegcalc.NYHeadModel`: Class for computing extracellular potentials in detailed head volume conductor model (https://www.parralab.org/nyhead) Each class (except `CellGeometry`) should have a public method `get_transformation_matrix()` that returns the linear map between the transmembrane currents or current dipole moment and corresponding measurements (see Usage below) ## Usage A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source in a linear, isotropic and homogeneous volume conductor, computing the extracellular potential in ten different locations alongside the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, PointSourcePotential >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `PointSourcePotential`: >>> psp = PointSourcePotential(cell, x=np.ones(10) * 10, y=np.zeros(10), z=np.arange(10) * 10, sigma=0.3) >>> # get linear response matrix mapping currents to measurements >>> M = psp.get_transformation_matrix() >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M @ imem >>> V_ex array([[-0.01387397, 0.01387397], [-0.00901154, 0.00901154], [ 0.00901154, -0.00901154], [ 0.01387397, -0.01387397], [ 0.00742668, -0.00742668], [ 0.00409718, -0.00409718], [ 0.00254212, -0.00254212], [ 0.00172082, -0.00172082], [ 0.00123933, -0.00123933], [ 0.00093413, -0.00093413]]) A basic usage example using a mock 3-segment stick-like neuron, treating each segment as a point source, computing the current dipole moment and computing the potential in ten different remote locations away from the cell geometry: >>> # imports >>> import numpy as np >>> from lfpykit import CellGeometry, CurrentDipoleMoment, \ >>> eegmegcalc >>> n_seg = 3 >>> # instantiate class `CellGeometry`: >>> cell = CellGeometry(x=np.array([[0.] * 2] * n_seg), # (µm) y=np.array([[0.] * 2] * n_seg), # (µm) z=np.array([[10. * x, 10. * (x + 1)] for x in range(n_seg)]), # (µm) d=np.array([1.] * n_seg)) # (µm) >>> # instantiate class `CurrentDipoleMoment`: >>> cdp = CurrentDipoleMoment(cell) >>> M_I_to_P = cdp.get_transformation_matrix() >>> # instantiate class `eegmegcalc.InfiniteVolumeConductor` and map dipole moment to >>> # extracellular potential at measurement sites >>> ivc = eegmegcalc.InfiniteVolumeConductor(sigma=0.3) >>> # compute linear response matrix between dipole moment and >>> # extracellular potential >>> M_P_to_V = ivc.get_transformation_matrix(np.c_[np.ones(10) * 1000, np.zeros(10), np.arange(10) * 100]) >>> # transmembrane currents (nA): >>> imem = np.array([[-1., 1.], [0., 0.], [1., -1.]]) >>> # compute extracellular potentials (mV) >>> V_ex = M_P_to_V @ M_I_to_P @ imem >>> V_ex array([[ 0.00000000e+00, 0.00000000e+00], [ 5.22657054e-07, -5.22657054e-07], [ 1.00041193e-06, -1.00041193e-06], [ 1.39855769e-06, -1.39855769e-06], [ 1.69852477e-06, -1.69852477e-06], [ 1.89803345e-06, -1.89803345e-06], [ 2.00697409e-06, -2.00697409e-06], [ 2.04182029e-06, -2.04182029e-06], [ 2.02079888e-06, -2.02079888e-06], [ 1.96075587e-06, -1.96075587e-06]]) ## Physical units Notes on physical units used in `LFPykit`: - There are no explicit checks for physical units - Transmembrane currents are assumed to be in units of (nA) - Spatial information is assumed to be in units of (µm) - Voltages are assumed to be in units of (mV) - Extracellular conductivities are assumed to be in units of (S/m) - current dipole moments are assumed to be in units of (nA µm) - Magnetic fields are assumed to be in units of (nA/µm) ## Dimensionality - Transmembrane currents are represented by arrays with shape `(n_seg, n_timesteps)` where `n_seg` is the number of segments of the neuron model. - Current dipole moments are represented by arrays with shape `(3, n_timesteps)` - Response matrices **M** have shape `(n_points, input.shape[0])` where `n_points` is for instance the number of extracellular recording sites and `input.shape[0]` the first dimension of the input; that is, the number of segments in case of transmembrane currents or 3 in case of current dipole moments. - predicted signals (except magnetic fields using `eegmegcalc.InfiniteHomogeneousVolCondMEG` or `eegmegcalc.SphericallySymmetricVolCondMEG`) have shape `(n_points, n_timesteps)` ## Documentation The online Documentation of `LFPykit` can be found here: https://lfpykit.readthedocs.io/en/latest ## Dependencies `LFPykit` is implemented in Python and is written (and continuously tested) for `Python >= 3.7`. The main `LFPykit` module depends on `numpy`, `scipy` and `MEAutility` (https://github.com/alejoe91/MEAutility, https://meautility.readthedocs.io/en/latest/). Running all unit tests and example files may in addition require `py.test`, `matplotlib`, `neuron` (https://www.neuron.yale.edu), (`arbor` coming) and `LFPy` (https://github.com/LFPy/LFPy, https://LFPy.readthedocs.io). ## Installation ### From development sources (https://github.com/LFPy/LFPykit) Install the current development version on https://GitHub.com using `git` (https://git-scm.com): $ git clone https://github.com/LFPy/LFPykit.git $ cd LFPykit $ python setup.py install # --user optional or using `pip`: $ pip install . # --user optional For active development, link the repository location $ python setup.py develop # --user optional ### Installation of stable releases on PyPI.org (https://www.pypi.org) Installing from the Python Package Index (https://www.pypi.org/project/lfpykit): $ pip install lfpykit # --user optional To upgrade the installation using pip: $ pip install --upgrade --no-deps lfpykit ### Installation of stable releases on conda-forge (https://conda-forge.org) Installing `lfpykit` from the `conda-forge` channel can be achieved by adding `conda-forge` to your channels with: $ conda config --add channels conda-forge Once the `conda-forge` channel has been enabled, `lfpykit` can be installed with: $ conda install lfpykit It is possible to list all of the versions of `lfpykit` available on your platform with: $ conda search lfpykit --channel conda-forge %prep %autosetup -n LFPykit-0.5.1 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-LFPykit -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Mon May 29 2023 Python_Bot - 0.5.1-1 - Package Spec generated