Save onset offset time 2020.2.10 online

OS (e.g. Win10): Windows 10
PsychoPy version (e.g. 1.84.x): 2020.2.10

Hi!

I want to know the duration for which a stimulus was presented in my experiment. I set the time on 4 seconds, but participants are allowed to be faster than that by continuing the experiment before the 4 seconds are ofer.

In order to know the time they could have looked at the stimuli, I want to know the onset/offset times (which I asked for in the builder view > image properties > data).

In my offline (i.e. psychopy on desktop) csv file, I get two colomns:

prpaint.started ā†’ with values like 2512985889997790 and 27450827699969500
prpaint.stopped ā†’ None (So I assume something already goes wrong here?)

When I try my experiment online, I get neither.

My question is therefore: How do I get the image presentation duration in my csv file in my online study?

I tried adding this to the Py and JS End Routine Code components in the same routine as I presented the image.

thisExp.addData('prpaint.stopped', prpaint.stopped)

psychoJS.experiment("prpaint.stopped", prpaint.stopped);

This gave me the error:

thisExp.addData('prpaint.stopped', prpaint.stopped)

AttributeError: ā€˜ImageStimā€™ object has no attribute ā€˜stoppedā€™

Thank you very much for any help

1 Like

Hi There,

You are correct that start and stop times are stored locally but not online. To save a stims start time online you would add a code component, set code type to JS and use:

// save the onset times of stimuli
thisExp.addData('stimName.tStart', stimName.tStart)

// save the onset times of stimuli (taking into account frames
thisExp.addData('stimName.frameNStart', stimName.frameNStart)

Saving offsets is a little tricker. What is stopping your stimulus from being presented? is it a keyboard response that ends the routine? in which case the response time from that key response would serve as your end time) is it a time when the stimulus is moved offscreen by something else? What you would need is a component something like this (code type set to auto ā†’ JS):

if myStim.pos[0] == -300:# checking when a stims x coordinate is -300 for example
    stopTime = myRoutineNameClock.getTime()

thisExp.addData('stopTime', stopTime)

** note only if using a pre 2021.2 version of psychopy** Remember, as per the crib sheet, PsychoPy Python to Javascript crib sheet - Google Docs to add a code component to the very start of your experiment, code type JS, and add thisExp=psychoJS.experiment; (so that the javascript version of your experiment knows what you are referring to when you save data to thisExp).

Hope this is helpful,
Becca

2 Likes

Thank you very much for your thorough reply!

I will try this online as soon as it is possible again.

Thanks for this @Becca . Does it matter which tab (Begin Routine, End Routine, etc.) this code goes in? Thanks!

It needs to be in the ā€œend routineā€ tab, as at the beginning of the routine, those values havenā€™t yet been measured (i.e. the stimulus hasnā€™t appeared at the time that code section runs).

1 Like