41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
export function readFileAsync(file) {
|
|
return new Promise((resolve, reject) => {
|
|
let reader = new FileReader();
|
|
reader.onload = () => {
|
|
resolve(reader.result);
|
|
};
|
|
reader.onerror = reject;
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
export function aggregateWordFixations(data) {
|
|
//slicing off first fixation since it is the calibration in center
|
|
let sorted = data.filter( item => item.word_id ).slice(1).sort((a,b) => a.word_id-b.word_id);
|
|
//add first back in
|
|
sorted.unshift(data[0]);
|
|
//aggregate fixations for same words in bags
|
|
let aggregate = sorted.reduce( (acc, val) => {
|
|
if (acc[0].length == 0 || val.word_id == acc[acc.length-1][0].word_id) {
|
|
acc[acc.length-1].push(val)
|
|
} else {
|
|
acc.push([val]);
|
|
}
|
|
return acc;
|
|
}, [[]]);
|
|
//average fixation coordinates and sum duration for each bag
|
|
return aggregate.map( bag => {
|
|
let word = bag[0].word;
|
|
let word_id = bag[0].word_id;
|
|
let x=0;
|
|
let y=0;
|
|
let dur=0;
|
|
for (let fixation of bag) {
|
|
x += fixation.x/bag.length;
|
|
y += fixation.y/bag.length;
|
|
dur += fixation.dur;
|
|
}
|
|
return {x, y, dur, word_id, word};
|
|
});
|
|
}
|