Skip to content

Commit

Permalink
Merge branch 'main' into add_template_data_class
Browse files Browse the repository at this point in the history
  • Loading branch information
h-mayorquin authored Sep 28, 2023
2 parents 52c333b + 719ffc9 commit 3368b0a
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 29 deletions.
15 changes: 8 additions & 7 deletions doc/how_to/load_matlab_data.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Here, we present a MATLAB code that creates a random dataset and writes it to a
Loading Data in SpikeInterface
------------------------------

After executing the above MATLAB code, a binary file named `your_data_as_a_binary.bin` will be created in your MATLAB directory. To load this file in Python, you'll need its full path.
After executing the above MATLAB code, a binary file named :code:`your_data_as_a_binary.bin` will be created in your MATLAB directory. To load this file in Python, you'll need its full path.

Use the following Python script to load the binary data into SpikeInterface:

Expand All @@ -55,7 +55,7 @@ Use the following Python script to load the binary data into SpikeInterface:
# Load data using SpikeInterface
recording = si.read_binary(file_path, sampling_frequency=sampling_frequency,
num_channels=num_channels, dtype=dtype)
num_channels=num_channels, dtype=dtype)
# Confirm that the data was loaded correctly by comparing the data shapes and see they match the MATLAB data
print(recording.get_num_frames(), recording.get_num_channels())
Expand All @@ -65,18 +65,18 @@ Follow the steps above to seamlessly import your MATLAB data into SpikeInterface
Common Pitfalls & Tips
----------------------

1. **Data Shape**: Make sure your MATLAB data matrix's first dimension is samples/time and the second is channels. If your time is in the second dimension, use `time_axis=1` in `si.read_binary()`.
1. **Data Shape**: Make sure your MATLAB data matrix's first dimension is samples/time and the second is channels. If your time is in the second dimension, use :code:`time_axis=1` in :code:`si.read_binary()`.
2. **File Path**: Always double-check the Python file path.
3. **Data Type Consistency**: Ensure data types between MATLAB and Python are consistent. MATLAB's `double` is equivalent to Numpy's `float64`.
4. **Sampling Frequency**: Set the appropriate sampling frequency in Hz for SpikeInterface.
5. **Transition to Python**: Moving from MATLAB to Python can be challenging. For newcomers to Python, consider reviewing numpy's [Numpy for MATLAB Users](https://numpy.org/doc/stable/user/numpy-for-matlab-users.html) guide.
5. **Transition to Python**: Moving from MATLAB to Python can be challenging. For newcomers to Python, consider reviewing numpy's `Numpy for MATLAB Users <https://numpy.org/doc/stable/user/numpy-for-matlab-users.html>`_ guide.

Using gains and offsets for integer data
----------------------------------------

Raw data formats often store data as integer values for memory efficiency. To give these integers meaningful physical units, you can apply a gain and an offset.
In SpikeInterface, you can use the `gain_to_uV` and `offset_to_uV` parameters, since traces are handled in microvolts (uV). Both parameters can be integrated into the `read_binary` function.
If your data in MATLAB is stored as `int16`, and you know the gain and offset, you can use the following code to load the data:
In SpikeInterface, you can use the :code:`gain_to_uV` and :code:`offset_to_uV` parameters, since traces are handled in microvolts (uV). Both parameters can be integrated into the :code:`read_binary` function.
If your data in MATLAB is stored as :code:`int16`, and you know the gain and offset, you can use the following code to load the data:

.. code-block:: python
Expand All @@ -90,7 +90,8 @@ If your data in MATLAB is stored as `int16`, and you know the gain and offset, y
num_channels=num_channels, dtype=dtype_int,
gain_to_uV=gain_to_uV, offset_to_uV=offset_to_uV)
recording.get_traces(return_scaled=True) # Return traces in micro volts (uV)
recording.get_traces() # Return traces in original units [type: int]
recording.get_traces(return_scaled=True) # Return traces in micro volts (uV) [type: float]
This will equip your recording object with capabilities to convert the data to float values in uV using the :code:`get_traces()` method with the :code:`return_scaled` parameter set to :code:`True`.
Expand Down
21 changes: 0 additions & 21 deletions src/spikeinterface/extractors/cellexplorersortingextractor.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ def __init__(
sampling_frequency: float | None = None,
session_info_file_path: str | Path | None = None,
spikes_matfile_path: str | Path | None = None,
session_info_matfile_path: str | Path | None = None,
):
try:
from pymatreader import read_mat
Expand All @@ -67,26 +66,6 @@ def __init__(
)
file_path = spikes_matfile_path if file_path is None else file_path

if session_info_matfile_path is not None:
# Raise an error if the warning period has expired
deprecation_issued = datetime.datetime(2023, 4, 1)
deprecation_deadline = deprecation_issued + datetime.timedelta(days=180)
if datetime.datetime.now() > deprecation_deadline:
raise ValueError(
"The session_info_matfile_path argument is no longer supported in. Use session_info_file_path instead."
)

# Otherwise, issue a DeprecationWarning
else:
warnings.warn(
"The session_info_matfile_path argument is deprecated and will be removed in six months. "
"Use session_info_file_path instead.",
DeprecationWarning,
)
session_info_file_path = (
session_info_matfile_path if session_info_file_path is None else session_info_file_path
)

self.spikes_cellinfo_path = Path(file_path)
self.session_path = self.spikes_cellinfo_path.parent
self.session_id = self.spikes_cellinfo_path.stem.split(".")[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class CellExplorerSortingTest(SortingCommonTestSuite, unittest.TestCase):
(
"cellexplorer/dataset_2/20170504_396um_0um_merge.spikes.cellinfo.mat",
{
"session_info_matfile_path": local_folder
"session_info_file_path": local_folder
/ "cellexplorer/dataset_2/20170504_396um_0um_merge.sessionInfo.mat"
},
),
Expand Down

0 comments on commit 3368b0a

Please sign in to comment.