Skip to main content

Data

LABO captures experiments to disk as CSV files. This section explains what gets captured, how it's structured on disk, and how to analyse it — from first-run orientation to stimulus-locked averaging.

How to get data out — quickstart

  1. Run your experience. When a session starts, LABO creates a run directory and opens a CSV file for each enabled stream. Close the app cleanly (don't force-quit) to flush the last rows.
  2. Find the files. Run directories land under StateUtility.State.dataStore.runDataPath — see File layout for the exact locations on your platform.
  3. Start from ExperienceState. ExperienceState.csv is the authoritative timeline and the join key for every other file.
  4. Read or skip the concepts pages depending on what you need:
  5. Run an analysis. Pick a recipe — each has a copy-pasteable pandas snippet.

What's in this section

  • Data Viewer — the in-editor UI for browsing captured data without leaving Unity. For UI reference.
  • Data Streams — the on-disk CSV schema. Every stream's columns, timing semantics, and gotchas. The bulk of this section.
    • Concepts — cross-cutting knowledge (timing, join keys, column conventions, file layout).
    • Regular streams — per-frame / per-tick streams (pose, gaze, telemetry).
    • Irregular streams — trigger-fired streams (events, variables, input, expressions, agents).
  • Recipes — analysis cookbook with pandas + R snippets. Reaction time, stimulus-locked averaging, gaze paths, cross-device sync.

Which page answers which question

I want to...Go to
Understand the file-per-file layout on diskFile layout
Figure out what a column in my CSV meansThe specific stream page, then Column conventions
Align rows across two CSVsJoin keys
Correlate LABO data with EEG / biopacCross-device sync recipe
Compute reaction timesReaction time recipe
Know when exactly a row was recordedTiming
Troubleshoot "why is my CSV empty / missing?"FAQ / Pitfalls

A note on terminology

LABO uses "regular" and "irregular" rather than "event-driven" / "behavioural" to describe stream families. If you've used earlier LABO versions, the short version is:

  • "Event-driven" streams are now irregular.
  • "Behavioural data" (eye / face / hand / body) is part of the regular family.
  • Every time column is ...Time, not ...Timestamp.
  • MonotonicExecutionTime is the reference clock — use it for analysis.

See Regular vs Irregular and Timing for why.