Reference

Data output

Every file RSLogger writes and every column in it. The headers below were taken from the version 0.2.16 source.

Session folder

RSLogger creates one folder per session inside the folder you choose when you click Start. Each module writes into its own subfolder. A control file at the top level records every button press.

session_YYYYMMDD_HHMMSS/
├── YYYYMMDD_HHMMSS_CONTROL.csv
├── Cameras/
│   └── <camera id>/
│       ├── <token>_CAM_trial<NNN>_<camera>.mp4
│       └── <token>_CAM_trial<NNN>_<camera>_timing.csv
├── picam0/                                       (CSI camera, Raspberry Pi)
│   ├── <token>_CSI_trial<NNN>_<camera>.avi
│   └── <token>_CSI_trial<NNN>_<camera>_timing.csv
├── Audio/
│   ├── <token>_AUD_trial<NNN>_MIC<n>_<microphone>.wav
│   └── <token>_AUD_trial<NNN>_MIC<n>_<microphone>_timing.csv
├── EyeTracker-Neon/
│   ├── <token>_ET_trial<NNN>_WORLD_<w>x<h>_<fps>fps.mp4
│   ├── <token>_ET_trial<NNN>_EYES_384x192_<fps>fps.mp4
│   ├── <token>_ET_trial<NNN>_AUDIO.wav
│   ├── <token>_ET_trial<NNN>_GAZE.csv
│   ├── <token>_ET_trial<NNN>_EVENTS.csv
│   └── <token>_ET_trial<NNN>_IMU.csv
├── DRT/
│   └── <token>_DRT_<device>.csv
├── VOG/
│   └── <token>_VOG_<port>.csv
├── GPS/
│   └── <token>_GPS_<device>.csv
└── Notes/
  └── <token>_NTS_trial<NNN>_notes.csv

File names

PartMeaningExample
<token>The session folder’s timestamp20260318_143022
<NNN>Trial number, three digits001
<camera>, <microphone>The device name in lower case with spaces removedhdprowebcamc920
<camera id>The camera’s stable identifierusb_1-2.3 on Linux, 0 on macOS and Windows
<device>, <port>The serial port, lower case, with / and : replaced by _dev_ttyacm0, wDRT_dev_ttyacm0

Cameras, audio, the eye tracker and notes write a new file set for each trial. The DRT, the goggles and GPS keep one file per device open for the whole session and append a row for each event, so the trial is read from the trial column.

Columns shared by every module

Every CSV that a module writes starts with the same six columns.

ColumnTypeDescription
trialintRSLogger’s trial number, counted from 1 in each session. In the DRT file this column holds the device’s stimulus count instead, see below
modulestringThe module name
device_idstringThe device the row came from
labelstringThe Trial Label typed in the main window. Empty if none
record_time_unixfloatHost wall-clock time when the row’s data reached RSLogger. Seconds since 1970-01-01 UTC, six decimals
record_time_monofloatHost monotonic clock at the same instant. Seconds, nine decimals. See Synchronization

Control file

YYYYMMDD_HHMMSS_CONTROL.csv sits in the session folder and has one row per event in the main window.

ColumnDescription
record_time_unixHost wall-clock time, six decimals
record_time_monoHost monotonic clock, nine decimals
timestamp_utcThe same instant as ISO 8601 text in UTC, to the millisecond
event_typesession_start, session_stop, trial_start, trial_stop, button_press, or a module lifecycle event
detailsFor trial_start, the trial number and label. For session_start, the folder path. For button_press, which button

This file is the record of when you pressed Record and Pause, and it is the simplest way to find the start of a trial on the shared clock.

Cameras

One MP4 and one timing CSV per camera per trial. USB cameras write H.264 in an MP4 container, with AAC audio when the camera’s microphone is enabled. CSI cameras on the Raspberry Pi write MJPEG in an AVI container.

Timing CSV, 9 columns

ColumnDescription
The six shared columns. module is USBCameras or CSICameras
frame_indexFrame number in the video file, from 1
sensor_timestamp_nsThe camera sensor’s own timestamp in nanoseconds. CSI cameras only, 0 for USB cameras
video_ptsPresentation timestamp of the frame in the video container

For a USB camera, record_time_* is taken when the frame is read from the camera driver.

Audio

One WAV and one timing CSV per microphone per trial. The WAV is 16-bit PCM, one channel, at the sample rate in the module settings. A microphone with several channels is recorded from its first channel.

Timing CSV, 8 columns

ColumnDescription
The six shared columns. module is Audio
device_time_unixThe audio driver’s ADC timestamp for the chunk, in seconds, when the driver provides one. Otherwise empty
chunk_numberSequential chunk number, from 1

Each row is one chunk of samples as the driver delivered it. record_time_* is taken in the driver callback when the chunk arrives.

Eye tracker

Per trial: scene video, eye video, optional scene audio, and three CSV files. The scene video is H.264 in MP4 at the resolution and frame rate set in the module. The eye video is 384 × 192 pixels, both eyes side by side.

GAZE CSV, 36 columns

ColumnDescription
The six shared columns. module is EyeTracker
device_time_unixThe Neon’s timestamp for the sample, seconds since the Unix epoch on the Companion phone’s clock
device_time_nsThe same timestamp in nanoseconds
stream_typeWhich gaze record the Neon sent. The eye-state and eyelid columns are empty when the record does not carry them
worn1 when the Neon reports the glasses as worn, 0 when not
x, yGaze point in scene camera pixels, as the Neon reports it. The scene camera frame is 1600 × 1200
left_x, left_y, right_x, right_yGaze point per eye, same units
pupil_diameter_left, pupil_diameter_rightPupil diameter in millimetres
eyeball_center_left_x/y/z, eyeball_center_right_x/y/zEyeball centre in the scene camera’s 3D coordinates
optical_axis_left_x/y/z, optical_axis_right_x/y/zOptical axis direction per eye
eyelid_angle_top_left, eyelid_angle_bottom_left, eyelid_aperture_leftEyelid angles and aperture, left eye
eyelid_angle_top_right, eyelid_angle_bottom_right, eyelid_aperture_rightEyelid angles and aperture, right eye

EVENTS CSV, 24 columns

ColumnDescription
The six shared columns, then device_time_unix and device_time_ns as in the gaze file
event_typeFixation, saccade or blink, as the Neon classifies it
event_subtypeThe Neon’s category for the event
confidenceThe Neon’s confidence in the event
durationEvent duration
start_time_ns, end_time_nsEvent start and end on the Neon’s clock, nanoseconds
start_gaze_x, start_gaze_y, end_gaze_x, end_gaze_yGaze point at the start and end of the event
mean_gaze_x, mean_gaze_yMean gaze point during the event
amplitude_pixels, amplitude_angle_degSaccade amplitude in pixels and degrees
mean_velocity, max_velocitySaccade velocity

IMU CSV, 19 columns

ColumnDescription
The six shared columns, then device_time_unix and device_time_ns as in the gaze file
gyro_x, gyro_y, gyro_zAngular velocity
accel_x, accel_y, accel_zAcceleration
quat_w, quat_x, quat_y, quat_zHead orientation as a quaternion
temperatureIMU temperature

Units for the IMU, event and eye-state fields are those of the Pupil Labs real-time API, which the Neon documentation defines.

Detection response task

One CSV per DRT device for the whole session. Each row is one stimulus.

Wired DRT, 11 columns

ColumnDescription
trialThe device’s stimulus count. It restarts at 1 each time you press Record, so use label or the control file to tell trials apart
module, device_id, label, record_time_unix, record_time_monoAs in every module. module is DRT. record_time_* is taken when the device’s result message for the stimulus arrives
device_time_unixEmpty. The wired unit has no clock of its own
device_time_offsetStimulus onset in milliseconds since the device started the experiment, on the device’s clock
responsesNumber of button presses between this stimulus and the next
reaction_time_msOnset to first press in milliseconds, measured on the device. −1 when there was no press before the next stimulus
stim_type1 for the standard stimulus. 2 for the secondary stimulus on the two-stimulus firmware variant. Standard units only ever write 1

Wireless DRT, 11 columns

The same columns as the wired unit through reaction_time_ms, except that device_time_unix carries the device’s real-time clock, then:

ColumnDescription
battery_percentBattery charge, 0 to 100

RSLogger logs the reaction time as the device reports it. It does not apply the 100–2500 ms window that ISO 17488 uses to classify hits. The DRT page shows how to apply it in analysis.

Visual occlusion goggles

One CSV per goggle controller for the whole session. Each row is one trial.

Wired goggles, 9 columns

ColumnDescription
The six shared columns. module is VOG. record_time_* is taken when the trial’s result arrives from the controller
device_time_unixEmpty. The wired controller has no clock of its own
shutter_openTotal shutter open time for the trial in milliseconds, accumulated on the controller
shutter_closedTotal shutter closed time for the trial in milliseconds

Wireless goggles, 12 columns

The same nine columns, with device_time_unix carrying the device’s real-time clock, then:

ColumnDescription
shutter_totalshutter_open plus shutter_closed
lensLens state the row refers to: Open, Closed, Left or Right
battery_percentBattery charge, 0 to 100

GPS

One CSV per receiver for the whole session. Each row is one parsed NMEA sentence.

GPS CSV, 25 columns

ColumnDescription
The six shared columns. module is GPS. record_time_* is taken when the sentence is parsed on the host
device_time_unixThe UTC time carried in the NMEA sentence, as seconds since the Unix epoch. Empty if the sentence has no time
latitude_deg, longitude_degDecimal degrees. North and east are positive
altitude_mAltitude above mean sea level, metres
speed_mps, speed_kmh, speed_knots, speed_mphSpeed over ground in each unit
course_degCourse over ground, degrees from north
fix_qualityNMEA fix quality code. 0 no fix, 1 GPS, 2 differential
fix_modeFix mode as reported
fix_valid1 when the receiver reports a valid fix, 0 otherwise
satellites_in_use, satellites_in_viewSatellites in the solution, and visible
hdop, pdop, vdopHorizontal, position and vertical dilution of precision
sentence_typeNMEA sentence type, for example RMC or GGA
raw_sentenceThe sentence as received

RSLogger keeps a running snapshot of the fix, updates it from each sentence and writes the whole snapshot per row, so each row holds the latest known value of every field. A field is empty until a sentence that carries it has arrived.

Notes

One CSV per trial. Each row is one note.

Notes CSV, 8 columns

ColumnDescription
The six shared columns. module is Notes and device_id is notes. record_time_* is taken when you post the note
device_time_unixAlways empty
contentThe note text

Timestamp formats

TimestampFormatUse
record_time_unixSeconds since 1970-01-01 UTC, six decimalsAbsolute time. Comparable across computers whose clocks are set
record_time_monoSeconds on the host’s monotonic clock, nine decimals. The zero point is arbitraryDifferences between rows on the same computer in the same boot
timestamp_utc (control file)ISO 8601 text in UTC, millisecondsReading by eye
device_time_*Depends on the device, see each module aboveTiming on the device’s own clock

Six decimals on a wall-clock value and nine on a monotonic value describe how the numbers are written, not how accurately any event was timed. Synchronization explains what each timestamp does and does not tell you.