LFP/ECP Analysis
This module provides tools for analyzing Local Field Potentials (LFP) and Extracellular Potentials (ECP) from BMTK simulations.
Loading and Processing LFP/ECP Data
import numpy as np
import xarray as xr
from bmtool.analysis.lfp import load_ecp_to_xarray, ecp_to_lfp, slice_time_series
# Load ECP data
ecp_data = load_ecp_to_xarray('output/ecp.h5', demean=True)
# Convert ECP to LFP with filtering
lfp_data = ecp_to_lfp(
ecp_data=ecp_data,
cutoff=250, # Cutoff frequency in Hz
fs=10000 # Sampling frequency in Hz
)
# Slice data to specific time range
lfp_slice = slice_time_series(lfp_data, time_ranges=(500, 1500))
Spectral Analysis
Analyze frequency content using wavelets and FOOOF:
from bmtool.analysis.lfp import (
cwt_spectrogram_xarray,
fit_fooof,
generate_resd_from_fooof
)
import matplotlib.pyplot as plt
# Calculate wavelet spectrogram
spectrogram = cwt_spectrogram_xarray(
x=lfp_slice.sel(channel=0).data,
fs=10000,
freq_range=(1, 100),
nNotes=8
)
# Calculate power spectrum and fit FOOOF model
from scipy import signal
# Calculate power spectrum
freqs, pxx = signal.welch(lfp_data.sel(channel=0).data, fs=10000, nperseg=4096)
# Fit FOOOF model
fooof_model = fit_fooof(
f=freqs,
pxx=pxx,
freq_range=[1, 100],
peak_width_limits=[1, 8],
max_n_peaks=6
)
# Get residuals between original spectrum and aperiodic fit
resid_spectra, idx_freqs = generate_resd_from_fooof(fooof_model)
Filtering and Signal Processing
Apply various filters to LFP/ECP data:
from bmtool.analysis.lfp import butter_bandpass_filter, wavelet_filter, calculate_SNR
# Band-pass filter
filtered_signal = butter_bandpass_filter(
data=lfp_data.sel(channel=0).data,
lowcut=30,
highcut=80,
fs=10000
)
# Wavelet filter centered at specific frequency
gamma_filtered = wavelet_filter(
x=lfp_data.sel(channel=0).data,
freq=40, # Center frequency in Hz
fs=10000, # Sampling rate
bandwidth=10 # Bandwidth in Hz
)
# Calculate signal-to-noise ratio
snr = calculate_SNR(fooof_model, freq_band=(30, 80))
print(f"Signal-to-noise ratio in gamma band: {snr}")