From 4ee653ccb1a0118b35f3dcafe53ba0c2ccdc38f8 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> Date: Sun, 2 Jul 2023 21:08:37 +0200 Subject: [PATCH] Increase resolution when writing annotations The new resolution is 1 microsecond, instead of 100 microseconds: https://gitlab.com/Teuniz/EDFlib/-/commit/6005976bc5894f84fcdc17dffcb287f40dfe6c9b --- pyedflib/_extensions/_pyedflib.pyx | 10 +++++----- pyedflib/_extensions/c_edf.pxd | 6 ++++-- pyedflib/edfwriter.py | 10 +++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pyedflib/_extensions/_pyedflib.pyx b/pyedflib/_extensions/_pyedflib.pyx index 136daf5..ea83c4c 100644 --- a/pyedflib/_extensions/_pyedflib.pyx +++ b/pyedflib/_extensions/_pyedflib.pyx @@ -4,7 +4,7 @@ __doc__ = """Cython wrapper for low-level C edflib implementation.""" __all__ = ['lib_version', 'CyEdfReader', 'set_patientcode', 'set_starttime_subsecond', - 'write_annotation_latin1', 'write_annotation_utf8', 'set_technician', 'EdfAnnotation', + 'write_annotation_latin1_hr', 'write_annotation_utf8_hr', 'set_technician', 'EdfAnnotation', 'get_annotation', 'read_int_samples', 'blockwrite_digital_samples', 'blockwrite_physical_samples', 'set_recording_additional', 'write_physical_samples' ,'set_patientname', 'set_physical_minimum', 'read_physical_samples', 'close_file', 'set_physical_maximum', 'open_file_writeonly', @@ -431,11 +431,11 @@ def set_patientcode(int handle, char *patientcode): # check if rw? return c_edf.edf_set_patientcode(handle, patientcode) -cpdef int write_annotation_latin1(int handle, long long onset, long long duration, char *description): - return c_edf.edfwrite_annotation_latin1(handle, onset, duration, description) +cpdef int write_annotation_latin1_hr(int handle, long long onset, long long duration, char *description): + return c_edf.edfwrite_annotation_latin1_hr(handle, onset, duration, description) -cpdef int write_annotation_utf8(int handle, long long onset, long long duration, char *description): - return c_edf.edfwrite_annotation_utf8(handle, onset, duration, description) +cpdef int write_annotation_utf8_hr(int handle, long long onset, long long duration, char *description): + return c_edf.edfwrite_annotation_utf8_hr(handle, onset, duration, description) cpdef int set_technician(int handle, char *technician): return c_edf.edf_set_technician(handle, technician) diff --git a/pyedflib/_extensions/c_edf.pxd b/pyedflib/_extensions/c_edf.pxd index 356275c..10de6c0 100644 --- a/pyedflib/_extensions/c_edf.pxd +++ b/pyedflib/_extensions/c_edf.pxd @@ -7,8 +7,10 @@ include "edf.pxi" cdef extern from "c/edflib.h": int edf_set_patientcode(int, char *) - int edfwrite_annotation_latin1(int, long long int, long long int, char *) - int edfwrite_annotation_utf8(int, long long int, long long int, char *) + int edfwrite_annotation_utf8(int, long long, long long, const char *) + int edfwrite_annotation_latin1_hr(int, long long int, long long int, char *) + int edfwrite_annotation_latin1(int, long long, long long, const char *) + int edfwrite_annotation_utf8_hr(int, long long int, long long int, char *) int edflib_version() cdef struct edf_annotation_struct: long long int onset diff --git a/pyedflib/edfwriter.py b/pyedflib/edfwriter.py index 6d99b83..26ca72a 100644 --- a/pyedflib/edfwriter.py +++ b/pyedflib/edfwriter.py @@ -14,7 +14,7 @@ from ._extensions._pyedflib import set_birthdate, set_digital_minimum, set_technician, set_recording_additional, set_patientname from ._extensions._pyedflib import set_patientcode, set_equipment, set_admincode, set_gender, set_datarecord_duration, set_number_of_annotation_signals from ._extensions._pyedflib import set_startdatetime, set_starttime_subsecond, set_samples_per_record, set_physical_minimum, set_label, set_physical_dimension -from ._extensions._pyedflib import set_transducer, set_prefilter, write_physical_samples, close_file, write_annotation_latin1, write_annotation_utf8 +from ._extensions._pyedflib import set_transducer, set_prefilter, write_physical_samples, close_file, write_annotation_latin1_hr, write_annotation_utf8_hr from ._extensions._pyedflib import blockwrite_physical_samples, write_errors, blockwrite_digital_samples, write_digital_short_samples, write_digital_samples, blockwrite_digital_short_samples @@ -873,14 +873,14 @@ def writeAnnotation(self, onset_in_seconds, duration_in_seconds, description, st if str_format == 'utf_8': if duration_in_seconds >= 0: - 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)) + 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)) else: - return write_annotation_utf8(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), -1, du(description)) + return write_annotation_utf8_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), -1, du(description)) else: if duration_in_seconds >= 0: - 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')) + 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')) else: - return write_annotation_latin1(self.handle, np.round(onset_in_seconds*10000).astype(np.int64), -1, u(description).encode('latin1')) + return write_annotation_latin1_hr(self.handle, np.round(onset_in_seconds*1000000).astype(np.int64), -1, u(description).encode('latin1')) def close(self): """