sarkit.crsd.Writer

class Writer(file, metadata)

Write a CRSD file

A Writer object can be used as a context manager in a with statement.

Parameters:
filefile object

CRSD file to write

metadataMetadata

CRSD metadata to write (copied on construction)

Methods

done()

Warn about unwritten arrays declared in the XML

write_ppp(sequence_identifier, ppp_array)

Write ppp data to a CRSD file

write_pvp(channel_identifier, pvp_array)

Write pvp data to a CRSD file

write_signal(channel_identifier, signal_array)

Write signal data to a CRSD file

write_signal_compressed(signal_array)

Write signal data in compressed format to a CRSD file

write_support_array(...)

Write support array data to a CRSD file

See also

Reader

Examples

Generate some metadata and data

>>> import lxml.etree

>>> xmltree = lxml.etree.parse("data/example-crsd-1.0.xml")
>>> first_sequence = xmltree.find("{*}Data/{*}Transmit/{*}TxSequence")
>>> tx_id = first_sequence.findtext("{*}TxId")
>>> num_p = int(first_sequence.findtext("{*}NumPulses"))
>>> first_channel = xmltree.find("{*}Data/{*}Receive/{*}Channel")
>>> ch_id = first_channel.findtext("{*}ChId")
>>> num_v = int(first_channel.findtext("{*}NumVectors"))
>>> num_s = int(first_channel.findtext("{*}NumSamples"))
>>> sig_format = xmltree.findtext("{*}Data/{*}Receive/{*}SignalArrayFormat")

>>> import sarkit.crsd as skcrsd

>>> meta = skcrsd.Metadata(
...     xmltree=xmltree,
...     file_header_part=skcrsd.FileHeaderPart(additional_kvps={"K": "V"}),
... )

>>> import numpy as np

>>> sig = np.zeros((num_v, num_s), dtype=skcrsd.binary_format_string_to_dtype(sig_format))
>>> pvps = np.zeros(num_v, dtype=skcrsd.get_pvp_dtype(xmltree))
>>> ppps = np.zeros(num_p, dtype=skcrsd.get_ppp_dtype(xmltree))

Write a channel’s signal array and PVP arrays and a transmit sequence’s PPP array to a file.

>>> with (tmppath / "written.crsd").open("wb") as f, skcrsd.Writer(f, meta) as w:
...     w.write_signal(ch_id, sig)
...     w.write_pvp(ch_id, pvps)
...     w.write_ppp(tx_id, ppps)