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)