<div class="markdown-here-wrapper" id="markdown-here-wrapper-177109" style><p style="margin:1.2em 0px!important">Hi Jörn, </p>
<p style="margin:1.2em 0px!important">Thanks. </p>
<p style="margin:1.2em 0px!important">I am already using negative trlpadding. </p>
<p style="margin:1.2em 0px!important">In this case I am trying to do the artifact detection on in memory trial data, because I want to do it after denoise_pca. I am not sure if this is correct but it seemed to me that denoise_pca is to correct physical aquisition artifacts so it would be better to do it before trying to identify biological artifacts that are a part of the recorded signal. </p>

<p style="margin:1.2em 0px!important">The code I am using is below. If you could point out how to add padding for the ft<em>artifact</em> section so that it can work on in memory data it would be great. </p>
<p style="margin:1.2em 0px!important">Thanks,</p>
<p style="margin:1.2em 0px!important">Robin</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;overflow:auto;margin:1.2em 0px"><code class="language-matlab" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:nowrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline;white-space:pre;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block;padding:0.5em;color:rgb(51,51,51);background-color:rgb(248,248,255);background-repeat:initial initial"><span class="comment" style="color:rgb(153,153,136);font-style:italic">%% Automatic artifact rejection</span>

<span class="comment" style="color:rgb(153,153,136);font-style:italic">% for each run</span>
run_data = cell(<span class="number" style="color:rgb(0,153,153)">1</span>,<span class="built_in" style="color:rgb(0,134,179)">length</span>(<span class="transposed_variable">sub.</span>blocks));
trl_idx = <span class="number" style="color:rgb(0,153,153)">0</span>;

<span class="keyword" style="color:rgb(51,51,51);font-weight:bold">for</span> ri=<span class="number" style="color:rgb(0,153,153)">1</span>:<span class="built_in" style="color:rgb(0,134,179)">length</span>(<span class="transposed_variable">sub.</span>blocks)
    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% extra data to allow padding in artifact detection</span>
    filterpad = <span class="number" style="color:rgb(0,153,153)">0.2</span>;
    prestim = <span class="number" style="color:rgb(0,153,153)">0.5</span>;
    poststim = <span class="number" style="color:rgb(0,153,153)">0.6</span>;
    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% extract trials</span>
    cfg = <span class="matrix">[]</span>;
    <span class="transposed_variable">cfg.</span>dataset = fullfile(<span class="transposed_variable">sub.</span>megDataPath, num2str(<span class="transposed_variable">sub.</span>blocks(ri)), <span class="string" style="color:rgb(221,17,68)">'c,rfDC'</span>);
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">trialdef.</span>eventtype  = <span class="string" style="color:rgb(221,17,68)">'TRIGGER'</span>;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">trialdef.</span>eventvalue = <span class="number" style="color:rgb(0,153,153)">192</span>;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">trialdef.</span>prestim    = prestim + filterpad;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">trialdef.</span>poststim   = poststim + filterpad;
    <span class="transposed_variable">cfg.</span>trialfun = <span class="string" style="color:rgb(221,17,68)">'ft_trialfun_general'</span>;
    <span class="transposed_variable">cfg.</span>continuous = <span class="string" style="color:rgb(221,17,68)">'yes'</span>;

    cfg = ft_definetrial(cfg);
    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% overwrite unnecessary constant eventvalue</span>
    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% with trial number within this block</span>
    <span class="transposed_variable">cfg.</span>trl(:,<span class="number" style="color:rgb(0,153,153)">4</span>) = (<span class="number" style="color:rgb(0,153,153)">1</span>:<span class="built_in" style="color:rgb(0,134,179)">size</span>(<span class="transposed_variable">cfg.</span>trl,<span class="number" style="color:rgb(0,153,153)">1</span>)) + trl_idx;
    trl_idx = trl_idx + <span class="built_in" style="color:rgb(0,134,179)">size</span>(<span class="transposed_variable">cfg.</span>trl,<span class="number" style="color:rgb(0,153,153)">1</span>);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% remove jump artifact trials</span>
    trlidx = ismember(<span class="transposed_variable">cfg.</span>trl(:,<span class="number" style="color:rgb(0,153,153)">4</span>), good_trials);
    <span class="transposed_variable">cfg.</span>trl = <span class="transposed_variable">cfg.</span>trl(trlidx, :);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% load</span>
    <span class="transposed_variable">cfg.</span>detrend = <span class="string" style="color:rgb(221,17,68)">'yes'</span>;
    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% long padding for line noise removal</span>
    <span class="transposed_variable">cfg.</span>dftfilter = <span class="string" style="color:rgb(221,17,68)">'yes'</span>;
    <span class="transposed_variable">cfg.</span>padding = <span class="number" style="color:rgb(0,153,153)">10</span>;
    run_raw = ft_preprocessing(cfg);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% apply denoise_pca</span>
    cfg = <span class="matrix">[]</span>;
    <span class="keyword" style="color:rgb(51,51,51);font-weight:bold">if</span> isfield(sub,<span class="string" style="color:rgb(221,17,68)">'posthoc_badchannels'</span>)
        remove_chans = <span class="transposed_variable">sub.</span>posthoc_badchannels;
    <span class="keyword" style="color:rgb(51,51,51);font-weight:bold">else</span>
        remove_chans = <span class="cell">{}</span>;
    <span class="keyword" style="color:rgb(51,51,51);font-weight:bold">end</span>
    <span class="transposed_variable">cfg.</span>channel = ft_channelselection(<span class="matrix">[{<span class="string" style="color:rgb(221,17,68)">'all'</span>} remove_chans]</span>, good_meg_channels);
    <span class="transposed_variable">cfg.</span>trials = <span class="built_in" style="color:rgb(0,134,179)">find</span>(ismember(<span class="transposed_variable">run_raw.</span>trialinfo, good_trials));
    run_clean = ft_denoise_pca(cfg, run_raw);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% artifact detection</span>
    cfg = <span class="matrix">[]</span>;
    <span class="transposed_variable">cfg.</span>continuous = <span class="string" style="color:rgb(221,17,68)">'no'</span>; <span class="comment" style="color:rgb(153,153,136);font-style:italic">% some trials are excluded</span>
    <span class="transposed_variable">cfg.</span>trl = <span class="transposed_variable">run_clean.</span>sampleinfo;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span><span class="transposed_variable">muscle.</span>trlpadding = -filterpad;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span><span class="transposed_variable">muscle.</span>cutoff     = <span class="number" style="color:rgb(0,153,153)">20</span>; 
    <span class="matrix">[cfg, artifact]</span> = ft_artifact_muscle(cfg, run_clean);

    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span><span class="transposed_variable">eog.</span>trlpadding = -filterpad;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span><span class="transposed_variable">eog.</span>channel    = <span class="cell">{<span class="string" style="color:rgb(221,17,68)">'A150'</span> <span class="string" style="color:rgb(221,17,68)">'A124'</span>}</span>;
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span><span class="transposed_variable">eog.</span>cutoff     = <span class="number" style="color:rgb(0,153,153)">5</span>; 
    <span class="matrix">[cfg, artifact]</span> = ft_artifact_eog(cfg, run_clean);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% reject artifacts</span>
    <span class="transposed_variable">cfg.</span><span class="transposed_variable">artfctdef.</span>reject = <span class="string" style="color:rgb(221,17,68)">'complete'</span>;
    run_artfree = ft_rejectartifact(cfg, run_clean);

    <span class="comment" style="color:rgb(153,153,136);font-style:italic">% reduce to the original window</span>
    cfg = <span class="matrix">[]</span>;
    <span class="transposed_variable">cfg.</span>toilim = <span class="matrix">[-prestim poststim]</span>;
    run_artfree = ft_redefinetrial(cfg, run_artfree);

    run_data<span class="cell">{ri}</span> = run_artfree;
<span class="keyword" style="color:rgb(51,51,51);font-weight:bold">end</span></code></pre>
<p style="margin:1.2em 0px!important">On Mon, Jun 3, 2013 at 10:30 AM, "Jörn M. Horschig" <<a href="mailto:jm.horschig@donders.ru.nl" target="_blank">jm.horschig@donders.ru.nl</a>> wrote:</p>
<p style="margin:1.2em 0px!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Robin,<br>
<br>
it's not a bug that ft_fetch_data is not allowing for overlap. The function needs to be generic and eventually allow for fetching data extending over several trial segments. However, what should be the way to fetch  data that occurs twice, i.e. at the end of one trial and the beginning of another? If you have data with overlapping samples, it is not straight forward to define data from one trial as to be fetched and ignore the other. Since preprocessing options like filters are applied per trial segment, data will differ between trial segments if it overlaps. As there are a multitude of possibilities to deal with this and none of them is perfect (imho neither of them can even be called good), we decided to not allow for that.<br>

<br>
For your problem, however, imho you can define negative trial padding in the function call to ft_artifact_zvalue, which should effectively pad. Have you tried this rather than padding manually?<br>
<br>
Best,<br>
Jörn<div><div class="h5"><br>
<br>
On 5/31/2013 6:14 PM, Robin wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
I have a problem in preprocessing where I am getting this error:<br>
<br>
"""<br>
some of the requested samples occur twice in the data<br>
<br>
Error in ft_artifact_zvalue (line 262)<br>
       dat{trlop} = ft_fetch_data(data,        'header', hdr, 'begsample',<br>
       trl(trlop,1)-fltpadding, 'endsample', trl(trlop,2)+fltpadding,<br>
       'chanindx', sgnind, 'checkboundary', strcmp(cfg.continuous,'no<br>
Error in ft_artifact_muscle (line 158)<br>
     [tmpcfg, artifact] = ft_artifact_zvalue(tmpcfg, data);<br>
"""<br>
<br>
I think this is because I am manually adding some extra padding to the<br>
trials so that the artifact filtering can use that padding (I am doing<br>
the artifact filtering on data in memory which is output from<br>
ft_denoise_pca). So in this case it is not a problem if consecutive<br>
trials overlap a bit.<br>
<br>
I would therefore like to disable this error and wondered what is the<br>
best way to do it. I am a bit confused because ft_artifact_zvalue<br>
calls ft_fetch data with a "checkboundary" option which looks like it<br>
might be what I want (and set correctly), but ft_fetch_data doesn't<br>
seem to use that option. Instead it has an allowoverlap option.<br>
<br>
So for now I will manually add the allowoverlap option to the call in<br>
ft_artifact_zvalue, but I wondered what checkboundary doesn't appear<br>
in ft_fetch_data or if this might be a bug.<br>
<br>
Cheers<br>
<br>
Robin<br></div></div>
______________________________<u></u>_________________<br>
fieldtrip mailing list<br>
<a href="mailto:fieldtrip@donders.ru.nl" target="_blank">fieldtrip@donders.ru.nl</a><br>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/<u></u>mailman/listinfo/fieldtrip</a><br>
</blockquote>
<br>
<br>
-- <br>
Jörn M. Horschig<br>
PhD Student<br>
Donders Institute for Brain, Cognition and Behaviour<br>
Centre for Cognitive Neuroimaging<br>
Radboud University Nijmegen<br>
Neuronal Oscillations Group<br>
FieldTrip Development Team<br>
<br>
P.O. Box 9101<br>
NL-6500 HB Nijmegen<br>
The Netherlands<br>
<br>
Contact:<br>
E-Mail: <a href="mailto:jm.horschig@donders.ru.nl" target="_blank">jm.horschig@donders.ru.nl</a><br>
Tel:    +31-(0)24-36-68493<br>
Web: <a href="http://www.ru.nl/donders" target="_blank">http://www.ru.nl/donders</a><br>
<br>
Visiting address:<br>
Trigon, room 2.30<br>
Kapittelweg 29<br>
NL-6525 EN Nijmegen<br>
The Netherlands<br>
<br>
______________________________<u></u>_________________<br>
fieldtrip mailing list<br>
<a href="mailto:fieldtrip@donders.ru.nl" target="_blank">fieldtrip@donders.ru.nl</a><br>
<a href="http://mailman.science.ru.nl/mailman/listinfo/fieldtrip" target="_blank">http://mailman.science.ru.nl/<u></u>mailman/listinfo/fieldtrip</a><br>
</blockquote><p></p></div><p style="margin:1.2em 0px!important"></p>
</div>