[FieldTrip] more on artfifact rejection

Tavabi, Kambiz TAVABIK at email.chop.edu
Fri Jan 28 06:06:41 CET 2011


Greetings - this has been an informative discussion. My question remains is , what is the consensus on an approach for automatic artifact rejection with trial (CTF) data? E.g., could one use the artifact rejection section of Michael's code without any padding? I have not found any tutorials or suggestions on how to use the artifact rejection tools on trial data...have I missed something.
-Kambiz 
-------------------------------------------------------------
Kambiz Tavabi PhD
Biomedical Imaging Laboratory
The Children's Hospital of Philadelphia
34th Street and Civic Center Boulevard
Philadelphia, Pa. 19104
Tel: 267.426.0302
email: tavabik at email.chop.edu
-------------------------------------------------------------
________________________________________
From: fieldtrip-bounces at donders.ru.nl [fieldtrip-bounces at donders.ru.nl] On Behalf Of Michael Wibral [michael.wibral at web.de]
Sent: Monday, January 24, 2011 12:27 PM
To: Email discussion list for the FieldTrip project
Subject: Re: [FieldTrip] more on artfifact rejection

Hi Jan-Mathijs,

this is basically what we do at the moment, i.e. fooling artifcat_zvalue by removing the one field it complains about amnd using rejetartefact only at the very last.
See the attched code - I really do not want to post this code on the tutorial website as I am not fully sure what I am doing :-).

Michael

%% CODE
ft_defaults;
Datapath='/data/MEGArchive/data/meg/CTF_Data/NewMooney.proc/DATASETS/';
Design={
 'DMG13_NewMooney_20110120_0', [2 3], 'mytrialfun_New_MooneyMEEG_StandardButtons2',[4 5 6 7 8];
 }


 for ss=1:size(Design,1) % over subjects
 for cc=1:length(Design{ss,4}) % over conditions
 for ff=1:length(Design{ss,2}) % over .ds datasets/runs

 FullFileName=strcat(Datapath,Design{ss,1},num2str(Design{ss,2}(ff)), '.ds')
 FullHeaderFile=FullFileName;           %strcat(FullFileName,'/',)
 % core data reading
 cfg=[];
 cfg.dataset=FullFileName;
 cfg.headerformat       = 'ctf_ds'; % for you to check whether still necessary
 ctf.dataformat         = 'ctf_ds';
 cfg.cond=Design{ss,4}(cc)
 cfg.continuous='yes';

 cfg.channel={'MEG','EEG','-MLP12', '-MRC14', '-MLT41', '-MRC25', '-MRP56', '-MRT21', '-MLO21', '-MRO44', '-MRT47'}; % add bad channels ?
 cfg.trialfun=Design{ss,3};
 cfg=ft_definetrial(cfg);
 cfg.trl(end,:)=[];
 trl=cfg.trl; %  keep track of the trials

 padding=0.75  % 750 ms


 %%%%%%%%% artifact rejection section
 %%% jump
 % cutoff and padding
 cfg.artfctdef.zvalue.channel = 'MEG';
 cfg.artfctdef.zvalue.cutoff     = 35;
 cfg.artfctdef.zvalue.trlpadding = 0.5*padding;
 cfg.artfctdef.zvalue.artpadding = 0.5*padding;
 cfg.artfctdef.zvalue.fltpadding = 0;

 % algorithmic parameters
 cfg.artfctdef.zvalue.medianfilter  = 'yes';
 cfg.artfctdef.zvalue.medianfiltord = 9; % in samples
 cfg.artfctdef.zvalue.absdiff       = 'yes';

 % feedback
 cfg.artfctdef.zvalue.feedback = 'no';
 cfg.artfctdef.reject = 'jump';
 [cfg, artifact_jump] = ft_artifact_zvalue(cfg);             %, Data);
 %             cfg.artfctdef.jump.artifact = artifact_jump;
 %             cfg = ft_rejectartifact(cfg);

 %%% muscle
 cfg.artfctdef.zvalue=rmfield(cfg.artfctdef.zvalue, 'artifact');   % remove  field from structure otherwise this won't run ??
% cutoff and padding
 cfg.artfctdef.zvalue.channel = 'MEG';
 cfg.artfctdef.zvalue.cutoff      = 15;
 cfg.artfctdef.zvalue.trlpadding  = 0.1;
 cfg.artfctdef.zvalue.fltpadding  = 0.1;
 cfg.artfctdef.zvalue.artpadding  = 0.1;

 % algorithmic parameters
 cfg.artfctdef.zvalue.bpfilter    = 'yes';
 cfg.artfctdef.zvalue.bpfreq      = [110 140];
 cfg.artfctdef.zvalue.bpfiltord   = 6;
 cfg.artfctdef.zvalue.bpfilttype  = 'but';
 cfg.artfctdef.zvalue.hilbert     = 'yes';
 cfg.artfctdef.zvalue.boxcar      = 0.2;

 % feedback
 cfg.artfctdef.zvalue.feedback = 'no';
 cfg.artfctdef.reject = 'muscle';
 [cfg, artifact_muscle] = ft_artifact_zvalue(cfg);
 cfg.artfctdef.muscle.artifact = artifact_muscle;
 cfg = ft_rejectartifact(cfg);

 %%% EOG


 cfg.artfctdef.zvalue=rmfield(cfg.artfctdef.zvalue, 'artifact');
% cutoff and padding
cfg.artfctdef.zvalue.channel = 'MRT41';
 cfg.artfctdef.zvalue.cutoff      = 10;
 cfg.artfctdef.zvalue.trlpadding  = 0.5;
 cfg.artfctdef.zvalue.artpadding  = 0.1;
 cfg.artfctdef.zvalue.fltpadding  = 0.1;
 % algorithmic parameters
 cfg.artfctdef.zvalue.bpfilter   = 'yes';
 cfg.artfctdef.zvalue.bpfilttype = 'but';
 cfg.artfctdef.zvalue.bpfreq     = [1 15];
 cfg.artfctdef.zvalue.bpfiltord  = 3;
 cfg.artfctdef.zvalue.hilbert    = 'yes';

 % feedback
 cfg.artfctdef.zvalue.feedback = 'no';
 cfg.artfctdef.reject = 'EOG';
 [cfg, artifact_EOG] = ft_artifact_zvalue(cfg);   % Data);

  cfg.trl=trl;
 cfg.artfctdef.reject = 'complete'; % this rejects complete trials, use 'partial' if you want to do partial artifact rejection
% collect all the info about the artifacts that were found
 cfg.artfctdef.eog.artifact =artifact_EOG;
 cfg.artfctdef.jump.artifact = artifact_jump;
 cfg.artfctdef.muscle.artifact = artifact_muscle;
 cfg = ft_rejectartifact(cfg);

 Data_no_artifacts=ft_preprocessing(cfg);

 % some additional filtering for DC removal and detrending
 cfg=[];
 cfg.detrend='yes'
 cfg.hpfilt='yes'
 cfg.hpfreq=1;
 TrialData{ff}=ft_preprocessing(cfg,Data_no_artifacts);
 clear Data_no_artifacts;

 end
...
...
end
end





-----Ursprüngliche Nachricht-----
Von: "jan-mathijs schoffelen" <jan.schoffelen at donders.ru.nl>
Gesendet: Jan 24, 2011 4:41:09 PM
An: "Email discussion list for the FieldTrip project" <fieldtrip at donders.ru.nl>
Betreff: Re: [FieldTrip] more on artfifact rejection

>Hmmm, apparently this approach needs to be ironed out a bit (also from
>our side). For now, I'd say that it should work if you keep per type
>of artifact the  artifact field in the output configuration, and just
>concatenate these prior to calling ft_rejectartifact. I will moreover
>CC this e-mail to the people involved in creating the first version of
>the renewed tutorial, and will bring up the issue in this week's
>FieldTrip developers meeting.
>
>Best,
>
>JM
>
>On Jan 24, 2011, at 1:51 PM, Michael Wibral wrote:
>
>> Hi Jan mathijs,
>>
>> I tried to get option1 running, stumbled over the following little
>> obstacle however:
>>
>> I tried to keep one cfg throughout the steps ft_definetrial;
>> ft_artifact_zvalue, ft_rejectartifcat (with option complete and some
>> tracking of where artfecats were found), ft_preprocessing (cutting
>> out the clean trials from the cont. data). IMHO this used to be the
>> way most people did this kind of procesing a while ago.
>>
>> However, I can't get ft_artifact_zvalue to run with different
>> settings one after another for jump/musvle/EOG. FT claims after the
>> first run of ft_artifact_zvalue that the z-value thing has been
>> performed and refuse to detect other artifacts with new settings.
>>
>>> From here I only see two alternative: specifying a really lengthy
>>> cfg every time a new (also struggling with the cfg.dataset versus
>>> cfg.datafile issue) and do the bookkeeping of cfg.trl and related
>>> things myself or manually removing the cfg.artdef.zvalue.artifct
>>> field to get the z-value based detection to run again. This seems a
>>> bit odd to me.
>>
>> Any suggestions?
>>
>> Michael
>>
>>
>>
>>
>> -----Ursprüngliche Nachricht-----
>> Von: "jan-mathijs schoffelen" <jan.schoffelen at donders.ru.nl>
>> Gesendet: Jan 24, 2011 12:12:57 PM
>> An: "Email discussion list for the FieldTrip project" <fieldtrip at donders.ru.nl
>> >
>> Betreff: Re: [FieldTrip] more on artfifact rejection
>>
>>> Dear Michael,
>>>
>>> I agree. The tutorial should be 'de'-confused by sketching option 1,
>>> and another one should be describing option 2, or the original should
>>> be clearly making the distinction.
>>>
>>> Best,
>>>
>>> JM
>>>
>>>
>>> On Jan 24, 2011, at 11:48 AM, Michael Wibral wrote:
>>>
>>>> Hi Jan-Mathijs,
>>>>
>>>> I am a bit unsure how to proceed:
>>>>
>>>> (1) sketch the artifact correction way like this
>>>> ft-definetrial -> artifact.XXX.YYY -> ft_rejectartifact ->
>>>> ft_preprocessing
>>>> OR
>>>> (2) ft-definetrial -> ft_preprocessing (with cfg.padding) ->
>>>> artifact.XXX.YYY -> ft_rejectartifact(cfg, data) ->
>>>> ft_preprocessing.
>>>>
>>>> I think I should go for option (1) as this seems to be the standard
>>>> use on continuous data. Sometime in the futrure one should then add
>>>> a tutorial for those that have data in trials to start with.
>>>>
>>>> Michael
>>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: "jan-mathijs schoffelen" <jan.schoffelen at donders.ru.nl>
>>>> Gesendet: Jan 21, 2011 9:55:48 AM
>>>> An: "Email discussion list for the FieldTrip project" <fieldtrip at donders.ru.nl
>>>>>
>>>> Betreff: Re: [FieldTrip] more on artfifact rejection
>>>>
>>>>> Dear Michael,
>>>>>
>>>>> Yes, I agree with you here as well. In principle the
>>>>> ft_artifact_zvalue supports data as a second input argument, but in
>>>>> such case the different types of padding in the cfg do not make
>>>>> sense.
>>>>> I would indeed remove the second input arguments in the example
>>>>> code
>>>>> snippets. Could I ask you to take care of that?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> JM
>>>>>
>>>>>
>>>>> On Jan 20, 2011, at 10:51 AM, Michael Wibral wrote:
>>>>>
>>>>>> Deal Fieldtrip users,
>>>>>>
>>>>>> there is something else I do not understand in the tutorial: if
>>>>>> you
>>>>>> read in the data in trials (as it is done) how can you do padding
>>>>>> later as it is suggested. I tried to run the example code on teh
>>>>>> website  reading in the data such that it contains trials. If I
>>>>>> then
>>>>>> try to search for muscle artifacts I get the 'subscript indices
>>>>>> must
>>>>>> be positive or logical ... values', indicating that the code tries
>>>>>> to access data that aren't there. If I set the padding to zero
>>>>>> (instead of 0.1) it works. So I am wondering wether somehow one
>>>>>> should actually run these things on continuous data (contrary to
>>>>>> what is indicated in the tutorial)?
>>>>>>
>>>>>> Michael
>>>>>> <Michael Wibral.vcf><Michael
>>>>>> Wibral.vcf>_______________________________________________
>>>>>> fieldtrip mailing list
>>>>>> fieldtrip at donders.ru.nl
>>>>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>>>>
>>>>> Dr. J.M. (Jan-Mathijs) Schoffelen
>>>>> Donders Institute for Brain, Cognition and Behaviour,
>>>>> Centre for Cognitive Neuroimaging,
>>>>> Radboud University Nijmegen, The Netherlands
>>>>> J.Schoffelen at donders.ru.nl
>>>>> Telephone: 0031-24-3614793
>>>>>
>>>>> _______________________________________________
>>>>> fieldtrip mailing list
>>>>> fieldtrip at donders.ru.nl
>>>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>>> <Michael Wibral.vcf>_______________________________________________
>>>> fieldtrip mailing list
>>>> fieldtrip at donders.ru.nl
>>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>>
>>> Dr. J.M. (Jan-Mathijs) Schoffelen
>>> Donders Institute for Brain, Cognition and Behaviour,
>>> Centre for Cognitive Neuroimaging,
>>> Radboud University Nijmegen, The Netherlands
>>> J.Schoffelen at donders.ru.nl
>>> Telephone: 0031-24-3614793
>>>
>>>
>>> _______________________________________________
>>> fieldtrip mailing list
>>> fieldtrip at donders.ru.nl
>>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>> <Michael Wibral.vcf>_______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
>Dr. J.M. (Jan-Mathijs) Schoffelen
>Donders Institute for Brain, Cognition and Behaviour,
>Centre for Cognitive Neuroimaging,
>Radboud University Nijmegen, The Netherlands
>J.Schoffelen at donders.ru.nl
>Telephone: 0031-24-3614793
>
>
>_______________________________________________
>fieldtrip mailing list
>fieldtrip at donders.ru.nl
>http://mailman.science.ru.nl/mailman/listinfo/fieldtrip




More information about the fieldtrip mailing list