# [FieldTrip] plotting interpolated sources with ft_sourceplot

"Jörn M. Horschig" jm.horschig at donders.ru.nl
Mon Mar 31 16:56:57 CEST 2014

```Hi Tyler,

yes, it seems like something went wrong in the computation of your
forward model. Usually, your source structure should have a .dim field,
specifying the dimensions of your .pos matrix. The pos-matrix has to be
a regular 3D grid, i.e. be representable as a 3x3x3 matrix. I am not
quite sure how the sourceinterpolate function is handeling the fact that
you do not have that .dim field. Apparently, it is also confused ;)

Do you want to reconstruct only some voxels? From your code it seems
that you want to cover the whole brain with a 1cm resolution. If the
following the tutorial that I posted in my previous mail. There are some
sanity checks that can help you figuring out if you are doing the
correct thing. If the former one is the case, please explain again what
exactly you want to achieve and how you are building your forward model.

Best,
Jörn

btw, there's nothing wrong with being a PhD student, it's just a matter
of experience in practice and theory as in all domains in life ;)

On 3/31/2014 3:15 PM, Tyler Grummett wrote:
> Hey Jorn,
>
> Yes I am definitely confused haha, this stuff is way out of my league as a PhD student.
> Anyway, I feel we are getting somewhere.
>
> timelock =
>
>         avg: [121x19767 double]
>         var: [121x19767 double]
>        time: [1x19767 double]
>         dof: [121x19767 double]
>       label: {1x121 cell}
>      dimord: 'chan_time'
>         cov: [121x121 double]
>        elec: [1x1 struct]
>         cfg: [1x1 struct]
>
> source =
>
>         time: [1x19767 double]
>          pos: [642x3 double]
>       inside: [642x1 double]
>      outside: []
>       method: 'average'
>          avg: [1x1 struct]
>          cfg: [1x1 struct]
>
> sourceInt =
>
>          time: [1x19767 double]
>           avg: [1x1 struct]
>           pos: [16777216x3 double]
>           dim: [256 256 256]
>        inside: [1x16777216 double]
>       outside: [1x0 double]
>      coordsys: 'ctf'
>          unit: 'mm'
>           cfg: [1x1 struct]
>
> Given what I said last time, I might not comment on the differences. I hope you can see something wrong.
>
> One thing I should mention is that the data is continuous, around 30 seconds. Therefore there is only one trial,
> is that an issue?
>
> Tyler
>
> *************************
>
> Tyler Grummett ( BBSc, BSc(Hons I))
> PhD Candidate
> Brain Signals Laboratory
> Flinders University
> Rm 5A301
> Ext 66124
>
> ________________________________________
> From: fieldtrip-bounces at science.ru.nl <fieldtrip-bounces at science.ru.nl> on behalf of "Jörn M. Horschig" <jm.horschig at donders.ru.nl>
> Sent: Monday, 31 March 2014 10:24 PM
> To: FieldTrip discussion list
> Subject: Re: [FieldTrip] plotting interpolated sources with ft_sourceplot
>
> Hi Tyler,
>
> there is not much inherently different between time- and
> freuqency-domain beamformer, at least in terms of computing the forward
> and the inverse solution. But I see that you are obviously confused, so
> let me try to help you out and shed some light on what you are actually
> doing ;)
>
>
>> I had a look at my variables.
>>
>> source.avg =
>>
>>          pow: [642x1 double]
>>       filter: {642x1 cell}
>>
>> sourceInt.avg =
>>
>>       pow: [16777216x1 double]
>>
>> So clearly, as both variables are completely different. Something has gone wrong.
> No, that is actually how it should be. From below you can see that your
> MRI has 3-dimensions, each with 256 elements, that is 256*256*256 =
> 16777216 elements. In line with source.avg.pow, you should see that your
> 'grid' consists of 642 elements, so you were computing your source
> activity on a grid of in total 642 elements. Then you used the original
> MRI to interpolate from 642 to these 16 million grid points. Actually,
> since you specific cfg.downsample = 2, it should have been only 8
> million points, so that's where things already get a bit weird.
>
> So let's go into some sanity checks:
> 1. are you using the latest version (or a recent, i.e. from this year)
> of FielTrip?
> 2. sourceInt should look something like this, does it?
>
> source_diff_int =
>          inside: [46x55x46 logical]
>             avg: [1x1 struct]
>             dim: [46 55 46]
>       transform: [4x4 double]
>         anatomy: [46x55x46 double]
>            unit: 'mm'
>             cfg: [1x1 struct]
>
>
>
> 3. source should look something like this:
>
> source =
>             dim: [20 25 22]
>            freq: 54.8287
>       cumtapcnt: [338x1 double]
>             pos: [11000x3 double]
>          inside: [1x5798 double]
>         outside: [1x5202 double]
>          method: 'average'
>             avg: [1x1 struct]
>       trialinfo: [338x1 double]
>             cfg: [1x1 struct]
>
> 4. also check your grid, should be something like this:
>
> sourcemodel =
>
>           pos: [11000x3 double]
>           dim: [20 25 22]
>          unit: 'cm'
>        inside: [1x5798 double]
>       outside: [1x5202 double]
>        params: [1x1 struct]
>       initial: [4x4 double]
>           cfg: [1x1 struct]
>
>
> Of course, it should all look a bit different, because you are using
> LCMV, but essentially it should be the same. Lastly, you can check other
> source plotting methods, like 'ortho' or try to plot the source
> structure rather than the sourceInt structure. In the end, the error
> must be somewhere in your grid, be it in .pos or .inside, because
> FieldTrip thinks that there is only one voxel to be plotted. There are
> other things that may be the issue, but I am not sure about these. So, I
> would suggest that you play a bit around and see where the error might
> come from (e.g. follow this tutorial:
> steps that you need for LCMV, maybe also check out:
> http://fieldtrip.fcdonders.nl/tutorial/connectivity#connectivity_between_meg_virtual_channel_and_emg
> there, LCMV is used, but on one voxel only)
>
> Best,
> Jörn
>
>> The next part of my code is the following:
>>
>>             % interpolate sources
>>               mri = ft_volumereslice([], mri);
>>
>>               cfg            = [];
>>               cfg.downsample = 2;
>>               cfg.parameter = 'avg.pow';
>>               sourceInt  = ft_sourceinterpolate( cfg, source, mri);
>>               sourceInt = rmfield( sourceInt,'time'); % The avg.pow parameter
>>               % does not vary over time, therefore the time  dimension is not needed.
>>
>> mri =
>>
>>         anatomy: [256x256x256 double]
>>             dim: [256 256 256]
>>       transform: [4x4 double]
>>        coordsys: 'ctf'
>>            unit: 'mm'
>>             cfg: [1x1 struct]
>>
>> I cant really see if the data works in the tutorial because it doesnt appear as though fieldtrip has a tutorial on lcmv beamformers, they seem to stick to frequency domain beamformers.
>>
>> Ive been wrong before though,
>>
>>
>> Tyler
>>
>> *************************
>>
>> Tyler Grummett ( BBSc, BSc(Hons I))
>> PhD Candidate
>> Brain Signals Laboratory
>> Flinders University
>> Rm 5A301
>> Ext 66124
>>
>> ________________________________________
>> From: fieldtrip-bounces at science.ru.nl <fieldtrip-bounces at science.ru.nl> on behalf of "Jörn M. Horschig" <jm.horschig at donders.ru.nl>
>> Sent: Monday, 31 March 2014 7:13 PM
>> To: FieldTrip discussion list
>> Subject: Re: [FieldTrip] plotting interpolated sources with ft_sourceplot
>>
>> Hi Tyler,
>>
>> hm, okay, it could be that the issue with the leadfield and with the
>> plot are related, but it could also be that they are separate issues. I
>> just saw that you posted the same 'problem' on bugzilla and included a
>> picture. Maybe for next time, include a picture on the mailinglist and
>> just create a bug on bugzilla if you are sure it is a bug in Fieldtrip
>> and not if you are not sure. That saves us a lot of time in separating
>> code issues from user problems ;)
>>
>> So, back to you problem. It seems that your reconstruction results in
>> one voxel only. Are you sure that your grid consistents of more than
>> just one position? So, for example check the size of the matrices in
>> source.avg, source- and headmodel, etc.
>>
>> Also, you can check in Matlab the respective fields of source and
>> sourceInt and see whether that makes sense.
>>
>> Lastly, a neat way to check is always to use your code on data from the
>> tutorial, and vice versa, use code from the tutorial on your data and
>> see whether that works. Both should give sensible results, and if one
>> does not, you know where to start looking for a solution ;)
>>
>> Best,
>> Jörn
>>
>>
>> On 3/31/2014 9:41 AM, Tyler Grummett wrote:
>>> Hey Jorn,
>>>
>>> Previously I have let ft_sourceanalysis do a lead field because if I use the following code:
>>>
>>>     % compute lead field ( apparently source analysis computes
>>>                cfg                 = [];
>>>                cfg.elec            = timelock.elec;
>>>                cfg.vol             = vol;
>>>                cfg.reducerank      = 3;
>>>                cfg.grid.resolution = 1;   % use a 3-D grid with a 1 cm resolution
>>>                cfg.grid.unit       = 'cm';
>>>                cfg.normalize       = 'yes'; % if you are not contrasting the activity of interest again another condition or baseline time-window
>>>                grid = ft_prepare_leadfield( cfg); %% THIS IS WHERE I AM UP TO
>>>
>>> and then calculate the source analysis:
>>>
>>> % Source Analysis: without contrasting condition
>>>                cfg              = [];
>>>                cfg.method       = 'lcmv';
>>>                cfg.grid         = grid;
>>>                cfg.vol          = vol;
>>> %             cfg.grid.pos = maxpos;
>>>                cfg.keepfilter = 'yes';
>>>                cfg.dics.projectnoise = 'yes';
>>> %             cfg.dics.lambda       = 0;
>>>                source = ft_sourceanalysis( cfg, timelock);
>>>
>>> then I get an error than says:
>>>
>>> Error using  *
>>> Inner matrix dimensions must agree.
>>>
>>> Error in beamformer_lcmv (line 268)
>>>        filt = pinv(lf' * invCy * lf) * lf' *
>>>        invCy;              % van Veen eqn. 23, use
>>>        PINV/SVD to cover rank deficient leadfield
>>>
>>> Error in ft_sourceanalysis (line 794)
>>>          dip(i) = beamformer_lcmv(grid, sens, vol,
>>>          squeeze_avg, squeeze(Cy(i,:,:)),
>>>          optarg{:});
>>>
>>> I just removed the leadfield code and it successfully ran. I could also interpolate it later.
>>> Is this the correct approach.
>>>
>>>
>>> Tyler
>>>
>>> *************************
>>>
>>> Tyler Grummett ( BBSc, BSc(Hons I))
>>> PhD Candidate
>>> Brain Signals Laboratory
>>> Flinders University
>>> Rm 5A301
>>> Ext 66124
>>>
>>> ________________________________________
>>> From: fieldtrip-bounces at science.ru.nl <fieldtrip-bounces at science.ru.nl> on behalf of "Jörn M. Horschig" <jm.horschig at donders.ru.nl>
>>> Sent: Monday, 31 March 2014 5:30 PM
>>> To: FieldTrip discussion list
>>> Subject: Re: [FieldTrip] plotting interpolated sources with ft_sourceplot
>>>
>>> Hi Tyler,
>>>
>>> what you are describing sounds to me like the center bias of the
>>> beamformer. Did you contrast the activity with anything, or did you
>>> Check this out:
>>> http://fieldtrip.fcdonders.nl/tutorial/beamformer#source_analysiswithout_contrasting_condition
>>>
>>> Best,
>>> Jörn
>>>
>>> On 3/31/2014 5:46 AM, Tyler Grummett wrote:
>>>> I have been trying to plot my interpolated source data using the code:
>>>>
>>>>                % interpolate sources
>>>>                mri = ft_volumereslice([], mri);
>>>>                cfg            = [];
>>>>                cfg.downsample = 2;
>>>>                cfg.parameter = 'avg.pow';
>>>>                sourceInt  = ft_sourceinterpolate( cfg, source, mri);
>>>>                sourceInt = rmfield( sourceInt,'time'); % The avg.pow
>>>> parameter
>>>>                % does not vary over time, therefore the time  dimension
>>>> is not              needed.
>>>>
>>>>                % Plot interpolated data
>>>>                cfg              = []; %#ok<UNRCH>
>>>>                cfg.method       = 'ortho'; % spline
>>>>                cfg.funparameter = 'avg.pow';
>>>>                ft_sourceplot( cfg, sourceInt);
>>>>
>>>> However the figure that comes up just had orange squares in the subplots.
>>>>
>>>> I dont know where Ive gone wrong.
>>>>
>>>>
>>>> Tyler
>>>>
>>>>
>>>> *************************
>>>>
>>>> /Tyler Grummett ( BBSc, BSc(Hons I))/
>>>> /PhD Candidate/
>>>> /Brain Signals Laboratory/
>>>> /Flinders University/
>>>> /Rm 5A301/
>>>> /Ext 66124/
>>>>
>>>>
>>>> _______________________________________________
>>>> fieldtrip mailing list
>>>> fieldtrip at donders.ru.nl
>>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>> --
>>> Jörn M. Horschig
>>> PhD Student
>>> Donders Institute for Brain, Cognition and Behaviour
>>> Centre for Cognitive Neuroimaging
>>> Neuronal Oscillations Group
>>> FieldTrip Development Team
>>>
>>> P.O. Box 9101
>>> NL-6500 HB Nijmegen
>>> The Netherlands
>>>
>>> Contact:
>>> E-Mail: jm.horschig at donders.ru.nl
>>> Tel:    +31-(0)24-36-68493
>>> Web: http://www.ru.nl/donders
>>>
>>> Trigon, room 2.30
>>> Kapittelweg 29
>>> NL-6525 EN Nijmegen
>>> The Netherlands
>>>
>>> _______________________________________________
>>> fieldtrip mailing list
>>> fieldtrip at donders.ru.nl
>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>> _______________________________________________
>>> fieldtrip mailing list
>>> fieldtrip at donders.ru.nl
>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>> --
>> Jörn M. Horschig
>> PhD Student
>> Donders Institute for Brain, Cognition and Behaviour
>> Centre for Cognitive Neuroimaging
>> Neuronal Oscillations Group
>> FieldTrip Development Team
>>
>> P.O. Box 9101
>> NL-6500 HB Nijmegen
>> The Netherlands
>>
>> Contact:
>> E-Mail: jm.horschig at donders.ru.nl
>> Tel:    +31-(0)24-36-68493
>> Web: http://www.ru.nl/donders
>>
>> Trigon, room 2.30
>> Kapittelweg 29
>> NL-6525 EN Nijmegen
>> The Netherlands
>>
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
> --
> Jörn M. Horschig
> PhD Student
> Donders Institute for Brain, Cognition and Behaviour
> Centre for Cognitive Neuroimaging
> Neuronal Oscillations Group
> FieldTrip Development Team
>
> P.O. Box 9101
> NL-6500 HB Nijmegen
> The Netherlands
>
> Contact:
> E-Mail: jm.horschig at donders.ru.nl
> Tel:    +31-(0)24-36-68493
> Web: http://www.ru.nl/donders
>
> Trigon, room 2.30
> Kapittelweg 29
> NL-6525 EN Nijmegen
> The Netherlands
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip

--
Jörn M. Horschig
PhD Student
Donders Institute for Brain, Cognition and Behaviour
Centre for Cognitive Neuroimaging
Neuronal Oscillations Group
FieldTrip Development Team

P.O. Box 9101
NL-6500 HB Nijmegen
The Netherlands

Contact:
E-Mail: jm.horschig at donders.ru.nl
Tel:    +31-(0)24-36-68493
Web: http://www.ru.nl/donders