Set correct checksums and samps_per_frame in Record.wrsamp #424
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There are a couple of ways to write a record using this package. One is
wfdb.wrsamp
, the other is creating aRecord
object and calling thewrsamp
method.Record.wrsamp
was, I think, meant to be more low-level and perhaps only intended for internal use of the package. But for various reasons, applications may want or need to call this method directly. So I think we need to support it, and make it more fool-proof; in particular, this method shouldn't generate invalid WFDB records even if the application supplies wrong parameters.Here I address two of those parameters -
checksum
andsamps_per_frame
.Typically,
checksum
is set bywfdb.rdrecord
. But naturally, the input data may have been modified (explicitly by the application, or implicitly e.g. bysmooth_frames
) between reading the record and writing it. So when callingRecord.wrsamp
, we want to set this field to the actual checksums of the signals. For backward compatibility and for applications that want to edit an existing header file, we leave the checksums alone if they're absent or if they're already correct.(WFDB checksums are stored and written as an integer but only the low 16 bits are used. So values of -1 and 65535 are equally correct. Yes, this is kind of broken.)
samps_per_frame
is only relevant when writing multi-frequency data. If you are writing single-frequency signal files, then the header file must not claim there are multiple samples per frame. Since the field is optional, we can simply drop it whenexpanded
is false.(If you are writing multi-frequency signal files, then
Record.wrsamp
does correctly verify thatsamps_per_frame
is consistent with the dimensions ofe_d_signal
.)Fixes issue #333.