[FieldTrip] Problems with Dipole Fitting
tkietzma at uos.de
Mon Jan 28 17:03:47 CET 2013
Dear Mailing List,
I am currently trying to use the ft_dipolefitting function to localize the source of a visually evoked response, and to use the dipole time-course to test for effects in source space. Along the way, however, a few questions and problems arose, which I was not yet able to solve despite excessive trying, reading and googling. Some of the questions are technical, others are more general. Please note that I am new to fieldtrip and source localization, so please excuse the potentially stupid ones.
The general setup is that we have collected data using a CTF275 system, looking at visually evoked responses (we are showing drawings of faces). The data is cleaned already and we have a structural MRI scan for every subject, which we can use for individual headmodels (I use singleshell, and the models look perfectly fine). As every trial also contained a button-press I first fitted dipoles locked to this button-press as a sanity check. This worked nicely for all subjects. However, I am now looking into the visually evoked responses. This has given me a lot of trouble (see below).
Here is the code I use for the actual fit:
cfg.symmetry = 'y'; %I use this, as I expect bilateral visual activations
cfg.latency = [.1 .12];
cfg.vol = subvol_singleshell; %volume conduction model for the subject
cfg.model = 'regional';
[source] = ft_dipolefitting(cfg, ERF_all);
Question 1: Dipole Time Courses
To look at the individual time-courses of the dipoles I follow http://mailman.science.ru.nl/pipermail/fieldtrip/2011-April/003690.html and http://mailman.science.ru.nl/pipermail/fieldtrip/2012-May/005215.html. The returned dipole information in dip.pos is 2x3 (two dipoles, three dimensions), so I can easily pick the position of each of the two dipoles. The dip.mom, however has size 6x13. Is it correct that the first three values of source.dip.mom correspond to the first dipole, and 4:6 to the second dipole? That is, to show the two activations, can I do the following?
dip = source.dip.pos(dip_select,:);
[u,s,v] = svd(source.dip.mom((1:3)+(dip_select-1)*3,:));
[vol, grad] = ft_prepare_vol_sens(subvol_singleshell, ERF_all.grad, 'channel', ERF_all.label);
L = ft_compute_leadfield(dip, grad,vol,'reducerank',2); % leadfield
Li = pinv(L); % pseudoinverse of L
%check which orientation the dipole is in
orientation_vector = u(:,1)';
Qn = double(orientation_vector/norm(orientation_vector)); % normed orientation vector
Qn = repmat(Qn,length(Li),1)'; % make Qn the same size as Li
W = dot(Li,Qn)'; % weights for projection to source space
waveform = dot(ERF_all.avg,repmat(W,1,size(ERF_all.avg,2))); % source waveform
Given this is correct, I noticed in the resulting waveforms that only one of the two dipoles shows a clear activation, whereas the other seems to cover mostly remaining noise. However, based on the perfectly symmetric topography of the activation and given this is a visual response (the M100), I would expect both hemispheres (and therefore both dipoles) to be activated. In fitting the dipole location and moment, is there some sort of regularization, which prefers one strong dipole over two equally active dipoles? Any ideas on this?
Question 2: ICA topographies as basis for the fit
Given I had quite some problems with the reliability of the fits when using the sensor data, I also tried fitting the dipoles to selected ICA components (namely the ones which explain most of the variance across sensors at a given time-point, the comp structure is given as is from ft_componentanalysis). This, however, lead to the following warning/error:
cfg.component = ;
cfg.vol = subvol_singleshell;%volume conduction model
cfg.model = 'regional';
[source] = ft_dipolefitting(cfg, comp);
the input is component data with 271 components and 271 original channels
using headmodel specified in the configuration
using gradiometers specified in the data
computing surface normals
selected 0 channels
selected 1 topographies
Warning: not enough channels to perform a dipole fit
I am sure this is a simple mistake, but could not yet successfully solve it. Could it have to do with the fact that the comp structure has a comp.topolabel the original sensor labels, and as comp.label the ICA labels ('runica001' ..)?
Question 3: Sensor Averaging
Since all else failed, I wanted to use the average gradient position across subjects together with the MNI standard brain to find the dipoles based on the Grand Average activation. Here, I would like to use the ft_average_sens function. However, I have the problem that different subjects were recorded with slightly different numbers of sensors (some with 271 sensors, some with 273). Because of this, the ft_average_sens function throws an error. Is there a way to select a subset of sensors from the grad structure such that I only use the sensors which were present for all subjects?
Question 4: Stability of the Fit
The toughest and most general question at last: I noticed that the solutions I get from ft_dipolefitting are not very robust. For instance, I get vastly different dipole locations with only subtle changes in the selected time-points. Moreover, although subjects show a clear M100 in sensor space, the dipole locations for some of them are extremely far off (if not to say in the middle of nowhere). Are there certain methods, tricks or tutorials I can look into to get things more robust?
I am truly sorry to have so many questions, but any help is highly appreciated! I look very much forward to hearing from you
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the fieldtrip