Module LFPy
¶
Initialization of LFPy, a Python module for simulating extracellular potentials.
Group of Computational Neuroscience, Department of Mathematical Sciences and Technology, Norwegian University of Life Sciences.
Copyright (C) 2012 Computational Neuroscience Group, NMBU.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
Classes: |
|
---|---|
Modules: |
|
class Cell
¶
-
class
LFPy.
Cell
(morphology, v_init=-70.0, Ra=35.4, cm=1.0, passive=False, passive_parameters={'e_pas': -70.0, 'g_pas': 0.001}, extracellular=False, tstart=0.0, tstop=100.0, dt=0.0625, nsegs_method='lambda100', lambda_f=100, d_lambda=0.1, max_nsegs_length=None, delete_sections=True, custom_code=None, custom_fun=None, custom_fun_args=None, pt3d=False, celsius=None, verbose=False, **kwargs)[source]¶ Bases:
object
The main cell class used in LFPy.
Parameters: - morphology : str or neuron.h.SectionList
File path of morphology on format that NEURON can understand (w. file ending .hoc, .asc, .swc or .xml), or neuron.h.SectionList instance filled with references to neuron.h.Section instances.
- v_init : float
Initial membrane potential. Defaults to -70 mV.
- Ra : float
Axial resistance. Defaults to 150 Ohm/cm
- cm : float
Membrane capacitance. Defaults to 1.0 uF/cm2.
- passive : bool
Passive mechanisms are initialized if True. Defaults to False
- passive_parameters : dict
parameter dictionary with values for the passive membrane mechanism in NEURON (‘pas’). The dictionary must contain keys ‘g_pas’ and ‘e_pas’, like the default: passive_parameters=dict(g_pas=0.001, e_pas=-70)
- extracellular : bool
Switch for NEURON’s extracellular mechanism. Defaults to False
- dt : float
simulation timestep. Defaults to 0.1 ms
- tstart : float
Initialization time for simulation <= 0 ms. Defaults to 0.
- tstop : float
Stop time for simulation > 0 ms. Defaults to 100 ms.
- nsegs_method : ‘lambda100’ or ‘lambda_f’ or ‘fixed_length’ or None
nseg rule, used by NEURON to determine number of compartments. Defaults to ‘lambda100’
- max_nsegs_length : float or None
Maximum segment length for method ‘fixed_length’. Defaults to None
- lambda_f : int
AC frequency for method ‘lambda_f’. Defaults to 100
- d_lambda : float
Parameter for d_lambda rule. Defaults to 0.1
- delete_sections : bool
Delete pre-existing section-references. Defaults to True
- custom_code : list or None
List of model-specific code files ([.py/.hoc]). Defaults to None
- custom_fun : list or None
List of model-specific functions with args. Defaults to None
- custom_fun_args : list or None
List of args passed to custom_fun functions. Defaults to None
- pt3d : bool
Use pt3d-info of the cell geometries switch. Defaults to False
- celsius : float or None
Temperature in celsius. If nothing is specified here or in custom code it is 6.3 celcius
- verbose : bool
Verbose output switch. Defaults to False
Examples
Simple example of how to use the Cell class with a passive-circuit morphology (modify morphology path accordingly):
>>> import os >>> import LFPy >>> cellParameters = { >>> 'morphology' : os.path.join('examples', 'morphologies', 'L5_Mainen96_LFPy.hoc'), >>> 'v_init' : -65., >>> 'cm' : 1.0, >>> 'Ra' : 150, >>> 'passive' : True, >>> 'passive_parameters' : {'g_pas' : 1./30000, 'e_pas' : -65}, >>> 'dt' : 2**-3, >>> 'tstart' : 0, >>> 'tstop' : 50, >>> } >>> cell = LFPy.Cell(**cellParameters) >>> cell.simulate() >>> print(cell.somav)
-
cellpickler
(filename, pickler=<function dump>)[source]¶ Save data in cell to filename, using cPickle. It will however destroy any neuron.h objects upon saving, as c-objects cannot be pickled
Parameters: - filename : str
Where to save cell
Examples
To save a cell, use:
>>> cell.cellpickler('cell.cpickle')
To load this cell again in another session:
>>> import cPickle >>> f = file('cell.cpickle', 'rb') >>> cell = cPickle.load(f) >>> f.close()
alternatively:
>>> import LFPy >>> cell = LFPy.tools.load('cell.cpickle')
-
chiral_morphology
(axis='x')[source]¶ Mirror the morphology around given axis, (default x-axis), useful to introduce more heterogeneouties in morphology shapes
Parameters: - axis : str
‘x’ or ‘y’ or ‘z’
-
distort_geometry
(factor=0.0, axis='z', nu=0.0)[source]¶ Distorts cellular morphology with a relative factor along a chosen axis preserving Poisson’s ratio. A ratio nu=0.5 assumes uncompressible and isotropic media that embeds the cell. A ratio nu=0 will only affect geometry along the chosen axis. A ratio nu=-1 will isometrically scale the neuron geometry along each axis.
This method does not affect the underlying cable properties of the cell, only predictions of extracellular measurements (by affecting the relative locations of sources representing the compartments).
Parameters: - factor : float
relative compression/stretching factor of morphology. Default is 0 (no compression/stretching). Positive values implies a compression along the chosen axis.
- axis : str
which axis to apply compression/stretching. Default is “z”.
- nu : float
Poisson’s ratio. Ratio between axial and transversal compression/stretching. Default is 0.
-
get_axial_currents_from_vmem
(timepoints=None)[source]¶ Compute axial currents from cell sim: get current magnitude, distance vectors and position vectors.
Parameters: - timepoints : ndarray, dtype=int
array of timepoints in simulation at which you want to compute the axial currents. Defaults to False. If not given, all simulation timesteps will be included.
Returns: - i_axial : ndarray, dtype=float
Shape ((cell.totnsegs-1)*2, len(timepoints)) array of axial current magnitudes I in units of (nA) in cell at all timesteps in timepoints, or at all timesteps of the simulation if timepoints=None. Contains two current magnitudes per segment, (except for the root segment): 1) the current from the mid point of the segment to the segment start point, and 2) the current from the segment start point to the mid point of the parent segment.
- d_vectors : ndarray, dtype=float
Shape ((cell.totnsegs-1)*2, 3) array of distance vectors traveled by each axial current in i_axial in units of (µm). The indices of the first axis, correspond to the first axis of i_axial and pos_vectors.
- pos_vectors : ndarray, dtype=float
Shape ((cell.totnsegs-1)*2, 3) array of position vectors pointing to the mid point of each axial current in i_axial in units of (µm). The indices of the first axis, correspond to the first axis of i_axial and d_vectors.
- Raises
- ——
- AttributeError
Raises an exeption if the cell.vmem attribute cannot be found
-
get_axial_resistance
()[source]¶ Return NEURON axial resistance for all cell compartments.
Returns: - ri_list : ndarray, dtype=float
Shape (cell.totnsegs, ) array containing neuron.h.ri(seg.x) in units of (MOhm) for all segments in cell calculated using the neuron.h.ri(seg.x) method. neuron.h.ri(seg.x) returns the axial resistance from the middle of the segment to the middle of the parent segment. Note: If seg is the first segment in a section, i.e. the parent segment belongs to a different section or there is no parent section, then neuron.h.ri(seg.x) returns the axial resistance from the middle of the segment to the node connecting the segment to the parent section (or a ghost node if there is no parent)
-
get_closest_idx
(x=0.0, y=0.0, z=0.0, section='allsec')[source]¶ Get the index number of a segment in specified section which midpoint is closest to the coordinates defined by the user
Parameters: - x: float
x-coordinate
- y: float
y-coordinate
- z: float
z-coordinate
- section: str
String matching a section-name. Defaults to ‘allsec’.
-
get_dict_of_children_idx
()[source]¶ Return dictionary with children segment indices for all sections.
Returns: - children_dict : dictionary
Dictionary containing a list for each section, with the segment index of all the section’s children. The dictionary is needed to find the sibling of a segment.
-
get_dict_parent_connections
()[source]¶ Return dictionary with parent connection point for all sections.
Returns: - connection_dict : dictionary
Dictionary containing a float in range [0, 1] for each section in cell. The float gives the location on the parent segment to which the section is connected. The dictionary is needed for computing axial currents.
-
get_idx
(section='allsec', z_min=-inf, z_max=inf)[source]¶ Returns compartment idx of segments from sections with names that match the pattern defined in input section on interval [z_min, z_max].
Parameters: - section : str
Any entry in cell.allsecnames or just ‘allsec’.
- z_min : float
Depth filter. Specify minimum z-position
- z_max : float
Depth filter. Specify maximum z-position
Examples
>>> idx = cell.get_idx(section='allsec') >>> print(idx) >>> idx = cell.get_idx(section=['soma', 'dend', 'apic']) >>> print(idx)
-
get_idx_children
(parent='soma[0]')[source]¶ Get the idx of parent’s children sections, i.e. compartments ids of sections connected to parent-argument
Parameters: - parent : str
name-pattern matching a sectionname. Defaults to “soma[0]”
-
get_idx_name
(idx=array([0]))[source]¶ Return NEURON convention name of segments with index idx. The returned argument is a list of tuples with corresponding segment idx, section name, and position along the section, like; [(0, ‘neuron.h.soma[0]’, 0.5),]
kwargs:
idx : ndarray, dtype int segment indices, must be between 0 and cell.totnsegs
-
get_idx_parent_children
(parent='soma[0]')[source]¶ Get all idx of segments of parent and children sections, i.e. segment idx of sections connected to parent-argument, and also of the parent segments
Parameters: - parent : str
name-pattern matching a sectionname. Defaults to “soma[0]”
-
get_idx_polygons
(projection=('x', 'z'))[source]¶ For each segment idx in cell create a polygon in the plane determined by the projection kwarg (default (‘x’, ‘z’)), that can be visualized using plt.fill() or mpl.collections.PolyCollection
Parameters: - projection : tuple of strings
Determining projection. Defaults to (‘x’, ‘z’)
Returns: - polygons : list
list of (ndarray, ndarray) tuples giving the trajectory of each section
Examples
The most efficient way of using this would be something like
>>> from matplotlib.collections import PolyCollection >>> import matplotlib.pyplot as plt >>> cell = LFPy.Cell(morphology='PATH/TO/MORPHOLOGY') >>> zips = [] >>> for x, z in cell.get_idx_polygons(projection=('x', 'z')): >>> zips.append(zip(x, z)) >>> polycol = PolyCollection(zips, >>> edgecolors='none', >>> facecolors='gray') >>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.add_collection(polycol) >>> ax.axis(ax.axis('equal')) >>> plt.show()
-
get_intersegment_distance
(idx0=0, idx1=0)[source]¶ Return the Euclidean distance between midpoints of two segments.
Parameters: - idx0 : int
- idx1 : int
Returns: - float
Will return a float in unit of micrometers.
-
get_intersegment_vector
(idx0=0, idx1=0)[source]¶ Return the distance between midpoints of two segments with index idx0 and idx1. The argument returned is a vector [x, y, z], where x = self.xmid[idx1] - self.xmid[idx0] etc.
Parameters: - idx0 : int
- idx1 : int
-
get_multi_current_dipole_moments
(timepoints=None)[source]¶ Return 3D current dipole moment vector and middle position vector from each axial current in space.
Parameters: - timepoints : ndarray, dtype=int
array of timepoints at which you want to compute the current dipole moments. Defaults to None. If not given, all simulation timesteps will be included.
Returns: - multi_dipoles : ndarray, dtype = float
Shape (n_axial_currents, n_timepoints, 3) array containing the x-,y-,z-components of the current dipole moment from each axial current in cell, at all timepoints. The number of axial currents, n_axial_currents = (cell.totnsegs-1)*2 and the number of timepoints, n_timepoints = cell.tvec.size. The current dipole moments are given in units of (nA µm).
- pos_axial : ndarray, dtype = float
Shape (n_axial_currents, 3) array containing the x-, y-, and z-components giving the mid position in space of each multi_dipole in units of (µm).
Examples
Get all current dipole moments and positions from all axial currents in a single neuron simulation.
>>> import LFPy >>> import numpy as np >>> cell = LFPy.Cell('PATH/TO/MORPHOLOGY', extracellular=False) >>> syn = LFPy.Synapse(cell, idx=cell.get_closest_idx(0,0,1000), >>> syntype='ExpSyn', e=0., tau=1., weight=0.001) >>> syn.set_spike_times(np.mgrid[20:100:20]) >>> cell.simulate(rec_vmem=True, rec_imem=False) >>> timepoints = np.array([1,2,3,4]) >>> multi_dipoles, dipole_locs = cell.get_multi_current_dipole_moments(timepoints=timepoints)
-
get_pt3d_polygons
(projection=('x', 'z'))[source]¶ For each section create a polygon in the plane determined by keyword argument projection=(‘x’, ‘z’), that can be visualized using e.g., plt.fill()
Returns: - list
list of (x, z) tuples giving the trajectory of each section that can be plotted using PolyCollection
Examples
>>> from matplotlib.collections import PolyCollection >>> import matplotlib.pyplot as plt >>> cell = LFPy.Cell(morphology='PATH/TO/MORPHOLOGY') >>> zips = [] >>> for x, z in cell.get_pt3d_polygons(projection=('x', 'z')): >>> zips.append(zip(x, z)) >>> polycol = PolyCollection(zips, >>> edgecolors='none', >>> facecolors='gray') >>> fig = plt.figure() >>> ax = fig.add_subplot(111) >>> ax.add_collection(polycol) >>> ax.axis(ax.axis('equal')) >>> plt.show()
-
get_rand_idx_area_and_distribution_norm
(section='allsec', nidx=1, z_min=-1000000.0, z_max=1000000.0, fun=<scipy.stats._continuous_distns.norm_gen object>, funargs={'loc': 0, 'scale': 100}, funweights=None)[source]¶ Return nidx segment indices in section with random probability normalized to the membrane area of each segment multiplied by the value of the probability density function of “fun”, a function in the scipy.stats module with corresponding function arguments in “funargs” on the interval [z_min, z_max]
Parameters: - section: str
string matching a section-name
- nidx: int
number of random indices
- z_min: float
depth filter
- z_max: float
depth filter
- fun : function or str, or iterable of function or str
if function a scipy.stats method, if str, must be method in scipy.stats module with the same name (like ‘norm’), if iterable (list, tuple, numpy.array) of function or str some probability distribution in scipy.stats module
- funargs : dict or iterable
iterable (list, tuple, numpy.array) of dict, arguments to fun.pdf method (e.g., w. keys ‘loc’ and ‘scale’)
- funweights : None or iterable
iterable (list, tuple, numpy.array) of floats, scaling of each individual fun (i.e., introduces layer specificity)
Examples
>>> import LFPy >>> import numpy as np >>> import scipy.stats as ss >>> import matplotlib.pyplot as plt >>> from os.path import join
>>> cell = LFPy.Cell(morphology=join('cells', 'cells', 'j4a.hoc')) >>> cell.set_rotation(x=4.99, y=-4.33, z=3.14)
>>> idx = cell.get_rand_idx_area_and_distribution_norm(nidx=10000, fun=ss.norm, funargs=dict(loc=0, scale=200)) >>> bins = np.arange(-30, 120)*10 >>> plt.hist(cell.zmid[idx], bins=bins, alpha=0.5) >>> plt.show()
-
get_rand_idx_area_norm
(section='allsec', nidx=1, z_min=-1000000.0, z_max=1000000.0)[source]¶ Return nidx segment indices in section with random probability normalized to the membrane area of segment on interval [z_min, z_max]
Parameters: - section : str
String matching a section-name
- nidx : int
Number of random indices
- z_min : float
Depth filter
- z_max : float
Depth filter
-
get_rand_prob_area_norm
(section='allsec', z_min=-10000, z_max=10000)[source]¶ Return the probability (0-1) for synaptic coupling on segments in section sum(prob)=1 over all segments in section. Probability normalized by area.
Parameters: - section : str
string matching a section-name. Defaults to ‘allsec’
- z_min : float
depth filter
- z_max : float
depth filter
-
get_rand_prob_area_norm_from_idx
(idx=array([0]))[source]¶ Return the normalized probability (0-1) for synaptic coupling on segments in idx-array. Normalised probability determined by area of segments.
Parameters: - idx : ndarray, dtype=int.
array of segment indices
-
insert_v_ext
(v_ext, t_ext)[source]¶ Set external extracellular potential around cell.
Playback of some extracellular potential v_ext on each cell.totnseg compartments. Assumes that the “extracellular”-mechanism is inserted on each compartment. Can be used to study ephaptic effects and similar The inputs will be copied and attached to the cell object as cell.v_ext, cell.t_ext, and converted to (list of) neuron.h.Vector types, to allow playback into each compartment e_extracellular reference. Can not be deleted prior to running cell.simulate()
Parameters: - v_ext : ndarray
Numpy array of size cell.totnsegs x t_ext.size, unit mV
- t_ext : ndarray
Time vector of v_ext
Examples
>>> import LFPy >>> import numpy as np >>> import matplotlib.pyplot as plt
>>> #create cell >>> cell = LFPy.Cell(morphology='morphologies/example_morphology.hoc', >>> passive=True)
>>> #time vector and extracellular field for every segment: >>> t_ext = np.arange(cell.tstop / cell.dt+ 1) * cell.dt >>> v_ext = np.random.rand(cell.totnsegs, t_ext.size)-0.5
>>> #insert potentials and record response: >>> cell.insert_v_ext(v_ext, t_ext) >>> cell.simulate(rec_imem=True, rec_vmem=True)
>>> fig = plt.figure() >>> ax1 = fig.add_subplot(311) >>> ax2 = fig.add_subplot(312) >>> ax3 = fig.add_subplot(313) >>> eim = ax1.matshow(np.array(cell.v_ext), cmap='spectral') >>> cb1 = fig.colorbar(eim, ax=ax1) >>> cb1.set_label('v_ext') >>> ax1.axis(ax1.axis('tight')) >>> iim = ax2.matshow(cell.imem, cmap='spectral') >>> cb2 = fig.colorbar(iim, ax=ax2) >>> cb2.set_label('imem') >>> ax2.axis(ax2.axis('tight')) >>> vim = ax3.matshow(cell.vmem, cmap='spectral') >>> ax3.axis(ax3.axis('tight')) >>> cb3 = fig.colorbar(vim, ax=ax3) >>> cb3.set_label('vmem') >>> ax3.set_xlabel('tstep') >>> plt.show()
-
set_point_process
(idx, pptype, record_current=False, record_potential=False, **kwargs)[source]¶ Insert pptype-electrode type pointprocess on segment numbered idx on cell object
Parameters: - idx : int
Index of compartment where point process is inserted
- pptype : str
Type of pointprocess. Examples: SEClamp, VClamp, IClamp, SinIClamp, ChirpIClamp
- record_current : bool
Decides if current is stored
- kwargs
Parameters passed on from class StimIntElectrode
-
set_pos
(x=0.0, y=0.0, z=0.0)[source]¶ Set the cell position.
Move the cell geometry so that midpoint of soma section is in (x, y, z). If no soma pos, use the first segment
Parameters: - x : float
x position defaults to 0.0
- y : float
y position defaults to 0.0
- z : float
z position defaults to 0.0
-
set_rotation
(x=None, y=None, z=None, rotation_order='xyz')[source]¶ Rotate geometry of cell object around the x-, y-, z-axis in the order described by rotation_order parameter. rotation_order should be a string with 3 elements containing x, y, and z e.g. ‘xyz’, ‘zyx’
Input should be angles in radians.
using rotation matrices, takes dict with rot. angles, where x, y, z are the rotation angles around respective axes. All rotation angles are optional.
Examples
>>> cell = LFPy.Cell(**kwargs) >>> rotation = {'x' : 1.233, 'y' : 0.236, 'z' : np.pi} >>> cell.set_rotation(**rotation)
-
set_synapse
(idx, syntype, record_current=False, record_potential=False, weight=None, **kwargs)[source]¶ Insert synapse on cell segment
Parameters: - idx : int
Index of compartment where synapse is inserted
- syntype : str
Type of synapse. Built-in types in NEURON: ExpSyn, Exp2Syn
- record_current : bool
If True, record synapse current
- record_potential : bool
If True, record postsynaptic potential seen by the synapse
- weight : float
Strength of synapse
- kwargs
arguments passed on from class Synapse
-
simulate
(electrode=None, rec_imem=False, rec_vmem=False, rec_ipas=False, rec_icap=False, rec_current_dipole_moment=False, rec_variables=[], variable_dt=False, atol=0.001, to_memory=True, to_file=False, file_name=None, dotprodcoeffs=None, **kwargs)[source]¶ This is the main function running the simulation of the NEURON model. Start NEURON simulation and record variables specified by arguments.
Parameters: - electrode : :obj: or list, optional
Either an LFPy.RecExtElectrode object or a list of such. If supplied, LFPs will be calculated at every time step and accessible as electrode.LFP. If a list of objects is given, accessible as electrode[0].LFP etc.
- rec_imem : bool
If true, segment membrane currents will be recorded If no electrode argument is given, it is necessary to set rec_imem=True in order to calculate LFP later on. Units of (nA).
- rec_vmem : bool
Record segment membrane voltages (mV)
- rec_ipas : bool
Record passive segment membrane currents (nA)
- rec_icap : bool
Record capacitive segment membrane currents (nA)
- rec_current_dipole_moment : bool
If True, compute and record current-dipole moment from transmembrane currents as in Linden et al. (2010) J Comput Neurosci, DOI: 10.1007/s10827-010-0245-4. Will set the LFPy.Cell attribute current_dipole_moment as n_timesteps x 3 np.ndarray where the last dimension contains the x,y,z components of the dipole moment.
- rec_variables : list
List of variables to record, i.e arg=[‘cai’, ]
- variable_dt : bool
Use variable timestep in NEURON
- atol : float
Absolute tolerance used with NEURON variable timestep
- to_memory : bool
Only valid with electrode, store lfp in -> electrode.LFP
- to_file : bool
Only valid with electrode, save LFPs in hdf5 file format
- file_name : str
Name of hdf5 file, ‘.h5’ is appended if it doesnt exist
- dotprodcoeffs : list
List of N x Nseg ndarray. These arrays will at every timestep be multiplied by the membrane currents. Presumably useful for memory efficient csd or lfp calcs
class TemplateCell
¶
-
class
LFPy.
TemplateCell
(templatefile='LFPyCellTemplate.hoc', templatename='LFPyCellTemplate', templateargs=None, verbose=False, **kwargs)[source]¶ Bases:
LFPy.cell.Cell
class LFPy.TemplateCell
This class allow using NEURON templates with some limitations.
This takes all the same parameters as the Cell class, but requires three more template related parameters
Parameters: - morphology : str
path to morphology file
- templatefile : str
File with cell template definition(s)
- templatename : str
Cell template-name used for this cell object
- templateargs : str
Parameters provided to template-definition
- v_init : float
Initial membrane potential. Default to -65.
- Ra : float
axial resistance. Defaults to 150.
- cm : float
membrane capacitance. Defaults to 1.0
- passive : bool
Passive mechanisms are initialized if True. Defaults to True
- passive_parameters : dict
parameter dictionary with values for the passive membrane mechanism in NEURON (‘pas’). The dictionary must contain keys ‘g_pas’ and ‘e_pas’, like the default: passive_parameters=dict(g_pas=0.001, e_pas=-70)
- extracellular : bool
switch for NEURON’s extracellular mechanism. Defaults to False
- dt: float
Simulation time step. Defaults to 2**-4
- tstart : float
initialization time for simulation <= 0 ms. Defaults to 0.
- tstop : float
stop time for simulation > 0 ms. Defaults to 100.
- nsegs_method : ‘lambda100’ or ‘lambda_f’ or ‘fixed_length’ or None
nseg rule, used by NEURON to determine number of compartments. Defaults to ‘lambda100’
- max_nsegs_length : float or None
max segment length for method ‘fixed_length’. Defaults to None
- lambda_f : int
AC frequency for method ‘lambda_f’. Defaults to 100
- d_lambda : float
parameter for d_lambda rule. Defaults to 0.1
- delete_sections : bool
delete pre-existing section-references. Defaults to True
- custom_code : list or None
list of model-specific code files ([.py/.hoc]). Defaults to None
- custom_fun : list or None
list of model-specific functions with args. Defaults to None
- custom_fun_args : list or None
list of args passed to custom_fun functions. Defaults to None
- pt3d : bool
use pt3d-info of the cell geometries switch. Defaults to False
- celsius : float or None
Temperature in celsius. If nothing is specified here or in custom code it is 6.3 celcius
- verbose : bool
verbose output switch. Defaults to False
Examples
>>> import LFPy >>> cellParameters = { >>> 'morphology' : '<path to morphology.hoc>', >>> 'templatefile' : '<path to template_file.hoc>' >>> 'templatename' : 'templatename' >>> 'templateargs' : None >>> 'v_init' : -65, >>> 'cm' : 1.0, >>> 'Ra' : 150, >>> 'passive' : True, >>> 'passive_parameters' : {'g_pas' : 0.001, 'e_pas' : -65.}, >>> 'dt' : 2**-3, >>> 'tstart' : 0, >>> 'tstop' : 50, >>> } >>> cell = LFPy.TemplateCell(**cellParameters) >>> cell.simulate()
class NetworkCell
¶
-
class
LFPy.
NetworkCell
(**args)[source]¶ Bases:
LFPy.templatecell.TemplateCell
class NetworkCell
Similar to LFPy.TemplateCell with the addition of some attributes and methods allowing for spike communication between parallel RANKs.
This class allow using NEURON templates with some limitations.
This takes all the same parameters as the Cell class, but requires three more template related parameters
Parameters: - morphology : str
path to morphology file
- templatefile : str
File with cell template definition(s)
- templatename : str
Cell template-name used for this cell object
- templateargs : str
Parameters provided to template-definition
- v_init : float
Initial membrane potential. Default to -65.
- Ra : float
axial resistance. Defaults to 150.
- cm : float
membrane capacitance. Defaults to 1.0
- passive : bool
Passive mechanisms are initialized if True. Defaults to True
- passive_parameters : dict
parameter dictionary with values for the passive membrane mechanism in NEURON (‘pas’). The dictionary must contain keys ‘g_pas’ and ‘e_pas’, like the default: passive_parameters=dict(g_pas=0.001, e_pas=-70)
- extracellular : bool
switch for NEURON’s extracellular mechanism. Defaults to False
- dt: float
Simulation time step. Defaults to 2**-4
- tstart : float
initialization time for simulation <= 0 ms. Defaults to 0.
- tstop : float
stop time for simulation > 0 ms. Defaults to 100.
- nsegs_method : ‘lambda100’ or ‘lambda_f’ or ‘fixed_length’ or None
nseg rule, used by NEURON to determine number of compartments. Defaults to ‘lambda100’
- max_nsegs_length : float or None
max segment length for method ‘fixed_length’. Defaults to None
- lambda_f : int
AC frequency for method ‘lambda_f’. Defaults to 100
- d_lambda : float
parameter for d_lambda rule. Defaults to 0.1
- delete_sections : bool
delete pre-existing section-references. Defaults to True
- custom_code : list or None
list of model-specific code files ([.py/.hoc]). Defaults to None
- custom_fun : list or None
list of model-specific functions with args. Defaults to None
- custom_fun_args : list or None
list of args passed to custom_fun functions. Defaults to None
- pt3d : bool
use pt3d-info of the cell geometries switch. Defaults to False
- celsius : float or None
Temperature in celsius. If nothing is specified here or in custom code it is 6.3 celcius
- verbose : bool
verbose output switch. Defaults to False
Examples
>>> import LFPy >>> cellParameters = { >>> 'morphology' : '<path to morphology.hoc>', >>> 'templatefile' : '<path to template_file.hoc>' >>> 'templatename' : 'templatename' >>> 'templateargs' : None >>> 'v_init' : -65, >>> 'cm' : 1.0, >>> 'Ra' : 150, >>> 'passive' : True, >>> 'passive_parameters' : {'g_pas' : 0.001, 'e_pas' : -65.}, >>> 'dt' : 2**-3, >>> 'tstart' : 0, >>> 'tstop' : 50, >>> } >>> cell = LFPy.NetworkCell(**cellParameters) >>> cell.simulate()
-
create_spike_detector
(target=None, threshold=-10.0, weight=0.0, delay=0.0)[source]¶ Create spike-detecting NetCon object attached to the cell’s soma midpoint, but this could be extended to having multiple spike-detection sites. The NetCon object created is attached to the cell’s netconlist attribute, and will be used by the Network class when creating connections between all presynaptic cells and postsynaptic cells on each local RANK.
Parameters: - target : None (default) or a NEURON point process
- threshold : float
spike detection threshold
- weight : float
connection weight (not used unless target is a point process)
- delay : float
connection delay (not used unless target is a point process)
-
create_synapse
(cell, sec, x=0.5, syntype=<hoc.HocObject object>, synparams={'e': 0.0, 'tau': 2.0}, assert_syn_values=False)[source]¶ Create synapse object of type syntype on sec(x) of cell and append to list cell.netconsynapses
TODO: Use LFPy.Synapse class if possible.
Parameters: - cell : object
instantiation of class NetworkCell or similar
- sec : neuron.h.Section object,
section reference on cell
- x : float in [0, 1],
relative position along section
- syntype : hoc.HocObject
NEURON synapse model reference, e.g., neuron.h.ExpSyn
- synparams : dict
- parameters for syntype, e.g., for neuron.h.ExpSyn we have:
tau : float, synapse time constant e : float, synapse reversal potential
- assert_syn_values : bool
if True, raise AssertionError if synapse attribute values do not match the values in the synparams dictionary
Raises: - AssertionError
class PointProcess
¶
-
class
LFPy.
PointProcess
(cell, idx, record_current=False, record_potential=False, **kwargs)[source]¶ Bases:
object
Superclass on top of Synapse, StimIntElectrode, just to import and set some shared variables and extracts Cartesian coordinates of a segment
Parameters: - cell : obj
LFPy.Cell object
- idx : int
index of segment
- record_current : bool
Must be set to True for recording of pointprocess currents
- record_potential : bool
Must be set to True for recording potential of pointprocess target idx
- kwargs : pointprocess specific variables passed on to cell/neuron
class Synapse
¶
-
class
LFPy.
Synapse
(cell, idx, syntype, record_current=False, record_potential=False, **kwargs)[source]¶ Bases:
LFPy.pointprocess.PointProcess
The synapse class, pointprocesses that spawn membrane currents. See http://www.neuron.yale.edu/neuron/static/docs/help/neuron/neuron/mech.html#pointprocesses for details, or corresponding mod-files.
This class is meant to be used with synaptic mechanisms, giving rise to currents that will be part of the membrane currents.
Parameters: - cell : obj
LFPy.Cell or LFPy.TemplateCell instance to receive synapptic input
- idx : int
Cell index where the synaptic input arrives
- syntype : str
Type of synapse. Built-in examples: ExpSyn, Exp2Syn
- record_current : bool
Decides if current is recorded
- **kwargs
Additional arguments to be passed on to NEURON in cell.set_synapse
Examples
>>> import pylab as pl >>> pl.interactive(1) >>> import LFPy >>> import os >>> cellParameters = { >>> 'morphology' : os.path.join('examples', 'morphologies', 'L5_Mainen96_LFPy.hoc'), >>> 'passive' : True, >>> 'tstop' : 50, >>> } >>> cell = LFPy.Cell(**cellParameters)
>>> synapseParameters = { >>> 'idx' : cell.get_closest_idx(x=0, y=0, z=800), >>> 'e' : 0, # reversal potential >>> 'syntype' : 'ExpSyn', # synapse type >>> 'tau' : 2, # syn. time constant >>> 'weight' : 0.01, # syn. weight >>> 'record_current' : True # syn. current record >>> } >>> synapse = LFPy.Synapse(cell, **synapseParameters) >>> synapse.set_spike_times(pl.array([10, 15, 20, 25])) >>> cell.simulate()
>>> pl.subplot(211) >>> pl.plot(cell.tvec, synapse.i) >>> pl.title('Synapse current (nA)') >>> pl.subplot(212) >>> pl.plot(cell.tvec, cell.somav) >>> pl.title('Somatic potential (mV)')
-
set_spike_times
(sptimes=array([], dtype=float64))[source]¶ Set the spike times explicitly using numpy arrays
-
set_spike_times_w_netstim
(noise=1.0, start=0.0, number=1000.0, interval=10.0, seed=1234.0)[source]¶ Generate a train of pre-synaptic stimulus times by setting up the neuron NetStim object associated with this synapse
Parameters: - noise : float in range [0, 1]
Fractional randomness, from deterministic to intervals that drawn from negexp distribution (Poisson spiketimes).
- start : float
ms, (most likely) start time of first spike
- number : int
(average) number of spikes
- interval : float
ms, (mean) time between spikes
- seed : float
Random seed value
class StimIntElectrode
¶
-
class
LFPy.
StimIntElectrode
(cell, idx, pptype='SEClamp', record_current=False, record_potential=False, **kwargs)[source]¶ Bases:
LFPy.pointprocess.PointProcess
Class for NEURON point processes, ie VClamp, SEClamp and ICLamp, SinIClamp, ChirpIClamp with arguments.
Electrode currents go here. Membrane currents will no longer sum to zero if these mechanisms are used, as the equivalent circuit is akin to a current input to the compartment from a far away extracellular location (“ground”), not immediately from the surface to the inside of the compartment as for transmembrane currents.
Refer to NEURON documentation @ neuron.yale.edu for kwargs Will insert pptype on cell-instance, pass the corresponding kwargs onto cell.set_point_process.
Parameters: - cell : obj
- LFPy.Cell or LFPy.TemplateCell instance to receive Stimulation
electrode input
- idx : int
Cell segment index where the stimulation electrode is placed
- pptype : str
Type of point process. Built-in examples: VClamp, SEClamp and ICLamp. Defaults to ‘SEClamp’.
- record_current : bool
Decides if current is recorded
- record_potential : bool
switch for recording the potential on postsynaptic segment index
- **kwargs
Additional arguments to be passed on to NEURON in cell.set_point_process
Examples
>>> import pylab as pl >>> pl.interactive(1) >>> import os >>> import LFPy >>> #define a list of different electrode implementations from NEURON >>> pointprocesses = [ >>> { >>> 'idx' : 0, >>> 'record_current' : True, >>> 'pptype' : 'IClamp', >>> 'amp' : 1, >>> 'dur' : 20, >>> 'delay' : 10, >>> }, >>> { >>> 'idx' : 0, >>> 'record_current' : True, >>> 'pptype' : 'VClamp', >>> 'amp[0]' : -70, >>> 'dur[0]' : 10, >>> 'amp[1]' : 0, >>> 'dur[1]' : 20, >>> 'amp[2]' : -70, >>> 'dur[2]' : 10, >>> }, >>> { >>> 'idx' : 0, >>> 'record_current' : True, >>> 'pptype' : 'SEClamp', >>> 'dur1' : 10, >>> 'amp1' : -70, >>> 'dur2' : 20, >>> 'amp2' : 0, >>> 'dur3' : 10, >>> 'amp3' : -70, >>> }, >>> ] >>> #create a cell instance for each electrode >>> for pointprocess in pointprocesses: >>> cell = LFPy.Cell(morphology=os.path.join('examples', 'morphologies', 'L5_Mainen96_LFPy.hoc'), >>> passive=True) >>> stimulus = LFPy.StimIntElectrode(cell, **pointprocess) >>> cell.simulate() >>> pl.subplot(211) >>> pl.plot(cell.tvec, stimulus.i, label=pointprocess['pptype']) >>> pl.legend(loc='best') >>> pl.title('Stimulus currents (nA)') >>> pl.subplot(212) >>> pl.plot(cell.tvec, cell.somav, label=pointprocess['pptype']) >>> pl.legend(loc='best') >>> pl.title('Somatic potential (mV)')
class RecExtElectrode
¶
-
class
LFPy.
RecExtElectrode
(cell=None, sigma=0.3, x=array([0]), y=array([0]), z=array([0]), N=None, r=None, n=None, contact_shape='circle', r_z=None, perCellLFP=False, method='linesource', from_file=False, cellfile=None, verbose=False, seedvalue=None, **kwargs)[source]¶ Bases:
object
class RecExtElectrode
Main class that represents an extracellular electric recording devices such as a laminar probe.
Parameters: - cell : None or object
If not None, instantiation of LFPy.Cell, LFPy.TemplateCell or similar.
- sigma : float or list/ndarray of floats
extracellular conductivity in units of (S/m). A scalar value implies an isotropic extracellular conductivity. If a length 3 list or array of floats is provided, these values corresponds to an anisotropic conductor with conductivities [sigma_x, sigma_y, sigma_z] accordingly.
- x, y, z : np.ndarray
coordinates or arrays of coordinates in units of (um). Must be same length
- N : None or list of lists
Normal vectors [x, y, z] of each circular electrode contact surface, default None
- r : float
radius of each contact surface, default None
- n : int
if N is not None and r > 0, the number of discrete points used to compute the n-point average potential on each circular contact point.
- contact_shape : str
‘circle’/’square’ (default ‘circle’) defines the contact point shape If ‘circle’ r is the radius, if ‘square’ r is the side length
- method : str
switch between the assumption of ‘linesource’, ‘pointsource’, ‘soma_as_point’ to represent each compartment when computing extracellular potentials
- from_file : bool
if True, load cell object from file
- cellfile : str
path to cell pickle
- verbose : bool
Flag for verbose output, i.e., print more information
- seedvalue : int
random seed when finding random position on contact with r > 0
Examples
Compute extracellular potentials after simulating and storage of transmembrane currents with the LFPy.Cell class:
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> import LFPy >>> >>> cellParameters = { >>> 'morphology' : 'examples/morphologies/L5_Mainen96_LFPy.hoc', # morphology file >>> 'v_init' : -65, # initial voltage >>> 'cm' : 1.0, # membrane capacitance >>> 'Ra' : 150, # axial resistivity >>> 'passive' : True, # insert passive channels >>> 'passive_parameters' : {"g_pas":1./3E4, "e_pas":-65}, # passive params >>> 'dt' : 2**-4, # simulation time res >>> 'tstart' : 0., # start t of simulation >>> 'tstop' : 50., # end t of simulation >>> } >>> cell = LFPy.Cell(**cellParameters) >>> >>> synapseParameters = { >>> 'idx' : cell.get_closest_idx(x=0, y=0, z=800), # compartment >>> 'e' : 0, # reversal potential >>> 'syntype' : 'ExpSyn', # synapse type >>> 'tau' : 2, # syn. time constant >>> 'weight' : 0.01, # syn. weight >>> 'record_current' : True # syn. current record >>> } >>> synapse = LFPy.Synapse(cell, **synapseParameters) >>> synapse.set_spike_times(np.array([10., 15., 20., 25.])) >>> >>> cell.simulate(rec_imem=True) >>> >>> N = np.empty((16, 3)) >>> for i in xrange(N.shape[0]): N[i,] = [1, 0, 0] #normal vec. of contacts >>> electrodeParameters = { #parameters for RecExtElectrode class >>> 'sigma' : 0.3, #Extracellular potential >>> 'x' : np.zeros(16)+25, #Coordinates of electrode contacts >>> 'y' : np.zeros(16), >>> 'z' : np.linspace(-500,1000,16), >>> 'n' : 20, >>> 'r' : 10, >>> 'N' : N, >>> } >>> electrode = LFPy.RecExtElectrode(cell, **electrodeParameters) >>> electrode.calc_lfp() >>> plt.matshow(electrode.LFP) >>> plt.colorbar() >>> plt.axis('tight') >>> plt.show()
Compute extracellular potentials during simulation (recommended):
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> import LFPy >>> >>> cellParameters = { >>> 'morphology' : 'examples/morphologies/L5_Mainen96_LFPy.hoc', # morphology file >>> 'v_init' : -65, # initial voltage >>> 'cm' : 1.0, # membrane capacitance >>> 'Ra' : 150, # axial resistivity >>> 'passive' : True, # insert passive channels >>> 'passive_parameters' : {"g_pas":1./3E4, "e_pas":-65}, # passive params >>> 'dt' : 2**-4, # simulation time res >>> 'tstart' : 0., # start t of simulation >>> 'tstop' : 50., # end t of simulation >>> } >>> cell = LFPy.Cell(**cellParameters) >>> >>> synapseParameters = { >>> 'idx' : cell.get_closest_idx(x=0, y=0, z=800), # compartment >>> 'e' : 0, # reversal potential >>> 'syntype' : 'ExpSyn', # synapse type >>> 'tau' : 2, # syn. time constant >>> 'weight' : 0.01, # syn. weight >>> 'record_current' : True # syn. current record >>> } >>> synapse = LFPy.Synapse(cell, **synapseParameters) >>> synapse.set_spike_times(np.array([10., 15., 20., 25.])) >>> >>> N = np.empty((16, 3)) >>> for i in xrange(N.shape[0]): N[i,] = [1, 0, 0] #normal vec. of contacts >>> electrodeParameters = { #parameters for RecExtElectrode class >>> 'sigma' : 0.3, #Extracellular potential >>> 'x' : np.zeros(16)+25, #Coordinates of electrode contacts >>> 'y' : np.zeros(16), >>> 'z' : np.linspace(-500,1000,16), >>> 'n' : 20, >>> 'r' : 10, >>> 'N' : N, >>> } >>> electrode = LFPy.RecExtElectrode(**electrodeParameters) >>> >>> cell.simulate(electrode=electrode) >>> >>> plt.matshow(electrode.LFP) >>> plt.colorbar() >>> plt.axis('tight') >>> plt.show()
-
calc_lfp
(t_indices=None, cell=None)[source]¶ Calculate LFP on electrode geometry from all cell instances. Will chose distributed calculated if electrode contain ‘n’, ‘N’, and ‘r’
Parameters: - cell : obj, optional
LFPy.Cell or LFPy.TemplateCell instance. Must be specified here if it was not specified at the initiation of the RecExtElectrode class
- t_indices : np.ndarray
Array of timestep indexes where extracellular potential should be calculated.
-
calc_mapping
(cell)[source]¶ Creates a linear mapping of transmembrane currents of each segment of the supplied cell object to contribution to extracellular potential at each electrode contact point of the RexExtElectrode object. Sets the class attribute “mapping”, which is a shape (n_contact, n_segs) ndarray, such that the extracellular potential at the contacts phi = np.dot(mapping, I_mem) where I_mem is a shape (n_segs, n_tsteps) ndarray with transmembrane currents for each time step of the simulation.
Parameters: - cell : obj
LFPy.Cell or LFPy.TemplateCell instance.
Returns: - mapping : ndarray
The attribute RecExtElectrode.mapping is returned (optional)
class Network
¶
-
class
LFPy.
Network
(dt=0.1, tstart=0.0, tstop=1000.0, v_init=-65.0, celsius=6.3, OUTPUTPATH='example_parallel_network', verbose=False)[source]¶ Bases:
object
-
connect
(pre, post, connectivity, syntype=<hoc.HocObject object>, synparams={'e': 0.0, 'tau': 2.0}, weightfun=<built-in method normal of mtrand.RandomState object>, weightargs={'loc': 0.1, 'scale': 0.01}, minweight=0, delayfun=<built-in method normal of mtrand.RandomState object>, delayargs={'loc': 2, 'scale': 0.2}, mindelay=0.3, multapsefun=<built-in method normal of mtrand.RandomState object>, multapseargs={'loc': 4, 'scale': 1}, syn_pos_args={'fun': [<scipy.stats._continuous_distns.norm_gen object>, <scipy.stats._continuous_distns.norm_gen object>], 'funargs': [{'loc': 0, 'scale': 100}, {'loc': 0, 'scale': 100}], 'funweights': [0.5, 0.5], 'section': ['soma', 'dend', 'apic'], 'z_max': 1000000.0, 'z_min': -1000000.0}, save_connections=False)[source]¶ Connect presynaptic cells to postsynaptic cells. Connections are drawn from presynaptic cells to postsynaptic cells, hence connectivity array must only be specified for postsynaptic units existing on this RANK.
Parameters: - pre : str
presynaptic population name
- post : str
postsynaptic population name
- connectivity : ndarray / (scipy.sparse array)
boolean connectivity matrix between pre and post.
- syntype : hoc.HocObject
reference to NEURON synapse mechanism, e.g., neuron.h.ExpSyn
- synparams : dict
dictionary of parameters for synapse mechanism, keys ‘e’, ‘tau’ etc.
- weightfun : function
function used to draw weights from a numpy.random distribution
- weightargs : dict
parameters passed to weightfun
- minweight : float,
minimum weight in units of nS
- delayfun : function
function used to draw delays from a numpy.random distribution
- delayargs : dict
parameters passed to delayfun
- mindelay : float,
minimum delay in multiples of dt
- multapsefun : function or None
function reference, e.g., numpy.random.normal used to draw a number of synapses for a cell-to-cell connection. If None, draw only one connection
- multapseargs : dict
arguments passed to multapsefun
- syn_pos_args : dict
arguments passed to inherited LFPy.Cell method NetworkCell.get_rand_idx_area_and_distribution_norm to find synapse locations.
- save_connections : bool
if True (default False), save instantiated connections to HDF5 file “Network.OUTPUTPATH/synapse_positions.h5” as dataset “<pre>:<post>” using a structured ndarray with dtype [(‘gid’, ‘i8’), (‘x’, float), (‘y’, float), (‘z’, float)] where gid is postsynaptic cell id, and x,y,z the corresponding midpoint coordinates of the target compartment.
-
create_population
(CWD=None, CELLPATH=None, Cell=<class 'LFPy.network.NetworkCell'>, POP_SIZE=4, name='L5PC', cell_args={}, pop_args={}, rotation_args={})[source]¶ Create and append a distributed POP_SIZE-sized population of cells of type Cell with the corresponding name. Cell-object references, gids on this RANK, population size POP_SIZE and names will be added to the lists Network.gids, Network.cells, Network.sizes and Network.names, respectively
Parameters: - CWD : path
Current working directory
- CELLPATH: path
Relative path from CWD to source files for cell model (morphology, hoc routines etc.)
- Cell : class
class defining a Cell-like object, see class NetworkCell
- POP_SIZE : int
number of cells in population
- name : str
population name reference
- cell_args : dict
keys and values for Cell object
- pop_args : dict
keys and values for Network.draw_rand_pos assigning cell positions
- rotation_arg : dict
default cell rotations around x and y axis on the form { ‘x’ : np.pi/2, ‘y’ : 0 }. Can only have the keys ‘x’ and ‘y’. Cells are randomly rotated around z-axis using the Cell.set_rotation method.
-
get_connectivity_rand
(pre='L5PC', post='L5PC', connprob=0.2)[source]¶ Dummy function creating a (boolean) cell to cell connectivity matrix between pre and postsynaptic populations relying on the use of the ‘Connection Set Algebra (CSA)’ implementation in Python; see https://github.com/INCF/csa, Mikael Djurfeldt (2012) “The Connection-set Algebra—A Novel Formalism for the Representation of Connectivity Structure in Neuronal Network Models” Neuroinformatics 10(3), 1539-2791, http://dx.doi.org/10.1007/s12021-012-9146-1
Connections are drawn randomly between presynaptic cell gids in population ‘pre’ and postsynaptic cell gids in ‘post’ on this RANK with a fixed connection probability.
Parameters: - pre : str
presynaptic population name
- post : str
postsynaptic population name
- connprob : float in [0, 1]
connection probability, connections are drawn on random
Returns: - ndarray, dtype bool
n_pre x n_post array of connections between n_pre presynaptic neurons and n_post postsynaptic neurons on this RANK. Entries with True denotes a connection.
-
simulate
(electrode=None, rec_imem=False, rec_vmem=False, rec_ipas=False, rec_icap=False, rec_isyn=False, rec_vmemsyn=False, rec_istim=False, rec_current_dipole_moment=False, rec_pop_contributions=False, rec_variables=[], variable_dt=False, atol=0.001, to_memory=True, to_file=False, file_name='OUTPUT.h5', dotprodcoeffs=None, **kwargs)[source]¶ This is the main function running the simulation of the network model.
Parameters: - electrode:
- Either an LFPy.RecExtElectrode object or a list of such.
If supplied, LFPs will be calculated at every time step and accessible as electrode.LFP. If a list of objects is given, accessible as electrode[0].LFP etc.
- rec_imem: If true, segment membrane currents will be recorded
If no electrode argument is given, it is necessary to set rec_imem=True in order to calculate LFP later on. Units of (nA).
- rec_vmem: record segment membrane voltages (mV)
- rec_ipas: record passive segment membrane currents (nA)
- rec_icap: record capacitive segment membrane currents (nA)
- rec_isyn: record synaptic currents of from Synapse class (nA)
- rec_vmemsyn: record membrane voltage of segments with Synapse(mV)
- rec_istim: record currents of StimIntraElectrode (nA)
- rec_current_dipole_moment : bool
If True, compute and record current-dipole moment from transmembrane currents as in Linden et al. (2010) J Comput Neurosci, DOI: 10.1007/s10827-010-0245-4. Will set the LFPy.Cell attribute current_dipole_moment as n_timesteps x 3 ndarray where the last dimension contains the x,y,z components of the dipole moment.
- rec_pop_contributions : bool
If True, compute and return single-population contributions to the extracellular potential during simulation time
- rec_variables: list of variables to record, i.e arg=[‘cai’, ]
- variable_dt: boolean, using variable timestep in NEURON
- atol: absolute tolerance used with NEURON variable timestep
- to_memory: only valid with electrode, store lfp in -> electrode.LFP
- to_file: only valid with electrode, save LFPs in hdf5 file format
- file_name : str
If to_file is True, file which extracellular potentials will be written to. The file format is HDF5, default is “OUTPUT.h5”, put in folder Network.OUTPUTPATH
- dotprodcoeffs : list of N x Nseg ndarray. These arrays will at
every timestep be multiplied by the membrane currents. Presumably useful for memory efficient csd or lfp calcs
- **kwargs : keyword argument dict values passed along to function
_run_simulation_with_electrode(), containing some or all of the boolean flags: use_ipas, use_icap, use_isyn (defaulting to ‘False’).
Returns: - SPIKES : dict
the first returned argument is a dictionary with keys ‘gids’ and ‘times’. Each item is a nested list of len(Npop) times N_X where N_X is the corresponding population size. Each entry is a np.ndarray containing the spike times of each cell in the nested list in item ‘gids’
- OUTPUT : list of ndarray
if parameters electrode is not None and/or dotprodcoeffs is not None, contains the [electrode.LFP, …., (dotprodcoeffs[0] dot I)(t), …] The first output is a structured array, so OUTPUT[0][‘imem’] corresponds to the total LFP and the other the per-population contributions.
- P : ndarray
if rec_current_dipole_moment==True, contains the x,y,z-components of current-dipole moment from transmembrane currents summed up over all populations
-
class NetworkPopulation
¶
-
class
LFPy.
NetworkPopulation
(CWD=None, CELLPATH=None, first_gid=0, Cell=<class 'LFPy.network.NetworkCell'>, POP_SIZE=4, name='L5PC', cell_args={}, pop_args={}, rotation_args={}, OUTPUTPATH='example_parallel_network')[source]¶ Bases:
object
-
draw_rand_pos
(POP_SIZE, radius, loc, scale, cap=None)[source]¶ Draw some random location for POP_SIZE cells within radius radius, at mean depth loc and standard deviation scale.
Returned argument is a list of dicts [{‘x’, ‘y’, ‘z’},].
Parameters: - POP_SIZE : int
Population size
- radius : float
Radius of population.
- loc : float
expected mean depth of somas of population.
- scale : float
expected standard deviation of depth of somas of population.
- cap : None, float or length to list of floats
if float, cap distribution between [loc-cap, loc+cap), if list, cap distribution between [loc-cap[0], loc+cap[1]]
Returns: - soma_pos : list
List of dicts of len POP_SIZE where dict have keys x, y, z specifying xyz-coordinates of cell at list entry i.
-
class InfiniteVolumeConductor
¶
-
class
LFPy.
InfiniteVolumeConductor
(sigma=0.3)[source]¶ Bases:
object
Main class for computing extracellular potentials with current dipole approximation in an infinite 3D volume conductor model that assumes homogeneous, isotropic, linear (frequency independent) conductivity
Parameters: - sigma : float
Electrical conductivity in extracellular space in units of (S/cm)
Examples
Computing the potential from dipole moment valid in the far field limit. Theta correspond to the dipole alignment angle from the vertical z-axis:
>>> import LFPy >>> import numpy as np >>> inf_model = LFPy.InfiniteVolumeConductor(sigma=0.3) >>> p = np.array([[10., 10., 10.]]) >>> r = np.array([[1000., 0., 5000.]]) >>> phi_p = inf_model.get_dipole_potential(p, r)
-
get_dipole_potential
(p, r)[source]¶ Return electric potential from current dipole with current dipole approximation
- p : ndarray, dtype=float
- Shape (n_timesteps, 3) array containing the x,y,z components of the current dipole moment in units of (nA*µm) for all timesteps
- r : ndarray, dtype=float
- Shape (n_contacts, 3) array contaning the displacement vectors from dipole location to measurement location
Returns: - potential : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing the electric potential at contact point(s) FourSphereVolumeConductor.r in units of (mV) for all timesteps of current dipole moment p
-
get_multi_dipole_potential
(cell, electrode_locs, timepoints=None)[source]¶ Return electric potential from multiple current dipoles from cell
By multiple current dipoles we mean the dipoles computed from all axial currents in a neuron simulation, typically two axial currents per compartment, except for the root compartment.
Parameters: - cell : Cell object from LFPy
- electrode_locs : ndarray, dtype=float
Shape (n_contacts, 3) array containing n_contacts electrode locations in cartesian coordinates in units of (µm). All
r_el
in electrode_locs must be placed so that|r_el|
is less than or equal to scalp radius and larger than the distance between dipole and sphere center:|rz| < |r_el| <= radii[3]
.- timepoints : ndarray, dtype=int
array of timepoints at which you want to compute the electric potential. Defaults to None. If not given, all simulation timesteps will be included.
Returns: - potential : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing the electric potential at contact point(s) electrode_locs in units of (mV) for all timesteps of neuron simulation
Examples
Compute extracellular potential from neuron simulation in four-sphere head model. Instead of simplifying the neural activity to a single dipole, we compute the contribution from every multi dipole from all axial currents in neuron simulation:
>>> import LFPy >>> import numpy as np >>> cell = LFPy.Cell('PATH/TO/MORPHOLOGY', extracellular=False) >>> syn = LFPy.Synapse(cell, idx=cell.get_closest_idx(0,0,100), >>> syntype='ExpSyn', e=0., tau=1., weight=0.001) >>> syn.set_spike_times(np.mgrid[20:100:20]) >>> cell.simulate(rec_vmem=True, rec_imem=False) >>> sigma = 0.3 >>> timepoints = np.array([10, 20, 50, 100]) >>> electrode_locs = np.array([[50., -50., 250.]]) >>> MD_INF = LFPy.InfiniteVolumeConductor(sigma) >>> phi = MD_INF.get_multi_dipole_potential(cell, electrode_locs, >>> timepoints = timepoints)
class OneSphereVolumeConductor
¶
-
class
LFPy.
OneSphereVolumeConductor
(r, R=10000.0, sigma_i=0.3, sigma_o=0.03)[source]¶ Bases:
object
Computes extracellular potentials within and outside a spherical volume- conductor model that assumes homogeneous, isotropic, linear (frequency independent) conductivity in and outside the sphere with a radius R. The conductivity in and outside the sphere must be greater than 0, and the current source(s) must be located within the radius R.
The implementation is based on the description of electric potentials of point charge in an dielectric sphere embedded in dielectric media, which is mathematically equivalent to a current source in conductive media, as published by Deng (2008), Journal of Electrostatics 66:549-560
Parameters: - r : ndarray, dtype=float
shape(3, n_points) observation points in space in spherical coordinates (radius, theta, phi) relative to the center of the sphere.
- R : float
sphere radius (µm)
- sigma_i : float
electric conductivity for radius r <= R (S/m)
- sigma_o : float
electric conductivity for radius r > R (S/m)
Examples
Compute the potential for a single monopole along the x-axis:
>>> # import modules >>> from LFPy import OneSphereVolumeConductor >>> import numpy as np >>> import matplotlib.pyplot as plt >>> # observation points in spherical coordinates (flattened) >>> X, Y = np.mgrid[-15000:15100:1000., -15000:15100:1000.] >>> r = np.array([np.sqrt(X**2 + Y**2).flatten(), >>> np.arctan2(Y, X).flatten(), >>> np.zeros(X.size)]) >>> # set up class object and compute electric potential in all locations >>> sphere = OneSphereVolumeConductor(r, R=10000., >>> sigma_i=0.3, sigma_o=0.03) >>> Phi = sphere.calc_potential(rs=8000, I=1.).reshape(X.shape) >>> # plot >>> fig, ax = plt.subplots(1,1) >>> im=ax.contourf(X, Y, Phi, >>> levels=np.linspace(Phi.min(), np.median(Phi[np.isfinite(Phi)])*4, 30)) >>> circle = plt.Circle(xy=(0,0), radius=sphere.R, fc='none', ec='k') >>> ax.add_patch(circle) >>> fig.colorbar(im, ax=ax) >>> plt.show()
-
calc_mapping
(cell, n_max=1000)[source]¶ Compute linear mapping between transmembrane currents of LFPy.Cell like object instantiation and extracellular potential in and outside of sphere. Cell position must be set in space, using the method
Cell.set_pos(**kwargs)
.Parameters: - cell : LFPy.Cell like instance
Instantiation of class LFPy.Cell, TemplateCell or NetworkCell.
- n_max : int
Number of elements in polynomial expansion to sum over (see Deng 2008).
Returns: - ndarray
Shape (n_points, n_compartments) mapping between individual segments and extracellular potential in extracellular locations
Notes
Each segment is treated as a point source in space. The minimum source to measurement site distance will be set to the diameter of each segment
Examples
Compute extracellular potential in one-sphere volume conductor model from LFPy.Cell object:
>>> # import modules >>> import LFPy >>> import os >>> import numpy as np >>> import matplotlib.pyplot as plt >>> from matplotlib.collections import PolyCollection >>> # create cell >>> cell = LFPy.Cell(morphology=os.path.join(LFPy.__path__[0], 'test', 'ball_and_sticks.hoc'), >>> tstop=10.) >>> cell.set_pos(z=9800.) >>> # stimulus >>> syn = LFPy.Synapse(cell, idx=cell.totnsegs-1, syntype='Exp2Syn', weight=0.01) >>> syn.set_spike_times(np.array([1.])) >>> # simulate >>> cell.simulate(rec_imem=True) >>> # observation points in spherical coordinates (flattened) >>> X, Z = np.mgrid[-500:501:10., 9500:10501:10.] >>> Y = np.zeros(X.shape) >>> r = np.array([np.sqrt(X**2 + Z**2).flatten(), >>> np.arccos(Z / np.sqrt(X**2 + Z**2)).flatten(), >>> np.arctan2(Y, X).flatten()]) >>> # set up class object and compute mapping between segment currents >>> # and electric potential in space >>> sphere = LFPy.OneSphereVolumeConductor(r=r, R=10000., >>> sigma_i=0.3, sigma_o=0.03) >>> mapping = sphere.calc_mapping(cell, n_max=1000) >>> # pick out some time index for the potential and compute potential >>> ind = cell.tvec==2. >>> Phi = np.dot(mapping, cell.imem)[:, ind].reshape(X.shape) >>> # plot potential >>> fig, ax = plt.subplots(1,1) >>> zips = [] >>> for x, z in cell.get_idx_polygons(projection=('x', 'z')): >>> zips.append(zip(x, z)) >>> polycol = PolyCollection(zips, >>> edgecolors='none', >>> facecolors='gray') >>> vrange = 1E-3 # limits for color contour plot >>> im=ax.contour(X, Z, Phi, >>> levels=np.linspace(-vrange, vrange, 41)) >>> circle = plt.Circle(xy=(0,0), radius=sphere.R, fc='none', ec='k') >>> ax.add_collection(polycol) >>> ax.add_patch(circle) >>> ax.axis(ax.axis('equal')) >>> ax.set_xlim(X.min(), X.max()) >>> ax.set_ylim(Z.min(), Z.max()) >>> fig.colorbar(im, ax=ax) >>> plt.show()
-
calc_potential
(rs, I, min_distance=1.0, n_max=1000)[source]¶ Return the electric potential at observation points for source current with magnitude I as function of time.
Parameters: - rs : float
monopole source location along the horizontal x-axis (µm)
- I : float or ndarray, dtype float
float or shape (n_tsteps, ) array containing source current (nA)
- min_distance : None or float
minimum distance between source location and observation point (µm) (in order to avoid singular values)
- n_max : int
Number of elements in polynomial expansion to sum over (see Deng 2008).
Returns: - Phi : ndarray
shape (n-points, ) ndarray of floats if I is float like. If I is an 1D ndarray, and shape (n-points, I.size) ndarray is returned. Unit (mV).
class FourSphereVolumeConductor
¶
-
class
LFPy.
FourSphereVolumeConductor
(radii, sigmas, r, iter_factor=2.0202020202020204e-08)[source]¶ Bases:
object
Main class for computing extracellular potentials in a four-sphere volume conductor model that assumes homogeneous, isotropic, linear (frequency independent) conductivity within the inner sphere and outer shells. The conductance outside the outer shell is 0 (air).
Parameters: - radii : list, dtype=float
Len 4 list with the outer radii in units of (µm) for the 4 concentric shells in the four-sphere model: brain, csf, skull and scalp, respectively.
- sigmas : list, dtype=float
Len 4 list with the electrical conductivity in units of (S/m) of the four shells in the four-sphere model: brain, csf, skull and scalp, respectively.
- r : ndarray, dtype=float
Shape (n_contacts, 3) array containing n_contacts electrode locations in cartesian coordinates in units of (µm). All
r_el
inr
must be less than or equal to scalp radius and larger than the distance between dipole and sphere center:|rz| < r_el <= radii[3]
.
Examples
Compute extracellular potential from current dipole moment in four-sphere head model:
>>> import LFPy >>> import numpy as np >>> radii = [79000., 80000., 85000., 90000.] >>> sigmas = [0.3, 1.5, 0.015, 0.3] >>> r = np.array([[0., 0., 90000.], [0., 85000., 0.]]) >>> rz = np.array([0., 0., 78000.]) >>> sphere_model = LFPy.FourSphereVolumeConductor(radii, sigmas, r) >>> # current dipole moment >>> p = np.array([[10., 10., 10.]]*10) # 10 timesteps >>> # compute potential >>> potential = sphere_model.calc_potential(p, rz)
-
calc_phi
(p_tan)[source]¶ Return azimuthal angle between x-axis and contact point locations(s)
Parameters: - p_tan : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing tangential component of current dipole moment in units of (nA*µm)
Returns: - phi : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing azimuthal angle in units of (radians) between x-axis vector(s) and projection of contact point location vector(s) rxyz into xy-plane. z-axis is defined in the direction of rzloc. y-axis is defined in the direction of p (orthogonal to rzloc). x-axis is defined as cross product between p and rzloc (x).
-
calc_potential
(p, rz)[source]¶ Return electric potential from current dipole moment p.
Parameters: - p : ndarray, dtype=float
Shape (n_timesteps, 3) array containing the x,y,z components of the current dipole moment in units of (nA*µm) for all timesteps.
- rz : ndarray, dtype=float
Shape (3, ) array containing the position of the current dipole in cartesian coordinates. Units of (µm).
Returns: - potential : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing the electric potential at contact point(s) FourSphereVolumeConductor.r in units of (mV) for all timesteps of current dipole moment p.
-
calc_potential_from_multi_dipoles
(cell, timepoints=None)[source]¶ Return electric potential from multiple current dipoles from cell.
By multiple current dipoles we mean the dipoles computed from all axial currents in a neuron simulation, typically two axial currents per compartment, except for the root compartment.
Parameters: - cell : LFPy Cell object, LFPy.Cell
- timepoints : ndarray, dtype=int
array of timepoints at which you want to compute the electric potential. Defaults to None. If not given, all simulation timesteps will be included.
Returns: - potential : ndarray, dtype=float
Shape (n_contacts, n_timesteps) array containing the electric potential at contact point(s) electrode_locs in units of (mV) for all timesteps of neuron simulation.
Examples
Compute extracellular potential from neuron simulation in four-sphere head model. Instead of simplifying the neural activity to a single dipole, we compute the contribution from every multi dipole from all axial currents in neuron simulation:
>>> import LFPy >>> import numpy as np >>> cell = LFPy.Cell('PATH/TO/MORPHOLOGY', extracellular=False) >>> syn = LFPy.Synapse(cell, idx=cell.get_closest_idx(0,0,100), >>> syntype='ExpSyn', e=0., tau=1., weight=0.001) >>> syn.set_spike_times(np.mgrid[20:100:20]) >>> cell.simulate(rec_vmem=True, rec_imem=False) >>> radii = [200., 300., 400., 500.] >>> sigmas = [0.3, 1.5, 0.015, 0.3] >>> electrode_locs = np.array([[50., -50., 250.]]) >>> timepoints = np.array([0,100]) >>> MD_4s = LFPy.FourSphereVolumeConductor(radii, >>> sigmas, >>> electrode_locs) >>> phi = MD_4s.calc_potential_from_multi_dipoles(cell, >>> timepoints)
-
calc_theta
()[source]¶ Return polar angle(s) between rzloc and contact point location(s)
Returns: - theta : ndarray, dtype=float
Shape (n_contacts, ) array containing polar angle in units of (radians) between z-axis and n_contacts contact point location vector(s) in FourSphereVolumeConductor.rxyz z-axis is defined in the direction of rzloc and the radial dipole.
class MEG
¶
-
class
LFPy.
MEG
(sensor_locations, mu=1.2566370614359173e-06)[source]¶ Bases:
object
Basic class for computing magnetic field from current dipole moment. For this purpose we use the Biot-Savart law derived from Maxwell’s equations under the assumption of negligible magnetic induction effects (Nunez and Srinivasan, Oxford University Press, 2006):
\[\mathbf{H} = \frac{\mathbf{p} \times \mathbf{R}}{4 \pi R^3}\]where \(\mathbf{p}\) is the current dipole moment, \(\mathbf{R}\) the vector between dipole source location and measurement location, and \(R=|\mathbf{R}|\)
Note that the magnetic field \(\mathbf{H}\) is related to the magnetic field \(\mathbf{B}\) as \(\mu_0 \mathbf{H} = \mathbf{B}-\mathbf{M}\) where \(\mu_0\) is the permeability of free space (very close to permebility of biological tissues). \(\mathbf{M}\) denotes material magnetization (also ignored)
Parameters: - sensor_locations : ndarray, dtype=float
shape (n_locations x 3) array with x,y,z-locations of measurement devices where magnetic field of current dipole moments is calculated. In unit of (µm)
- mu : float
Permeability. Default is permeability of vacuum (mu_0 = 4*pi*1E-7 T*m/A)
Raises: - AssertionError
If dimensionality of sensor_locations is wrong
Examples
Define cell object, create synapse, compute current dipole moment:
>>> import LFPy, os, numpy as np, matplotlib.pyplot as plt >>> cell = LFPy.Cell(morphology=os.path.join(LFPy.__path__[0], 'test', 'ball_and_sticks.hoc'), >>> passive=True) >>> cell.set_pos(0., 0., 0.) >>> syn = LFPy.Synapse(cell, idx=0, syntype='ExpSyn', weight=0.01, record_current=True) >>> syn.set_spike_times_w_netstim() >>> cell.simulate(rec_current_dipole_moment=True)
Compute the dipole location as an average of segment locations weighted by membrane area:
>>> dipole_location = (cell.area * np.c_[cell.xmid, cell.ymid, cell.zmid].T / cell.area.sum()).sum(axis=1)
Instantiate the LFPy.MEG object, compute and plot the magnetic signal in a sensor location:
>>> sensor_locations = np.array([[1E4, 0, 0]]) >>> meg = LFPy.MEG(sensor_locations) >>> H = meg.calculate_H(cell.current_dipole_moment, dipole_location) >>> plt.subplot(311) >>> plt.plot(cell.tvec, cell.somav) >>> plt.subplot(312) >>> plt.plot(cell.tvec, syn.i) >>> plt.subplot(313) >>> plt.plot(cell.tvec, H[0])
-
calculate_H
(current_dipole_moment, dipole_location)[source]¶ Compute magnetic field H from single current-dipole moment localized somewhere in space
Parameters: - current_dipole_moment : ndarray, dtype=float
shape (n_timesteps x 3) array with x,y,z-components of current- dipole moment time series data in units of (nA µm)
- dipole_location : ndarray, dtype=float
shape (3, ) array with x,y,z-location of dipole in units of (µm)
Returns: - ndarray, dtype=float
shape (n_locations x n_timesteps x 3) array with x,y,z-components of the magnetic field \(\mathbf{H}\) in units of (nA/µm)
Raises: - AssertionError
If dimensionality of current_dipole_moment and/or dipole_location is wrong
-
calculate_H_from_iaxial
(cell)[source]¶ Computes the magnetic field in space from axial currents computed from membrane potential values and axial resistances of multicompartment cells.
See: Blagoev et al. (2007) Modelling the magnetic signature of neuronal tissue. NeuroImage 37 (2007) 137–148 DOI: 10.1016/j.neuroimage.2007.04.033
for details on the biophysics governing magnetic fields from axial currents.
Parameters: - cell : object
LFPy.Cell-like object. Must have attribute vmem containing recorded membrane potentials in units of mV
Returns: - H : ndarray, dtype=float
shape (n_locations x n_timesteps x 3) array with x,y,z-components of the magnetic field \(\mathbf{H}\) in units of (nA/µm)
Examples
Define cell object, create synapse, compute current dipole moment:
>>> import LFPy, os, numpy as np, matplotlib.pyplot as plt >>> cell = LFPy.Cell(morphology=os.path.join(LFPy.__path__[0], 'test', 'ball_and_sticks.hoc'), >>> passive=True) >>> cell.set_pos(0., 0., 0.) >>> syn = LFPy.Synapse(cell, idx=0, syntype='ExpSyn', weight=0.01, record_current=True) >>> syn.set_spike_times_w_netstim() >>> cell.simulate(rec_vmem=True)
Instantiate the LFPy.MEG object, compute and plot the magnetic signal in a sensor location:
>>> sensor_locations = np.array([[1E4, 0, 0]]) >>> meg = LFPy.MEG(sensor_locations) >>> H = meg.calculate_H_from_iaxial(cell) >>> plt.subplot(311) >>> plt.plot(cell.tvec, cell.somav) >>> plt.subplot(312) >>> plt.plot(cell.tvec, syn.i) >>> plt.subplot(313) >>> plt.plot(cell.tvec, H[0])
submodule eegmegcalc
¶
-
LFPy.
get_current_dipole_moment
(dist, current)[source]¶ Return current dipole moment vector P and P_tot of cell.
Parameters: - current : ndarray, dtype=float
Either an array containing all transmembrane currents from all compartments of the cell, or an array of all axial currents between compartments in cell in units of nA
- dist : ndarray, dtype=float
When input current is an array of axial currents, dist is the length of each axial current. When current is an array of transmembrane currents, dist is the position vector of each compartment middle. Unit is (µm).
Returns: - P : ndarray, dtype=float
Array containing the current dipole moment for all timesteps in the x-, y- and z-direction in units of (nA*µm)
- P_tot : ndarray, dtype=float
Array containing the magnitude of the current dipole moment vector for all timesteps in units of (nA*µm)
Examples
Get current dipole moment vector and scalar moment from axial currents computed from membrane potentials:
>>> import LFPy >>> import numpy as np >>> cell = LFPy.Cell('PATH/TO/MORPHOLOGY', extracellular=False) >>> syn = LFPy.Synapse(cell, idx=cell.get_closest_idx(0,0,1000), >>> syntype='ExpSyn', e=0., tau=1., weight=0.001) >>> syn.set_spike_times(np.mgrid[20:100:20]) >>> cell.simulate(rec_vmem=True, rec_imem=False) >>> d_list, i_axial = cell.get_axial_currents() >>> P_ax, P_ax_tot = LFPy.get_current_dipole_moment(d_list, i_axial)
Get current dipole moment vector and scalar moment from transmembrane currents using the extracellular mechanism in NEURON:
>>> import LFPy >>> import numpy as np >>> cell = LFPy.Cell('PATH/TO/MORPHOLOGY', extracellular=True) >>> syn = LFPy.Synapse(cell, idx=cell.get_closest_idx(0,0,1000), >>> syntype='ExpSyn', e=0., tau=1., weight=0.001) >>> syn.set_spike_times(np.mgrid[20:100:20]) >>> cell.simulate(rec_vmem=False, rec_imem=True) >>> P_imem, P_imem_tot = LFPy.get_current_dipole_moment(np.c_[cell.xmid, >>> cell.ymid, >>> cell.zmid], >>> cell.imem)
submodule lfpcalc
¶
Copyright (C) 2012 Computational Neuroscience Group, NMBU.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
LFPy.lfpcalc.
calc_lfp_linesource
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate electric field potential using the line-source method, all compartments treated as line sources, including soma.
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : float
extracellular conductivity
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_linesource_anisotropic
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate electric field potential using the line-source method, all compartments treated as line sources, even soma.
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : array
extracellular conductivity [sigma_x, sigma_y, sigma_z]
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_linesource_moi
(cell, x, y, z, sigma_T, sigma_S, sigma_G, steps, h, r_limit, **kwargs)[source]¶ Calculate extracellular potentials using the line-source equation on all compartments for in vitro Microelectrode Array (MEA) slices
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma_T : float
extracellular conductivity in tissue slice
- sigma_G : float
Conductivity of MEA glass electrode plane. Should normally be zero for MEA set up, and for this method, only zero valued sigma_G is supported.
- sigma_S : float
Conductivity of saline bath that tissue slice is immersed in
- steps : int
Number of steps to average over the in technically infinite sum
- h : float
Slice thickness in um.
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_pointsource
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate extracellular potentials using the point-source equation on all compartments
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : float
extracellular conductivity
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_pointsource_anisotropic
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate extracellular potentials using the anisotropic point-source equation on all compartments
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : array
extracellular conductivity in [x,y,z]-direction
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_pointsource_moi
(cell, x, y, z, sigma_T, sigma_S, sigma_G, steps, h, r_limit, **kwargs)[source]¶ Calculate extracellular potentials using the point-source equation on all compartments for in vitro Microelectrode Array (MEA) slices
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma_T : float
extracellular conductivity in tissue slice
- sigma_G : float
Conductivity of MEA glass electrode plane. Should normally be zero for MEA set up.
- sigma_S : float
Conductivity of saline bath that tissue slice is immersed in
- steps : int
Number of steps to average over the in technically infinite sum
- h : float
Slice thickness in um.
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_soma_as_point
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate electric field potential using the line-source method, soma is treated as point/sphere source
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : float
extracellular conductivity in S/m
- r_limit : np.ndarray
minimum distance to source current for each compartment.
-
LFPy.lfpcalc.
calc_lfp_soma_as_point_anisotropic
(cell, x, y, z, sigma, r_limit)[source]¶ Calculate electric field potential, soma is treated as point source, all compartments except soma are treated as line sources.
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma : array
extracellular conductivity [sigma_x, sigma_y, sigma_z]
- r_limit : np.ndarray
minimum distance to source current for each compartment
-
LFPy.lfpcalc.
calc_lfp_soma_as_point_moi
(cell, x, y, z, sigma_T, sigma_S, sigma_G, steps, h, r_limit, **kwargs)[source]¶ Calculate extracellular potentials for in vitro Microelectrode Array (MEA) slices, where soma (compartment zero) is treated as a point source, and all other compartments as line sources.
Parameters: - cell: obj
LFPy.Cell or LFPy.TemplateCell like instance
- x : float
extracellular position, x-axis
- y : float
extracellular position, y-axis
- z : float
extracellular position, z-axis
- sigma_T : float
extracellular conductivity in tissue slice
- sigma_G : float
Conductivity of MEA glass electrode plane. Should normally be zero for MEA set up, and for this method, only zero valued sigma_G is supported.
- sigma_S : float
Conductivity of saline bath that tissue slice is immersed in
- steps : int
Number of steps to average over the in technically infinite sum
- h : float
Slice thickness in um.
- r_limit : np.ndarray
minimum distance to source current for each compartment
submodule tools
¶
Copyright (C) 2012 Computational Neuroscience Group, NMBU.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
LFPy.tools.
noise_brown
(ncols, nrows=1, weight=1.0, filter=None, filterargs=None)[source]¶ Return 1/f^2 noise of shape(nrows, ncols obtained by taking the cumulative sum of gaussian white noise, with rms weight.
If filter is not None, this function will apply the filter coefficients obtained by:
>>> b, a = filter(**filterargs) >>> signal = scipy.signal.lfilter(b, a, signal)
submodule inputgenerators
¶
Copyright (C) 2012 Computational Neuroscience Group, NMBU.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
LFPy.inputgenerators.
get_activation_times_from_distribution
(n, tstart=0.0, tstop=1000000.0, distribution=<scipy.stats._continuous_distns.expon_gen object>, rvs_args={'loc': 0, 'scale': 1}, maxiter=1000000.0)[source]¶ Construct a length n list of ndarrays containing continously increasing random numbers on the interval [tstart, tstop], with intervals drawn from a chosen continuous random variable distribution subclassed from scipy.stats.rv_continous, e.g., scipy.stats.expon or scipy.stats.gamma.
The most likely initial first entry is
tstart + method.rvs(size=inf, **rvs_args).mean()
Parameters: - n : int
number of ndarrays in list
- tstart : float
minimum allowed value in ndarrays
- tstop : float
maximum allowed value in ndarrays
- distribution : object
subclass of scipy.stats.rv_continous. Distributions producing negative values should be avoided if continously increasing values should be obtained, i.e., the probability density function
(distribution.pdf(**rvs_args))
should be0
forx < 0
, but this is not explicitly tested for.- rvs_args : dict
parameters for method.rvs method. If “size” is in dict, then tstop will be ignored, and each ndarray in output list will be
distribution.rvs(**rvs_args).cumsum() + tstart
. If size is not given in dict, then values up to tstop will be included- maxiter : int
maximum number of iterations
Returns: - list of ndarrays
length n list of arrays containing data
Raises: - AssertionError
if distribution does not have the ‘rvs’ attribute
- StopIteration
if number of while-loop iterations reaches maxiter
Examples
Create n sets of activation times with intervals drawn from the exponential distribution, with rate expectation lambda 10 s^-1 (thus scale=1000 / lambda). Here we assume output in units of ms
>>> from LFPy.inputgenerators import get_activation_times_from_distribution >>> import scipy.stats as st >>> import matplotlib.pyplot as plt >>> times = get_activation_times_from_distribution(n=10, tstart=0., tstop=1000., >>> distribution=st.expon, >>> rvs_args=dict(loc=0., >>> scale=100.))