<div dir="ltr"><div>Hi Marion,</div><div><br></div><div>I would check your time axis. <br></div><div>I never use ft_definetrial like that (I make my own .trl field), so I'm not sure it went through correctly with the offset (t=0).</div><div>So check your data_Raw.time{1}. Does it really go from -0.1 to 1.0? If not, Julian's point is right, and your point on that is 'first point' might be explained as well, if I understood that correctly.</div><div><br></div><div>Cheers,</div><div>Stephen<br></div><div><br>

</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, 17 Jan 2019 at 18:29, Marion Vincent <<a href="mailto:marion.vincent@univ-lille.fr">marion.vincent@univ-lille.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear Stephen,<br>
Thanks for your comments.<br>
In fact I only used the cgf1, cfg2.. for plotting the figure I sent you. So it was not my «real» code.<br>
But you’re rigth cleaning the cfg will prevent some errors.<br>
I’ve done so and still have some errors: (for each case, I compared it to a personnal calculation)<br>
If I use the ‘all’ default cfg.baselinewindow => I have the result I expected: the Baseline is the mean value of all the signal. (cf. figure Baseline_AllSignal)If I use a given time window (here from 0.1 to 0 sec before the stimulsu onset) => in fieldtrip, the Baseline is only the «first point» of the raw signal, but not its mean value on the Baseline window (as in my own calculation: cf. figure Baseline_TimeWindow). I also tried with exorbitant window [-10000 0], [0 0.1], etc ) and each time I Always have the exact same result for the filedtrip calculation.<br>
Here is my entire code(I hope it will be clearer):<br>
**************************************************************<br>
seg_window=[0.1 1]; % in seconds %preStim/postStim<br>
trig_Type=[1 5 2 6 3 7 4 8]; % trigger value<br>
load(filename_Trig);<br>
% ** READ FILE INFO<br>
% read the header information and the events from the data<br>
hdr   = ft_read_header(filename_Data);<br>
% Config<br>
cfg= [];<br>
cfg.dataset       = filename_Data;<br>
% **RE-REFERENCES<br>
cfg.reref         = 'yes';<br>
cfg.refchannel    = {'EXG3', 'EXG4'} ; % electrode 131/132 // cell-array with new EEG reference channel(s), this can be 'all' for a common average reference<br>
cfg.refmethod     = 'avg'; % 'avg', 'median', or 'bipolar' for bipolar derivation of sequential channels (default = 'avg')<br>
% ** TRIAL DEFINITION<br>
event_All = ft_read_event(filename_Data);<br>
% Select only the trigger codes, not the battery and CMS status<br>
sel = find(strcmp({event_All.type}, 'STATUS'));<br>
event_All = event_All(sel);<br>
cfg.eventType=[trig_Type(1) trig_Type(2)];<br>
cfg.trialfun = 'AVExp_trialfun';<br>
cfg.trialdef.pre  = seg_window(1);<br>
cfg.trialdef.post = seg_window(2);<br>
cfg.Fs=hdr.Fs; % convert seconds in sample<br>
cfg = ft_definetrial(cfg);<br>
% Remove trials from Cartool selection<br>
cfg.trl(find(Triggers{num_Cond}(:,1)==0),:) = [];<br>
data_Raw = ft_preprocessing(cfg);<br>
% Plot data to check<br>
figure ; chan_num=1;<br>
trial_num=1;<br>
figure;<br>
plot(data_Raw.trial{trial_num}(chan_num,:));<br>
% ** BASELINE CORRECTION: BASELINE IS ALL THE SIGNAL<br>
%baseline correct the raw data structure, automatic<br>
cfg                     = [] ;<br>
cfg.demean              = 'yes';<br>
cfg.baselinewindow      = 'all';<br>
data_Raw_reref        = ft_preprocessing(cfg, data_Raw);<br>
% Manual correction test<br>
for trial_num=1:length(data_Raw.trial)<br>
    for chan_num=1:length(data_Raw.label)<br>
        Signal=data_Raw.trial{trial_num}(chan_num,:);<br>
        baseline_value=mean(Signal); % for comparison with the default value of<br>
        data_Raw_reref_Manual.trial{trial_num}(chan_num,:)=data_Raw.trial{trial_num}(chan_num,:)-baseline_value*ones(1,length(Signal));<br>
    end<br>
end<br>
% plot comparison<br>
figure;chan_num=1;<br>
trial_num=1;<br>
hold all<br>
plot(data_Raw_reref.trial{trial_num}(chan_num,:));<br>
plot(data_Raw_reref_Manual.trial{trial_num}(chan_num,:));<br>
legend('FieldTrip','Manual');<br>
title('Baseline is all the signal');<br>
% ** BASELINE CORRECTION: BASELINE IS THE MEAN VALUE OF A WINDOW of 0.1sec before the stimulus onset<br>
%baseline correct the raw data structure, automatic<br>
cfg                     = [] ;<br>
cfg.demean              = 'yes';<br>
cfg.baselinewindow      = [-0.1 0] ; %as the baseline lasts 0.1 s  before the stimulus onset<br>
data_Raw_reref_1       = ft_preprocessing(cfg, data_Raw);<br>
% Manual correction test for trial 1 - comparison to automatic calculation<br>
for trial_num=1:length(data_Raw.trial)<br>
    for chan_num=1:length(data_Raw.label)<br>
        Signal=data_Raw.trial{trial_num}(chan_num,:);<br>
        baseline_window=[1  round(hdr.Fs*0.1)];% because baseline lasts 0.1 s  before the stimulus onset<br>
        baseline_value=mean(Signal(baseline_window(1):baseline_window(2)));<br>
        data_Raw_reref_Manual_1.trial{trial_num}(chan_num,:)=data_Raw.trial{trial_num}(chan_num,:)-baseline_value*ones(1,length(Signal));<br>
    end<br>
end<br>
% plot comparison<br>
figure;chan_num=1;<br>
trial_num=1;<br>
hold all<br>
plot(data_Raw_reref_1.trial{trial_num}(chan_num,:));<br>
plot(data_Raw_reref_Manual_1.trial{trial_num}(chan_num,:));<br>
legend('FieldTrip','Manual');<br>
title('Baseline is a given time window’);<br>
**************************************************************<br>
I’m sure it’s a silly mistake, but I really can’t find it.<br>
Thanks<br>
Marion<br>
Marion VINCENT<br>
Eng., PhD , CNRS Research Engineer<br>
Tel: +33 607 59 46 76<br>
Laboratoire SCALab UMR CNRS 9193<br>
Université Lille 3<br>
BP 60149<br>
59653 Villeneuve d'Ascq Cedex<br>
<a href="http://scalab.cnrs.fr" rel="noreferrer" target="_blank">http://scalab.cnrs.fr</a><br>
--------------------------------------------<br>
L’Imaginarium / SCV-IrDIVE Equipex<br>
99a Boulevard Descat<br>
59200 Tourcoing<br>
<a href="http://www.irdive.fr/" rel="noreferrer" target="_blank">http://www.irdive.fr/</a><br>
De: Stephen Whitmarsh<br>
Envoyé le:jeudi 17 janvier 2019 15:03<br>
À: 'FieldTrip discussion list'<br>
Objet:Re: [FieldTrip] Baseline removal errors in trials preprocessing<br>
<br>
<br>
Dear Marion,<br>
<br>
<br>
<br>
Your script is a bit messy. I would start with:<br>
<br>
1)      Always clear your cfg before calling a FT function. Don’t go around saving different cfg’s. This is the nr. 1 cause of confusing results J<br>
<br>
2)      Load/segment etc. your data first with ft_preprocessing. Then call ft_preprocessing again to baseline correct, entering the output of the first run.<br>
<br>
I have a hunch that might fix your problem. So, something like:<br>
<br>
<br>
<br>
% load your data, apply rereferencing and segment in one go<br>
<br>
cfg               = [];<br>
<br>
cfg.dataset       = filename_Data;<br>
<br>
cfg.reref         = 'yes';<br>
<br>
cfg.refchannel    = {'EXG3', 'EXG4'} ; <br>
<br>
cfg.refmethod     = 'avg';<br>
<br>
cfg.trl           = … ;<br>
<br>
cfg               = ft_definetrial(cfg);<br>
<br>
data_Raw          = ft_preprocessing(cfg);<br>
<br>
<br>
<br>
% somehow plot your data to check<br>
<br>
figure ; plot(data_Raw.trial{1}(1, :)) ; <br>
<br>
<br>
<br>
% baseline correct your raw data structure, method 1<br>
<br>
cfg                     = [] ;<br>
<br>
cfg.demean              = ‘yes’ ;<br>
<br>
cfg.baselinewindow      = [0 0.1] ;<br>
<br>
data_Raw_reref_1        = ft_preprocessing(cfg, data_Raw);<br>
<br>
<br>
<br>
% somehow plot your data to check<br>
<br>
figure ; plot(data_Raw_reref_1.trial{1}(1, :)) ; <br>
<br>
<br>
<br>
% baseline correct your raw data structure, method 2<br>
<br>
cfg                     = [] ;<br>
<br>
cfg.demean              = ‘yes’ ;<br>
<br>
cfg.baselinewindow      = [-1 -0.1] ; % or whatever<br>
<br>
data_Raw_reref_2        = ft_preprocessing(cfg, data_Raw);<br>
<br>
<br>
<br>
% somehow plot your data to check<br>
<br>
figure ; plot(data_Raw_reref_2.trial{1}(1, :)) ; <br>
<br>
<br>
<br>
And oh, wait, I see what you did there… Don’t use different variables for your cfg, (e.g. cfg1, cfg2, etc.). See the mistake? Those are too easy to make if you don’t do something like the above.<br>
<br>
<br>
<br>
Cheers and good FieldTripping!<br>
<br>
Stepen<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
From: fieldtrip <<a href="mailto:fieldtrip-bounces@science.ru.nl" target="_blank">fieldtrip-bounces@science.ru.nl</a>> On Behalf Of Marion Vincent<br>
Sent: Thursday, January 17, 2019 2:00 PM<br>
To: FieldTrip discussion list <<a href="mailto:fieldtrip@science.ru.nl" target="_blank">fieldtrip@science.ru.nl</a>><br>
Subject: Re: [FieldTrip] Baseline removal errors in trials preprocessing<br>
<br>
<br>
<br>
Dear Stephen, <br>
<br>
<br>
<br>
Here is my script : <br>
<br>
<br>
<br>
%segmentation<br>
<br>
seg_window=[0.1 1]; % in seconds %preStim/postStim<br>
<br>
<br>
<br>
%config<br>
<br>
cfg= [];<br>
<br>
cfg.dataset = filename_Data;<br>
<br>
<br>
<br>
%% *********** TRIAL DEFINITION PART *********** (that works )<br>
<br>
[…]<br>
<br>
cfg = ft_definetrial(cfg);<br>
<br>
<br>
<br>
% ***********  Re-References *********** (that also works )<br>
<br>
cfg.reref = 'yes';<br>
<br>
cfg.refchannel = {'EXG3', 'EXG4'};% electrode 131/132 // cell-array with new EEG reference channel(s), this can be 'all' for a common average reference<br>
<br>
cfg.refmethod     = 'avg'; % 'avg', 'median', or 'bipolar' for bipolar derivation of sequential channels (default = 'avg') <br>
<br>
<br>
<br>
data_Raw = ft_preprocessing(cfg);<br>
<br>
<br>
<br>
%% *********** Baseline ***********<br>
<br>
cfg.demean = 'yes';<br>
<br>
<br>
<br>
cfg1=cfg;<br>
<br>
cfg1.baselinewindow = [-seg_window(1) 0 ];<br>
<br>
cfg2=cfg;<br>
<br>
cfg2.baselinewindow = [0 0.1];<br>
<br>
cfg3=cfg;<br>
<br>
cfg3.baselinewindow = 'all';<br>
<br>
<br>
<br>
data1 = ft_preprocessing(cfg1);<br>
<br>
data2 = ft_preprocessing(cfg2);<br>
<br>
data3 = ft_preprocessing(cfg3);<br>
<br>
<br>
<br>
<br>
<br>
ð  I’ve attached the figure with the results.<br>
<br>
<br>
<br>
PS : In fact I made a mistake in my previous email : the result wasn’t the same when the Baseline window was ‘all’.<br>
<br>
<br>
<br>
Let me know if you need more informations. <br>
<br>
Thanks for your help.<br>
<br>
<br>
<br>
Marion<br>
<br>
<br>
<br>
<br>
<br>
Marion VINCENT<br>
Eng., PhD , CNRS Research Engineer<br>
Tel: +33 607 59 46 76<br>
<br>
Laboratoire SCALab UMR CNRS 9193<br>
Université Lille 3<br>
BP 60149<br>
59653 Villeneuve d'Ascq Cedex<br>
<a href="http://scalab.cnrs.fr" rel="noreferrer" target="_blank">http://scalab.cnrs.fr</a><br>
--------------------------------------------<br>
L’Imaginarium / SCV-IrDIVE Equipex<br>
99a Boulevard Descat<br>
59200 Tourcoing<br>
<a href="http://www.irdive.fr" rel="noreferrer" target="_blank">http://www.irdive.fr</a> <<a href="http://www.irdive.fr/" rel="noreferrer" target="_blank">http://www.irdive.fr/</a>> /<br>
<br>
<br>
<br>
De : Stephen Whitmarsh <mailto:<a href="mailto:stephen.whitmarsh@gmail.com" target="_blank">stephen.whitmarsh@gmail.com</a>> <br>
Envoyé le :jeudi 17 janvier 2019 11:51<br>
À : 'FieldTrip discussion list' <mailto:<a href="mailto:fieldtrip@science.ru.nl" target="_blank">fieldtrip@science.ru.nl</a>> <br>
Objet :Re: [FieldTrip] Baseline removal errors in trials preprocessing<br>
<br>
<br>
<br>
<br>
<br>
Dear Marion,<br>
<br>
<br>
<br>
It sounds it might indeed be something as simple as a typo. Could you paste the part of your script – from baseline removal to plotting (where you don’t see a difference) - so we can take a look?<br>
<br>
<br>
<br>
Cheers,<br>
<br>
Stephen<br>
<br>
<br>
<br>
From: fieldtrip <<a href="mailto:fieldtrip-bounces@science.ru.nl" target="_blank">fieldtrip-bounces@science.ru.nl</a> <mailto:<a href="mailto:fieldtrip-bounces@science.ru.nl" target="_blank">fieldtrip-bounces@science.ru.nl</a>> > On Behalf Of Marion Vincent<br>
Sent: Thursday, January 17, 2019 10:37 AM<br>
To: <a href="mailto:fieldtrip@science.ru.nl" target="_blank">fieldtrip@science.ru.nl</a> <mailto:<a href="mailto:fieldtrip@science.ru.nl" target="_blank">fieldtrip@science.ru.nl</a>> <br>
Subject: [FieldTrip] Baseline removal errors in trials preprocessing<br>
<br>
<br>
<br>
Dear FIeldtrip users, <br>
<br>
<br>
<br>
I’m new in using Fieldtrip for EEG processing and I’ve encountred some issues while removing the Baseline of my trials. <br>
<br>
<br>
<br>
I’m working on EEG signals recorded with the BioSemi system.  My pre-processing method is : <br>
<br>
(1)    Re-referecing the channels (necessary with BioSemi)<br>
<br>
(2)    Trial definition<br>
<br>
(3)    Baseline removal<br>
<br>
<br>
<br>
I’ve read on the documentation that ft_preprocessing xcan have several cfg parameter for the Baseline removal :<br>
<br>
<br>
<br>
% cfg.demean  = 'yes';%'no' or 'yes', whether to apply baseline correction (default = 'no')<br>
<br>
% cfg.baselinewindow = 'all';%[begin end] ;%in seconds, the default is the complete trial (default = 'all')<br>
<br>
% cfg.detrend       = 'no'; %'no' or 'yes', remove linear trend from the data (done per trial) (default = 'no')<br>
<br>
<br>
<br>
I wanted to remove a Baseline defined as the average of a given window preceeding my stimulus onset. <br>
<br>
<br>
<br>
I tried to use : cfg.baselinewindow = [-0.5 0 ]; cfg.baselinewindow = [0 0.1] or the default window .<br>
<br>
But the problem is that I always have the same result, no matter the window I use : the first point of my trial is put to zero and substracted to all my trial. <br>
<br>
<br>
<br>
I’m sure I’m doing something wrong (and that the answer is very simple), but I can’t manage to understand what is the issue.<br>
<br>
<br>
<br>
Do you have any advice ?<br>
<br>
<br>
<br>
Thanks ! <br>
<br>
Marion<br>
<br>
<br>
<br>
Marion VINCENT<br>
Eng., PhD , CNRS Research Engineer<br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
fieldtrip mailing list<br>
<a href="https://mailman.science.ru.nl/mailman/listinfo/fieldtrip" rel="noreferrer" target="_blank">https://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br>
<a href="https://doi.org/10.1371/journal.pcbi.1002202" rel="noreferrer" target="_blank">https://doi.org/10.1371/journal.pcbi.1002202</a><br>
_______________________________________________<br>
fieldtrip mailing list<br>
<a href="https://mailman.science.ru.nl/mailman/listinfo/fieldtrip" rel="noreferrer" target="_blank">https://mailman.science.ru.nl/mailman/listinfo/fieldtrip</a><br>
<a href="https://doi.org/10.1371/journal.pcbi.1002202" rel="noreferrer" target="_blank">https://doi.org/10.1371/journal.pcbi.1002202</a><br>
</blockquote></div>