Struct EasyReader

Source
pub struct EasyReader { /* private fields */ }
Expand description

Struct representing a reader for EEG data stored in .easy files.

This struct is responsible for parsing and storing the data from a .easy file, which may include EEG signals, accelerometer data, and associated markers. The struct loads the data from .easy and .easy.gz and optional .info files, provides methods for accessing the data, and tracks relevant metadata about the file, including the start date and number of channels.

Implementations§

Source§

impl EasyReader

Source

pub fn new(filepath: &str, scale: Float, verbose: bool) -> Result<Self>

Initializes a new EasyReader instance from the given file path.

Source

pub fn parse_data(&mut self) -> Result<()>

Reads and processes raw EEG and accelerometer data from the .easy file.

This method reads the .easy file (or the data section of it), converts the EEG data into microvolts (uV), and extracts time, accelerometer, and marker data. It stores the resulting data in the struct’s fields (e.g., np_eeg, np_time, np_acc, np_markers). It also logs key processing steps and ensures that the number of channels is consistent with the data found in the file.

§Returns
  • Ok(()) if the data was successfully read and processed.
  • Err(String) if there was an error reading or processing the file data. The error string provides details about the failure (e.g., column mismatches or data format issues).
§Details
  • The function expects the .easy file to have the following general format: EEG data followed by accelerometer data (if available), markers, and timestamps.
  • The EEG data is divided by channels, and the accelerometer data (if present) consists of three columns representing X, Y, and Z axes.
Source

pub fn stream<F>( &mut self, chunk_size: Option<usize>, process_chunk: F, ) -> Result<()>
where F: FnMut(Vec<Vec<Float>>, Vec<Vec<Float>>, Vec<Float>),

Reads and processes raw EEG and accelerometer data from the .easy file in a streaming manner.

This function reads the .easy file in chunks and processes each chunk as it is read. This approach helps to minimize memory usage when dealing with large files by avoiding the need to load the entire file into memory at once.

The function uses a callback (process_chunk) to handle each chunk of data. The callback is invoked after processing each chunk, and it receives the following data:

  • eeg_chunk: A Vec<Vec<f32>> representing a chunk of EEG data (one row per sample, one column per channel).
  • acc_chunk: A Vec<Vec<f32>> representing a chunk of accelerometer data (three values per sample: X, Y, Z).
  • markers_chunk: A Vec<f32> representing the marker data for each sample in the chunk.

The chunk size can be customized by passing a chunk_size value (in number of rows). If no chunk size is provided, the default chunk size will be 1000 rows.

§Parameters:
  • chunk_size: An optional parameter specifying the number of rows to process per chunk. If None is provided, the default chunk size will be 1000.
  • process_chunk: A callback function that takes three arguments: eeg_chunk, acc_chunk, and markers_chunk. This function will be called once a chunk is read and parsed.
§Returns:
  • Ok(()) if the data was successfully read and processed.
  • Err(String) if there was an error
Source

pub fn print_summary(&self)

Prints a summary of the EasyReader instance, displaying important metadata and previews of data.

This function outputs the file path, base name, extension, number of channels, EEG start date, and any log entries related to the processing steps. It also prints the first few rows of the EEG, accelerometer, and markers data, if available. This method avoids printing the entire datasets.

Trait Implementations§

Source§

impl Debug for EasyReader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.