Data
This demo demonstrates understanding the core data structures in EegFun.jl and how to access and subset data.
Core Data Structures
ContinuousData:
Raw EEG time series from continuous recording
Contains electrode data, triggers, sampling rate, metadata
Used for preprocessing, filtering, artifact detection
EpochData:
Segmented trials around experimental events
Organized by experimental conditions
Vector of DataFrames (one per trial)
ErpData:
Averaged event-related potentials
One waveform per condition
Used for statistical analysis and plotting
Data Access Functions
all_data: Complete data including channels and metadata
channel_data: Only EEG channel columns
meta_data: Only metadata columns (time, sample, triggers, etc.)
extra_data: Derived/computed channels (EOG, artifacts, boolean flags, etc.)
Workflow Summary
This demo shows basic data operations:
Load and Structure Data
Load raw BioSemi data
Load electrode layout
Create ContinuousData structure
Access Data Components
Extract all data, channel data, and metadata
Understand different data access patterns
Create Epochs
Define epoch conditions around triggers
Extract segmented trials
Access epoch data with selection functions
Subset Data
Subset by channel selection (specific electrodes)
Subset by sample selection (time intervals)
Create smaller datasets for analysis
Code Examples
Show Code
# Demo: Data Manipulation
# Shows basic data access, subsetting, and manipulation functions.
using EegFun
# read raw data
dat = EegFun.read_raw_data("./resources/data/bdf/example1.bdf");
# read and preprate layout file
layout_file = EegFun.read_layout("./resources/layouts/biosemi/biosemi72.csv");
EegFun.polar_to_cartesian_xy!(layout_file)
# create EegFun data structure (EegFun.ContinuousData)
dat = EegFun.create_eegfun_data(dat, layout_file);
# data/channel access functions
EegFun.all_data(dat)
EegFun.meta_data(dat)
EegFun.channel_data(dat)
EegFun.extra_data(dat) # empty
# some epoched data
epoch_cfg = [EegFun.EpochCondition(name = "ExampleEpoch1", trigger_sequences = [[1]])]
epochs = EegFun.extract_epochs(dat, epoch_cfg, (-2, 4))
EegFun.all_data(epochs)
EegFun.all_data(epochs, epoch_selection = EegFun.epochs(1:2))
EegFun.meta_data(epochs)
EegFun.meta_data(epochs, epoch_selection = EegFun.epochs(1:2))
EegFun.channel_data(epochs)
EegFun.channel_data(epochs, epoch_selection = EegFun.epochs(1:2))
# We can subset out EegFun datatypes
dat_subset = EegFun.subset(dat, channel_selection = EegFun.channels([:Fp1, :Fp2])) # only Fp1 and Fp2
EegFun.all_data(dat_subset)
dat_subset = EegFun.subset(dat, sample_selection = x -> x.sample .<= 10_000) # first 10000 samples
EegFun.all_data(dat_subset)
dat_subset = EegFun.subset(dat, sample_selection = x -> x.time .<= 10) # first 10 seconds
EegFun.all_data(dat_subset)