Hi,
I'm stuck on where to go next and would appreciate some help.
Here is what I have done so far:
1) wrote a spm_eeg_rdata function for my data, using the
meeg_read_data.m from the example scripts folder as a guide, and
converted them to SPM-EEG format.
2) used create_fid_files.m from the tex file for the manual to create
the fid files.
3) used the spm_eeg_inv_help.m script that is embedded in the help
page for the 3D source reconstruction function to process the 3D images.
This procedure resulted in nifti files corresponding to each
condition of each subject. Although the script terms them
"contrasts" I took it that they are not the first-level contrasts
since there is one for each condition and no condition contrasts have
been specified yet. When I tried to input these files into the 1st-
level I got the error message that "can't add: new file has 0 time
points, selected have 0". Using the debug mode, I found that the
reason that spm_eeg_firstlevel_checkfile.m is flagging an error is
that the dimensionality of the nifti image is [91 109 91] and thus
does not have a fourth dimension. This in turn is causing the error
message.
Looking at the manual, I see that perhaps this is indeed supposed to
be generating the 1st level contrasts, so perhaps that is why these
files are not being accepted as inputs for the 1st level analysis.
It states, for example, that one of the factors in the first level
analysis is time, which is what the spm_eeg_inv_help.m script seems
to process. However, the manual also discusses specifying the
condition contrasts and so forth but this script does not seem to do
this. Looking at the spm_eeg_inv_results.m function, I only see
references to specifying "time (ms) window of interest" and
"frequency window of interest" I also looked at the code of
spm_eeg_firstlevel.m function but found it difficult to interpret
since it relies heavily on function handles.
I then went through the GUI for 3D reconstruction in order to try to
determine how it is supposed to work. With this approach I also was
not asked about condition contrasts and the resulting nifti image
also did not work as an input for the 1st level analysis.
It is possible that one is supposed to handle the condition contrasts
at the second level but it functions in the same manner as the fMRI
analyses, only conducting a t-test.
Going to the manual regarding this topic of condition contrasts, it
does not seem to correspond to what I am seeing on the control
panel. For example:
----------
14.3.2 Start
Start SPM by the command ’spm eeg’ from the matlab command line.
Press the EEG/MEG
button. Your first choice is to either specify the model design or
the input data. One always
starts with the design. Currently, there are two design options: (i)
all options and (ii) ERP/ERF.
The latter option is a shortcut to quickly input an evoked responses
study. We will first describe
all options and then treat the ERP/ERF option as a special case.
-------
when I type ’spm eeg’, there is no EEG/MEG button and I have not been
able to find a control that provides an option to specify the model
design. I'm using r748 of SPM5 using Matlab 7.3 on OS X 10.4.9.
Can anyone help me with this? Thanks for any help you can give me!
Joe
sensorFile='sensors_orig.mat';
fidEEGFile='fid_eeg.mat';
[files,dirs]=spm_select('List',pwd,'^mae.*\.mat$');
for theFile=1:size(files,1)
Fname=fullfile(pwd, files(theFile,:));
% This script constitutes both a help script and a batch script
that can be
% modified for automatic source reconstruction or EEG-MEG model
inversion.
% It details how fields are specified and routines are called to
generate a
% processing stream from the trial-averaged data structure to a
smoothed
% contrast or window image for subsequent between subject analyses.
% Load data and specify which the inversion number
%
========================================================================
==
% We start with loading the data structure D. Each inversion is
stored in the
% structure array D.inv. The current inversion is indexed by
D.val; here we
% will assume we want to specify and invert a second model. We
will also
% assume that EEG data is being analysed (this simplifies the
registration
% step below.
%-----------------------------------------------------------------------
---
D = spm_eeg_ldata(Fname);
val = 1;
D.val = val;
D.modality = 'EEG';
D.inv{val}.method = 'Imaging';
% Compute a head model
%
========================================================================
==
% The next step is to define the head model in terms of s
structural MRI (sMRI)
% This is not necessary if you are happy using a standard head
model supplied
% with SPM. We will assume this analysis is going to use a
standard model, so
% the normalisation and mesh routines are commented out in this
script
%-----------------------------------------------------------------------
---
% specify cortical mesh size (1 tp 4; 1 = 3004, 4 = 7204 dipoles)
%-----------------------------------------------------------------------
---
D.inv{val}.mesh.Msize = 2;
% spatial normalization into a MNI template
%-----------------------------------------------------------------------
---
% D.inv{val}.mesh.sMRI = '??????????.img'
% D = spm_eeg_inv_spatnorm(D);
% and compute meshes
%-----------------------------------------------------------------------
---
% D = spm_eeg_inv_meshing(D);
% or, use a template head model and associated meshes
%-----------------------------------------------------------------------
---
D = spm_eeg_inv_template(D);
% Compute a head model
%
========================================================================
==
% Next, we need to register the sensor locations to the head
model meshes.
% This requires one to specify mat files describing the location
of the sensors
% and supplementary information about the cortical surface,
which is in the
% same frame of reference. The simplest way to do this is to
use a Polhemus
% file that contains both the locations of the fiducials and
sensor locations.
% To keep things simple, we will assume that we are analysing
EEG. In this
% case, the sensor locations also define the scalp surface and
can be uses in
% the registration to the head model.
%-----------------------------------------------------------------------
---
% get fiducials and head shape
%-----------------------------------------------------------------------
---
sensors = load(sensorFile);
fid_eeg = load(fidEEGFile);
name = fieldnames(sensors);
sensors = getfield(sensors,name{1});
name = fieldnames(fid_eeg);
fid_eeg = getfield(fid_eeg,name{1});
headshape = sparse(0,3);
% get sensor locations
%-----------------------------------------------------------------------
---
D.inv{val}.datareg.sensors = sensors;
D.inv{val}.datareg.fid_eeg = fid_eeg;
D.inv{val}.datareg.headshape = headshape;
D.inv{val}.datareg.megorient = sparse(0,3);
% register data
%-----------------------------------------------------------------------
---
D = spm_eeg_inv_datareg(D);
% Compute a forward model
%
========================================================================
==
% Next, using the geometry of the head model and the location of
registered
% sensors, we can now compute a forward model for each dipole
and save it in a
% lead-field or gain matrix. This is the basis of our
likelihood model.
%-----------------------------------------------------------------------
---
D.inv{val}.forward.method = 'eeg_3sphereBerg';
D = spm_eeg_inv_BSTfwdsol(D);
% Invert the forward model
%
========================================================================
==
% Next, we invert the forward model using the trials or
conditions of interest,
% specified in the field 'trials'. The full model needs
specifying in terms
% of its priors, through the fields below.
%-----------------------------------------------------------------------
---
D.inv{val}.inverse.trials = [1 2]; % Trials
D.inv{val}.inverse.type = 'MSP'; % Priors on sources MSP,
LOR or IID
D.inv{val}.inverse.smooth = 0.4; % Smoothness of source
priors (mm)
D.inv{val}.inverse.Np = 64; % Number of sparse
priors (x 1/2)
% We can also restrict solutions to bilateral spheres in source
space
%-----------------------------------------------------------------------
---
%D.inv{val}.inverse.xyz = [-48 0 0;
% 48 0 0]; % x,y,z and radius (mm)
%D.inv{val}.inverse.rad = [ 32 32];
% and finally, invert
%-----------------------------------------------------------------------
---
D = spm_eeg_invert(D);
% Compute conditional expectation of root mean square (RMS)
response
%
========================================================================
==
% The penultimate step is to specify a time-frequency window and
compute the
% conditional expectation of the RMS response. A simple
windowed average
% is a special case of this, where the frequency is zero. In
this context,
% the RMS is the same as the absolute value of the time-averaged
repsone.
% set time-frequency window
%-----------------------------------------------------------------------
---
D.inv{val}.contrast.woi = [350 450]; % peristimulus time (ms)
D.inv{val}.contrast.fboi = [0]; % frequency window (Hz)
% and evaluate contrast
%-----------------------------------------------------------------------
---
D = spm_eeg_inv_results(D);
% Convert mesh data into an image for further analysis
%
========================================================================
==
% Finally, write the smoothed contrast to an image in voxel
space. The file
% name will correspond to the data name and current inversion
(i.e., D.val)
%-----------------------------------------------------------------------
---
D.inv{D.val}.contrast.smooth = 12; % FWHM (mm)
D.inv{D.val}.contrast.display = 0;
D = spm_eeg_inv_Mesh2Voxels(D);
end;
------------------------------------------------------------------------
--------
Joseph Dien
Assistant Professor of Psychology
Department of Psychology
419 Fraser Hall
1415 Jayhawk Blvd
University of Kansas
Lawrence, KS 66045-7556
E-mail: [log in to unmask]
Office: 785-864-9822 (note: no voicemail)
Fax: 785-864-5696
http://people.ku.edu/~jdien/Dien.html
|