pulse2percept.implants.electrode_arrays
Classes
|
Electrode array |
|
2D grid of electrodes |
- class pulse2percept.implants.electrode_arrays.ElectrodeArray(electrodes)[source]
Electrode array
A collection of
Electrode
objects.- Parameters:
electrodes (array-like) –
Either a single
Electrode
object or a dict, list, or NumPy array thereof. The keys of the dict will serve as electrode names. Otherwise electrodes will be indexed 0..N.Note
If you pass multiple electrodes in a dictionary, the keys of the dictionary will automatically be sorted. Thus the original order of electrodes might not be preserved.
Examples
Electrode array made from a single DiskElectrode:
>>> from pulse2percept.implants import ElectrodeArray, DiskElectrode >>> earray = ElectrodeArray(DiskElectrode(0, 0, 0, 100)) >>> earray.electrodes OrderedDict([(0, DiskElectrode(activated=True, name=None, r=100..., x=0..., y=0..., z=0...))])
Electrode array made from a single DiskElectrode with name ‘A1’:
>>> from pulse2percept.implants import ElectrodeArray, DiskElectrode >>> earray = ElectrodeArray({'A1': DiskElectrode(0, 0, 0, 100)}) >>> earray.electrodes OrderedDict([('A1', DiskElectrode(activated=True, name=None, r=100..., x=0..., y=0..., z=0...))])
- add_electrode(name, electrode)[source]
Add an electrode to the array
- Parameters:
electrode (implants.Electrode) – An Electrode object, such as a PointSource or a DiskElectrode.
- remove_electrode(name)[source]
Remove an electrode from the array
Parameter
- name: int|str|…
Electrode name or index
- plot(annotate=False, autoscale=True, ax=None, color_stim=None, cmap='OrRd')[source]
Plot the electrode array
- Parameters:
annotate (bool, optional) – Flag whether to label electrodes in the implant.
autoscale (bool, optional) – Whether to adjust the x,y limits of the plot to fit the implant
ax (matplotlib.axes._subplots.AxesSubplot, optional) – A Matplotlib axes object. If None, will either use the current axes (if exists) or create a new Axes object.
color_stim (
pulse2percept.stimuli.Stimulus
, or None) – If provided, colors the earray based on the stimulus amplitudescmap (str) – Matplotlib colormap to use for stimulus coloring.
- Returns:
ax (
matplotlib.axes.Axes
) – Returns the axis object of the plot
- property electrodes
Return all electrode names and objects in the electrode array
Internally, electrodes are stored in an ordered dictionary. You can iterate over different electrodes in the array as follows:
for name, electrode in earray.electrodes.items(): print(name, electrode)
You can access an individual electrode by indexing directly into the electrode array object, e.g.
earray['A1']
orearray[0]
.
- property electrode_names
Return a list of all electrode names in the array
- property electrode_objects
Return a list of all electrode objects in the array
- class pulse2percept.implants.electrode_arrays.ElectrodeGrid(shape, spacing, x=0, y=0, z=0, rot=0, names=('A', '1'), type='rect', orientation='horizontal', etype=<class 'pulse2percept.implants.electrodes.PointSource'>, **kwargs)[source]
2D grid of electrodes
- Parameters:
shape ((rows, cols)) – A tuple containing the number of rows x columns in the grid
spacing (double or (x_spacing, y_spacing)) – Electrode-to-electrode spacing in microns. Must be either a tuple specifying the spacing in x and y directions or a float (assuming the same spacing in x and y). If a tuple is specified for a horizontal hex grid,
x_spacing
will define the electrode-to-electrode distance, andy_spacing
will define the vertical distance between adjacent hexagon centers. In a vertical hex grid, the order is reversed.type ({'rect', 'hex'}, optional) – Grid type (‘rect’: rectangular, ‘hex’: hexagonal).
orientation ({'horizontal', 'vertical'}, optional) – In a hex grid, ‘horizontal’ orientation will shift every other row to the right, whereas ‘vertical’ will shift every other column up.
x/y/z (double) – 3D location of the center of the grid. The coordinate system is centered over the fovea. Positive
x
values move the electrode into the nasal retina. Positivey
values move the electrode into the superior retina. Positivez
values move the electrode away from the retina into the vitreous humor (sometimes called electrode-retina distance).rot (double, optional) – Rotation of the grid in degrees (positive angle: counter-clockwise rotation on the retinal surface)
names ((name_rows, name_cols), each of which either 'A' or '1') – Naming convention for rows and columns, respectively. If ‘A’, rows or columns will be labeled alphabetically: A-Z, AA-AZ, BA-BZ, CA-CZ, etc. ‘-A’ will reverse the order. If ‘1’, rows or columns will be labeled numerically. ‘-1’ will reverse. Letters will always precede numbers in electrode names. For example (‘1’, ‘A’) will number rows numerically and columns alphabetically; first row: ‘A1’, ‘B1’, ‘C1’, NOT ‘1A’, ‘1B’, ‘1C’.
etype (
Electrode
, optional) – A valid Electrode class. By default,PointSource
is used.**kwargs – Any additional arguments that should be passed to the
Electrode
constructor, such as radiusr
forDiskElectrode
. See examples below.
Examples
A hexagonal electrode grid with 3 rows and 4 columns, made of disk electrodes with 10um radius spaced 20um apart, centered at (10, 20)um, and located 500um away from the retinal surface, with names like this:
A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4>>> from pulse2percept.implants import ElectrodeGrid, DiskElectrode >>> ElectrodeGrid((3, 4), 20, x=10, y=20, z=500, names=('A', '1'), r=10, ... type='hex', etype=DiskElectrode) ElectrodeGrid(rot=0, shape=(3, 4), spacing=20, type='hex')
A rectangular electrode grid with 2 rows and 4 columns, made of disk electrodes with 10um radius spaced 20um apart, centered at (10, 20)um, and located 500um away from the retinal surface, with names like this:
A1 A2 A3 A4 B1 B2 B3 B4>>> from pulse2percept.implants import ElectrodeGrid, DiskElectrode >>> ElectrodeGrid((2, 4), 20, x=10, y=20, z=500, names=('A', '1'), r=10, ... type='rect', etype=DiskElectrode) ElectrodeGrid(rot=0, shape=(2, 4), spacing=20, type='rect')
There are three ways to access (e.g.) the last electrode in the grid, either by name (
grid['C3']
), by row/column index (grid[2, 2]
), or by index into the flattened array (grid[8]
):>>> from pulse2percept.implants import ElectrodeGrid >>> grid = ElectrodeGrid((3, 3), 20, names=('A', '1')) >>> grid['C3'] PointSource(activated=True, name='C3', x=20..., y=20..., z=0...) >>> grid['C3'] == grid[8] == grid[2, 2] True
You can also access multiple electrodes at the same time by passing a list of indices/names (it’s ok to mix-and-match):
>>> from pulse2percept.implants import ElectrodeGrid, DiskElectrode >>> grid = ElectrodeGrid((3, 3), 20, etype=DiskElectrode, r=10) >>> grid[['A1', 1, (0, 2)]] [DiskElectrode(activated=True, name='A1', r=10..., x=-20.0, y=-20.0, z=0...), DiskElectrode(activated=True, name='A2', r=10..., x=0.0, y=-20.0, z=0...), DiskElectrode(activated=True, name='A3', r=10..., x=20.0, y=-20.0, z=0...)]
- add_electrode(name, electrode)[source]
Add an electrode to the array
- Parameters:
electrode (implants.Electrode) – An Electrode object, such as a PointSource or a DiskElectrode.
- property electrode_names
Return a list of all electrode names in the array
- property electrode_objects
Return a list of all electrode objects in the array
- property electrodes
Return all electrode names and objects in the electrode array
Internally, electrodes are stored in an ordered dictionary. You can iterate over different electrodes in the array as follows:
for name, electrode in earray.electrodes.items(): print(name, electrode)
You can access an individual electrode by indexing directly into the electrode array object, e.g.
earray['A1']
orearray[0]
.
- plot(annotate=False, autoscale=True, ax=None, color_stim=None, cmap='OrRd')[source]
Plot the electrode array
- Parameters:
annotate (bool, optional) – Flag whether to label electrodes in the implant.
autoscale (bool, optional) – Whether to adjust the x,y limits of the plot to fit the implant
ax (matplotlib.axes._subplots.AxesSubplot, optional) – A Matplotlib axes object. If None, will either use the current axes (if exists) or create a new Axes object.
color_stim (
pulse2percept.stimuli.Stimulus
, or None) – If provided, colors the earray based on the stimulus amplitudescmap (str) – Matplotlib colormap to use for stimulus coloring.
- Returns:
ax (
matplotlib.axes.Axes
) – Returns the axis object of the plot