Basic Usage¶
A collection of examples showing the basics of how to use tm_data_types in a
project.
Write Data¶
tm_data_types can be used for writing data to a file using write_file().
"""An example of how to read and write using the tm_data_types module."""
import os
import shutil
import numpy as np
from tm_data_types import (
AnalogWaveform,
AnalogWaveformMetaInfo,
write_file,
write_files_in_parallel,
)
if __name__ == "__main__":
WAVEFORM_DIR = "example_waveforms"
if os.path.exists(os.path.join(os.getcwd(), WAVEFORM_DIR)):
shutil.rmtree(WAVEFORM_DIR)
os.mkdir(WAVEFORM_DIR)
values_1 = np.array([10, 11, 12, 32222, 32223, 32224, 55, 56, 57], dtype=np.int16)
analog_meta_info_1 = AnalogWaveformMetaInfo()
waveform_1 = AnalogWaveform()
waveform_1.meta_info = analog_meta_info_1
waveform_1.y_axis_values = values_1
waveform_1.y_axis_extent_magnitude = 1.0
waveform_1.y_axis_offset = 0.1
file_path_1 = f"{os.getcwd()}\\{WAVEFORM_DIR}\\write_example_serial.wfm"
write_file(file_path_1, waveform_1)
values_2 = np.array([15, 16, 17, -10000, -10001, -10002, 156, 157, 158], dtype=np.int16)
analog_meta_info_2 = AnalogWaveformMetaInfo()
waveform_2 = AnalogWaveform()
waveform_2.meta_info = analog_meta_info_2
waveform_2.y_axis_values = values_2
waveform_2.y_axis_extent_magnitude = 1.0
waveform_2.y_axis_offset = 0.1
file_path_2 = f"{os.getcwd()}\\{WAVEFORM_DIR}\\write_example_parallel_1.wfm"
file_path_3 = f"{os.getcwd()}\\{WAVEFORM_DIR}\\write_example_parallel_2.wfm"
waveform_list = [waveform_1, waveform_2]
file_path_list = [file_path_2, file_path_3]
write_files_in_parallel(file_path_list, waveform_list)
Type Conversion and Normalization of Data¶
tm_data_types can be used for type conversion and normalization of analog waveform data.
"""This script demonstrates type conversion and normalization of analog waveform data."""
import numpy as np
from tm_data_types import AnalogWaveform, AnalogWaveformMetaInfo, Normalized, RawSample
from tm_data_types.datum.data_types import type_max, type_min
from tm_data_types.helpers.byte_data_types import Float, Long, LongLong, Short
if __name__ == "__main__":
values_int8 = RawSample(np.array([1, 2, 4, 8, 16, 32, 64, 127], dtype=np.int8))
analog_meta = AnalogWaveformMetaInfo()
waveform_int8 = AnalogWaveform()
waveform_int8.meta_info = analog_meta
waveform_int8.y_axis_values = values_int8
waveform_int8.y_axis_extent_magnitude = 1.0
waveform_int8.y_axis_offset = 0.1
waveform_int16 = waveform_int8.transform_to_type(as_type=np.int16)
assert all(
np.isclose(
waveform_int8.normalized_vertical_values,
waveform_int16.normalized_vertical_values,
atol=0.0015,
),
)
values_int16 = RawSample(values_int8, as_type=Short)
values_int32 = RawSample(values_int8, as_type=Long)
values_int64 = RawSample(values_int8, as_type=LongLong)
values_float32 = RawSample(values_int8, as_type=Float)
normalized_values_int8 = Normalized(
values_int8,
spacing=1 / (type_max(np.int8) - type_min(np.int8)),
offset=0.0,
)
normalized_values_int16 = Normalized(
values_int16,
spacing=1 / (type_max(np.int16) - type_min(np.int16)),
offset=0.0,
)
normalized_values_int32 = Normalized(
values_int32,
spacing=1 / (type_max(np.int32) - type_min(np.int32)),
offset=0.0,
)
normalized_values_int64 = Normalized(
values_int64,
spacing=1 / (type_max(np.int64) - type_min(np.int64)),
offset=0.0,
)
normalized_values_float32 = Normalized(
values_float32,
spacing=1 / (type_max(np.float32) - type_min(np.float32)),
offset=0.0,
)
assert any(
np.isclose(
normalized_values_int8,
normalized_values_int16,
atol=0.0015,
),
)
Write Analog Waveform to CSV file¶
tm_data_types can be used to write an analog waveform to a CSV file using the WaveformFileCSVAnalog class.
"""This script demonstrates writing an analog waveform to a CSV file."""
import os
import shutil
import numpy as np
from tm_data_types import AnalogWaveform, AnalogWaveformMetaInfo
from tm_data_types.files_and_formats.csv.data_formats.analog import WaveformFileCSVAnalog
if __name__ == "__main__":
WAVEFORM_DIR = "example_waveforms"
if os.path.exists(os.path.join(os.getcwd(), WAVEFORM_DIR)):
shutil.rmtree(WAVEFORM_DIR)
os.mkdir(WAVEFORM_DIR)
values = np.array([10, 11, 12, 32222, 32223, 32224, 55, 56, 57], dtype=np.int16)
analog_meta_info = AnalogWaveformMetaInfo()
waveform = AnalogWaveform()
waveform.meta_info = analog_meta_info
waveform.y_axis_values = values
waveform.y_axis_extent_magnitude = 1.0
waveform.y_axis_offset = 0.1
file_path = f"{os.getcwd()}\\{WAVEFORM_DIR}\\write_example_serial.csv"
with WaveformFileCSVAnalog(file_path, "w") as fd:
fd.write_datum(waveform)