Reading Measures#
Reading measures are word-level eye-movement metrics calculated from AOI-mapped
fixations. The pipeline computes them per trial by first annotating fixations with run
and pass information, then deriving a set of standard measures for each word. The
implementation lives in metrics.reading.reading_measures.
Fixation Annotation#
Every fixation gets tagged with a run ID, first-pass status, regression flags, and neighbouring word indices. This annotation is the foundation for all measures. The pipeline groups fixations by trial, stimulus, and page, then computes:
run_id— contiguous fixations on the same word form a run. Each time the reader moves to a different word and comes back, a new run starts.is_first_pass— a run is first-pass if the word is entered from the left, no higher word index has been fixated before, and the word has not been entered before. All later revisits (regressions-in) are marked as non-first-pass.is_reg_in/is_reg_out— a regression occurs when the next fixation lands on a lower (regression-out) or the previous fixation came from a higher (regression-in) word index.is_first_fix— the very first fixation on the word in the entire trial.prev_word_idx/next_word_idx— word indices of the preceding and following fixation, used for saccade length calculation.
Fixation-based Measures#
Abbreviation |
Description |
|---|---|
FFD |
Duration of the first fixation on a word during first-pass reading, 0 if skipped in first-pass |
FD |
Duration of the first fixation on the word, regardless of pass |
FPF |
1 if the word was fixated in first-pass, 0 otherwise |
FPFC |
Number of first-pass fixations on the word |
FPRT |
Sum of all first-pass fixation durations (0 if skipped) |
FRT |
Sum of fixations from first entering the word until first leaving it (same as FPRT when the first run was first-pass) |
TFC |
Total number of fixations on the word |
TFT |
Sum of all fixations (FPRT + RRT) |
RR |
1 if the word had re-reading after first-pass, 0 otherwise |
RRT |
Sum of fixations that are not part of first-pass (TFT - FPRT) |
SFD |
Duration of the only first-pass fixation; 0 if skipped or multiple first-pass fixations |
Transition-based Measures#
Abbreviation |
Description |
|---|---|
LP |
Character index of the first fixation on the word (landing position) |
RBRT |
Sum of fixation durations on the word until a word to its right is fixated (RPD_inc - RPD_exc) |
RPD_exc |
Sum of regressive fixation durations after a first-pass regression until fixating a word to the right, excluding fixations on the word itself |
RPD_inc |
Sum of all fixations from first first-pass fixation on the word until fixating a word to its right (includes regressive fixations); 0 if not fixated in first-pass |
SL_in |
Saccade length leading to the first fixation on the word (in words); positive = progressive, negative = regressive |
SL_out |
Saccade length of the first saccade leaving the word (in words) |
TRC_in |
Number of regressive saccades landing on this word |
TRC_out |
Number of regressive saccades initiated from this word |
Output Format#
Reading measures are saved as one CSV per trial in reading_measures/<sid>/.
The filename follows the pattern {sid}_{trial}_{stimulus}_reading_measures.csv.
Each row is a word, with columns for the trial identifier, page number, word index, word
text, and all measures above. Words that were never fixated have zeros in all measure
columns and are marked as skipped = 1.
AOI Enlargement#
AOIs are enlarged vertically before mapping to cover the space between lines.
The original AOIs from the stimulus files only cover the exact character bounding box.
A fixation slightly above or below the line would miss the word. The enlarge_aois()
function in mapping.aoi extends each AOI upward and downward by half the inter-line
spacing, so fixations between lines still map to the correct character.