Skip to content

Commit 6794957

Browse files
committed
add test and fix
1 parent dce4ffd commit 6794957

File tree

2 files changed

+66
-17
lines changed

2 files changed

+66
-17
lines changed

neo/rawio/spikeglxrawio.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -232,32 +232,22 @@ def _parse_header(self):
232232

233233
self._t_starts = {stream_name: {} for stream_name in stream_names}
234234
self._t_stops = {seg_index: 0.0 for seg_index in range(nb_segment)}
235-
self._t_since_recording_time = {stream_name: {} for stream_name in stream_names}
236-
self._session_start_time = {stream_name: {} for stream_name in stream_names}
237-
self._gate_trigger = {stream_name: {} for stream_name in stream_names}
238-
for seg_index in range(nb_segment):
239-
for stream_name in stream_names:
235+
236+
for stream_name in stream_names:
237+
for seg_index in range(nb_segment):
240238
info = self.signals_info_dict[seg_index, stream_name]
241239

242240
frame_start = float(info["meta"]["firstSample"])
243241
sampling_frequency = info["sampling_rate"]
244242
t_start = frame_start / sampling_frequency
245-
246-
initial_date_time = info["meta"]["fileCreateTime"]
247-
from datetime import datetime
248-
initial_date_time_parsed = datetime.strptime(initial_date_time, "%Y-%m-%dT%H:%M:%S")
249-
initial_timestamp = initial_date_time_parsed.timestamp()
250-
shifted_timestamps = t_start + initial_timestamp
251-
243+
252244
self._t_starts[stream_name][seg_index] = t_start
253-
self._t_since_recording_time[stream_name][seg_index] = (initial_timestamp, shifted_timestamps)
254-
gate_num = info["gate_num"]
255-
trigger_num = info["trigger_num"]
256-
self._gate_trigger[stream_name][seg_index] = f"{gate_num=}, {trigger_num} "
257-
self._session_start_time[stream_name][seg_index] = initial_date_time_parsed
258245
t_stop = info["sample_length"] / info["sampling_rate"]
259246
self._t_stops[seg_index] = max(self._t_stops[seg_index], t_stop)
260247

248+
249+
250+
261251
# fille into header dict
262252
self.header = {}
263253
self.header["nb_block"] = 1

neo/test/rawiotest/test_spikeglxrawio.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,65 @@ def test_nidq_digital_channel(self):
110110
atol = 0.001
111111
assert np.allclose(on_diff, 1, atol=atol)
112112

113+
def test_t_start_reading(self):
114+
"""Test that t_start values are correctly read for all streams and segments."""
115+
116+
# Expected t_start values for each stream and segment
117+
expected_t_starts = {
118+
'imec0.ap': {
119+
0: 15.319535472007237,
120+
1: 15.339535431281986,
121+
2: 21.284723325294053,
122+
3: 21.3047232845688
123+
},
124+
'imec1.ap': {
125+
0: 15.319554693264516,
126+
1: 15.339521518106308,
127+
2: 21.284735282142822,
128+
3: 21.304702106984614
129+
},
130+
'imec0.lf': {
131+
0: 15.3191688060872,
132+
1: 15.339168765361949,
133+
2: 21.284356659374016,
134+
3: 21.304356618648765
135+
},
136+
'imec1.lf': {
137+
0: 15.319321358082725,
138+
1: 15.339321516521915,
139+
2: 21.284568614155827,
140+
3: 21.30456877259502
141+
}
142+
}
143+
144+
# Initialize the RawIO
145+
rawio = SpikeGLXRawIO(self.get_local_path("spikeglx/multi_trigger_multi_gate/SpikeGLX/5-19-2022-CI4"))
146+
rawio.parse_header()
147+
148+
# Get list of stream names
149+
stream_names = rawio.header["signal_streams"]["name"]
150+
151+
# Test t_start for each stream and segment
152+
for stream_name, expected_values in expected_t_starts.items():
153+
# Get stream index
154+
stream_index = list(stream_names).index(stream_name)
155+
156+
# Check each segment
157+
for seg_index, expected_t_start in expected_values.items():
158+
actual_t_start = rawio.get_signal_t_start(
159+
block_index=0,
160+
seg_index=seg_index,
161+
stream_index=stream_index
162+
)
163+
164+
# Use numpy.testing for proper float comparison
165+
np.testing.assert_allclose(
166+
actual_t_start,
167+
expected_t_start,
168+
rtol=1e-9,
169+
atol=1e-9,
170+
err_msg=f"Mismatch in t_start for stream '{stream_name}', segment {seg_index}"
171+
)
113172

114173
if __name__ == "__main__":
115174
unittest.main()

0 commit comments

Comments
 (0)