UNPKG

gazeplotter

Version:

Gazeplotter is a Svelte application for visualizing eye-tracking data.

83 lines (82 loc) 3.35 kB
import { AbstractEyeDeserializer } from './AbstractEyeDeserializer.ts'; export class GazePointEyeDeserializer extends AbstractEyeDeserializer { cStart; cTime; cDurationOfFixation; cDurationOfBlink; cAOI; cStimulus; cFixID; mTime = null; mStart = null; mDurationOfEvent = null; mDurationOfFixation = null; mAOI = null; mStimulus = null; mCategory = null; mFixID = null; mHasFixationSegmentEnded = false; participant; // for this reducer, the participant is always the same (one file per participant) constructor(header, fileName) { super(); this.cStart = header.indexOf('FPOGS'); this.cTime = header.indexOf('FPOGS') - 1; this.cDurationOfFixation = header.indexOf('FPOGD'); this.cDurationOfBlink = header.indexOf('BKDUR'); this.cAOI = header.indexOf('AOI'); this.cStimulus = header.indexOf('MEDIA_NAME'); this.cFixID = header.indexOf('FPOGID'); this.participant = fileName.split('_')[0]; } deserialize(row) { let result = null; const time = row[this.cTime]; const start = row[this.cStart]; const durationOfFixation = row[this.cDurationOfFixation]; const durationOfBlink = row[this.cDurationOfBlink]; const aoi = row[this.cAOI] === '' ? null : row[this.cAOI]; const stimulus = row[this.cStimulus]; const fixID = row[this.cFixID]; const isBlink = durationOfBlink !== '0.00000'; const category = isBlink ? 'Blink' : 'Fixation'; const hasFixationSegmentEnded = Number(durationOfFixation) === this.mDurationOfEvent; const isToFlush = this.mStimulus !== stimulus || this.mFixID !== fixID || this.mCategory === 'Blink' || (hasFixationSegmentEnded && !this.mHasFixationSegmentEnded); if (isToFlush) { result = this.flush(); } if (this.mDurationOfFixation !== Number(durationOfFixation) || this.mStimulus !== stimulus || this.mFixID !== fixID || isBlink) { this.mStimulus = stimulus; this.mAOI = aoi; this.mCategory = category; this.mDurationOfEvent = isBlink ? Number(durationOfBlink) : Number(durationOfFixation); this.mDurationOfFixation = Number(durationOfFixation); this.mTime = Number(time); this.mStart = isBlink ? Number(time) - this.mDurationOfEvent : Number(start); this.mFixID = fixID; } this.mHasFixationSegmentEnded = hasFixationSegmentEnded; return result; } finalize() { return this.flush(); } flush() { if (this.mStimulus === null || this.mCategory === null || this.mStart === null || this.mDurationOfEvent === null) return null; let r = { aoi: this.mAOI === null ? null : [this.mAOI], category: this.mCategory, end: String(this.mTime), participant: this.participant, start: String(this.mStart), stimulus: this.mStimulus }; if (this.mStart === 0 && this.mTime === 0) { console.warn('start and end are 0 - Probable blink issue', this.mFixID, this.mStimulus, this.participant); r = null; } this.mTime = null; this.mStart = null; return r; } }