Source code for neuroconv.datainterfaces.ecephys.edf.edfdatainterface
from ..baserecordingextractorinterface import BaseRecordingExtractorInterface
from ....tools import get_package
from ....utils.types import FilePathType
[docs]class EDFRecordingInterface(BaseRecordingExtractorInterface):
"""
Data interface class for converting European Data Format (EDF) data using the
:py:class:`~spikeinterface.extractors.EDFRecordingExtractor`.
Not supported for Python 3.8 and 3.9 on M1 macs.
"""
help = "Interface for European Data Format (EDF) recording data."
display_name = "EDF Recording"
keywords = BaseRecordingExtractorInterface.keywords + [
"European Data Format",
]
def __init__(self, file_path: FilePathType, verbose: bool = True, es_key: str = "ElectricalSeries"):
"""
Load and prepare data for EDF.
Currently, only continuous EDF+ files (EDF+C) and original EDF files (EDF) are supported
Parameters
----------
file_path : str or Path
Path to the edf file
verbose : bool, default: True
Allows verbose.
es_key : str, default: "ElectricalSeries"
"""
get_package(
package_name="pyedflib",
excluded_platforms_and_python_versions=dict(darwin=dict(arm=["3.8", "3.9"])),
)
super().__init__(file_path=file_path, verbose=verbose, es_key=es_key)
self.edf_header = self.recording_extractor.neo_reader.edf_header
def extract_nwb_file_metadata(self) -> dict:
nwbfile_metadata = dict(
session_start_time=self.edf_header["startdate"],
experimenter=self.edf_header["technician"],
)
# Filter empty values
nwbfile_metadata = {property: value for property, value in nwbfile_metadata.items() if value}
return nwbfile_metadata
def extract_subject_metadata(self) -> dict:
subject_metadata = dict(
subject_id=self.edf_header["patientcode"],
date_of_birth=self.edf_header["birthdate"],
)
# Filter empty values
subject_metadata = {property: value for property, value in subject_metadata.items() if value}
return subject_metadata