Skip to content

igmmgi/EegFun.jl

Repository files navigation

Dev CI License: MIT Julia 1.12+ Status: Alpha

EegFun.jl

EegFun Logo

A Julia package for EEG/ERP data analysis and visualization. Currently under active development.

Documentation

View the full documentation →

The documentation includes:

  • Installation instructions and getting started guide
  • Tutorials and Demos
  • Complete API reference

Installation

You can install EegFun.jl through the standard Julia package manager.

Standard Installation

From the Julia REPL, enter Pkg mode by pressing ] and run:

add EegFun

Or using Pkg in the code:

using Pkg
Pkg.add("EegFun")

Development Version (vía GitHub)

To install the latest development version directly from GitHub:

using Pkg
Pkg.add(url="https://github.com/igmmgi/EegFun.jl")

Features

  • EEG/ERP Analysis
  • EEG/ERP Interactive Plots (via Makie.jl)
  • Time-Frequency Analysis
  • Raw data to full ERP batch preprocessing pipelines

Showcase

Data Browser

Show Code
using EegFun

# raw data file and channel coordinates
dat = EegFun.read_raw_data("my_raw_file.bdf");
layout_file = EegFun.read_layout("my_layout.csv");
EegFun.polar_to_cartesian_xy!(layout_file)

# Julia EegFun type
dat = EegFun.create_eegfun_data(dat, layout_file);

EegFun.plot_databrowser(dat);

Data Browser

ICA Data Browser

Show Code
using EegFun

# raw data file and channel coordinates
dat = EegFun.read_raw_data("my_raw_file.bdf");

layout_file = EegFun.read_layout("my_layout.csv");
EegFun.polar_to_cartesian_xy!(layout_file)

dat = EegFun.create_eegfun_data(dat, layout_file);

# rereference data and apply 1Hz high-pass filter for ICA
EegFun.rereference!(dat, :avg)
EegFun.highpass_filter!(dat, 1)

# calculate EOG channels
EegFun.channel_difference!(
    dat,
    channel_selection1 = EegFun.channels([:Fp1, :Fp2]),
    channel_selection2 = EegFun.channels([:IO1, :IO2]),
    channel_out = :vEOG,
); # vertical EOG = mean(Fp1, Fp2) - mean(IO1, I02)
EegFun.channel_difference!(
    dat,
    channel_selection1 = EegFun.channels([:F9]),
    channel_selection2 = EegFun.channels([:F10]),
    channel_out = :hEOG,
); # horizontal EOG = F9 - F10

# detect some extreme values
EegFun.is_extreme_value!(dat, 200);

# ICA on continuous data without extreme values
ica_result = EegFun.run_ica(dat; sample_selection = EegFun.samples_not(:is_extreme_value_200)) 

EegFun.plot_ica_component_activation(dat, ica_result)

ICA Component Activation

Plot Gallery

Epochs (Grid Layout) ERP (Topo Layout)
Epochs Grid Layout ERP Topo Layout
ICA Component Topographies ICA Component Spectra
ICA Component Topographies ICA Component Spectra
ERP Measurement GUI ERP Filter GUI
ERP Measurement GUI ERP Filter GUI
Time-Frequency Analysis Triggers
Time-Frequency Analysis Triggers
Plot GUI Artifact Detection
Plot GUI Artifact Detection
More Plot Examples
Artifact Detection Artifact Detection
ERP Image (Topo Layout) ERP Image Topo Layout
Epoch Plots (Grid Layout) Epochs Grid Layout
ERP (Topo Layout) ERP Topo Layout

About

EEG Analysis

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages