Skip to content

neon_recording

Modules:

  • calib

    Camera calibration utils

  • neon_recording

    Neon Recording

  • timeseries

Classes:

AudioTimeseries

AudioTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: BaseAVTimeseries

Audio frames

Attributes:

  • data

    Data as a numpy array

  • pd

    Data as a pandas DataFrame

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

data property

data

Data as a numpy array

pd property

pd

Data as a pandas DataFrame

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

BlinkTimeseries

BlinkTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: Timeseries[BlinkArray, BlinkRecord], BlinkProps

Blink event data.

Attributes:

  • data

    Data as a numpy array

  • pd

    Data as a pandas DataFrame

  • start_time

    Start timestamp of the blink.

  • stop_time

    Stop timestamp of the blink.

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

data property

data

Data as a numpy array

pd property

pd

Data as a pandas DataFrame

start_time class-attribute instance-attribute

start_time = fields[int64]('start_time')

Start timestamp of the blink.

stop_time class-attribute instance-attribute

stop_time = fields[int64]('stop_time')

Stop timestamp of the blink.

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

EventTimeseries

EventTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: Timeseries[EventArray, EventRecord], EventProps

Event annotations

Attributes:

  • by_name

    Return a dict of event_name => all ts

  • data

    Data as a numpy array

  • event (NDArray[str_]) –

    Event name

  • pd

    Data as a pandas DataFrame

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

by_name cached property

by_name

Return a dict of event_name => all ts

data property

data

Data as a numpy array

event class-attribute instance-attribute

event: NDArray[str_] = fields[str_]('event')

Event name

pd property

pd

Data as a pandas DataFrame

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

FixationTimeseries

FixationTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: Timeseries[FixationArray, FixationRecord], FixationProps

Fixation event data.

Attributes:

  • data

    Data as a numpy array

  • mean_gaze_point

    Mean gaze position in pixels. Note that this value may be a poor representation

  • pd

    Data as a pandas DataFrame

  • start_gaze_point

    Start gaze position in pixels.

  • start_time

    Start timestamp of fixation.

  • stop_gaze_point

    Stop gaze position in pixels.

  • stop_time

    Stop timestamp of fixation.

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

data property

data

Data as a numpy array

mean_gaze_point class-attribute instance-attribute

mean_gaze_point = fields[float32](['mean_gaze_x', 'mean_gaze_y'])

Mean gaze position in pixels. Note that this value may be a poor representation of the fixation in the presence of VOR movements.

pd property

pd

Data as a pandas DataFrame

start_gaze_point class-attribute instance-attribute

start_gaze_point = fields[float32](['start_gaze_x', 'start_gaze_y'])

Start gaze position in pixels.

start_time class-attribute instance-attribute

start_time = fields[int64]('start_time')

Start timestamp of fixation.

stop_gaze_point class-attribute instance-attribute

stop_gaze_point = fields[float32](['stop_gaze_x', 'stop_gaze_y'])

Stop gaze position in pixels.

stop_time class-attribute instance-attribute

stop_time = fields[int64]('stop_time')

Stop timestamp of fixation.

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

IMUTimeseries

IMUTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: Timeseries[ImuArray, ImuRecord], ImuProps

Motion and orientation data

Attributes:

  • acceleration

    Translational acceleration data.

  • angular_velocity

    Angular velocity data.

  • data

    Data as a numpy array

  • pd

    Data as a pandas DataFrame

  • rotation

    Rotation as a quaternion given as xyzw.

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

acceleration class-attribute instance-attribute

acceleration = fields[float64](['acceleration_x', 'acceleration_y', 'acceleration_z'])

Translational acceleration data.

angular_velocity class-attribute instance-attribute

angular_velocity = fields[float64](['angular_velocity_x', 'angular_velocity_y', 'angular_velocity_z'])

Angular velocity data.

data property

data

Data as a numpy array

pd property

pd

Data as a pandas DataFrame

rotation class-attribute instance-attribute

rotation = fields[float64](['quaternion_x', 'quaternion_y', 'quaternion_z', 'quaternion_w'])

Rotation as a quaternion given as xyzw.

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

NeonRecording

NeonRecording(rec_dir_in: Path | str)

Parameters:

  • rec_dir_in (Path | str) –

    Path to the recording directory.

Raises:

  • FileNotFoundError

    If the directory does not exist or is not valid.

  • SensorError

    If accessing a stream that is missing

Methods:

  • audio

    Audio from the scene video

  • blinks

    Blink data

  • events

    Event annotations

  • eye

    Frames of video from the eye cameras

  • eyeball

    Eye state data

  • eyelid

    Eyelid data

  • fixations

    Fixations data

  • gaze

    2D bincular gaze data in scene-camera space

  • gaze_monocular_left

    2D gaze data from the left-eye in scene-camera space

  • gaze_monocular_right

    2D gaze data from the right-eye in scene-camera space

  • imu

    Motion and orientation data

  • pupil

    Pupil diameter data

  • saccades

    Saccades data

  • scene

    Frames of video from the scene camera

  • worn

    Worn (headset on/off) data

Attributes:

  • calibration (Calibration | None) –

    Device camera calibration data

  • device_serial (str | None) –

    Device serial number

  • duration (int) –

    Recording Duration (nanoseconds)

  • id (str | None) –

    UUID of the recording

  • info (dict) –

    Information loaded from info.json

  • start_time (int) –

    Start timestamp (nanoseconds since 1970-01-01)

  • stop_time (int) –

    Stop timestamp (nanoseconds since 1970-01-01)

  • wearer (dict) –

    Wearer information containing uuid and name

Source code in src/pupil_labs/neon_recording/neon_recording.py
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def __init__(self, rec_dir_in: pathlib.Path | str):
    """Initialize the NeonRecording object

    Args:
        rec_dir_in: Path to the recording directory.

    Raises:
        FileNotFoundError: If the directory does not exist or is not valid.
        NeonRecording.SensorError: If accessing a stream that is missing

    """
    self._rec_dir = UPath(rec_dir_in).resolve()
    if not self._rec_dir.exists() or not self._rec_dir.is_dir():
        raise FileNotFoundError(
            f"Directory not found or not valid: {self._rec_dir}"
        )

calibration cached property

calibration: Calibration | None

Device camera calibration data

device_serial property

device_serial: str | None

Device serial number

duration property

duration: int

Recording Duration (nanoseconds)

id property

id: str | None

UUID of the recording

info cached property

info: dict

Information loaded from info.json

start_time property

start_time: int

Start timestamp (nanoseconds since 1970-01-01)

stop_time property

stop_time: int

Stop timestamp (nanoseconds since 1970-01-01)

wearer cached property

wearer: dict

Wearer information containing uuid and name

audio

audio() -> AudioTimeseries

Audio from the scene video

Source code in src/pupil_labs/neon_recording/neon_recording.py
187
188
189
190
@sensor_loader
def audio(self) -> AudioTimeseries:
    """Audio from the scene video"""
    return AudioTimeseries(self)
blinks() -> BlinkTimeseries

Blink data

Source code in src/pupil_labs/neon_recording/neon_recording.py
182
183
184
185
@sensor_loader
def blinks(self) -> BlinkTimeseries:
    """Blink data"""
    return BlinkTimeseries(self)

events

events() -> EventTimeseries

Event annotations

Source code in src/pupil_labs/neon_recording/neon_recording.py
167
168
169
170
@sensor_loader
def events(self) -> EventTimeseries:
    """Event annotations"""
    return EventTimeseries(self)

eye

eye() -> EyeVideoTimeseries

Frames of video from the eye cameras

Source code in src/pupil_labs/neon_recording/neon_recording.py
162
163
164
165
@sensor_loader
def eye(self) -> EyeVideoTimeseries:
    """Frames of video from the eye cameras"""
    return EyeVideoTimeseries(self)

eyeball

eyeball() -> EyeballTimeseries

Eye state data

Source code in src/pupil_labs/neon_recording/neon_recording.py
152
153
154
155
@sensor_loader
def eyeball(self) -> EyeballTimeseries:
    """Eye state data"""
    return EyeballTimeseries(self)

eyelid

eyelid() -> EyelidTimeseries

Eyelid data

Source code in src/pupil_labs/neon_recording/neon_recording.py
147
148
149
150
@sensor_loader
def eyelid(self) -> EyelidTimeseries:
    """Eyelid data"""
    return EyelidTimeseries(self)

fixations

fixations() -> FixationTimeseries

Fixations data

Source code in src/pupil_labs/neon_recording/neon_recording.py
172
173
174
175
@sensor_loader
def fixations(self) -> FixationTimeseries:
    """Fixations data"""
    return FixationTimeseries(self)

gaze

gaze() -> GazeTimeseries

2D bincular gaze data in scene-camera space

Source code in src/pupil_labs/neon_recording/neon_recording.py
122
123
124
125
@sensor_loader
def gaze(self) -> GazeTimeseries:
    """2D bincular gaze data in scene-camera space"""
    return GazeTimeseries(self)

gaze_monocular_left

gaze_monocular_left() -> GazeLeftTimeseries

2D gaze data from the left-eye in scene-camera space

Source code in src/pupil_labs/neon_recording/neon_recording.py
127
128
129
130
@sensor_loader
def gaze_monocular_left(self) -> GazeLeftTimeseries:
    """2D gaze data from the left-eye in scene-camera space"""
    return GazeLeftTimeseries(self)

gaze_monocular_right

gaze_monocular_right() -> GazeRightTimeseries

2D gaze data from the right-eye in scene-camera space

Source code in src/pupil_labs/neon_recording/neon_recording.py
132
133
134
135
@sensor_loader
def gaze_monocular_right(self) -> GazeRightTimeseries:
    """2D gaze data from the right-eye in scene-camera space"""
    return GazeRightTimeseries(self)

imu

imu() -> IMUTimeseries

Motion and orientation data

Source code in src/pupil_labs/neon_recording/neon_recording.py
137
138
139
140
@sensor_loader
def imu(self) -> IMUTimeseries:
    """Motion and orientation data"""
    return IMUTimeseries(self)

pupil

pupil() -> PupilTimeseries

Pupil diameter data

Source code in src/pupil_labs/neon_recording/neon_recording.py
142
143
144
145
@sensor_loader
def pupil(self) -> PupilTimeseries:
    """Pupil diameter data"""
    return PupilTimeseries(self)

saccades

saccades() -> SaccadeTimeseries

Saccades data

Source code in src/pupil_labs/neon_recording/neon_recording.py
177
178
179
180
@sensor_loader
def saccades(self) -> SaccadeTimeseries:
    """Saccades data"""
    return SaccadeTimeseries(self)

scene

scene() -> SceneVideoTimeseries

Frames of video from the scene camera

Source code in src/pupil_labs/neon_recording/neon_recording.py
157
158
159
160
@sensor_loader
def scene(self) -> SceneVideoTimeseries:
    """Frames of video from the scene camera"""
    return SceneVideoTimeseries(self)

worn

worn() -> WornTimeseries

Worn (headset on/off) data

Source code in src/pupil_labs/neon_recording/neon_recording.py
192
193
194
195
@sensor_loader
def worn(self) -> WornTimeseries:
    """Worn (headset on/off) data"""
    return WornTimeseries(self)

Timeseries

Timeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: TimeseriesProps, Generic[ArrayType, RecordType]

Base class for all Neon timeseries data.

Attributes:

  • data

    Data as a numpy array

  • pd

    Data as a pandas DataFrame

  • time

    The moment these data were recorded

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

data property

data

Data as a numpy array

pd property

pd

Data as a pandas DataFrame

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

VideoTimeseries

VideoTimeseries(recording: NeonRecording, data: ArrayType | None = None)

Bases: BaseAVTimeseries

Video frames from a camera

Attributes:

  • data

    Data as a numpy array

  • height (int | None) –

    Height of the video

  • pd

    Data as a pandas DataFrame

  • time

    The moment these data were recorded

  • width (int | None) –

    Width of the video

Source code in src/pupil_labs/neon_recording/timeseries/timeseries.py
50
51
52
53
54
def __init__(self, recording: "NeonRecording", data: ArrayType | None = None):
    self.recording = recording
    if data is None:
        data = self._load_data_from_recording(recording)
    self._data = data

data property

data

Data as a numpy array

height cached property

height: int | None

Height of the video

pd property

pd

Data as a pandas DataFrame

time class-attribute instance-attribute

time = fields[int64](TIMESTAMP_FIELD_NAME)

The moment these data were recorded

width cached property

width: int | None

Width of the video