---
title: "Importing and Harmonizing Eye-Tracking Exports"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Importing and Harmonizing Eye-Tracking Exports}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE)
```

The adapter layer converts source-specific exports into explicit canonical
records, streams, samples, eye samples, episodes, events, intervals, AOIs,
biometrics, quality results, and provenance.

## Automatic detection

```{r}
detect_eye_format("participant-01.tsv")
x <- read_eye_export("participant-01.tsv", vendor = "auto")
```

Detection is intentionally conservative. If no adapter is sufficiently
confident, use an explicit mapping.

## Generic mapping

```{r}
mapping <- eye_mapping(
  participant = "subject",
  recording = "recording",
  timestamp = "timestamp_us",
  x = "gaze_x",
  y = "gaze_y",
  pupil_left = "pupil_left_mm",
  pupil_right = "pupil_right_mm",
  trial = "trial_id",
  item = "item_id",
  response = "answer",
  score = "correct",
  response_time = "response_time_ms"
)

x <- read_eye_generic(
  "export.csv",
  mapping = mapping,
  time_unit = "microseconds",
  coordinate_space = "display_pixels_top_left",
  screen_width = 1920,
  screen_height = 1080,
  pupil_unit = "millimetres"
)
```

## Dedicated vendor adapters

```{r}
tobii   <- read_tobii("tobii-pro-lab.tsv")
neon    <- read_pupil_neon("neon-export-folder")
core    <- read_pupil_core("pupil-player-export")
eyelink <- read_eyelink_asc("recording.asc")
smi     <- read_smi("begaze-export.txt")
```

## Preserve source meaning

```{r}
x$raw
x$vendor_metadata
x$coordinate_spaces
x$streams
x$provenance

audit_coordinate_spaces(x)
audit_timebase(x)
audit_clock_sync(x)
```

No coordinate conversion, interpolation, resampling, or event reclassification
should occur silently.
