[FieldTrip] redefine trials using different trigger as zero point

KatrinH Heimann katrinheimann at gmail.com
Thu Oct 2 21:53:16 CEST 2014


Dear Anne, dear all,

I did try to create a customized trialfunction serving my needs.
This is what I came up with:

function [trl, event] = response_trialfun(cfg);



% read the header information and the events from the data

hdr   = ft_read_header(cfg.dataset);

event = ft_read_event(cfg.dataset);





% search for "trigger" events

value  = [event(find(strcmp('ceck', {event.value}))).value]';

sample = [event(find(strcmp('ceck', {event.value}))).sample]';



% search for "trigger" events

value2  = [event(find(strcmp('resp', {event.value}))).value]';

sample2 = [event(find(strcmp('resp', {event.value}))).sample]';



% determine the number of samples before and after the trigger

pretrig  = -round(cfg.trialdef.prestim  * hdr.Fs);

posttrig =  round(cfg.trialdef.poststim * hdr.Fs);



% look for the combination of a trigger "7" followed by a trigger "64"

% for each trigger except the last one

trl = [];



    trlbegin = sample + pretrig

    trlend   = sample + posttrig

    offset   = pretrig

    RT       = sample2 - sample

    newtrl   = [trlbegin trlend RT];

    trl      = [trl; newtrl];



end



In fact it seems to work, the trials look good and the RT is computed
correctly. Only that after the preprocessing (with ft_preprocessing:


%% preprocess data

cfg.channel    = 'all';

cfg.preproc.detrend       = 'yes';

cfg.preproc.demean = 'yes';

cfg.preproc.baselinewindow = [-0.1 0]



mov_data           = ft_preprocessing(cfg);

%

) there is no mov_data.trialinfo created. I thought that the information in
trl above would be saved there. Without those I am not able to do the
redefinition as planned (like Anne proposed:




        offset      = (mov_data.trialinfo(:,3));

        prestim     = 0.75;

        poststim    = 0.75;



        cfg           = [];

        cfg.begsample = round(offset - prestim*data.fsample);

        cfg.endsample = round(offset + poststim*data.fsample);

        mov_data_small = ft_redefinetrial(cfg, mov_data);



        % then shift the time axis

        cfg = [];

        cfg.offset = -offset;

        mov_data_small = ft_redefinetrial(cfg, move_data_small);




How come the information is not stored? Somebody an idea?

Thanks a million

Katrin

2014-09-28 18:35 GMT+02:00 Anne Urai <anne.urai at gmail.com>:

> Dear Katrin,
>
> if you use a custom trialfun (
> http://fieldtrip.fcdonders.nl/example/making_your_own_trialfun_for_conditional_trial_definition)
> you can code the time between stimulus onset and response in an additional
> column. That way, you can shift the time axis of the data by this amount on
> each trial. For example:
>
>         % redefine trials
>         offset      = (data.trialinfo(:,RTcol));
>         prestim     = 1;
>         poststim    = 2;
>
>
>         cfg           = [];
>         cfg.begsample = round(offset - prestim*data.fsample);
>         cfg.endsample = round(offset + poststim*data.fsample);
>         data = ft_redefinetrial(cfg, data);
>
>
>         % then shift the time axis
>         cfg = [];
>         cfg.offset = -offset;
>         data = ft_redefinetrial(cfg, data);
>
>         % timelock
>         cfg = [];
>         cfg.keeptrials = 'yes';
>         data = ft_timelockanalysis(cfg, data);
>
> That way, your new data structure will now be response locked. Note that
> the timelockanalysis is optional, and only works when you have trials that
> are all the same length.
>
> If you do not want to use a custom trialfun, you could also rerun the same
> analysis as you have for the stimulus-locked data, but then taking the
> response code as your eventvalue.
>
> Good luck,
>
> ---
> Anne E. Urai, MSc
> PhD student | Institut f├╝r Neurophysiologie und Pathophysiologie
> | Universit├Ątsklinikum Hamburg-Eppendorf
> Martinistrasse 52, 20246 Hamburg, Germany | http://anneurai.wordpress.com
>
>
>
>
>
> On 28 Sep 2014, at 11:54, KatrinH Heimann <katrinheimann at gmail.com> wrote:
>
> Dear all,
> I know I asked this already twice, but I did not get the right answer yet
> and just cannot figure it out myself.
> So, I did cut my data in quite large trials using ft_define trial and
> logging it to the beginning of a slide.
>
> cfg                     = [];
> cfg.dataset             = name;
> cfg.trialfun            = 'ft_trialfun_general'; % this is the default
> cfg.trialdef.eventtype  = 'trigger';
> cfg.trialdef.eventvalue = 'ceck'; % the value of the stimulus trigger
> cfg.trialdef.prestim    = 0.216; % in seconds
> cfg.trialdef.poststim   = 7.284; % in seconds (max time of check slide)
> cfg                     = ft_definetrial(cfg);
>
>
> % cancel out training trials
> cfg.trl([1:4],:) = [];
>
>
> %change timeline according to constant offset of 16 ms = 8 samples
> (because recorded with 500 hz)in
> %structure trial - plus delay reported by EGE = 18 ms = 9 samples
> cfg.trl(:,3)=cfg.trl(:,3)-17
>
>
>
>
>
>  Then I preprocessed these trials
>
> %% preprocess data
> cfg.channel    = 'all';
> cfg.preproc.detrend       = 'yes';
> cfg.preproc.demean = 'yes';
> cfg.preproc.baselinewindow = [-0.1 0]
> %
> mov_data           = ft_preprocessing(cfg);
> %
> save (strcat(sb,'mov_data') , 'mov_data')
>
>
>
> Now I wanna cut out smaller pieces that are centered around another
> trigger - the response of the subject. I did not use this trigger at the
> beginning as then defining a baselinewindow is impossible (as the response
> is always happening at a different time).
>
> I tried to just use ft_definetrial again, as I don't see a possibility to
> use ft_redefine trial:
>
> cfg = []
> cfg.dataset= strcat(sb,'mov_data.mat')
> cfg.trialdef.eventtype  = 'trigger';
> cfg.trialdef.eventvalue = 'resp'
> cfg.trialdef.prestim    = 0.75
> cfg.trialdef.poststim   = 0.75
>
>
> mov_data_small = ft_definetrial(cfg)
>
> but I get the error message:
>
> Error using ft_read_header (line 1833)
> unsupported header format (matlab)
>
> Error in ft_trialfun_general (line 71)
> hdr = ft_read_header(cfg.headerfile, 'headerformat', cfg.headerformat);
>
> Error in ft_definetrial (line 169)
>     [trl, event] = feval(cfg.trialfun, cfg);
>
>
>
>  I wonder if that is as the file produced by fieldtrip during the
> preprocessing is not one that is specified for ft_read_header - but how do
> I deal with this?
>
> Thanks a lot for your help
>
> Katrin
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20141002/11dca49f/attachment.html>


More information about the fieldtrip mailing list