visualizing-human-and-neura.../src/helpers.js

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};
});
}