## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4.5
)
library(gp3bayes)

## ----case-sim-----------------------------------------------------------------
sim <- simulate_pupil_timecourse(
  n_participants = 8,
  trials_per_participant = 6,
  sampling_frequency = 20,
  time_window = c(-0.5, 1.5),
  condition_difference = 0.18,
  blink_trial_probability = 0.04,
  include_gaze = TRUE,
  include_luminance = TRUE,
  seed = 20260814
)

## ----case-gazepoint-----------------------------------------------------------
gp_like <- data.frame(
  TIME = sim$data$event_time[1:20],
  LPD = 15 + sim$data$pupil_mm[1:20],
  LPV = as.integer(!is.na(sim$data$pupil_mm[1:20])),
  BPOGX = sim$data$gaze_x[1:20],
  BPOGY = sim$data$gaze_y[1:20],
  BPOGV = 1
)
gazepoint_pupil_mapping_table(inspect_gazepoint_pupil_schema(gp_like))

## ----case-workflow------------------------------------------------------------
contract <- create_pupil_contract(
  outcome_col = "pupil_mm",
  participant_col = "participant_id",
  trial_col = "trial_id",
  item_col = "item_id",
  condition_col = "condition",
  time_col = "event_time",
  pupil_unit = "millimetres",
  sampling_frequency = 20,
  eye = "combined",
  blink_col = "blink",
  interpolation_col = "interpolated",
  gaze_x_col = "gaze_x",
  gaze_y_col = "gaze_y",
  luminance_col = "luminance",
  baseline_window = c(-0.5, 0),
  preprocessing_provenance = "gp3bayes deterministic simulator"
)
prepared <- prepare_pupil_timecourse(sim$data, contract)
readiness <- audit_pupil_readiness(prepared)
measurement <- audit_pupil_measurement_context(prepared)
spec <- specify_pupil_timecourse_model(
  prepared,
  smooth_basis_dimension = 6,
  autocorrelation = "ar1"
)
pupil_readiness_table(readiness)
pupil_measurement_audit_table(measurement)
pupil_specification_table(spec)

## ----case-fit, eval=FALSE-----------------------------------------------------
# fit <- fit_pupil_model_backend(spec, backend = "cmdstanr", cores = 2)
# trajectory <- estimate_pupil_trajectory(
#   predict_pupil_trajectory(fit, ndraws = 200)
# )
# window <- estimate_pupil_window(
#   predict_pupil_trajectory(fit, ndraws = 200),
#   window = c(0.3, 1.0)
# )
# auc <- estimate_pupil_auc(
#   predict_pupil_trajectory(fit, ndraws = 200),
#   window = c(0.3, 1.0)
# )
# ppc <- check_pupil_posterior_predictive(fit, ndraws = 200)
# diag <- diagnose_pupil_fit(fit)
# 
# plan <- create_pupil_validation_plan(
#   prepared,
#   target = "new_trial_known_participant",
#   K = 4
# )
# validation <- validate_pupil_model(fit, plan, execute = TRUE)

## ----case-sensitivity---------------------------------------------------------
spec_for_sensitivity <- specify_pupil_timecourse_model(
  prepared,
  autocorrelation = "none",
  smooth_basis_dimension = 5
)
suite <- create_pupil_sensitivity_suite(
  spec_for_sensitivity,
  baseline_windows = list(c(-0.5, -0.1), c(-0.4, -0.1)),
  baseline_window_operation = "subtract",
  interpolation_policy = c("retain", "exclude_flagged"),
  gaze_adjustment = c("none", "declared_covariates"),
  luminance_adjustment = c("none", "declared_covariate"),
  analysis_windows = list(c(0.3, 1.0))
)
head(pupil_sensitivity_table(suite))

