[FieldTrip] plotting interpolated sources with ft_sourceplot

Tyler Grummett tyler.grummett at flinders.edu.au
Tue Apr 1 08:15:11 CEST 2014


Hey Jorn,

In addition to my previous emails, Ive been trying to debug the functions.

In ft_sourceanalysis, line 661 to 677:

% HACK: use the default code
    % select the channels of interest
    [dum, datchanindx] = match_str(cfg.channel, data.label);
    if strcmp(data.dimord, 'chan_time')
      % It is in principle possible to have timelockanalysis with
      % keeptrial=yes and only a single trial in the raw data.
      % In that case the covariance should be represented as Nchan*Nchan
      data.avg = data.avg(datchanindx,:);
      %data.cov = reshape(data.cov, length(datchanindx), length(datchanindx));
      data.cov = data.cov(datchanindx,datchanindx);
    else
      data.avg   = data.avg(datchanindx,:);
      data.cov   = data.cov(:,datchanindx,datchanindx);
      data.trial = data.trial(:,datchanindx,:);
    end
    data.label = data.label(datchanindx);
    Nchans     = length(data.label);

I found that my cfg.channel is []; and the data.label is all my ICA components labelled ica_001 etc.

So it is returned as a [];
which means data.cov = [];

I think then it will crash later parts of the code. Does this function work on ICA components?

I ran the ICA in eeglab.

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: Tuesday, 1 April 2014 1:42 AM
To: fieldtrip at science.ru.nl
Subject: Re: [FieldTrip] plotting interpolated sources with ft_sourceplot

just to clarify and be precise
> The pos-matrix has to be a regular 3D grid, i.e. be representable as a
> 3x3x3 matrix.
it actually does not have to be as you can also beam individual grid
points, but if you have a .dim field, then is has to be like above. But
that does not affect the rest of the mail I wrote ;)


> 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
> latter is the case, maybe restart with creating your forward model by
> 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:
>> http://fieldtrip.fcdonders.nl/tutorial/beamformingextended and adapt the
>> 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_read_mri('Subject01.mri');
>>>               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,
>>>
>>> thanks for your help.
>>>
>>> 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
>>>>                % lead field anyway
>>>>                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.
>>>>
>>>> Thankyou in advance!
>>>>
>>>> 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
>>>> normalize your leadfield?
>>>> 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_read_mri('Subject01.mri');
>>>>>                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
>>>> Radboud University Nijmegen
>>>> 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
>>>>
>>>> Visiting address:
>>>> 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
>>> Radboud University Nijmegen
>>> 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
>>>
>>> Visiting address:
>>> 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
>> Radboud University Nijmegen
>> 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
>>
>> Visiting address:
>> 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
Radboud University Nijmegen
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

Visiting address:
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



More information about the fieldtrip mailing list