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

Schoffelen, J.M. (Jan Mathijs) jan.schoffelen at donders.ru.nl
Thu May 7 09:43:26 CEST 2020

Dear Marcel,

This looks good, indeed. To be sure about this, you can check the first elements in each of the trials’ corresponding time vectors. These now should be the negative of the trial specific reaction time: data.time{i}(1) ~= -movement_rt_inseconds(i); (give or take a sample)

Best wishes,

On 7 May 2020, at 01:50, Marcel van den Velde <marcel.van.den.velde at gmail.com<mailto:marcel.van.den.velde at gmail.com>> wrote:

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 function
        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, {event.type}))).value]';
        sample = [event(find(strcmp(cfg.trialdef.eventtype, {event.type}))).sample]';

        % define trial: starts at picture onset, stops at movement onset (response)
        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,
fieldtrip mailing list

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

More information about the fieldtrip mailing list