@@ -40,21 +40,26 @@ def _infer_scalar_field(
4040
4141
4242class Channel (BaseMetadataModel ):
43- channel_name : str
44- reference : str
43+ name : str
44+ electrode_name : str
4545 type : str = "N/A"
46- unit : str = "V"
46+ units : str = "V"
4747 sampling_frequency : float | None = None
48+ low_cutoff : float | None = None
49+ high_cutoff : float | None = None
50+ reference : str | None = None
51+ notch : str | None = None
4852 channel_label : str | None = None
4953 stream_id : str | None = None
5054 description : str | None = None
55+ software_filter_types : str | None = None
5156 status : typing .Literal ["good" , "bad" ] | None = None
5257 status_description : str | None = None
5358 gain : float | None = None
5459 time_offset : float | None = None
55- time_reference_channels : str | None = None
60+ time_reference_channel : str | None = None
5661 ground : str | None = None
57- # recording_mode: str | None = None # TODO: icephys only
62+ recording_mode : str | None = None
5863
5964
6065class ChannelTable (BaseMetadataContainerModel ):
@@ -129,18 +134,14 @@ def from_nwbfiles(cls, nwbfiles: list[pydantic.InstanceOf[pynwb.NWBFile]]) -> ty
129134
130135 channels = [
131136 Channel (
132- channel_name = (
133- f"ch { channel_name .values [0 ]} "
137+ name = (
138+ f"{ channel_name .values [0 ]} "
134139 if (channel_name := electrode .get ("channel_name" , None )) is not None
135- else f"ch{ electrode .index [0 ]} "
136- ),
137- reference = (
138- f"contact{ contact_ids .values [0 ]} " # TODO: do a deep dive into edge cases of this reference
139- if (contact_ids := electrode .get ("contact_ids" , None )) is not None
140- else f"e{ electrode .index [0 ]} "
140+ else f"ch{ str (electrode .index [0 ]).zfill (3 )} "
141141 ),
142+ electrode_name = f"e{ str (electrode .index [0 ]).zfill (3 )} " ,
142143 type = "N/A" , # TODO: in dedicated follow-up, could classify LFP based on container
143- unit = "V" ,
144+ units = "V" ,
144145 sampling_frequency = sampling_frequency ,
145146 # channel_label: str | None = None # TODO: only support with additional metadata
146147 stream_id = stream_id ,
@@ -150,7 +151,7 @@ def from_nwbfiles(cls, nwbfiles: list[pydantic.InstanceOf[pynwb.NWBFile]]) -> ty
150151 gain = gain ,
151152 # Special extraction from SpikeInterface field
152153 time_offset = shift [0 ] if (shift := electrode .get ("inter_sample_shift" , None )) is not None else None ,
153- # time_reference_channels : str | None = None # TODO: only support with additional metadata
154+ # time_reference_channel : str | None = None # TODO: only support with additional metadata
154155 # ground: str | None = None # TODO: only support with additional metadata
155156 )
156157 for electrode in nwbfile .electrodes
@@ -161,7 +162,6 @@ def from_nwbfiles(cls, nwbfiles: list[pydantic.InstanceOf[pynwb.NWBFile]]) -> ty
161162 for neurodata_object in nwbfile .acquisition .values ()
162163 if isinstance (neurodata_object , pynwb .icephys .PatchClampSeries )
163164 ]
164- # TODO: handle intracellular_recordings case
165165 electrode_name_to_series = collections .defaultdict (list )
166166 for series in icephys_series :
167167 electrode_name_to_series [series .electrode .name ].append (series )
@@ -197,19 +197,18 @@ def from_nwbfiles(cls, nwbfiles: list[pydantic.InstanceOf[pynwb.NWBFile]]) -> ty
197197
198198 channels = [
199199 Channel (
200- channel_name = electrode .name ,
201- reference = "n/a" , # TODO: think about if/how this could be any other value
200+ name = electrode .name ,
201+ electrode_name = electrode . name ,
202202 type = electrode_name_to_type .get (electrode .name , "n/a" ),
203- unit = "V" ,
203+ units = "V" ,
204204 sampling_frequency = electrode_name_to_sampling_frequency .get (electrode .name , None ),
205205 # channel_label: str | None = None # TODO: only support with additional metadata
206206 stream_id = electrode_name_to_stream_ids .get (electrode .name , None ),
207207 # description: str | None = None # TODO: only support with additional metadata
208208 # status: typing.Literal["good", "bad"] | None = None # TODO: only support with additional metadata
209209 # status_description: str | None = None # TODO: only support with additional metadata
210210 gain = electrode_name_to_gain .get (electrode .name , None ),
211- # time_offset=
212- # time_reference_channels: str | None = None # TODO: only support with additional metadata
211+ # time_reference_channel: str | None = None # TODO: only support with additional metadata
213212 # ground: str | None = None # TODO: only support with additional metadata
214213 recording_mode = type_to_recording_mode [electrode_name_to_type .get (electrode .name , "n/a" )],
215214 # TODO: add extra columns
0 commit comments