[FieldTrip] define response onset as 0 point, looking back

Marcel van den Velde marcel.van.den.velde at gmail.com
Thu May 7 01:50:39 CEST 2020

Dear all,

I am doing a MEG analysis on hand movement preparation: subjects are
presented with visual stimuli (coded in the trigger channel) and have to
respond by moving their hand. The study requires that I investigate the
ERFs prior to the movement onset (but not capturing anything pre-stimulus).
How can I best move the 0 point from stimulus onset to movement onset and
look back?

What I have now is the following, but I am not sure whether this is correct:

First a trial definition calling an own function and an own added field to
assign the response time (cfg.trialdef.rt)

        % trial definition
        cfg = [];
        cfg.dataset = subject_meg_data;
        cfg.trialfun = ‘trialfun_move’;                           % <— own
        cfg.trialdef.rt = movement_rt_inseconds;       % <— own field, to
pass RTs on
        cfg.trialdef.eventtype  = 'UPPT001';
        cfg.trialdef.eventvalue = [1:32];
        cfg = ft_definetrial(cfg);

With as function:

function [trl, event] = trialfun_move(cfg)

        % read header information and events from dataset
        hdr   = ft_read_header(cfg.dataset);
        event = ft_read_event(cfg.dataset);

        % search for events of interest, get value and sample
        value  = [event(find(strcmp(cfg.trialdef.eventtype,
        sample = [event(find(strcmp(cfg.trialdef.eventtype,

        % define trial: starts at picture onset, stops at movement onset
        trl_begin = sample;
        trl_end   = sample + round(cfg.trialdef.rt * hdr.Fs);
        offset    = repmat(0, numel(value), 1);
        trl       = [trl_begin trl_end offset value cfg.trialdef.rt];

end % end function

The trial definition block is then followed by preprocessing and moving the
0 time point from picture onset to movement onset using ft_redefinetrial:

        % preprocessing
        cfg.channel = {'MEG'};
        cfg.continuous = 'yes';
        cfg.bpfilter = 'yes';
        cfg.bpfreq = [1 30];
        data = ft_preprocessing(cfg);

        % shift 0 time point from picture to movement onset
        cfg = [];
        cfg.offset = - round(movement_rt_inseconds * data.fsample);
        data = ft_redefinetrial(cfg, data);

Is this a correct approach, and am I correct in assuming that with this
last step, the 0 time point is now correctly shifted from picture onset to
movement onset, as the first sample is defined to be minus RT earlier than
the 0 time point? Is there a way to check this in the data structure?
Thanks for any help.

Best regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20200507/ad7da4d2/attachment.htm>

More information about the fieldtrip mailing list