Source code for neuroconv.datainterfaces.ecephys.mearec.mearecdatainterface

import json

from pydantic import FilePath

from ..baserecordingextractorinterface import BaseRecordingExtractorInterface
from ....utils.json_schema import _NWBMetaDataEncoder


[docs]class MEArecRecordingInterface(BaseRecordingExtractorInterface): """ Primary data interface class for converting MEArec recording data. Uses the :py:class:`~spikeinterface.extractors.MEArecRecordingExtractor`. """ display_name = "MEArec Recording" associated_suffixes = (".h5",) info = "Interface for MEArec recording data."
[docs] @classmethod def get_source_schema(cls) -> dict: source_schema = super().get_source_schema() source_schema["properties"]["file_path"]["description"] = "Path to the MEArec .h5 file." return source_schema
def __init__(self, file_path: FilePath, verbose: bool = False, es_key: str = "ElectricalSeries"): """ Load and prepare data for MEArec. Parameters ---------- folder_path : str or Path Path to the MEArec .h5 file. verbose : bool, default: Falsee Allows verbose. es_key : str, default: "ElectricalSeries" """ super().__init__(file_path=file_path, verbose=verbose, es_key=es_key)
[docs] def get_metadata(self) -> dict: metadata = super().get_metadata() # TODO: improve ProbeInterface integration in our writing procedures # probe = self.recording_extractor.get_probe() # TODO: Need to check if this is always available # There is a lot of device/electrode/waveform/sorting configuration information... # But no session start time... mearec_info = self.recording_extractor.neo_reader.raw_annotations["blocks"][0]["mearec_info"] electrode_metadata = dict(mearec_info["electrodes"]) device_name = electrode_metadata.pop( "electrode_name" ) # 'electrode_name' seems to be a misnomer for the probe name metadata["Ecephys"]["Device"][0].update( name=device_name, description="The ecephys device for the MEArec recording." ) for electrode_group_metadata in metadata["Ecephys"]["ElectrodeGroup"]: electrode_group_metadata.update(device=device_name) recording_metadata = dict(mearec_info["recordings"]) for unneeded_key in ["fs", "dtype"]: recording_metadata.pop(unneeded_key) metadata["Ecephys"].update( {self.es_key: dict(name=self.es_key, description=json.dumps(recording_metadata, cls=_NWBMetaDataEncoder))} ) return metadata