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
- 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.
- Find the files. Run directories land under
StateUtility.State.dataStore.runDataPath— see File layout for the exact locations on your platform. - Start from ExperienceState.
ExperienceState.csvis the authoritative timeline and the join key for every other file. - Read or skip the concepts pages depending on what you need:
- Regular vs irregular — the most important mental model.
- Timing — which clock columns mean what.
- Join keys — how to line rows up across files.
- 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 disk | File layout |
| Figure out what a column in my CSV means | The specific stream page, then Column conventions |
| Align rows across two CSVs | Join keys |
| Correlate LABO data with EEG / biopac | Cross-device sync recipe |
| Compute reaction times | Reaction time recipe |
| Know when exactly a row was recorded | Timing |
| 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. MonotonicExecutionTimeis the reference clock — use it for analysis.
See Regular vs Irregular and Timing for why.