11import datetime
2+ import os
23from typing import Any , Dict , List , Optional , Sequence , Tuple
34
45import numpy as np
@@ -278,7 +279,7 @@ def set_defaults(self):
278279 for f in sfields :
279280 self .set_default (f )
280281
281- def wrheader (self , write_dir = "" , expanded = True ):
282+ def wrheader (self , write_dir = "" , expanded = True , wfdb_archive = None ):
282283 """
283284 Write a WFDB header file. The signals are not used. Before
284285 writing:
@@ -325,7 +326,8 @@ def wrheader(self, write_dir="", expanded=True):
325326 self .check_field_cohesion (rec_write_fields , list (sig_write_fields ))
326327
327328 # Write the header file using the specified fields
328- self .wr_header_file (rec_write_fields , sig_write_fields , write_dir )
329+ self .wr_header_file (rec_write_fields , sig_write_fields , write_dir ,
330+ wfdb_archive = wfdb_archive )
329331
330332 def get_write_fields (self ):
331333 """
@@ -508,7 +510,8 @@ def check_field_cohesion(self, rec_write_fields, sig_write_fields):
508510 "Each file_name (dat file) specified must have the same byte offset"
509511 )
510512
511- def wr_header_file (self , rec_write_fields , sig_write_fields , write_dir ):
513+ def wr_header_file (self , rec_write_fields , sig_write_fields , write_dir ,
514+ wfdb_archive = None ):
512515 """
513516 Write a header file using the specified fields. Converts Record
514517 attributes into appropriate WFDB format strings.
@@ -522,6 +525,8 @@ def wr_header_file(self, rec_write_fields, sig_write_fields, write_dir):
522525 being equal to a list of channels to write for each field.
523526 write_dir : str
524527 The directory in which to write the header file.
528+ wfdb_archive : WFDBArchive, optional
529+ If provided, write the header into this archive instead of to disk.
525530
526531 Returns
527532 -------
@@ -583,7 +588,13 @@ def wr_header_file(self, rec_write_fields, sig_write_fields, write_dir):
583588 comment_lines = ["# " + comment for comment in self .comments ]
584589 header_lines += comment_lines
585590
586- util .lines_to_file (self .record_name + ".hea" , write_dir , header_lines )
591+ header_str = "\n " .join (header_lines ) + "\n "
592+ hea_filename = os .path .basename (self .record_name ) + ".hea"
593+
594+ if wfdb_archive :
595+ wfdb_archive .write (hea_filename , header_str .encode ("utf-8" ))
596+ else :
597+ util .lines_to_file (hea_filename , write_dir , header_lines )
587598
588599
589600class MultiHeaderMixin (BaseHeaderMixin ):
@@ -621,7 +632,7 @@ def set_defaults(self):
621632 for field in self .get_write_fields ():
622633 self .set_default (field )
623634
624- def wrheader (self , write_dir = "" ):
635+ def wrheader (self , write_dir = "" , wfdb_archive = None ):
625636 """
626637 Write a multi-segment WFDB header file. The signals or segments are
627638 not used. Before writing:
@@ -655,7 +666,7 @@ def wrheader(self, write_dir=""):
655666 self .check_field_cohesion ()
656667
657668 # Write the header file using the specified fields
658- self .wr_header_file (write_fields , write_dir )
669+ self .wr_header_file (write_fields , write_dir , wfdb_archive = wfdb_archive )
659670
660671 def get_write_fields (self ):
661672 """
@@ -733,7 +744,7 @@ def check_field_cohesion(self):
733744 "The sum of the 'seg_len' fields do not match the 'sig_len' field"
734745 )
735746
736- def wr_header_file (self , write_fields , write_dir ):
747+ def wr_header_file (self , write_fields , write_dir , wfdb_archive = None ):
737748 """
738749 Write a header file using the specified fields.
739750
@@ -744,6 +755,8 @@ def wr_header_file(self, write_fields, write_dir):
744755 and their dependencies.
745756 write_dir : str
746757 The output directory in which the header is written.
758+ wfdb_archive : WFDBArchive, optional
759+ If provided, write the header into this archive instead of to disk.
747760
748761 Returns
749762 -------
@@ -779,7 +792,13 @@ def wr_header_file(self, write_fields, write_dir):
779792 comment_lines = ["# " + comment for comment in self .comments ]
780793 header_lines += comment_lines
781794
782- util .lines_to_file (self .record_name + ".hea" , write_dir , header_lines )
795+ header_str = "\n " .join (header_lines ) + "\n "
796+ hea_filename = os .path .basename (self .record_name ) + ".hea"
797+
798+ if wfdb_archive :
799+ wfdb_archive .write (hea_filename , header_str .encode ("utf-8" ))
800+ else :
801+ util .lines_to_file (hea_filename , write_dir , header_lines )
783802
784803 def get_sig_segments (self , sig_name = None ):
785804 """
0 commit comments