Skip to content

Commit 9430c20

Browse files
Increase resolution when writing annotations
The new resolution is 1 microsecond, instead of 100 microseconds: https://gitlab.com/Teuniz/EDFlib/-/commit/6005976bc5894f84fcdc17dffcb287f40dfe6c9b
1 parent 4e81fd8 commit 9430c20

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

pyedflib/_extensions/_pyedflib.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ __all__ = [
4646
'set_technician',
4747
'set_transducer',
4848
'tell',
49-
'write_annotation_latin1',
50-
'write_annotation_utf8',
49+
'write_annotation_latin1_hr',
50+
'write_annotation_utf8_hr',
5151
'write_digital_samples',
5252
'write_digital_short_samples',
5353
'write_errors',
@@ -158,8 +158,8 @@ class EdfAnnotation:
158158
annotation: str
159159

160160
def set_patientcode(handle: int, patientcode: str | bytes) -> int: ...
161-
def write_annotation_latin1(handle: int, onset: int, duration: int, description: str | bytes) -> int: ...
162-
def write_annotation_utf8(handle: int, onset: int, duration: int, description: str | bytes) -> int: ...
161+
def write_annotation_latin1_hr(handle: int, onset: int, duration: int, description: str | bytes) -> int: ...
162+
def write_annotation_utf8_hr(handle: int, onset: int, duration: int, description: str | bytes) -> int: ...
163163
def set_technician(handle: int, technician: str | bytes) -> int: ...
164164
def get_annotation(handle: int, n: int, edf_annotation: EdfAnnotation) -> int: ...
165165
def read_int_samples(handle: int, edfsignal: int, n: int, buf: np.ndarray[np.int32_t]) -> int: ...

pyedflib/_extensions/_pyedflib.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
__doc__ = """Cython wrapper for low-level C edflib implementation."""
66
__all__ = ['lib_version', 'CyEdfReader', 'set_patientcode', 'set_starttime_subsecond',
7-
'write_annotation_latin1', 'write_annotation_utf8', 'set_technician', 'EdfAnnotation',
7+
'write_annotation_latin1_hr', 'write_annotation_utf8_hr', 'set_technician', 'EdfAnnotation',
88
'get_annotation', 'read_int_samples', 'blockwrite_digital_samples', 'blockwrite_physical_samples',
99
'set_recording_additional', 'write_physical_samples' ,'set_patientname', 'set_physical_minimum',
1010
'read_physical_samples', 'close_file', 'set_physical_maximum', 'open_file_writeonly',
@@ -438,11 +438,11 @@ def set_patientcode(int handle, char *patientcode):
438438
# check if rw?
439439
return c_edf.edf_set_patientcode(handle, patientcode)
440440

441-
cpdef int write_annotation_latin1(int handle, long long onset, long long duration, char *description):
442-
return c_edf.edfwrite_annotation_latin1(handle, onset, duration, description)
441+
cpdef int write_annotation_latin1_hr(int handle, long long onset, long long duration, char *description):
442+
return c_edf.edfwrite_annotation_latin1_hr(handle, onset, duration, description)
443443

444-
cpdef int write_annotation_utf8(int handle, long long onset, long long duration, char *description):
445-
return c_edf.edfwrite_annotation_utf8(handle, onset, duration, description)
444+
cpdef int write_annotation_utf8_hr(int handle, long long onset, long long duration, char *description):
445+
return c_edf.edfwrite_annotation_utf8_hr(handle, onset, duration, description)
446446

447447
cpdef int set_technician(int handle, char *technician):
448448
return c_edf.edf_set_technician(handle, technician)

pyedflib/_extensions/c_edf.pxd

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ include "edf.pxi"
77

88
cdef extern from "c/edflib.h":
99
int edf_set_patientcode(int, char *)
10-
int edfwrite_annotation_latin1(int, long long int, long long int, char *)
11-
int edfwrite_annotation_utf8(int, long long int, long long int, char *)
10+
int edfwrite_annotation_utf8(int, long long, long long, const char *)
11+
int edfwrite_annotation_latin1_hr(int, long long int, long long int, char *)
12+
int edfwrite_annotation_latin1(int, long long, long long, const char *)
13+
int edfwrite_annotation_utf8_hr(int, long long int, long long int, char *)
1214
int edflib_version()
1315
cdef struct edf_annotation_struct:
1416
long long int onset

pyedflib/edfwriter.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
import math
1313
from functools import reduce
1414
from fractions import Fraction
15+
from ._extensions._pyedflib import FILETYPE_EDFPLUS, FILETYPE_BDFPLUS, FILETYPE_BDF, FILETYPE_EDF
16+
from ._extensions._pyedflib import open_file_writeonly, set_physical_maximum, set_patient_additional, set_digital_maximum
17+
from ._extensions._pyedflib import set_birthdate, set_digital_minimum, set_technician, set_recording_additional, set_patientname
18+
from ._extensions._pyedflib import set_patientcode, set_equipment, set_admincode, set_sex, set_datarecord_duration, set_number_of_annotation_signals
19+
from ._extensions._pyedflib import set_startdatetime, set_starttime_subsecond, set_samples_per_record, set_physical_minimum, set_label, set_physical_dimension
20+
from ._extensions._pyedflib import set_transducer, set_prefilter, write_physical_samples, close_file, write_annotation_latin1_hr, write_annotation_utf8_hr
21+
from ._extensions._pyedflib import blockwrite_physical_samples, write_errors, blockwrite_digital_samples, write_digital_short_samples, write_digital_samples, blockwrite_digital_short_samples
1522

1623
import numpy as np
1724

@@ -47,8 +54,8 @@
4754
set_starttime_subsecond,
4855
set_technician,
4956
set_transducer,
50-
write_annotation_latin1,
51-
write_annotation_utf8,
57+
write_annotation_latin1_hr,
58+
write_annotation_utf8_hr,
5259
write_digital_samples,
5360
write_digital_short_samples,
5461
write_errors,
@@ -1013,16 +1020,16 @@ def writeAnnotation(self, onset_in_seconds: Union[int, float], duration_in_secon
10131020

10141021
if str_format == 'utf_8':
10151022
if duration_in_seconds >= 0:
1016-
return write_annotation_utf8(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), np.round(duration_in_seconds*10000).astype(int), du(description))
1023+
return write_annotation_utf8_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), np.round(duration_in_seconds*1000000).astype(np.int64), du(description))
10171024
else:
1018-
return write_annotation_utf8(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), -1, du(description))
1025+
return write_annotation_utf8_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), -1, du(description))
10191026
else:
10201027
if duration_in_seconds >= 0:
10211028
# FIX: description must be bytes. string will fail in u function
1022-
return write_annotation_latin1(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), np.round(duration_in_seconds*10000).astype(int), u(description).encode('latin1')) # type: ignore
1029+
return write_annotation_latin1_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), np.round(duration_in_seconds*1000000).astype(np.int64), u(description).encode('latin1')) # type: ignore
10231030
else:
10241031
# FIX: description must be bytes. string will fail in u function
1025-
return write_annotation_latin1(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), -1, u(description).encode('latin1')) # type: ignore
1032+
return write_annotation_latin1_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), -1, u(description).encode('latin1')) # type: ignore
10261033

10271034
def close(self) -> None:
10281035
"""

0 commit comments

Comments
 (0)