[FieldTrip] SAM gareth method without depth biased weights
adonay.s.nunes at gmail.com
Thu Oct 19 23:41:53 CEST 2017
I have an issue with Fieltrip SAM beamformer 'gareth' method.
As a sanity check I look that the BF weight distributions are biased
towards the center. I check this distribution with the leadfields and with
the BF weights from LCMV and SAMs methods. Gareth method does not have this
distribution, the weight sizes are scattered across the brain and the norm
of the weights can have up to 11 orders of magnitude of difference.
First I make sure that the 1/Leadfield are also biased towards the center:
- for every LF I take the norm of every column and 1/mean of the norms is
- the code is:
LF_norm = ;
for s= 1:size(LF, 1)
n1 = norm(squeeze(LF(s, 1, :)));
n2 = norm(squeeze(LF(s, 2, :)));
n3 = norm(squeeze(LF(s, 3, :)));
LF_norm(s) =1/mean([n1, n2, n3]);
When interpolated to the mri and plotted looks fine.
Then I run SAM robert method:
cfg = ;
cfg.method = 'sam';
cfg.grid = lf;
cfg.vol = headmodel;
cfg.grad = data.grad;
cfg.fixedori = 'robert';
cfg.keepfilter = 'yes';
cfg.keepori = 'yes';
cfg.projectnoise = 'yes';
cfg.senstype = 'MEG';
SAM1_filter = ft_sourceanalysis(cfg, timelock);
and take the norm for every BF weight:
and then I interpolate it to the mri for visualization. The results look
fine, weights biased towards the center and the min and max norm weight are
two orders of magnitude difference. The mean of the absolute of the weights
norm is in the order of 10e9 and the smallest and highest weight norm are
to the order of e8 and e10
If I do the same as the last step but changing to:
cfg.fixedori = 'gareth';
Then the weights are not biased towards the center. The mean of the
absolute of the weights norm is in the order of 10e16 and the smallest and
highest weight norm are to the order e8 and e19, respectively.
Thus, gareth method does not have a center biased weight distribution and
the max and miminum norm weights have 11 orders of magnitude of difference,
meaning that these orders are reflected in the amplitude of the
reconstructed time series.
To make it handy the difference between gareth and robert methods are:
L is the leadfield for a given source.
Y1 = L' * inv_cov * L;
Y2 = L' * (inv_cov * inv_cov) * L;
[U,S] = eig(Y2,Y1);
[U,S] = svd(real(pinv(L' * inv_cov * L)));
Then both methods compute 2 of the orientations and choose the salient one:
ori1 = U(:,1); ori1 = ori1/norm(ori1);
ori2 = U(:,2); ori2 = ori2/norm(ori2);
L1 = L * ori1;
L2 = L * ori2;
if (norm(L1)/norm(L2)) < 1e-6
opt_vox_or = ori2;
opt_vox_or = ori1;
The difference comes from the way orientations are computed, after the
weights calculation is the same for both.
I tried with different units, i.e. meters, cm, mm but this abnormalities is
Does anybody know what can be the cause?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the fieldtrip