Source code for piel.analysis.signals.time.core.dimension
import numpy as np
from piel.types import TimeSignalData, Unit
import logging
logger = logging.getLogger(__name__)
[docs]
def resize_data_time_signal_units(
waveform: TimeSignalData,
time_unit: Unit,
data_unit: Unit,
corrected_name_suffix: str = "_corrected",
) -> TimeSignalData:
"""
Applies unit corrections to the time and data arrays of a TimeSignalData object.
Parameters:
- waveform: The original waveform data.
- time_unit: The unit to apply to the time axis.
- data_unit: The unit to apply to the data.
- corrected_name_suffix: Suffix to append to the data name after correction.
Returns:
- A new TimeSignalData object with corrected time and data.
"""
# Convert time and data to NumPy arrays for efficient computation
time_array = np.array(waveform.time_s, dtype=float)
data_array = np.array(waveform.data, dtype=float)
# Apply time correction if time_unit is a Unit instance
if isinstance(time_unit, Unit):
if time_unit.base != 1:
logger.debug(
f"Data correction of 1/{time_unit.base} from unit definition '{time_unit}' will be applied on the time axis."
)
corrected_time = time_array / time_unit.base
else:
corrected_time = time_array
else:
# If time_unit is not a Unit instance, assume no correction
corrected_time = time_array
# Apply data correction if data_unit is a Unit instance
if isinstance(data_unit, Unit):
if data_unit.base != 1:
logger.debug(
f"Data correction of 1/{data_unit.base} from unit definition '{data_unit}' will be applied on the data."
)
corrected_data = data_array / data_unit.base
else:
corrected_data = data_array
else:
# If data_unit is not a Unit instance, assume no correction
corrected_data = data_array
# Append the suffix to the data name
corrected_data_name = f"{waveform.data_name}{corrected_name_suffix}"
# Create and return the corrected waveform
return TimeSignalData(
time_s=corrected_time.tolist(), # Convert back to list if necessary
data=corrected_data.tolist(),
data_name=corrected_data_name,
)