fieldtrip, a tool for gui-less exploration of brain dynamics
DESCRIPTION
FieldTrip, a tool for GUI-less exploration of brain dynamics. Jan-Mathijs Schoffelen [email protected]. Powered by:. Purpose of this talk. Advertisement of FieldTrip of some of the scientific work done with FieldTrip. What is FieldTrip?. - PowerPoint PPT PresentationTRANSCRIPT
FieldTrip, a tool for GUI-less exploration
of brain dynamics
Jan-Mathijs Schoffelen
Purpose of this talk
Advertisement• of FieldTrip• of some of the scientific work done with FieldTrip
What is FieldTrip?
A MATLAB toolbox for electrophysiological data analysis
Features: high-level functions forelectrophysiological data analysis
Data reading
all commercial MEG systems, many different EEG systems
Preprocessing
filtering, segmenting
Time-locked ERF analysis
Frequency and time-frequency analysis
multitapers, wavelets, welch, hilbert, parametric spectral estimates
Features: high-level functions forelectrophysiological data analysis
Functional connectivity analysis
coherence, phase locking value, granger causality,
and many more
Source reconstruction
beamformers, dipole fitting, linear estimation
Statistical analysis
parametric, non-parametric, channel and source level
All other operations that are required around it
But…
X
Comparison with another well-known toolbox
SPM contra
buttonsmodel-based
GLM, DCM, bayesian model comparison
functionsdata-driven
Comparison with another well-known toolbox
SPMintra
Under the hood a lot of the code is shared
Features
Analysis steps are incorporated in functions
Using functions in an analysis protocol
preprocessingpreprocessing
rejectartifactrejectartifact
freqanalysisfreqanalysis
multiplotTFRmultiplotTFR freqstatisticsfreqstatistics
multiplotTFRmultiplotTFR
cfg = [ ]cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = preprocessing(cfg)
cfg = [ ]cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = preprocessing(cfg)
Typical functions
dataout = functionname(cfg, datain, …)
functionname(cfg, datain, …)
dataout = functionname(cfg)
the “cfg” argument is a configuration structure, e.g.:
cfg.channel = {‘C3’, C4’, ‘F3’, ‘F4’} cfg.foilim = [1 70]
and determines specific behaviour of the function
Features
Analysis steps are incorporated in functions
Data are represented in standard MATLAB structures
as small as possible
contain all relevant details
Raw data structure
rawData = label: {151x1 cell} trial: {1x87 cell} time: {1x87 cell} fsample: 300 hdr: [1x1 struct] cfg: [1x1 struct]
Event related response
erpData = label: {151x1 cell} avg: [151x900 double] var: [151x900 double] time: [1x900 double] dimord: 'chan_time’ cfg: [1x1 struct]
Features
Analysis steps are incorporated in functions
Data are represented in standard MATLAB structures
as small as possible
contain all relevant details
Data structures bind together analysis blocks
Using functions in an analysis protocol
preprocessingpreprocessing
rejectartifactrejectartifact
freqanalysisfreqanalysis
multiplotTFRmultiplotTFR freqstatisticsfreqstatistics
multiplotTFRmultiplotTFR
cfg = [ ]cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = freqanalysis(cfg, rawdata)
cfg = [ ]cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = freqanalysis(cfg, rawdata)
Features
Analysis steps are incorporated in functions
Data are represented in standard MATLAB structures
as small as possible
contain all relevant details
Data structures bind together analysis blocks
Easy to write new functions that operate on these data structures
Output of your own functions can be further processed or plotted with FieldTrip functions
Example use in scripts
cfg = []cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = ft_preprocessing(cfg)
cfg = []cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = ft_freqanalysis(cfg, rawdata)
cfg = []cfg.method = ‘montecarlo’cfg.statistic = ‘indepsamplesT’cfg.design = [1 2 1 2 2 1 2 1 1 2 ... ]...freqstat = ft_freqstatistics(cfg, freqdata)
……
Example use in scripts
cfg = []cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = ft_preprocessing(cfg)
cfg = []cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = ft_freqanalysis(cfg, rawdata)
cfg = []cfg.method = ‘montecarlo’cfg.statistic = ‘indepsamplesT’cfg.design = [1 2 1 2 2 1 2 1 1 2 ... ]...freqstat = ft_freqstatistics(cfg, freqdata)
……
Example use in scripts
cfg = []cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = ft_preprocessing(cfg)
cfg = []cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = ft_freqanalysis(cfg, rawdata)
cfg = []cfg.method = ‘montecarlo’cfg.statistic = ‘indepsamplesT’cfg.design = [1 2 1 2 2 1 2 1 1 2 ... ]...freqstat = ft_freqstatistics(cfg, freqdata)
……
Example use in scripts
cfg = []cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = ft_preprocessing(cfg)
cfg = []cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = ft_freqanalysis(cfg, rawdata)
cfg = []cfg.method = ‘montecarlo’cfg.statistic = ‘indepsamplesT’cfg.design = [1 2 1 2 2 1 2 1 1 2 ... ]...freqstat = ft_freqstatistics(cfg, freqdata)
Example use in scripts
cfg = []cfg.dataset = ‘Subject01.ds’cfg.bpfilter = [0.01 150]...rawdata = ft_preprocessing(cfg)
cfg = []cfg.method = ‘mtmfft’cfg.foilim = [1 120]...freqdata = ft_freqanalysis(cfg, rawdata)
cfg = []cfg.method = ‘montecarlo’cfg.statistic = ‘indepsamplesT’cfg.design = [1 2 1 2 2 1 2 1 1 2 ... ]...freqstat = ft_freqstatistics(cfg, freqdata)
Example use in scripts
subjlist = {‘S01.ds’, ‘S02.ds’, …}triglist = [1 3 7 9]
for s=1:nsubjfor c=1:ncond
cfg = [ ] cfg.dataset = subjlist{s} cfg.trigger = triglist(c) rawdata{s,c} = preprocessing(cfg)
cfg = [ ] cfg.method = ‘mtm’ cfg.foilim = [1 120] freqdata {s,c} = freqanalysis(cfg, rawdata)
endend
Example use in scripts
subjlist = {‘S01.ds’, ‘S02.ds’, …}triglist = [1 3 7 9]
for s=1:nsubjfor c=1:ncond
cfg = [ ] cfg.dataset = subjlist{s} cfg.trigger = triglist(c) rawdata{s,c} = preprocessing(cfg)
filename = sprintf(‘raw%s_%d.mat’, subjlist{s}, condlist(c)); save(filename, ‘rawdata’)
endend
Relevance of analysis scripts
the data and the separate functions are in the hands of the end-users
the scripts depend on the data properties, available memory and programming skills and style
scripts correspond to analysis protocolsscripts can be reviewed by supervisors
scripts are often shared with colleagues
FieldTrip private functions(low-level)
FieldTrip private functions(low-level)
FieldTrip main functions
end-user perspective
FieldTrip toolbox structure - at a glance
FieldTrip toolbox structure - a closer look
fileiofileio forwinvforwinv preprocpreproc privateprivate
FieldTrip main functions
end-user perspective
publicpublic
multivar.multivar.distrib.
comput.distrib.
comput.
FieldTrip toolbox structure - a closer look
fileiofileio forwinvforwinv preprocpreproc privateprivate
end-user perspective
preprocessingpreprocessing
dipolefittingdipolefitting
freqanalysisfreqanalysis sourcestatisticssourcestatistics
……
read_data(…)read_data(…) compute_leadfield(…)compute_leadfield(…)bandpassfilter(…)bandpassfilter(…)
distrib.comput.distrib.
comput.
publicpublic
multivar.multivar.
FieldTrip toolbox structure - a closer look
fileiofileio forwinvforwinv preprocpreproc privateprivate
FieldTrip main functions
end-user perspective
publicpublic
multivar.multivar.distrib.
comput.distrib.
comput.
FieldTrip toolbox - code reused in SPM8
fieldtripfieldtripfileiofileio forwinvforwinv
privateprivate
main functions publicpublicSPM8 main functions
with graphical user interface
SPM8 end-user perspective
preprocpreprocdistrib.
comput.distrib.
comput.
Why use FieldTrip?
contains many algorithms
demonstrated to be an effective tool for analyzing electrophysiological data
active user community
new methods contributed by others
collaboration with other packages
expertise from developers made accessible
expertise from other users made available
Network identification in non-invasive measurements
ROIPower MEG-coherenceCM-coherence
Network identification
all voxel combinations
Network identification
Who is hot....? ...and who is not?
Power
FWHM
Non-homogeneous maps
Simulations
• 2 dipoles in 2 conditions– correlated dipoles
– uncorrelated dipoles
• Reconstruct all-to-all bivariate correlation map with beamformers
• Non-homogeneous smoothing
• 6 dimensional gaussian kernel depending on FWHM– little smoothing for high activations
– more smoothing for low activations
• Many dipole pairs at various SNR etc.
Results: general effects
Results: hit rate
unsmoothed
smoothed
Results: false positives
Summary
• Identification of functionally connected nodes in a neural network based on non-invasive measurements
• Spurious connections / low sensitivity
• Non-homogeneous smoothing improves sensitivity
• …on simulated data
Do you want to give it a try yourself?
http://fieldtrip.fcdonders.nl/
Acknowledgements:
Monkey stuff-Conrado Bosman-Andre Bastos-Robert Oostenveld-Pascal Fries
Non-homogeneous smoothing-Joachim Gross