Source code for piel.experimental.measurements.oscilloscope

from piel.types.experimental import OscilloscopeMeasurement
from piel.types import PathTypes
from piel.file_system import return_path, get_files_recursively_in_directory


[docs] def compose_oscilloscope_measurement( instance_directory: PathTypes, skip_missing: bool = False, **kwargs, ) -> OscilloscopeMeasurement: """ This function composes an OscilloscopeMeasurement from a given directory. The OscilloscopeMeasurement.waveform_file_list will be a collection of files that end with a suffix ``Ch*.csv``. This function will compose the list of files in the order of the channel number. The OscilloscopeMeasurement.measurements_file will be a file that ends without a suffix ``Ch*.csv``. """ instance_directory = return_path(instance_directory) waveform_file_list = [] measurements_file = "" # List all files in the directory all_files = get_files_recursively_in_directory( extension="csv", path=instance_directory ) # Separate waveform files (with Ch*.csv) from the measurements file for file in all_files: file = return_path(file) if "Ch" in file.stem: waveform_file_list.append(file) else: if measurements_file == "": measurements_file = file elif not skip_missing: raise ValueError( "Multiple measurement files found without a channel suffix." ) # Sort waveform files by channel number (assumes format ChX.csv where X is the channel number) waveform_file_list.sort(key=lambda f: int(f.stem.split("Ch")[-1])) # Handle missing measurement file if required if not measurements_file and not skip_missing: raise FileNotFoundError("No measurements file found without a channel suffix.") return OscilloscopeMeasurement( parent_directory=instance_directory, waveform_file_list=waveform_file_list, measurements_file=measurements_file, **kwargs, )