Hello PyschoPy community,
I have a simple task where I am recording gaze data with a tobii Fusion Eye tracker.
Each trial is composed of a Attention getter, a fixation cross and then a video.
The AOI is the video.
When we stop looking at the AOI, the next trial begins.
OS (e.g. Win10):
PsychoPy version (e.g. 1.84.x): PsychoPy2021.2.3
Standard Standalone? (y/n) standalone
What are you trying to achieve?:
I would like to calculate the looking time duration at the video.
In the output file, I get the number of looks, then the start time(AOI.timesOn) of each look and the stop time (AOI.timesOff) of each look. To get the duration, I would like to calculate the stop time of the last look - the start time of the first look.
Does anyone know how to do that ?
I imagine I need to put a custom code, at the end of the routine.
Note also that I cannot calculate that by doing video_stop - video_started, I need to work only with looking times.
Many thanks in advance !
You could add some custom code to the end of the routine that has the roi in it:
# dwell_time is total amount of time looked within ROI
dwell_time = 0.0
for i, onTime in enumerate(roi.timesOn):
dwell_time += roi.timesOff[i] - onTime
# look_period is the time between the first look start and the last look end.
look_period = 0.0
look_period = roi.timesOff[-1] - roi.timesOn
roi.dwellTime as the amount of time spent within the ROI across all looks, and
roi.lookPeriod as the last look end time - first look start time. Therefore roi.dwellTime <= roi.lookPeriod.
Thanks a lot Sol,
I actually found the second bit myself this morning but I hadn’t thought about the dwell time.
I am going to add it !
I’m also needing to calculate dwell and look times but I had data already collected to needed to do this on the output. Because of the formatting of the look times (comma separated times within brackets formatted as a string) it was a little tricky after the fact but I wrote a script that will do it. If anyone has a more efficient way of doing this please let me know.
data = data.fillna('')
data = data.groupby(["blocks.thisN","trial.thisN"]).max()
data = data.reset_index()
ROIs_on=['math_roi.timesOn', 'popup_roi.timesOn', 'pts_roi.timesOn', 'word_roi.timesOn', 'total_roi.timesOn']
ROIs_off=['math_roi.timesOff', 'popup_roi.timesOff', 'pts_roi.timesOff', 'word_roi.timesOff', 'total_roi.timesOff']
ROIs_dwell=['math_roi.dwell', 'popup_roi.dwell', 'pts_roi.dwell', 'word_roi.dwell', 'total_roi.dwell']
for i, roiOn in enumerate(ROIs_on):
roiOff = ROIs_off[i]
ondata = data[roiOn]
offdata = data[roiOff]
OnOffData = [ondata, offdata]
onTimesArray = 
offTimesArray = 
outputs = [onTimesArray, offTimesArray]
for j, lookdata in enumerate(OnOffData):
for trial in lookdata:
for time in trial:
dwell_times = 
for k in range(0, len(onTimesArray)):
diffs = list()
for on, off in zip (onTimesArray[k], offTimesArray[k]):
diff = off - on
dwell_time = sum(diffs)
data[roiOn] = onTimesArray
data[roiOff] = offTimesArray
data[ROIs_dwell[i]] = dwell_times