API¶
Probe¶
- class probeinterface.Probe(ndim: int = 2, si_units: str = 'um', name: str | None = None, serial_number: str | None = None, model_name: str | None = None, manufacturer: str | None = None)¶
Class to handle the geometry of one probe.
This class mainly handles contact positions, in 2D or 3D. Optionally, it can also handle the shape of the contacts and the shape of the probe.
- add_probe_to_zarr_group(group: zarr.Group) None ¶
Serialize the probe’s data and structure to a specified Zarr group.
This method is used to save the probe’s attributes, annotations, and other related data into a Zarr group, facilitating integration into larger Zarr structures.
Parameters¶
- groupzarr.Group
The target Zarr group where the probe’s data will be stored.
- annotate(**kwargs)¶
Annotates the probe object.
Parameters¶
**kwargs : list of keyword arguments to add to the annotations (e.g., brain_area=”CA1”)
- annotate_contacts(**kwargs)¶
Annotates the contacts of the probe.
Parameters¶
**kwargs : list of keyword arguments to add to the annotations (e.g., quality=[“good”, “bad”, …])
- property contact_positions¶
The position of the center for each contact
- copy()¶
Copy to another Probe instance.
Note: device_channel_indices are not copied and contact_ids are not copied
- create_auto_shape(probe_type: tip' | 'rect' | 'circular = 'tip', margin: float = 20.0)¶
Create a planar contour automatically based on probe contact positions.
This function generates a 2D polygon that outlines the shape of the probe, adjusted by a specified margin. The resulting contour is set as the planar contour of the probe.
Parameters¶
- probe_type{“tip”, “rect”, “circular”}, default: “tip”
The type of probe used to collect contact data:
“tip”: Assumes a single-point contact probe. The generated contour is
a rectangle with a triangular “tip” extending downwards. * “rect”: Assumes a rectangular contact probe. The generated contour is a rectangle. * “circular”: Assumes a circular contact probe. The generated contour is a circle.
- marginfloat, default: 20.0
The margin to add around the contact positions. The behavior varies by probe type:
“tip”: The margin is added around the rectangular portion of the contour
and to the base of the tip. The tip itself is extended downwards by four times the margin value. * “rect”: The margin is added evenly around all sides of the rectangle. * “circular”: The margin is added to the radius of the circle.
Notes¶
This function is designed for 2D data only. If you have 3D data, consider projecting it onto a plane before using this method.
- static from_dataframe(df: pandas.DataFrame) Probe ¶
Create Probe from a pandas.DataFrame see Probe.to_dataframe()
Parameters¶
- dfpandas.DataFrame
The dataframe representation of the probe
Returns¶
- probeProbe
The instantiated Probe object
- static from_dict(d: dict) Probe ¶
Instantiate a Probe from a dictionary
Parameters¶
- ddict
The dictionary representation of the probe
Returns¶
- probeProbe
The instantiated Probe object
- static from_numpy(arr: ndarray) Probe ¶
Create Probe from a complex numpy array see Probe.to_numpy()
Parameters¶
- arrnp.array
The structured np.array representation of the probe
Returns¶
- probeProbe
The instantiated Probe object
- static from_zarr(folder_path: str | Path) Probe ¶
Deserialize the Probe object from a Zarr file located at the given folder path.
Parameters¶
- folder_pathstr | Path
The path to the folder where the Zarr file is located.
Returns¶
- Probe
An instance of the Probe class initialized with data from the Zarr file.
- static from_zarr_group(group: zarr.Group) Probe ¶
Load a probe instance from a given Zarr group.
Parameters¶
- groupzarr.Group
The Zarr group from which to load the probe.
Returns¶
- Probe
An instance of the Probe class initialized with data from the Zarr group.
- get_contact_count() int ¶
Return the number of contacts on the probe.
- get_contact_vertices() list ¶
Return a list of contact vertices.
- get_shank_count() int ¶
Return the number of shanks for this probe.
- get_shanks()¶
Return the list of Shank objects for this Probe
- get_slice(selection: ndarray[bool | int])¶
Get a copy of the Probe with a sub selection of contacts.
Selection can be boolean or by index
Parameters¶
- selectionnp.array of bool or int (for index)
Either an np.array of bool or for desired selection of contacts or the indices of the desired contacts
Returns¶
- sliced_probe: Probe
The sliced probe
- move(translation_vector: np.array | list)¶
Translate the probe in one direction.
Parameters¶
- translation_vectorlist or array
The translation vector in shape 2D or 3D
- rotate(theta: float, center: list | np.ndarray | None = None, axis: 'xy' | 'yz' | 'xz' | None = None)¶
Rotate the probe around a specified axis.
Parameters¶
- thetafloat
In degrees, anticlockwise/counterclockwise
- centerarray | list | None, default: None
Center of rotation. If None, the center of probe is used
- axis“xy” | “yz” | “xz” | None, default: None
Axis of rotation. It must be None for 2D probes It must be given for 3D probes
- rotate_contacts(thetas: float | np.array[float] | list[float])¶
Rotate each contact of the probe. Internally, it modifies the contact_plane_axes.
Parameters¶
- thetasfloat | array[float] | list[float]
Rotation angle in degrees. If scalar, then it is applied to all contacts.
- set_contact_ids(contact_ids: np.array | list)¶
Set contact ids. Channel ids are converted to strings. Contact ids must be unique for the Probe and also for the ProbeGroup
Parameters¶
- contact_idslist or array
Array with contact ids. If contact_ids are int or float they are converted to str
- set_contacts(positions, shapes='circle', shape_params={'radius': 10}, plane_axes=None, contact_ids=None, shank_ids=None)¶
Sets contacts to a Probe.
- This sets four attributes of the probe:
contact_positions, contact_shapes, contact_shape_params, _contact_plane_axes
Parameters¶
- positionsarray (num_contacts, ndim)
Positions of contacts (2D or 3D depending on probe ‘ndim’).
- shapes“circle” | “square” | “rect” | array, default: “circle”
Shape of each contact (‘circle’/’square’/’rect’).
- shape_paramsdict or list of dict, default: {“radius”: 10}
Contains kwargs for shapes: * “radius” for circle * “width” for square, * “width/height” for rect
- plane_axesnp.array (num_contacts, 2, ndim) | None, default: None
Defines the two axes of the contact plane for each electrode. The third dimension corresponds to the probe ndim (2d or 3d).
- contact_ids: array[str] | None, default: None
Defines the contact ids for the contacts. If None, contact ids are not assigned.
- shank_idsarray[str] | None, default: None
Defines the shank ids for the contacts. If None, then these are assigned to a unique Shank.
- set_device_channel_indices(channel_indices: np.array | list)¶
Manually set the device channel indices.
If some channels are not connected or not recorded then channel should be set to “-1”
Parameters¶
- channel_indicesarray[int] | list[int]
The device channel indices to set
- set_planar_contour(contour_polygon: list)¶
Set the planar contour (the shape) of the probe.
Parameters¶
- contour_polygonlist
List of contour points (2D or 3D depending on ndim)
- set_shank_ids(shank_ids: np.array | list)¶
Set shank ids.
Parameters¶
- shank_idslist or array
Array with shank ids, if int or float converted to strings
- to_2d(axes: xy' | 'yz' | 'xz = 'xy')¶
Transform 3d probe to 2d probe.
Note: device_channel_indices are not copied.
Parameters¶
- plane“xy” | “yz” | “xz”, default: “xy”
The plane on which the 2D probe is defined.
- to_3d(axes: xy' | 'yz' | 'xz = 'xz')¶
Transform 2d probe to 3d probe.
Note: device_channel_indices are not copied.
Parameters¶
- axes“xy” | “yz” | “xz”, default: “xz”
The axes that define the plane on which the 2D probe is defined. ‘xy’, ‘yz’ ‘, xz’
- to_dataframe(complete: bool = False) pandas.DataFrame ¶
Export the probe to a pandas dataframe
Parameters¶
- completebool, default: False
If True, export complete information about the probe, including the probe plane axis.
Returns¶
- dfpandas.DataFrame
The dataframe representation of the probe
- to_dict(array_as_list: bool = False) dict ¶
Create a dictionary of all necessary attributes. Useful for dumping and saving to json.
Parameters¶
- array_as_listbool, default: False
If True, arrays are converted to lists
Returns¶
- ddict
The dictionary representation of the probe
- to_image(values: np.array | list, pixel_size: float = 0.5, num_pixel: Optional[int] = None, method: linear' | 'nearest' | 'cubic = 'linear', xlims: Optional[tuple] = None, ylims: Optional[tuple] = None) tuple[np.ndarray, tuple, tuple] ¶
Generated a 2d (image) from a values vector with an interpolation into a grid mesh.
Parameters¶
- valuesnp.ndarray | list
vector same size as contact number to be color plotted
- pixel_sizefloat, default: 0.5
size of one pixel in micrometers
- num_pixelOptional[int] | None, default: None
alternative to pixel_size give pixel number of the image width
- method“linear” | “nearest” | “cubic”, default: “linear”
Method of interpolation to generate a grid mesh
- xlimsOptional[tuple], default: None
Force image xlims
- ylimsOptional[tuple], default: None
Force image ylims
Returns¶
- image2d array
The generated image
- xlimstuple
The x limits
- ylimstuple
The y limits
- to_numpy(complete: bool = False) array ¶
Export the probe to a numpy structured array. This array handles all contact attributes.
Similar to the ‘to_dataframe()’ pandas function, but without pandas dependency.
The intended use is to attach this array to a recording object as a property (“contact vector”)
Parameters¶
- completebool, default: False
If True, export complete information about the probe, including contact_plane_axes/si_units/device_channel_indices.
Returns¶
- arrnumpy.array
Structured array with the following dtype schema:
- dtype = [
(‘x’, ‘float64’), (‘y’, ‘float64’), (‘z’, ‘float64’, optional), (‘contact_shapes’, ‘U64’), # Shape parameters (‘shape_param_1’, ‘float64’), (‘shape_param_2’, ‘float64’),
⋮ ⋮ ⋮
variable number of shape parameters … (‘shank_ids’, ‘U64’), (‘contact_ids’, ‘U64’),
# The rest is added only if complete=True (‘device_channel_indices’, ‘int64’, optional), (‘si_units’, ‘U64’, optional), (‘plane_axis_x_0’, ‘float64’, optional), (‘plane_axis_x_1’, ‘float64’, optional), (‘plane_axis_y_0’, ‘float64’, optional), (‘plane_axis_y_1’, ‘float64’, optional), (‘plane_axis_z_0’, ‘float64’, optional), (‘plane_axis_z_1’, ‘float64’, optional), # Annotations (‘annotation_name_1’, ‘dtype of annotation’, optional), (‘annotation_name_2’, ‘dtype of annotation’, optional), ⋮
⋮ ⋮ ⋮
variable number of annotations …
]
- to_zarr(folder_path: str | Path) None ¶
Serialize the Probe object to a Zarr file located at the specified folder path.
This method initializes a new Zarr group at the given folder path and calls add_probe_to_zarr_group to serialize the Probe’s data into this group, effectively storing the entire Probe’s state in a Zarr archive.
Parameters¶
- folder_pathstr | Path
The path to the folder where the Zarr data structure will be created and where the serialized data will be stored. If the folder does not exist, it will be created.
ProbeGroup¶
- class probeinterface.ProbeGroup¶
Class to handle a group of Probe objects and the global wiring to a device.
Optionally, it can handle the location of different probes.
- add_probe(probe: Probe)¶
Add an additional probe to the ProbeGroup
Parameters¶
- probe: Probe
The probe to add to the ProbeGroup
- auto_generate_contact_ids(*args, **kwargs)¶
Annotate all contacts with unique contact_id values.
Parameters¶
*args: will be forwarded to probeinterface.utils.generate_unique_ids **kwargs: will be forwarded to
probeinterface.utils.generate_unique_ids
- auto_generate_probe_ids(*args, **kwargs)¶
Annotate all probes with unique probe_id values.
Parameters¶
*args: will be forwarded to probeinterface.utils.generate_unique_ids **kwargs: will be forwarded to
probeinterface.utils.generate_unique_ids
- static from_dict(d: dict)¶
Instantiate a ProbeGroup from a dictionary
Parameters¶
- ddict
The dictionary representation of the probegroup
Returns¶
- probegroupProbeGroup
The instantiated ProbeGroup object
- static from_numpy(arr: ndarray) ProbeGroup ¶
Create ProbeGroup from a complex numpy array see ProbeGroup.to_numpy()
Parameters¶
- arrnp.array
The structured np.array representation of the probe
Returns¶
- probegroupProbeGroup
The instantiated ProbeGroup object
- get_global_contact_ids() ndarray ¶
Gets all contact ids concatenated across probes
Returns¶
- contact_ids: np.ndarray
An array of the contaact ids across all probes
- get_global_device_channel_indices() ndarray ¶
Gets the global device channels indices and returns as an array
Returns¶
- channels: np.ndarray
a numpy array vector with 2 columns (probe_index, device_channel_indices)
Notes¶
If a channel within channels has a value of -1 this indicates that that channel is disconnected
- set_global_device_channel_indices(channels: np.array | list)¶
Set global indices for all probes
Parameters¶
- channels: np.array | list
The device channal indices to be set
- to_dataframe(complete: bool = False) pandas.DataFrame ¶
Export the probegroup to a pandas dataframe
Parameters¶
- completebool, default: False
If True, export complete information about the probegroup, including the probe plane axis.
Returns¶
- dfpandas.DataFrame
The dataframe representation of the probegroup
Import/export to formats¶
- Read/write probe info using a variety of formats:
probeinterface (.json)
PRB (.prb)
CSV (.csv)
mearec (.h5)
spikeglx (.meta)
ironclust/jrclust (.mat)
Neurodata Without Borders (.nwb)
- probeinterface.io.read_probeinterface(file: str | Path) ProbeGroup ¶
Read probeinterface JSON-based format.
Parameters¶
- file: Path or str
The file path
Returns¶
probegroup : ProbeGroup object
- probeinterface.io.write_probeinterface(file: str | Path, probe_or_probegroup: Probe | ProbeGroup)¶
Write a probeinterface JSON file.
The format handles several probes in one file.
Parameters¶
- filePath or str
The file path
- probe_or_probegroupProbe or ProbeGroup object
If probe is given a probegroup is created anyway
- probeinterface.io.read_prb(file: str | Path) ProbeGroup ¶
Read a PRB file and return a ProbeGroup object.
Since PRB does not handle contact shapes, contacts are set to be circle of 5um radius. Same for the probe shape, where an auto shape is created.
PRB format does not contain any information about the channel of the probe Only the channel index on device is given.
Parameters¶
- filePath or str
The file path
Returns¶
probegroup : ProbeGroup object
- probeinterface.io.write_prb(file: str, probegroup: ProbeGroup, total_nb_channels: int | None = None, radius: float | None = None, group_mode: str = 'by_probe')¶
Write ProbeGroup into a prb file.
- This format handles:
multi Probe with channel group index key
channel positions with “geometry”
device_channel_indices with “channels “key
- Note: much information is lost in the PRB format:
contact shape
shape
channel index
- Note:
“total_nb_channels” is needed by spyking-circus
“radius” is needed by spyking-circus
“graph” is not handled
Parameters¶
- probeinterface.io.read_csv(file: str | Path)¶
Return a 2 or 3 columns csv file with contact positions
- probeinterface.io.write_csv(file, probe)¶
Write contact postions into a 2 or 3 columns csv file
- probeinterface.io.read_spikeglx(file: str | Path) Probe ¶
Read probe position for the meta file generated by SpikeGLX
See http://billkarsh.github.io/SpikeGLX/#metadata-guides for implementation. The x_pitch/y_pitch/width are set automatically depending on the NP version.
The shape is auto generated as a shank.
- Now reads:
NP0.0 (=phase3A)
NP1.0 (=phase3B2)
NP2.0 with 4 shank
NP1.0-NHP
Parameters¶
- filePath or str
The .meta file path
Returns¶
probe : Probe object
- probeinterface.io.read_mearec(file: str | Path) Probe ¶
Read probe position, and contact shape from a MEArec file.
See https://mearec.readthedocs.io/en/latest/ and https://doi.org/10.1007/s12021-020-09467-7 for implementation.
Parameters¶
- filePath or str
The file path
Returns¶
probe : Probe object
- probeinterface.io.read_nwb(file)¶
Read probe position from an NWB file
Probe generators¶
This module contains useful helper functions for generating probes.
- probeinterface.generator.generate_dummy_probe(elec_shapes: circle' | 'square' | 'rect = 'circle') Probe ¶
Generate a dummy probe with 3 columns and 32 contacts. Mainly used for testing and examples.
Parameters¶
- elec_shapes“circle” | “square” | “rect”, default: ‘circle’
Shape of the electrodes
Returns¶
- probeProbe
The generated probe
- probeinterface.generator.generate_dummy_probe_group() ProbeGroup ¶
Generate a ProbeGroup with 2 probes. Mainly used for testing and examples.
Returns¶
- probeProbe
The generated probe
- probeinterface.generator.generate_tetrode(r: float = 10.0) Probe ¶
Generate a tetrode Probe.
Parameters¶
- r: float, default: 10
The distance multiplier for the positions
Returns¶
- probeProbe
The generated probe
- probeinterface.generator.generate_multi_columns_probe(num_columns: int = 3, num_contact_per_column: int = 10, xpitch: float = 20, ypitch: float = 20, y_shift_per_column: Optional[np.array | list] = None, contact_shapes: circle' | 'rect' | 'square = 'circle', contact_shape_params: dict = {'radius': 6}) Probe ¶
Generate a Probe with several columns.
Parameters¶
- num_columnsint, default: 3
Number of columns
- num_contact_per_columnint, default: 10
Number of contacts per column
- xpitchfloat, default: 20
Pitch in x direction
- ypitchfloat, default: 20
Pitch in y direction
- y_shift_per_columnOptional[array-like], default: None
Shift in y direction per column. It needs to have the same length as num_columns, by default None
- contact_shapes“circle” | “rect” | “square”, default: “circle”
Shape of the contacts
- contact_shape_paramsdict, default: {‘radius’: 6}
Parameters for the shape. For circle: {“radius”: float} For square: {“width”: float} For rectangle: {“width”: float, “height”: float}
Returns¶
- probeProbe
The generated probe
- probeinterface.generator.generate_linear_probe(num_elec: int = 16, ypitch: float = 20, contact_shapes: circle' | 'rect' | 'square = 'circle', contact_shape_params: dict = {'radius': 6}) Probe ¶
Generate a one-column linear probe.
Parameters¶
- num_elecint, default: 16
Number of electrodes
- ypitchfloat, default: 20
Pitch in y direction
- contact_shapes“circle” | “rect” | “square”, default ‘circle’
Shape of the contacts
- contact_shape_paramsdict, default: {‘radius’: 6}
Parameters for the shape. For circle: {“radius”: float} For square: {“width”: float} For rectangle: {“width”: float, “height”: float}
Returns¶
- probeProbe
The generated probe
Plotting¶
A simple implementation for plotting a Probe or ProbeGroup using matplotlib.
Depending on Probe.ndim, the plotting is done in 2D or 3D
- probeinterface.plotting.plot_probe(probe, ax=None, contacts_colors=None, with_contact_id: bool = False, with_device_index: bool = False, text_on_contact: list | ndarray | None = None, contacts_values: ndarray | None = None, cmap: str = 'viridis', title: bool = True, contacts_kargs: dict = {}, probe_shape_kwargs: dict = {}, xlims: tuple | None = None, ylims: tuple | None = None, zlims: tuple | None = None, show_channel_on_click: bool = False)¶
Plot a Probe object. Generates a 2D or 3D axis, depending on Probe.ndim
Parameters¶
- probeProbe
The probe object
- axmatplotlib.axis | None, default: None
The axis to plot the probe on. If None, an axis is created
- contacts_colorsmatplotlib color | None, default: None
The color of the contacts
- with_contact_idbool, default: False
If True, channel ids are displayed on top of the channels
- with_device_indexbool, default: False
If True, device channel indices are displayed on top of the channels
- text_on_contact: None | list | numpy.array, default: None
Addintional text to plot on each contact
- contacts_valuesnp.array, default: None
Values to color the contacts with
- cmapa colormap color, default: “viridis”
A colormap color
- titlebool, default: True
If True, the axis title is set to the probe name
- contacts_kargsdict, default: {}
Dict with kwargs for contacts (e.g. alpha, edgecolor, lw)
- probe_shape_kwargsdict, default: {}
Dict with kwargs for probe shape (e.g. alpha, edgecolor, lw)
- xlimstuple | None, default: None
Limits for x dimension
- ylimstuple | None, default: None
Limits for y dimension
- zlimstuple | None, default: None
Limits for z dimension
- show_channel_on_clickbool, default: False
If True, the channel information is shown upon click
Returns¶
- polyPolyCollection
The polygon collection for contacts
- poly_contourPolyCollection
The polygon collection for the probe shape
- probeinterface.plotting.plot_probe_group(probegroup, same_axes: bool = True, **kargs)¶
This function is deprecated and will be removed in 0.2.23 Please use plot_probegroup instead
Library¶
Provides functions to download and cache pre-existing probe files from some manufacturers.
The library is hosted here: https://gin.g-node.org/spikeinterface/probeinterface_library
The gin platform enables contributions from users.
- probeinterface.library.get_probe(manufacturer: str, probe_name: str, name: str | None = None) Probe ¶
Get probe from ProbeInterface library
Parameters¶
- manufacturer“cambridgeneurotech” | “neuronexus”
The probe manufacturer
- probe_namestr (see probeinterface_libary for options)
The probe name
- namestr | None, default: None
Optional name for the probe
Returns¶
probe : Probe object