diff --git a/_images/tutorials_read_recording_19_1.png b/_images/tutorials_read_recording_17_1.png similarity index 100% rename from _images/tutorials_read_recording_19_1.png rename to _images/tutorials_read_recording_17_1.png diff --git a/_images/tutorials_read_recording_23_1.png b/_images/tutorials_read_recording_21_1.png similarity index 100% rename from _images/tutorials_read_recording_23_1.png rename to _images/tutorials_read_recording_21_1.png diff --git a/_sources/tutorials/read_recording.ipynb.txt b/_sources/tutorials/read_recording.ipynb.txt index 513a391..0d1a5e8 100644 --- a/_sources/tutorials/read_recording.ipynb.txt +++ b/_sources/tutorials/read_recording.ipynb.txt @@ -8,7 +8,7 @@ "In this tutorial, we will show how to load a single Neon recording downloaded from [Pupil Cloud](https://docs.pupil-labs.com/neon/pupil-cloud/).\n", "\n", "## Reading sample data\n", - "We will use a sample recording produced by the NCC Lab called `OfficeWalk`. It's a project with 2 recordings and multiple enrichments and can be downloaded with the `get_sample_data()` function:" + "We will use a sample recording produced by the NCC Lab called `OfficeWalk`. It's a project with 2 recordings and multiple enrichments and can be downloaded with the `get_sample_data()` function. It returns a [`Pathlib.Path`](https://docs.python.org/3/library/pathlib.html) object to the downloaded & unzipped directory." ] }, { @@ -17,7 +17,6 @@ "metadata": {}, "outputs": [], "source": [ - "import sys\n", "from pyneon import get_sample_data, NeonDataset, NeonRecording\n", "\n", "sample_dir = get_sample_data(\"OfficeWalk\")" @@ -47,7 +46,7 @@ "└── OfficeWalk_STATIC-IMAGE-MAPPER_ManualMap_csv\n", "```\n", "\n", - "The `Timeseries Data` folder contains what PyNeon calls a `NeonDataset`. It contains multiple recordings, each with its own `info.json` file and data files. These recordings can either be loaded individually as `NeonRecording`s or as a wholist `NeonDataset`.\n", + "The `Timeseries Data` folder contains what PyNeon calls a [`NeonDataset`](https://ncc-brain.github.io/PyNeon/reference/dataset.html#pyneon.NeonDataset). It contains multiple recordings, each with its own `info.json` file and data files. These recordings can either be loaded individually as a [`NeonRecording`](https://ncc-brain.github.io/PyNeon/reference/recording.html#pyneon.NeonRecording) or as a wholist `NeonDataset`.\n", "\n", "If loading a `NeonDataset`, specify the path to the `Timeseries Data` folder to create a `NeonDataset` object:" ] @@ -100,7 +99,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Alternatively, one can directly load a single `NeonRecording` by specifying the path to the recording's folder:" + "Equivalently, one can directly load a single `NeonRecording` by specifying the path to the recording's folder." ] }, { @@ -171,7 +170,7 @@ "source": [ "As seen in the output, this recording contains every file other than the scene video. This is because we downloaded the \"Timeseries Data\" instead of \"Timeseries Data + Scene Video\" from Pupil Cloud. For more information on how to process video files, see the [video tutorial](video.ipynb).\n", "\n", - "Individual data streams can be accessed as properties of the `NeonRecording` object. For example, the gaze data can be accessed as `recording.gaze`, and upon accessing, the tabular data is loaded into memory." + "Individual data streams can be accessed as properties of the `NeonRecording` object. For example, the gaze data can be accessed as `recording.gaze`, and upon accessing, the tabular data is loaded into memory. On the other hand, if you try to access unavailable data like the video, it will simply return `None` and a warning message." ] }, { @@ -183,36 +182,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "recording._gaze size before accessing `gaze`: 16\n", - "recording.gaze is of type: \n", - "recording._gaze size after accessing `gaze`: 48\n" - ] - } - ], - "source": [ - "print(f\"recording._gaze size before accessing `gaze`: {sys.getsizeof(recording._gaze)}\")\n", - "\n", - "gaze = recording.gaze\n", - "print(f\"recording.gaze is of type: {type(gaze)}\")\n", - "print(f\"recording._gaze size after accessing `gaze`: {sys.getsizeof(recording._gaze)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "On the other hand, if you try to access unavailable data like the video, it will simply return `None`." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ + "\n", "None\n" ] }, @@ -220,12 +190,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:273: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", + "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] } ], "source": [ + "gaze = recording.gaze\n", + "print(gaze)\n", "video = recording.video\n", "print(video)" ] @@ -234,31 +206,40 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can access the timeseries data in the gaze stream as a pandas DataFrame by accessing the `data` attribute of the gaze stream. The columns of the DataFrame include `timestamp [ns]` and channel data columns. During loading, PyNeon strips the redundant `section id` and `recording id` columns and adds a more human-readable `time [s]` column to represent the time of each sample in seconds relative to the start of the data stream." + "We can access the timeseries data in the gaze stream as a [`pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) by accessing the `data` attribute of the gaze stream. The DataFrame has the datetime of each data point as its index. The raw UTC `timestamp [ns]` is available as a column along with data from channnels like `gaze x [px]`.\n", + "\n", + "During loading, PyNeon strips the redundant `section id` and `recording id` columns and adds a more human-readable `time [s]` column to represent the time of each sample in seconds relative to the start of the data stream." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " timestamp [ns] gaze x [px] gaze y [px] worn fixation id blink id \\\n", - "0 1725032224852161732 1067.486 620.856 True 1 \n", - "1 1725032224857165732 1066.920 617.117 True 1 \n", - "2 1725032224862161732 1072.699 615.780 True 1 \n", - "3 1725032224867161732 1067.447 617.062 True 1 \n", - "4 1725032224872161732 1071.564 613.158 True 1 \n", + " timestamp [ns] gaze x [px] gaze y [px] \\\n", + "2024-08-30 15:37:04.852161732 1725032224852161732 1067.486 620.856 \n", + "2024-08-30 15:37:04.857165732 1725032224857165732 1066.920 617.117 \n", + "2024-08-30 15:37:04.862161732 1725032224862161732 1072.699 615.780 \n", + "2024-08-30 15:37:04.867161732 1725032224867161732 1067.447 617.062 \n", + "2024-08-30 15:37:04.872161732 1725032224872161732 1071.564 613.158 \n", "\n", - " azimuth [deg] elevation [deg] time [s] \n", - "0 16.213030 -0.748998 0.000000 \n", - "1 16.176285 -0.511733 0.005004 \n", - "2 16.546413 -0.426618 0.010000 \n", - "3 16.210049 -0.508251 0.015000 \n", - "4 16.473521 -0.260388 0.020000 \n" + " worn fixation id blink id azimuth [deg] \\\n", + "2024-08-30 15:37:04.852161732 True 1 16.213030 \n", + "2024-08-30 15:37:04.857165732 True 1 16.176285 \n", + "2024-08-30 15:37:04.862161732 True 1 16.546413 \n", + "2024-08-30 15:37:04.867161732 True 1 16.210049 \n", + "2024-08-30 15:37:04.872161732 True 1 16.473521 \n", + "\n", + " elevation [deg] time [s] \n", + "2024-08-30 15:37:04.852161732 -0.748998 0.000000 \n", + "2024-08-30 15:37:04.857165732 -0.511733 0.005004 \n", + "2024-08-30 15:37:04.862161732 -0.426618 0.010000 \n", + "2024-08-30 15:37:04.867161732 -0.508251 0.015000 \n", + "2024-08-30 15:37:04.872161732 -0.260388 0.020000 \n" ] } ], @@ -275,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -310,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -319,7 +300,7 @@ "" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -390,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -423,14 +404,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:273: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", + "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] }, @@ -473,7 +454,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.12.6" } }, "nbformat": 4, diff --git a/searchindex.js b/searchindex.js index 9d3e6d4..3a34465 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"1. Setup: Loading a Neon Recording": [[13, "1.-Setup:-Loading-a-Neon-Recording"]], "2. Mapping Gaze Data to Video Frames": [[13, "2.-Mapping-Gaze-Data-to-Video-Frames"]], "3. Estimating the Scanpath": [[13, "3.-Estimating-the-Scanpath"]], "4. Understanding Fixation Status": [[13, "4.-Understanding-Fixation-Status"]], "5. Overlaying Fixations on the Video": [[13, "5.-Overlaying-Fixations-on-the-Video"]], "Classes for individual data types": [[1, null]], "Concatenating different streams": [[12, "Concatenating-different-streams"]], "Conclusion": [[8, "Conclusion"]], "Data and metadata of a NeonRecording": [[11, "Data-and-metadata-of-a-NeonRecording"]], "Data format": [[0, "data-format"]], "Data streams and events": [[11, "Data-streams-and-events"]], "Export Neon data recording to BIDS formats": [[9, null]], "Exportation module": [[3, null]], "Installation": [[0, "installation"]], "License": [[0, "license"]], "Mapping Scanpath to video": [[13, null]], "NeonDataset class": [[2, null]], "NeonRecording class": [[6, null]], "Parameters:": [[5, "parameters"], [6, "parameters"], [6, "id1"], [6, "id2"]], "Preprocessing module": [[5, null]], "PyNeon API": [[4, null]], "PyNeon Tutorials": [[10, null]], "Reading a Neon dataset/recording": [[11, null]], "Reading sample data": [[11, "Reading-sample-data"]], "Resample Data and Concatenate Channels": [[12, null]], "Resampling data streams": [[12, "Resampling-data-streams"]], "Step 1: Loading Sample Data": [[8, "Step-1:-Loading-Sample-Data"]], "Step 2: Constructing Event Times": [[8, "Step-2:-Constructing-Event-Times"]], "Step 3: Verifying Event Intervals": [[8, "Step-3:-Verifying-Event-Intervals"]], "Step 4: Creating Epochs from the Data": [[8, "Step-4:-Creating-Epochs-from-the-Data"]], "Step 5: Initializing the Epoch Class": [[8, "Step-5:-Initializing-the-Epoch-Class"]], "Step 6: Converting Epochs to NumPy Array": [[8, "Step-6:-Converting-Epochs-to-NumPy-Array"]], "Step 7: Averaging Across Epochs": [[8, "Step-7:-Averaging-Across-Epochs"]], "Step 8: Averaging Over Time": [[8, "Step-8:-Averaging-Over-Time"]], "Summary": [[13, "Summary"]], "Tutorial: Processing Eye-Tracking Data with PyNeon": [[8, null]], "Unequally sampled data": [[12, "Unequally-sampled-data"]], "Visualization module": [[7, null]], "Visualizing gaze heatmap": [[11, "Visualizing-gaze-heatmap"]], "Welcome to PyNeon documentation": [[0, null]]}, "docnames": ["index", "reference/data", "reference/dataset", "reference/export", "reference/index", "reference/preprocess", "reference/recording", "reference/vis", "tutorials/epoching", "tutorials/export_to_bids", "tutorials/index", "tutorials/read_recording", "tutorials/resample_and_concat", "tutorials/video"], "envversion": {"nbsphinx": 4, "sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1}, "filenames": ["index.rst", "reference/data.rst", "reference/dataset.rst", "reference/export.rst", "reference/index.rst", "reference/preprocess.rst", "reference/recording.rst", "reference/vis.rst", "tutorials/epoching.ipynb", "tutorials/export_to_bids.ipynb", "tutorials/index.rst", "tutorials/read_recording.ipynb", "tutorials/resample_and_concat.ipynb", "tutorials/video.ipynb"], "indexentries": {"blinks (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.blinks", false]], "concat_events() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.concat_events", false]], "concat_events() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.concat_events", false]], "concat_streams() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.concat_streams", false]], "concat_streams() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.concat_streams", false]], "construct_event_times() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.construct_event_times", false]], "contents (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.contents", false]], "create_epoch() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.create_epoch", false]], "crop() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.crop", false]], "crop() (pyneon.stream.neonstream method)": [[1, "pyneon.stream.NeonStream.crop", false]], "customstream (class in pyneon.stream)": [[1, "pyneon.stream.CustomStream", false]], "data (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.data", false]], "dataset_dir (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.dataset_dir", false]], "duration (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.duration", false]], "epoch (class in pyneon.preprocess)": [[5, "pyneon.preprocess.Epoch", false]], "estimate_scanpath() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.estimate_scanpath", false]], "estimate_scanpath() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.estimate_scanpath", false]], "events (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.events", false]], "export_motion_bids() (in module pyneon.export)": [[3, "pyneon.export.export_motion_bids", false]], "exports_eye_bids() (in module pyneon.export)": [[3, "pyneon.export.exports_eye_bids", false]], "extract_event_times() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.extract_event_times", false]], "eye_states (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.eye_states", false]], "file (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.file", false]], "first_ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.first_ts", false]], "fixations (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.fixations", false]], "fps (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.fps", false]], "gaze (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.gaze", false]], "gaze_on_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.gaze_on_video", false]], "height (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.height", false]], "imu (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.imu", false]], "info (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.info", false]], "interpolate() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.interpolate", false]], "interpolate() (pyneon.stream.neonstream method)": [[1, "pyneon.stream.NeonStream.interpolate", false]], "last_ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.last_ts", false]], "load_enrichment() (pyneon.neondataset method)": [[2, "pyneon.NeonDataset.load_enrichment", false]], "map_gaze_to_video() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.map_gaze_to_video", false]], "map_gaze_to_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.map_gaze_to_video", false]], "module": [[0, "module-pyneon", false], [1, "module-pyneon.data", false], [1, "module-pyneon.events", false], [1, "module-pyneon.stream", false], [1, "module-pyneon.video", false], [3, "module-pyneon.export", false], [5, "module-pyneon.preprocess", false], [7, "module-pyneon.vis", false]], "n_frames (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.n_frames", false]], "neonblinks (class in pyneon.events)": [[1, "pyneon.events.NeonBlinks", false]], "neondata (class in pyneon.data)": [[1, "pyneon.data.NeonData", false]], "neondataset (class in pyneon)": [[2, "pyneon.NeonDataset", false]], "neonev (class in pyneon.events)": [[1, "pyneon.events.NeonEV", false]], "neonevents (class in pyneon.events)": [[1, "pyneon.events.NeonEvents", false]], "neoneyestates (class in pyneon.stream)": [[1, "pyneon.stream.NeonEyeStates", false]], "neonfixations (class in pyneon.events)": [[1, "pyneon.events.NeonFixations", false]], "neongaze (class in pyneon.stream)": [[1, "pyneon.stream.NeonGaze", false]], "neonimu (class in pyneon.stream)": [[1, "pyneon.stream.NeonIMU", false]], "neonrecording (class in pyneon)": [[6, "pyneon.NeonRecording", false]], "neonsaccades (class in pyneon.events)": [[1, "pyneon.events.NeonSaccades", false]], "neonstream (class in pyneon.stream)": [[1, "pyneon.stream.NeonStream", false]], "neonvideo (class in pyneon.video)": [[1, "pyneon.video.NeonVideo", false]], "overlay_scanpath_on_video() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.overlay_scanpath_on_video", false]], "overlay_scanpath_on_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.overlay_scanpath_on_video", false]], "plot_distribution() (in module pyneon.vis)": [[7, "pyneon.vis.plot_distribution", false]], "plot_distribution() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.plot_distribution", false]], "plot_frame() (in module pyneon.vis)": [[7, "pyneon.vis.plot_frame", false]], "plot_frame() (pyneon.video.neonvideo method)": [[1, "pyneon.video.NeonVideo.plot_frame", false]], "pyneon": [[0, "module-pyneon", false]], "pyneon.data": [[1, "module-pyneon.data", false]], "pyneon.events": [[1, "module-pyneon.events", false]], "pyneon.export": [[3, "module-pyneon.export", false]], "pyneon.preprocess": [[5, "module-pyneon.preprocess", false]], "pyneon.stream": [[1, "module-pyneon.stream", false]], "pyneon.video": [[1, "module-pyneon.video", false]], "pyneon.vis": [[7, "module-pyneon.vis", false]], "recording_dir (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.recording_dir", false]], "recording_id (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.recording_id", false]], "recordings (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.recordings", false]], "saccades (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.saccades", false]], "sampling_freq_effective (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.sampling_freq_effective", false]], "sampling_freq_nominal (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.sampling_freq_nominal", false]], "scanpath (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.scanpath", false]], "sections (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.sections", false]], "start_datetime (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.start_datetime", false]], "start_time (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.start_time", false]], "times (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.times", false]], "timestamps (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.timestamps", false]], "timestamps (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.timestamps", false]], "to_eye_bids() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.to_eye_bids", false]], "to_motion_bids() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.to_motion_bids", false]], "to_numpy() (pyneon.preprocess.epoch method)": [[5, "pyneon.preprocess.Epoch.to_numpy", false]], "ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.ts", false]], "ts (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.ts", false]], "video (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.video", false]], "width (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.width", false]], "window_average() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.window_average", false]]}, "objects": {"": [[0, 0, 0, "-", "pyneon"]], "pyneon": [[2, 1, 1, "", "NeonDataset"], [6, 1, 1, "", "NeonRecording"], [1, 0, 0, "-", "data"], [1, 0, 0, "-", "events"], [3, 0, 0, "-", "export"], [5, 0, 0, "-", "preprocess"], [1, 0, 0, "-", "stream"], [1, 0, 0, "-", "video"], [7, 0, 0, "-", "vis"]], "pyneon.NeonDataset": [[2, 2, 1, "", "dataset_dir"], [2, 3, 1, "", "load_enrichment"], [2, 2, 1, "", "recordings"], [2, 2, 1, "", "sections"]], "pyneon.NeonRecording": [[6, 4, 1, "", "blinks"], [6, 3, 1, "", "concat_events"], [6, 3, 1, "", "concat_streams"], [6, 2, 1, "", "contents"], [6, 3, 1, "", "estimate_scanpath"], [6, 4, 1, "", "events"], [6, 4, 1, "", "eye_states"], [6, 4, 1, "", "fixations"], [6, 4, 1, "", "gaze"], [6, 3, 1, "", "gaze_on_video"], [6, 4, 1, "", "imu"], [6, 2, 1, "", "info"], [6, 3, 1, "", "map_gaze_to_video"], [6, 3, 1, "", "overlay_scanpath_on_video"], [6, 3, 1, "", "plot_distribution"], [6, 2, 1, "", "recording_dir"], [6, 2, 1, "", "recording_id"], [6, 4, 1, "", "saccades"], [6, 4, 1, "", "scanpath"], [6, 2, 1, "", "start_datetime"], [6, 2, 1, "", "start_time"], [6, 3, 1, "", "to_eye_bids"], [6, 3, 1, "", "to_motion_bids"], [6, 4, 1, "", "video"]], "pyneon.data": [[1, 1, 1, "", "NeonData"]], "pyneon.events": [[1, 1, 1, "", "NeonBlinks"], [1, 1, 1, "", "NeonEV"], [1, 1, 1, "", "NeonEvents"], [1, 1, 1, "", "NeonFixations"], [1, 1, 1, "", "NeonSaccades"]], "pyneon.export": [[3, 5, 1, "", "export_motion_bids"], [3, 5, 1, "", "exports_eye_bids"]], "pyneon.preprocess": [[5, 1, 1, "", "Epoch"], [5, 5, 1, "", "concat_events"], [5, 5, 1, "", "concat_streams"], [5, 5, 1, "", "construct_event_times"], [5, 5, 1, "", "create_epoch"], [5, 5, 1, "", "crop"], [5, 5, 1, "", "estimate_scanpath"], [5, 5, 1, "", "extract_event_times"], [5, 5, 1, "", "interpolate"], [5, 5, 1, "", "map_gaze_to_video"], [5, 5, 1, "", "overlay_scanpath_on_video"], [5, 5, 1, "", "window_average"]], "pyneon.preprocess.Epoch": [[5, 3, 1, "", "to_numpy"]], "pyneon.stream": [[1, 1, 1, "", "CustomStream"], [1, 1, 1, "", "NeonEyeStates"], [1, 1, 1, "", "NeonGaze"], [1, 1, 1, "", "NeonIMU"], [1, 1, 1, "", "NeonStream"]], "pyneon.stream.NeonStream": [[1, 3, 1, "", "crop"], [1, 2, 1, "", "data"], [1, 2, 1, "", "duration"], [1, 2, 1, "", "file"], [1, 2, 1, "", "first_ts"], [1, 3, 1, "", "interpolate"], [1, 2, 1, "", "last_ts"], [1, 2, 1, "", "sampling_freq_effective"], [1, 2, 1, "", "sampling_freq_nominal"], [1, 2, 1, "", "times"], [1, 2, 1, "", "timestamps"], [1, 2, 1, "", "ts"]], "pyneon.video": [[1, 1, 1, "", "NeonVideo"]], "pyneon.video.NeonVideo": [[1, 2, 1, "", "fps"], [1, 2, 1, "", "height"], [1, 2, 1, "", "n_frames"], [1, 3, 1, "", "plot_frame"], [1, 2, 1, "", "timestamps"], [1, 2, 1, "", "ts"], [1, 2, 1, "", "width"]], "pyneon.vis": [[7, 5, 1, "", "plot_distribution"], [7, 5, 1, "", "plot_frame"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "terms": {"": [3, 5, 6, 8, 11, 12, 13], "0": [1, 5, 6, 7, 8, 11, 12, 13], "00": 13, "000": [8, 12], "000000": [11, 12], "005": 12, "005004": 11, "009091": 12, "01": [8, 11], "010": 12, "010000": 11, "013398": 12, "015": 12, "015000": 11, "018182": 12, "02": 8, "020": 12, "020000": 11, "024792": 12, "025185": 12, "025579": 12, "025917": 12, "026247": 12, "027273": 12, "02903257": 8, "03": 8, "036364": 12, "036588": 12, "037342": 12, "037639": 12, "037936": 12, "038238": 12, "038541": 12, "039238": 12, "04": 8, "040b8762cef8": 11, "042113": 12, "042568": 13, "045800": 12, "046721": 12, "048916": 12, "05": [8, 13], "051494": 12, "054556": 12, "057486": 12, "058594": 12, "059879": 12, "06": 8, "061802": 12, "062": 11, "062000": 12, "063477": 12, "063728": 12, "065682": 12, "067636": 12, "07": [8, 13], "077253": 12, "077680": 12, "078107": 12, "08": [8, 11], "09": 8, "090109": 12, "093205": 12, "095861": 12, "0x1fb49a7bb60": 12, "0x1fb49cd3d10": 12, "1": [3, 6, 9, 11, 12], "10": [5, 6, 7, 11, 13], "100": [5, 8, 11], "1000": 8, "100000000": 8, "102": 13, "1050": 11, "1066": [11, 12], "1067": [8, 11, 12], "1069": 12, "1070": 12, "1071": [11, 12], "1072": [11, 12], "1073": 12, "10919": 12, "11": [3, 6, 8, 11, 13], "110": [11, 12], "1106": 12, "110hz": 12, "1128": 6, "115": [11, 12], "117": 11, "1195": 13, "12": [8, 11], "1200": [6, 7], "120061": 12, "123m": 12, "129540": 12, "13": 8, "130": 12, "1334": 13, "14": 8, "15": [8, 12, 13], "154": 13, "158": 11, "158000": 12, "16": [8, 11, 12, 13], "1600": [6, 7], "163666": 13, "17": [8, 11], "172": 12, "1725032224427000064": 8, "1725032224852161732": [8, 11, 12], "1725032224857161732": 12, "1725032224857165732": 11, "1725032224862161732": [11, 12], "1725032224867161732": [11, 12], "1725032224872161732": [11, 12], "1725032224878547732": 12, "1725032224887638641": 12, "1725032224896729550": 12, "1725032224905820459": 12, "1725032224914911368": 12, "1725032319533909732": 12, "173": 12, "176285": 11, "176315": 12, "18": 8, "18769": 12, "19": 8, "197": 11, "1_task": 9, "1d": 8, "1e": 8, "1e6": 12, "1e9": 12, "2": [2, 5, 6, 7, 9, 11, 12], "20": 13, "200": [11, 12], "200hz": [12, 13], "2024": [0, 3, 6, 11, 13], "21": 8, "210049": [11, 12], "212567": 12, "213": 11, "21303": 8, "213030": [11, 12], "22": [8, 13], "220032": 13, "223000": 13, "226": 13, "23": 8, "230": 12, "236726": 12, "24": [8, 13], "244324": 13, "245426": 12, "25": 8, "2544218633": 8, "258": 13, "26": 8, "260388": [11, 12], "27": 8, "273": 11, "274666": 12, "278283": 12, "28": [8, 13], "29": 8, "2d": 8, "2nd": 11, "3": [11, 12], "30": 11, "30hz": 13, "31": [8, 13], "318": 13, "32": 8, "327660": 13, "33": 8, "335": 13, "335180": 12, "34": [8, 13], "35": 8, "353641": 12, "35532450871617": 11, "36": [8, 12], "360605": 12, "366379": 12, "37": [8, 11], "376": 13, "379116": 12, "38": 8, "382535": 12, "39": [8, 11, 12], "3d": [1, 12], "3d_eye_st": [5, 6, 11, 13], "4": [11, 12], "403803": 12, "41": 8, "410354": 12, "4108": 13, "42": 8, "426618": [11, 12], "43": 8, "439696": 12, "44": 8, "440": 13, "441": 13, "442": 13, "443": 13, "444": 13, "444m": 12, "445": 13, "446": 13, "447": [11, 13], "447000": 12, "45": 8, "455": 13, "456": 13, "457": 13, "46": 8, "461626": 12, "47": 8, "473": 13, "473521": [11, 12], "48": [8, 11], "486": [8, 11], "486000": 12, "487429": 13, "49": 8, "493445": 12, "495": 13, "4d34": 11, "4f07": 13, "4f89": 11, "5": [11, 12], "50": 12, "5000000": 12, "500000000": 8, "508251": [11, 12], "511733": 11, "511927": 12, "525265": 12, "527000": 11, "539": 8, "546413": [11, 12], "548737": 13, "550682": 12, "556964": 12, "562393": 12, "564": 11, "564000": 12, "576714": 13, "588647": 12, "591703": 12, "5a1a": 13, "5f3f": 11, "6": [11, 12, 13], "60": 11, "602498": 12, "608856": 13, "61": 8, "611": 12, "612": 12, "613": [11, 12], "615": [11, 12], "617": [11, 12], "620": [8, 11, 12], "621": 13, "639305591f79": 13, "648": 13, "654314": 12, "655640": 13, "691": 13, "692588": 12, "699": 11, "699000": 12, "699777": 12, "7": [11, 12, 13], "716": [3, 6], "72164082": 8, "725032e": 8, "725586": 13, "74": 13, "744383": 12, "748291": 13, "74838272": 8, "748998": [8, 11, 12], "78": 13, "780": 11, "780000": 12, "784": 8, "789613": 12, "79": 13, "7bbfe91ec561": 11, "8": [11, 12, 13], "80": 13, "801082": 12, "8078038925275": 11, "81": 13, "856": [8, 11], "856000": 12, "861883": 13, "866272": 13, "8727": 11, "88": 13, "891351": 12, "9": [8, 11, 12, 13], "91": 13, "919": 13, "920": 11, "920463": 12, "921757": 12, "9265f7c1": 13, "93": 13, "93b8c234": 11, "940430": 12, "942273": 12, "944117": 12, "944336": 12, "955": 8, "96": 13, "962830": 13, "97": 13, "98": [11, 13], "986206": 13, "990a3de0": 13, "996703": 12, "996810": 12, "996917": 12, "997017": 12, "997115": 12, "9dd1": 13, "A": [0, 5, 12, 13], "AND": 0, "AS": 0, "As": [11, 13], "BE": 0, "BUT": 0, "But": 12, "By": 13, "FOR": 0, "For": [1, 2, 3, 5, 6, 11, 12, 13], "IN": 0, "If": [1, 5, 6, 7, 11, 12], "In": [5, 6, 8, 11, 12, 13], "It": [0, 1, 2, 11, 12, 13], "NO": 0, "NOT": 0, "OF": 0, "OR": 0, "On": [8, 11], "THE": 0, "TO": 0, "The": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 13], "These": [8, 11], "To": [0, 13], "WITH": 0, "_": 6, "_acq": [3, 6], "_channel": 3, "_gaze": 11, "_motion": [3, 6], "_physio": 6, "_physioev": 6, "_record": 6, "_run": [3, 6], "_se": [3, 6], "_task": [3, 6], "_tracksi": [3, 6], "abef": 11, "about": [6, 8, 13], "abov": [0, 12, 13], "acceler": 12, "access": [2, 6, 11, 12], "accompani": 6, "accord": [1, 3, 6], "achiev": 13, "across": 13, "action": 0, "activ": 13, "actual": 13, "ad": [2, 5], "add": [11, 12], "addit": [3, 5, 6], "advanc": 8, "after": [5, 6, 8, 11, 12, 13], "algorithm": [5, 6, 13], "alia": [1, 5, 6], "align": 13, "all": [0, 5, 6, 8, 12, 13], "allow": [12, 13], "also": [0, 5, 6, 8, 11, 12, 13], "altern": [8, 11, 12], "alwai": [5, 12], "amount": 13, "ampl": 12, "an": [0, 2, 3, 5, 6, 8, 11, 12, 13], "analys": 8, "analysi": 8, "ani": [0, 12, 13], "annot": 8, "annotated_data": [5, 8], "anyth": 13, "apart": 8, "api": 0, "app": 0, "appar": 11, "appdata": 8, "appelhoff": [3, 6], "append": 8, "appli": [1, 5, 6, 7], "appropri": 11, "ar": [0, 1, 2, 3, 5, 6, 8, 11, 12, 13], "arang": 8, "argument": 13, "aris": 0, "around": 13, "arrai": 5, "assign": [8, 13], "associ": [0, 5], "assum": 11, "attribut": [1, 2, 11], "author": 0, "auto_titl": [1, 7], "automat": [1, 7, 11], "avail": [6, 7, 13], "averag": [5, 6, 13], "average_interv": 8, "awar": 11, "ax": [1, 6, 7, 11, 12], "ax2": 11, "axi": [1, 6, 7, 8], "axvlin": 12, "axvspan": 11, "azimuth": [8, 11, 12], "base": [1, 2, 5, 8, 12, 13], "basic": 11, "bcff2832": 11, "becaus": 11, "becom": 13, "been": 12, "befor": [5, 8, 11], "begin": 11, "being": [2, 6, 12], "belong": 5, "below": [11, 12, 13], "benchmark": 13, "benefit": 13, "berg": [3, 6], "between": [5, 8, 12, 13], "bf9b": 13, "bia": 11, "bid": [3, 6, 10], "bin": 12, "blink": [1, 5, 6, 8, 11, 12, 13], "blue": [12, 13], "bodi": 13, "bool": [1, 5, 6, 7, 11, 12], "both": 11, "brain": [0, 3, 6], "c": [0, 8, 11], "calcul": [8, 11, 12], "call": [11, 12, 13], "camera": [6, 7, 13], "can": [6, 7, 8, 10, 11, 12, 13], "care": 13, "carri": 13, "case": 6, "caution": 11, "cell": [6, 7, 13], "center": 11, "centr": 11, "central": 12, "cfcb": 11, "chang": [12, 13], "channel": [8, 10, 11], "charg": 0, "check": [8, 12], "choos": [6, 7], "chu": 11, "circl": [5, 6], "circle_radiu": [5, 6], "claim": 0, "clash": 13, "class": [4, 5, 11], "clone": 0, "cloud": [0, 2, 6, 11], "cmap": [6, 7], "cockx": [3, 6], "collect": 6, "color": [11, 12], "colormap": [6, 7], "column": [1, 5, 6, 8, 11, 12, 13], "column_id": [5, 8], "com": [1, 6], "combin": 12, "common": [5, 6, 8, 12], "commun": 0, "companion": 0, "compar": 13, "compliant": [3, 6], "comput": [8, 12, 13], "concat_data": [5, 6, 12], "concat_data_slic": 12, "concat_ev": [4, 5, 6], "concat_stream": [4, 5, 6, 12], "concaten": [5, 6, 10], "conda": 0, "condit": 0, "confirm": 8, "connect": [0, 5, 6, 13], "consecut": 12, "consider": 13, "consist": 13, "constant": 12, "construct": 5, "construct_event_tim": [4, 5, 8], "contain": [1, 2, 3, 5, 6, 7, 11, 13], "content": [6, 11], "continu": [1, 3, 6, 8, 11, 12, 13], "contract": 0, "convert": [1, 5], "coordin": 13, "copi": 0, "copyright": 0, "correctli": 8, "correspond": [5, 13], "could": [0, 6], "count": 12, "creat": [1, 5, 6, 7, 11, 13], "create_epoch": [4, 5, 8], "crop": [1, 4, 5], "csv": [1, 2, 6, 11, 13], "current": [2, 8, 13], "custom": 1, "customstream": [1, 4], "d82369213dbf": 13, "damag": 0, "darkorang": 11, "data": [2, 3, 4, 5, 6, 7, 10], "datafram": [1, 2, 5, 6, 8, 11, 12, 13], "dataset": [2, 10, 12, 13], "dataset_dir": [2, 11], "datatyp": 11, "date": 13, "datetim": 6, "deal": [0, 12], "def": 13, "default": [1, 3, 5, 6, 7, 12, 13], "defin": [5, 6, 12, 13], "definit": 13, "deg": [8, 11, 12], "demonstr": [8, 12], "dennot": 13, "denot": [5, 6, 12, 13], "dens": [6, 7], "densiti": 13, "depend": 13, "descript": [5, 8], "desir": 12, "despit": 13, "detail": [1, 5, 6, 13], "detect": 13, "determin": 13, "develop": [0, 2], "deviat": [6, 7], "diamet": [11, 12], "dict": [3, 5, 6], "dictionari": 5, "diff": [8, 12], "differ": [5, 6, 8], "dimens": [5, 6, 7], "directli": [11, 12], "directori": [2, 3, 6, 11, 13], "displai": [5, 6, 8], "distanc": 12, "distribut": [0, 12], "divid": [1, 11], "do": 0, "doc": 6, "document": [11, 13], "doe": 11, "don": 12, "dot": 13, "download": [2, 6, 11], "downsampl": 5, "draw": 13, "driven": 0, "drop": 13, "dtype": [8, 11], "due": 11, "durat": [1, 11, 13], "dure": [5, 6, 11, 13], "dynam": 13, "e": [6, 12], "e116e606": [8, 9, 11, 12], "e3c": 13, "each": [2, 5, 6, 8, 11, 12, 13], "earliest": [5, 6, 12], "easi": 12, "edit": [3, 6], "effect": [1, 11], "effici": 11, "effort": 0, "either": [6, 11, 12], "elev": [8, 11, 12], "empti": [3, 8], "en": [3, 6], "end": [1, 5, 8, 11, 12, 13], "end_t": 12, "end_tim": 12, "enntir": 13, "enrich": [2, 11], "enrichment_dir": 2, "enrichment_info": [2, 11], "ensur": 13, "ep_np": 8, "epoch": [4, 5], "epochs_df": 8, "epochs_np": 5, "equal": [11, 12], "equival": 8, "error": 13, "especi": 12, "essenti": 8, "estim": 12, "estimate_scanpath": [4, 5, 6, 13], "estimated_scanpath": 13, "etc": 0, "evalu": [1, 5], "event": [0, 1, 5, 6, 13], "event_data": 5, "event_nam": [5, 6], "event_tim": [5, 8], "everi": [8, 11, 13], "exampl": [2, 6, 11, 12, 13], "except": 5, "execut": 6, "exemplari": 12, "exist": [6, 11, 13], "exist_ok": 9, "expect": [5, 13], "experi": [3, 6], "explor": 12, "export": [0, 4, 6, 10], "export_motion_bid": [3, 4], "exports_eye_bid": [3, 4], "express": 0, "extend": 8, "extens": [3, 6], "extra_metadata": [3, 6], "extract": [5, 8], "extract_event_tim": [4, 5], "ey": [0, 1, 6, 11, 12, 13], "eye_st": [5, 6, 11, 12], "eye_states_diff": 12, "eye_states_diff_uniqu": 12, "eye_states_nominal_diff": 12, "eye_states_t": 12, "f": [8, 11, 12], "fals": [1, 5, 6, 11], "far": 12, "feed": 13, "few": 8, "field": [3, 6], "fig": [1, 6, 7, 11, 12], "figsiz": [11, 12], "figur": [1, 6, 7, 11, 12], "file": [0, 1, 2, 3, 6, 7, 8, 11, 13], "filenam": [3, 6, 11, 13], "final": [5, 6, 11], "find": 10, "finial": 6, "first": [1, 8, 13], "first_record": 11, "first_t": 1, "fit": 0, "fix": [5, 13], "fixat": [1, 5, 6, 7, 8, 11, 12], "fixation_id": 12, "flag": [5, 6, 13], "flexibli": [6, 7], "float": [1, 5, 6, 7, 11, 13], "float64": 11, "float_kind": [1, 5], "floor": 11, "flow": [5, 6, 13], "folder": [2, 11], "follow": [0, 2, 5, 6, 11, 12, 13], "form": [5, 6, 10], "format": [3, 6, 10, 13], "found": [5, 6, 8, 11], "fp": 1, "frame": [1, 5, 6, 7], "free": 0, "frequenc": [1, 5, 6, 11, 12], "from": [0, 1, 2, 5, 6, 7, 9, 11, 12, 13], "front": 11, "funcion": 13, "function": [8, 11, 12], "furnish": 0, "further": [8, 12, 13], "futur": 0, "g": [6, 12], "gabriel": 8, "gap": 11, "gaussian": [6, 7], "gaze": [0, 1, 2, 5, 6, 7, 8, 12], "gaze_color": 11, "gaze_diff": 12, "gaze_diff_uniqu": 12, "gaze_nominal_diff": 12, "gaze_on_video": 6, "gaze_resampled_data": 12, "gaze_resampled_to_imu_data": 12, "gaze_t": 12, "gener": [1, 6, 7], "get": [0, 8, 10, 12, 13], "get_sample_data": [8, 9, 11, 12], "getsizeof": 11, "github": [11, 13], "give": 8, "given": [12, 13], "global": 5, "global_ref_tim": 8, "global_t_ref": [5, 8], "gramann": [3, 6], "grant": 0, "great": 11, "green": [12, 13], "grid": [5, 6, 7, 8, 12], "gridlin": 12, "grothkopp": [3, 6], "gt": [8, 11, 12, 13], "gyro": 11, "gyro_color": 11, "gz": 6, "h": [3, 6], "ha": [8, 11, 12], "half": 13, "hand": [8, 11], "handl": 11, "hardwar": 13, "hartel": 8, "have": [2, 5, 6, 12, 13], "head": [8, 11, 12, 13], "heatmap": [6, 7], "heatmap_sourc": [6, 7], "heavili": 13, "height": [1, 6, 7], "help": [0, 10, 12], "here": [0, 10], "herebi": 0, "hi": 8, "high": 13, "higher": 12, "highest": [5, 6, 12], "hist": 12, "histogram": 12, "holder": [0, 2], "horizon": 11, "horizontalalign": 11, "how": [8, 11, 12], "howev": 13, "html": [3, 6], "http": [1, 3, 6], "human": 11, "hz": [5, 12], "i": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 13], "id": [1, 2, 5, 6, 8, 11, 12, 13], "identifi": 5, "ignor": 5, "iloc": [8, 11], "imag": [3, 6, 11], "imagin": 13, "implement": [2, 13], "impli": 0, "import": [8, 9, 11, 12, 13], "improv": 13, "imu": [0, 1, 3, 5, 6, 11, 12, 13], "imu_diff": 12, "imu_diff_uniqu": 12, "imu_nominal_diff": 12, "imu_t": 12, "includ": [0, 1, 3, 5, 7, 11, 13], "increas": [1, 5, 13], "index": [1, 3, 6, 7, 11, 13], "indic": [5, 8, 11, 13], "individu": [2, 4, 11], "inferno": [6, 7], "info": [2, 5, 6, 8, 11], "info_fil": 1, "inform": [2, 3, 5, 6, 8, 11, 12, 13], "inherit": 1, "initi": 11, "inplac": [1, 5, 6], "input": 5, "inspect": 13, "inspir": 0, "instal": 13, "instead": [0, 11], "int": [1, 5, 6, 7], "int32": 11, "int64": 11, "integ": 12, "integrate_in_tim": 8, "integrated_epoch": 8, "interest": 8, "intermedi": 13, "intern": 5, "interp1d": [1, 5, 6, 12], "interp_float_kind": 5, "interp_other_kind": 5, "interpol": [1, 4, 5, 6, 12, 13], "interv": 13, "intuit": 13, "io": [3, 6], "ipykernel_12180": 8, "issu": 12, "item": [5, 6], "its": [5, 6, 11, 13], "j": [3, 6], "jan": 8, "jeung": [3, 6], "json": [2, 3, 6, 11, 13], "jupyt": 10, "k": [3, 6], "kanad": [5, 6, 13], "kernel": [6, 7], "kind": [0, 1, 5, 6], "known": 11, "lab": [0, 1, 6, 11, 12], "label": [3, 5, 6, 11, 12, 13], "larger": 5, "last": [1, 5, 6, 12, 13], "last_t": 1, "later": [3, 6], "latest": [5, 6, 12], "lead": 13, "left": [11, 12], "legend": 12, "len": 12, "length": 12, "less": [6, 7], "let": [11, 12], "liabil": 0, "liabl": 0, "librari": [0, 13], "lifecycl": 13, "light": 0, "lightgrai": 11, "like": 11, "likelihood": 13, "limit": [0, 13], "line": [5, 6, 13], "line_thick": [5, 6], "linear": [1, 5, 6, 12, 13], "list": [2, 5, 6, 8, 11, 12, 13], "liter": [1, 5, 6, 7], "live": 13, "lk_param": [5, 6], "ll": 8, "load": [1, 2, 6, 11], "load_enrich": 2, "local": 8, "locat": [6, 11, 12, 13], "log": 12, "long": 13, "longer": 13, "look": [11, 13], "lost": 13, "lot": 13, "lowest": [5, 6, 12], "lt": [8, 11, 12], "luca": [5, 6, 13], "m": 12, "mai": [5, 6], "make": [3, 6, 13], "manag": 5, "mani": [12, 13], "map": [5, 6, 10], "map_gaze_to_video": [4, 5, 6, 13], "mapped_gaz": 13, "mapper_facemap": 11, "mapper_manualmap_csv": 11, "mapper_tagmap_csv": 11, "match": [6, 13], "matplotlib": [1, 6, 7, 11, 12], "max": [5, 6, 12], "max_fix": [5, 6], "maximum": [1, 5], "mean": [8, 12], "meat": 13, "median": 5, "memori": 11, "merchant": 0, "merg": 0, "messag": [1, 5, 6], "metadata": [3, 6], "method": [1, 2, 5, 6, 12, 13], "microsaccad": 13, "might": 12, "min": [5, 6], "minimis": 13, "minimum": [1, 5], "miss": [11, 12], "mit": 0, "mkdir": 9, "mm": 12, "modal": [0, 3, 6], "modifi": 0, "modul": 4, "moment": 13, "monoton": [1, 5], "more": [3, 5, 6, 7, 8, 11], "most": 13, "motion": [3, 6, 9], "motion_dir": [3, 6, 9], "movement": 13, "mp4": [5, 6, 13], "multi": 0, "multipl": [0, 2, 11, 13], "must": [1, 2, 5, 6], "n": [1, 5, 6, 8, 11, 12], "n_channel": 5, "n_epoch": 5, "n_frame": 1, "n_time": 5, "na": [8, 11, 12], "name": [1, 5, 6, 7, 8, 11, 12, 13], "nan": [5, 8, 13], "nan_statu": 5, "nanmean": 8, "nanosecond": [1, 5, 8, 12], "nativ": 0, "natur": 13, "ncc": [0, 11], "ndarrai": [1, 5], "nearest": [1, 5, 6, 13], "neatli": 11, "necessari": [12, 13], "necessarili": 12, "need": [8, 13], "neon": [0, 1, 6, 10, 12], "neonblink": [1, 4, 6], "neondata": [1, 4], "neondataset": [4, 11, 13], "neonev": [1, 4, 6], "neoneyest": [1, 4, 6], "neonfix": [1, 4, 6], "neongaz": [1, 4, 6, 11], "neonimu": [1, 3, 4, 6], "neonimu_run": 9, "neonrecord": [2, 3, 4, 5, 7, 8, 9, 12, 13], "neonsaccad": [1, 4, 6], "neonstream": [1, 4], "neonvideo": [1, 4, 6, 7], "nest": 5, "new": [1, 5, 6, 7, 12], "new_t": [1, 5, 12], "next": [11, 13], "nomin": [1, 5, 6, 11, 12, 13], "non": [5, 6, 13], "none": [1, 5, 6, 7, 8, 11, 12], "noninfring": 0, "note": [3, 5, 6, 13], "notebook": 10, "notic": [0, 12], "now": [11, 12, 13], "np": [1, 5, 8, 12, 13], "number": [1, 5, 6, 7, 11], "numer": [5, 6], "numpi": [5, 12, 13], "object": [1, 2, 3, 5, 6, 7, 8, 11, 13], "obtain": [0, 5, 11, 12], "occupi": 13, "occur": 11, "off": 13, "officewalk": [8, 9, 11, 12], "officewalk_fac": 11, "officewalk_mark": 11, "officewalk_stat": 11, "officewalk_tracksi": 9, "often": 11, "old": 5, "one": [8, 11, 12], "ones": 8, "onli": [5, 12, 13], "onset": 12, "oop": 12, "oppos": 11, "optic": [5, 6, 13], "opticalflow": 13, "optimis": 13, "option": [1, 2, 3, 5, 6, 13], "orang": 12, "organ": [3, 6, 11], "origin": [5, 12], "other": [0, 1, 5, 6, 8, 11], "other_kind": [1, 5], "otherwis": [0, 6], "our": 13, "out": 0, "outlin": 6, "output": [3, 5, 6, 11, 13], "output_dir": [3, 6], "over": [5, 6, 13], "overal": 8, "overlai": [5, 6], "overlaid": [5, 6, 13], "overlay_fixations_on_video": 13, "overlay_scanpath_on_video": [4, 5, 6, 13], "overview": 11, "own": 11, "p": 8, "panda": [1, 2, 5, 6, 11, 13], "paramet": [1, 2, 3, 7, 12], "parent": 9, "pars": 2, "partial": 13, "particip": 11, "particular": 0, "past": 13, "path": [1, 2, 3, 5, 6, 11, 13], "pathlib": [1, 2, 3, 6], "pd": [1, 5, 13], "per": [1, 5, 8], "perform": [5, 6, 8, 13], "permiss": 0, "permit": 0, "person": 0, "physio": 6, "physioev": 6, "pickl": 13, "pip": 0, "pipelin": 13, "pitch": 12, "pixel": [1, 6, 7], "pkl": [6, 13], "pl": 0, "plan": 0, "pleas": 0, "plot": [1, 6, 7, 11, 12], "plot_distribut": [4, 6, 7, 11], "plot_fram": [1, 4, 7], "plt": [11, 12], "point": [1, 5, 8, 11, 12, 13], "portion": 0, "posit": 13, "possibl": [12, 13], "practic": 13, "prefix": [3, 6, 9], "preprocess": [4, 8], "present": [5, 6, 13], "preserv": 12, "presum": 11, "previou": 12, "print": [8, 11, 12, 13], "process": [0, 11, 13], "produc": 11, "product": 1, "project": [0, 2, 6, 11], "properti": [6, 11, 13], "provid": [0, 5, 6, 8, 12, 13], "publish": 0, "pupil": [0, 1, 2, 6, 11, 12], "pupillab": 13, "purpos": 0, "px": [8, 11, 12], "py": [8, 11, 13], "pyneon": [1, 2, 3, 5, 6, 7, 9, 11, 12, 13], "pypi": 0, "pyplot": [1, 6, 7, 11, 12], "qian": [11, 13], "quaternion": 12, "quirk": 13, "radiu": [5, 6], "random": 13, "rang": [1, 5, 12], "rate": [5, 12], "rather": 8, "raw": [11, 12], "raw_eye_states_data_slic": 12, "raw_gaze_data_slic": 12, "raw_imu_data_slic": 12, "re": 11, "reach": 13, "read": [0, 1, 2, 6, 10], "readabl": [5, 6, 11], "readthedoc": [3, 6], "rec": [3, 5, 6, 7], "recenc": 13, "recent": 13, "record": [0, 1, 2, 3, 5, 6, 7, 8, 10, 12], "recording_dir": [6, 8, 9, 11, 12, 13], "recording_dir_1": 2, "recording_dir_2": 2, "recording_id": 6, "red": [12, 13], "redund": 11, "refer": [0, 3, 5, 6, 8], "rel": [1, 5, 8, 11, 12, 13], "relat": 5, "releas": 0, "relev": 13, "remov": 1, "renam": [5, 6], "render": 13, "repeat": 13, "replac": [1, 5, 6], "report": 13, "repositori": 0, "repres": [5, 6, 11, 13], "reproduc": [3, 6], "request": 11, "requir": [6, 11, 13], "resamp_float_kind": [5, 6, 13], "resamp_other_kind": [5, 6, 13], "resampl": [5, 6, 10, 11], "research": [3, 6], "resolut": 13, "respect": [5, 6, 12, 13], "ressourc": 13, "restrict": 0, "result": [5, 6, 8, 13], "return": [1, 5, 6, 7, 11, 12, 13], "rich": 0, "right": 0, "roll": 12, "roughli": 13, "row": [5, 8, 12, 13], "royalblu": 11, "run": [0, 13], "runtim": 13, "runtimewarn": 8, "saccad": [1, 5, 6, 11, 13], "sacnpath_overlay_video": [5, 6], "same": [12, 13], "sampl": [1, 3, 5, 6, 13], "sample_dir": [9, 11], "sampling_freq": [5, 6], "sampling_freq_effect": [1, 11], "sampling_freq_nomin": [1, 11, 12], "sampling_r": 5, "save": [3, 5, 6, 13], "scanpath": [6, 10], "scatter": [6, 7, 12], "scatter_sourc": [6, 7], "scatterplot": 11, "scene": [0, 2, 6, 7, 11, 13], "scene_camera": [6, 13], "scene_video": [6, 11, 13], "scene_video_info": [11, 13], "scientif": [3, 6], "scipi": [1, 5, 6, 12], "seaborn": 11, "second": [1, 5, 8, 11, 12], "section": [1, 2, 11], "see": [0, 1, 3, 5, 6, 11, 13], "seem": 12, "seen": [11, 12, 13], "select": [5, 6, 8], "self": 13, "sell": 0, "sensor": 11, "seri": 8, "serv": 8, "set": [0, 1, 5, 6, 7, 11, 12], "set_color": 11, "set_titl": 12, "set_xlabel": 12, "set_ylabel": 12, "set_yscal": 12, "shall": 0, "shape": [5, 8, 12], "share": 12, "should": [3, 6, 12, 13], "show": [1, 6, 7, 11, 12, 13], "show_lin": [5, 6], "show_video": [5, 6, 13], "sigma": [6, 7], "sign": 13, "simpli": [11, 12], "simultan": 13, "sinc": [5, 6, 12], "singl": [0, 6, 8, 11, 12, 13], "singular": [5, 6], "size": [5, 6, 7, 11], "slice": 8, "smooth": [5, 6, 7], "sn": 11, "so": 0, "softwar": 0, "some": [11, 13], "sourc": [6, 7], "space": [8, 12, 13], "spars": 13, "spec": 1, "specif": [1, 3, 5, 6, 8, 13], "specifi": [1, 5, 6, 7, 8, 11, 12], "sream": 6, "stabil": 11, "stabilis": 13, "stabl": [3, 6], "standard": [3, 6, 7], "start": [0, 1, 5, 6, 10, 11, 12, 13], "start_datetim": 6, "start_t": 12, "start_tim": [6, 8, 12], "state": [0, 1, 6, 12], "statist": 11, "step_siz": [6, 7], "still": [6, 13], "store": 1, "str": [1, 2, 3, 5, 6, 7, 13], "stream": [1, 5, 6], "stream_nam": [5, 6], "street": 13, "string": 5, "strip": 11, "structur": [2, 3, 6, 11], "sub": [3, 6, 9], "subject": 0, "sublicens": 0, "subplot": [11, 12], "subsequ": [8, 12, 13], "substanti": 0, "success": [5, 6], "suitabl": [6, 7], "support": 5, "sy": [11, 13], "synchron": [12, 13], "t": [1, 3, 6, 12], "t_after": [5, 8], "t_befor": [5, 8], "t_ref": [5, 8], "t_rel": [5, 8], "tabular": [1, 11], "tail": 13, "take": [5, 11, 12, 13], "taken": 12, "target": 13, "task": 11, "temp": 8, "templat": [3, 6], "tend": 11, "test": 13, "test_ev": 8, "text": 11, "than": [5, 11], "thei": [2, 5, 8, 12, 13], "them": [11, 12, 13], "therefor": 13, "thi": [0, 5, 6, 8, 11, 12, 13], "thick": [5, 6], "though": 13, "three": 13, "through": 2, "thu": [6, 7], "tick": 12, "tight_layout": 12, "time": [1, 5, 6, 11, 12, 13], "time_to_t": 12, "time_unit": [5, 8], "times_df": [5, 8], "timeseri": [0, 2, 8, 9, 11, 12], "timestamp": [1, 5, 6, 8, 11, 12, 13], "timestamps_fil": 1, "titl": [1, 7], "tlist": 8, "tmax": [1, 5], "tmin": [1, 5], "to_csv": 13, "to_eye_bid": 6, "to_motion_bid": [6, 9], "to_numpi": [5, 8], "to_pickl": 13, "toler": [5, 6], "tool": 0, "tort": 0, "traceback": 13, "track": [0, 6, 13], "trade": 13, "treat": 13, "true": [1, 5, 6, 7, 8, 9, 11, 12, 13], "try": 11, "ts_diff": 12, "ts_diff_uniqu": 12, "tsv": [3, 6], "tupl": [6, 7], "turn": [12, 13], "tutori": [0, 11, 12, 13], "twinx": 11, "txt": [2, 11], "type": [2, 4, 5, 6, 11, 12, 13], "typeerror": 13, "typic": [6, 7], "u": [12, 13], "unavail": 11, "under": [5, 6], "uniqu": [5, 12], "unit": 5, "unnderli": 13, "until": [6, 11], "up": [11, 13], "updat": 13, "upon": 11, "us": [0, 1, 5, 6, 7, 8, 11, 12, 13], "usabl": 13, "user": [3, 6, 7, 8, 11], "userwarn": 11, "usual": 13, "utc": [1, 5, 12], "valu": [5, 8, 12], "ve": 8, "versatil": 0, "vi": 7, "vicin": 13, "video": [0, 1, 2, 5, 6, 7, 10, 11], "video_fil": 1, "video_output_path": [5, 6], "video_with_scanpath": 6, "videocaptur": 1, "visibl": 13, "visual": [4, 13], "w": 12, "wa": [11, 12, 13], "walk": [11, 13], "walk1": [8, 9, 11, 12], "walk2": 11, "want": 12, "warn": 11, "warranti": 0, "we": [0, 8, 11, 12, 13], "wearer": [11, 13], "weight": 0, "well": [8, 11, 13], "welzel": [3, 6], "were": [5, 8, 13], "what": 11, "when": [12, 13], "where": [5, 6, 11, 13], "whether": [0, 1, 5, 7], "which": [0, 5, 11, 12, 13], "while": 13, "wholist": 11, "whom": 0, "width": [1, 6, 7], "width_height": [6, 7], "window": [5, 6], "window_averag": [4, 5], "window_s": 5, "within": [5, 12, 13], "without": [0, 8], "word": 5, "work": [0, 12, 13], "workflow": 13, "world_timestamp": [6, 11, 13], "worn": [8, 11, 12], "would": [2, 12, 13], "x": [8, 11, 12, 13], "xlabel": 11, "xtick": 12, "xx_record": 6, "xx_task": [3, 6], "y": [8, 11, 12, 13], "yaw": 12, "yaxi": 11, "yet": 2, "yield": 13, "ylabel": 11, "you": [0, 10, 11, 13], "your": 13, "ytick": 12, "yy_tracksi": [3, 6], "z": 12, "zeros_lik": 12}, "titles": ["Welcome to PyNeon documentation", "Classes for individual data types", "NeonDataset class", "Exportation module", "PyNeon API", "Preprocessing module", "NeonRecording class", "Visualization module", "Tutorial: Processing Eye-Tracking Data with PyNeon", "Export Neon data recording to BIDS formats", "PyNeon Tutorials", "Reading a Neon dataset/recording", "Resample Data and Concatenate Channels", "Mapping Scanpath to video"], "titleterms": {"1": [8, 13], "2": [8, 13], "3": [8, 13], "4": [8, 13], "5": [8, 13], "6": 8, "7": 8, "8": 8, "across": 8, "api": 4, "arrai": 8, "averag": 8, "bid": 9, "channel": 12, "class": [1, 2, 6, 8], "concaten": 12, "conclus": 8, "construct": 8, "convert": 8, "creat": 8, "data": [0, 1, 8, 9, 11, 12, 13], "dataset": 11, "differ": 12, "document": 0, "epoch": 8, "estim": 13, "event": [8, 11], "export": [3, 9], "ey": 8, "fixat": 13, "format": [0, 9], "frame": 13, "from": 8, "gaze": [11, 13], "heatmap": 11, "individu": 1, "initi": 8, "instal": 0, "interv": 8, "licens": 0, "load": [8, 13], "map": 13, "metadata": 11, "modul": [3, 5, 7], "neon": [9, 11, 13], "neondataset": 2, "neonrecord": [6, 11], "numpi": 8, "over": 8, "overlai": 13, "paramet": [5, 6], "preprocess": 5, "process": 8, "pyneon": [0, 4, 8, 10], "read": 11, "record": [9, 11, 13], "resampl": 12, "sampl": [8, 11, 12], "scanpath": 13, "setup": 13, "statu": 13, "step": 8, "stream": [11, 12], "summari": 13, "time": 8, "track": 8, "tutori": [8, 10], "type": 1, "understand": 13, "unequ": 12, "verifi": 8, "video": 13, "visual": [7, 11], "welcom": 0}}) \ No newline at end of file +Search.setIndex({"alltitles": {"1. Setup: Loading a Neon Recording": [[13, "1.-Setup:-Loading-a-Neon-Recording"]], "2. Mapping Gaze Data to Video Frames": [[13, "2.-Mapping-Gaze-Data-to-Video-Frames"]], "3. Estimating the Scanpath": [[13, "3.-Estimating-the-Scanpath"]], "4. Understanding Fixation Status": [[13, "4.-Understanding-Fixation-Status"]], "5. Overlaying Fixations on the Video": [[13, "5.-Overlaying-Fixations-on-the-Video"]], "Classes for individual data types": [[1, null]], "Concatenating different streams": [[12, "Concatenating-different-streams"]], "Conclusion": [[8, "Conclusion"]], "Data and metadata of a NeonRecording": [[11, "Data-and-metadata-of-a-NeonRecording"]], "Data format": [[0, "data-format"]], "Data streams and events": [[11, "Data-streams-and-events"]], "Export Neon data recording to BIDS formats": [[9, null]], "Exportation module": [[3, null]], "Installation": [[0, "installation"]], "License": [[0, "license"]], "Mapping Scanpath to video": [[13, null]], "NeonDataset class": [[2, null]], "NeonRecording class": [[6, null]], "Parameters:": [[5, "parameters"], [6, "parameters"], [6, "id1"], [6, "id2"]], "Preprocessing module": [[5, null]], "PyNeon API": [[4, null]], "PyNeon Tutorials": [[10, null]], "Reading a Neon dataset/recording": [[11, null]], "Reading sample data": [[11, "Reading-sample-data"]], "Resample Data and Concatenate Channels": [[12, null]], "Resampling data streams": [[12, "Resampling-data-streams"]], "Step 1: Loading Sample Data": [[8, "Step-1:-Loading-Sample-Data"]], "Step 2: Constructing Event Times": [[8, "Step-2:-Constructing-Event-Times"]], "Step 3: Verifying Event Intervals": [[8, "Step-3:-Verifying-Event-Intervals"]], "Step 4: Creating Epochs from the Data": [[8, "Step-4:-Creating-Epochs-from-the-Data"]], "Step 5: Initializing the Epoch Class": [[8, "Step-5:-Initializing-the-Epoch-Class"]], "Step 6: Converting Epochs to NumPy Array": [[8, "Step-6:-Converting-Epochs-to-NumPy-Array"]], "Step 7: Averaging Across Epochs": [[8, "Step-7:-Averaging-Across-Epochs"]], "Step 8: Averaging Over Time": [[8, "Step-8:-Averaging-Over-Time"]], "Summary": [[13, "Summary"]], "Tutorial: Processing Eye-Tracking Data with PyNeon": [[8, null]], "Unequally sampled data": [[12, "Unequally-sampled-data"]], "Visualization module": [[7, null]], "Visualizing gaze heatmap": [[11, "Visualizing-gaze-heatmap"]], "Welcome to PyNeon documentation": [[0, null]]}, "docnames": ["index", "reference/data", "reference/dataset", "reference/export", "reference/index", "reference/preprocess", "reference/recording", "reference/vis", "tutorials/epoching", "tutorials/export_to_bids", "tutorials/index", "tutorials/read_recording", "tutorials/resample_and_concat", "tutorials/video"], "envversion": {"nbsphinx": 4, "sphinx": 63, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1}, "filenames": ["index.rst", "reference/data.rst", "reference/dataset.rst", "reference/export.rst", "reference/index.rst", "reference/preprocess.rst", "reference/recording.rst", "reference/vis.rst", "tutorials/epoching.ipynb", "tutorials/export_to_bids.ipynb", "tutorials/index.rst", "tutorials/read_recording.ipynb", "tutorials/resample_and_concat.ipynb", "tutorials/video.ipynb"], "indexentries": {"blinks (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.blinks", false]], "concat_events() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.concat_events", false]], "concat_events() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.concat_events", false]], "concat_streams() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.concat_streams", false]], "concat_streams() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.concat_streams", false]], "construct_event_times() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.construct_event_times", false]], "contents (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.contents", false]], "create_epoch() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.create_epoch", false]], "crop() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.crop", false]], "crop() (pyneon.stream.neonstream method)": [[1, "pyneon.stream.NeonStream.crop", false]], "customstream (class in pyneon.stream)": [[1, "pyneon.stream.CustomStream", false]], "data (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.data", false]], "dataset_dir (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.dataset_dir", false]], "duration (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.duration", false]], "epoch (class in pyneon.preprocess)": [[5, "pyneon.preprocess.Epoch", false]], "estimate_scanpath() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.estimate_scanpath", false]], "estimate_scanpath() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.estimate_scanpath", false]], "events (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.events", false]], "export_motion_bids() (in module pyneon.export)": [[3, "pyneon.export.export_motion_bids", false]], "exports_eye_bids() (in module pyneon.export)": [[3, "pyneon.export.exports_eye_bids", false]], "extract_event_times() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.extract_event_times", false]], "eye_states (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.eye_states", false]], "file (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.file", false]], "first_ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.first_ts", false]], "fixations (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.fixations", false]], "fps (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.fps", false]], "gaze (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.gaze", false]], "gaze_on_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.gaze_on_video", false]], "height (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.height", false]], "imu (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.imu", false]], "info (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.info", false]], "interpolate() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.interpolate", false]], "interpolate() (pyneon.stream.neonstream method)": [[1, "pyneon.stream.NeonStream.interpolate", false]], "last_ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.last_ts", false]], "load_enrichment() (pyneon.neondataset method)": [[2, "pyneon.NeonDataset.load_enrichment", false]], "map_gaze_to_video() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.map_gaze_to_video", false]], "map_gaze_to_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.map_gaze_to_video", false]], "module": [[0, "module-pyneon", false], [1, "module-pyneon.data", false], [1, "module-pyneon.events", false], [1, "module-pyneon.stream", false], [1, "module-pyneon.video", false], [3, "module-pyneon.export", false], [5, "module-pyneon.preprocess", false], [7, "module-pyneon.vis", false]], "n_frames (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.n_frames", false]], "neonblinks (class in pyneon.events)": [[1, "pyneon.events.NeonBlinks", false]], "neondata (class in pyneon.data)": [[1, "pyneon.data.NeonData", false]], "neondataset (class in pyneon)": [[2, "pyneon.NeonDataset", false]], "neonev (class in pyneon.events)": [[1, "pyneon.events.NeonEV", false]], "neonevents (class in pyneon.events)": [[1, "pyneon.events.NeonEvents", false]], "neoneyestates (class in pyneon.stream)": [[1, "pyneon.stream.NeonEyeStates", false]], "neonfixations (class in pyneon.events)": [[1, "pyneon.events.NeonFixations", false]], "neongaze (class in pyneon.stream)": [[1, "pyneon.stream.NeonGaze", false]], "neonimu (class in pyneon.stream)": [[1, "pyneon.stream.NeonIMU", false]], "neonrecording (class in pyneon)": [[6, "pyneon.NeonRecording", false]], "neonsaccades (class in pyneon.events)": [[1, "pyneon.events.NeonSaccades", false]], "neonstream (class in pyneon.stream)": [[1, "pyneon.stream.NeonStream", false]], "neonvideo (class in pyneon.video)": [[1, "pyneon.video.NeonVideo", false]], "overlay_scanpath_on_video() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.overlay_scanpath_on_video", false]], "overlay_scanpath_on_video() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.overlay_scanpath_on_video", false]], "plot_distribution() (in module pyneon.vis)": [[7, "pyneon.vis.plot_distribution", false]], "plot_distribution() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.plot_distribution", false]], "plot_frame() (in module pyneon.vis)": [[7, "pyneon.vis.plot_frame", false]], "plot_frame() (pyneon.video.neonvideo method)": [[1, "pyneon.video.NeonVideo.plot_frame", false]], "pyneon": [[0, "module-pyneon", false]], "pyneon.data": [[1, "module-pyneon.data", false]], "pyneon.events": [[1, "module-pyneon.events", false]], "pyneon.export": [[3, "module-pyneon.export", false]], "pyneon.preprocess": [[5, "module-pyneon.preprocess", false]], "pyneon.stream": [[1, "module-pyneon.stream", false]], "pyneon.video": [[1, "module-pyneon.video", false]], "pyneon.vis": [[7, "module-pyneon.vis", false]], "recording_dir (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.recording_dir", false]], "recording_id (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.recording_id", false]], "recordings (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.recordings", false]], "saccades (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.saccades", false]], "sampling_freq_effective (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.sampling_freq_effective", false]], "sampling_freq_nominal (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.sampling_freq_nominal", false]], "scanpath (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.scanpath", false]], "sections (pyneon.neondataset attribute)": [[2, "pyneon.NeonDataset.sections", false]], "start_datetime (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.start_datetime", false]], "start_time (pyneon.neonrecording attribute)": [[6, "pyneon.NeonRecording.start_time", false]], "times (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.times", false]], "timestamps (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.timestamps", false]], "timestamps (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.timestamps", false]], "to_eye_bids() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.to_eye_bids", false]], "to_motion_bids() (pyneon.neonrecording method)": [[6, "pyneon.NeonRecording.to_motion_bids", false]], "to_numpy() (pyneon.preprocess.epoch method)": [[5, "pyneon.preprocess.Epoch.to_numpy", false]], "ts (pyneon.stream.neonstream attribute)": [[1, "pyneon.stream.NeonStream.ts", false]], "ts (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.ts", false]], "video (pyneon.neonrecording property)": [[6, "pyneon.NeonRecording.video", false]], "width (pyneon.video.neonvideo attribute)": [[1, "pyneon.video.NeonVideo.width", false]], "window_average() (in module pyneon.preprocess)": [[5, "pyneon.preprocess.window_average", false]]}, "objects": {"": [[0, 0, 0, "-", "pyneon"]], "pyneon": [[2, 1, 1, "", "NeonDataset"], [6, 1, 1, "", "NeonRecording"], [1, 0, 0, "-", "data"], [1, 0, 0, "-", "events"], [3, 0, 0, "-", "export"], [5, 0, 0, "-", "preprocess"], [1, 0, 0, "-", "stream"], [1, 0, 0, "-", "video"], [7, 0, 0, "-", "vis"]], "pyneon.NeonDataset": [[2, 2, 1, "", "dataset_dir"], [2, 3, 1, "", "load_enrichment"], [2, 2, 1, "", "recordings"], [2, 2, 1, "", "sections"]], "pyneon.NeonRecording": [[6, 4, 1, "", "blinks"], [6, 3, 1, "", "concat_events"], [6, 3, 1, "", "concat_streams"], [6, 2, 1, "", "contents"], [6, 3, 1, "", "estimate_scanpath"], [6, 4, 1, "", "events"], [6, 4, 1, "", "eye_states"], [6, 4, 1, "", "fixations"], [6, 4, 1, "", "gaze"], [6, 3, 1, "", "gaze_on_video"], [6, 4, 1, "", "imu"], [6, 2, 1, "", "info"], [6, 3, 1, "", "map_gaze_to_video"], [6, 3, 1, "", "overlay_scanpath_on_video"], [6, 3, 1, "", "plot_distribution"], [6, 2, 1, "", "recording_dir"], [6, 2, 1, "", "recording_id"], [6, 4, 1, "", "saccades"], [6, 4, 1, "", "scanpath"], [6, 2, 1, "", "start_datetime"], [6, 2, 1, "", "start_time"], [6, 3, 1, "", "to_eye_bids"], [6, 3, 1, "", "to_motion_bids"], [6, 4, 1, "", "video"]], "pyneon.data": [[1, 1, 1, "", "NeonData"]], "pyneon.events": [[1, 1, 1, "", "NeonBlinks"], [1, 1, 1, "", "NeonEV"], [1, 1, 1, "", "NeonEvents"], [1, 1, 1, "", "NeonFixations"], [1, 1, 1, "", "NeonSaccades"]], "pyneon.export": [[3, 5, 1, "", "export_motion_bids"], [3, 5, 1, "", "exports_eye_bids"]], "pyneon.preprocess": [[5, 1, 1, "", "Epoch"], [5, 5, 1, "", "concat_events"], [5, 5, 1, "", "concat_streams"], [5, 5, 1, "", "construct_event_times"], [5, 5, 1, "", "create_epoch"], [5, 5, 1, "", "crop"], [5, 5, 1, "", "estimate_scanpath"], [5, 5, 1, "", "extract_event_times"], [5, 5, 1, "", "interpolate"], [5, 5, 1, "", "map_gaze_to_video"], [5, 5, 1, "", "overlay_scanpath_on_video"], [5, 5, 1, "", "window_average"]], "pyneon.preprocess.Epoch": [[5, 3, 1, "", "to_numpy"]], "pyneon.stream": [[1, 1, 1, "", "CustomStream"], [1, 1, 1, "", "NeonEyeStates"], [1, 1, 1, "", "NeonGaze"], [1, 1, 1, "", "NeonIMU"], [1, 1, 1, "", "NeonStream"]], "pyneon.stream.NeonStream": [[1, 3, 1, "", "crop"], [1, 2, 1, "", "data"], [1, 2, 1, "", "duration"], [1, 2, 1, "", "file"], [1, 2, 1, "", "first_ts"], [1, 3, 1, "", "interpolate"], [1, 2, 1, "", "last_ts"], [1, 2, 1, "", "sampling_freq_effective"], [1, 2, 1, "", "sampling_freq_nominal"], [1, 2, 1, "", "times"], [1, 2, 1, "", "timestamps"], [1, 2, 1, "", "ts"]], "pyneon.video": [[1, 1, 1, "", "NeonVideo"]], "pyneon.video.NeonVideo": [[1, 2, 1, "", "fps"], [1, 2, 1, "", "height"], [1, 2, 1, "", "n_frames"], [1, 3, 1, "", "plot_frame"], [1, 2, 1, "", "timestamps"], [1, 2, 1, "", "ts"], [1, 2, 1, "", "width"]], "pyneon.vis": [[7, 5, 1, "", "plot_distribution"], [7, 5, 1, "", "plot_frame"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "property", "Python property"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:property", "5": "py:function"}, "terms": {"": [3, 5, 6, 8, 11, 12, 13], "0": [1, 5, 6, 7, 8, 11, 12, 13], "00": 13, "000": [8, 12], "000000": [11, 12], "005": 12, "005004": 11, "009091": 12, "01": [8, 11], "010": 12, "010000": 11, "013398": 12, "015": 12, "015000": 11, "018182": 12, "02": 8, "020": 12, "020000": 11, "024792": 12, "025185": 12, "025579": 12, "025917": 12, "026247": 12, "027273": 12, "02903257": 8, "03": 8, "036364": 12, "036588": 12, "037342": 12, "037639": 12, "037936": 12, "038238": 12, "038541": 12, "039238": 12, "04": [8, 11], "040b8762cef8": 11, "042113": 12, "042568": 13, "045800": 12, "046721": 12, "048916": 12, "05": [8, 13], "051494": 12, "054556": 12, "057486": 12, "058594": 12, "059879": 12, "06": 8, "061802": 12, "062": 11, "062000": 12, "063477": 12, "063728": 12, "065682": 12, "067636": 12, "07": [8, 13], "077253": 12, "077680": 12, "078107": 12, "08": [8, 11], "09": 8, "090109": 12, "093205": 12, "095861": 12, "0x00000270398494c0": 11, "0x1fb49a7bb60": 12, "0x1fb49cd3d10": 12, "1": [3, 6, 9, 11, 12], "10": [5, 6, 7, 11, 13], "100": [5, 8, 11], "1000": 8, "100000000": 8, "102": 13, "1050": 11, "1066": [11, 12], "1067": [8, 11, 12], "1069": 12, "1070": 12, "1071": [11, 12], "1072": [11, 12], "1073": 12, "10919": 12, "11": [3, 6, 8, 11, 13], "110": [11, 12], "1106": 12, "110hz": 12, "1128": 6, "115": [11, 12], "117": 11, "1195": 13, "12": 8, "1200": [6, 7], "120061": 12, "123m": 12, "129540": 12, "13": 8, "130": 12, "1334": 13, "14": 8, "15": [8, 11, 12, 13], "154": 13, "158": 11, "158000": 12, "16": [8, 11, 12, 13], "1600": [6, 7], "163666": 13, "17": [8, 11], "172": 12, "1725032224427000064": 8, "1725032224852161732": [8, 11, 12], "1725032224857161732": 12, "1725032224857165732": 11, "1725032224862161732": [11, 12], "1725032224867161732": [11, 12], "1725032224872161732": [11, 12], "1725032224878547732": 12, "1725032224887638641": 12, "1725032224896729550": 12, "1725032224905820459": 12, "1725032224914911368": 12, "1725032319533909732": 12, "173": 12, "176285": 11, "176315": 12, "18": 8, "18769": 12, "19": 8, "197": 11, "1_task": 9, "1d": 8, "1e": 8, "1e6": 12, "1e9": 12, "2": [2, 5, 6, 7, 9, 11, 12], "20": 13, "200": [11, 12], "200hz": [12, 13], "2024": [0, 3, 6, 11, 13], "21": 8, "210049": [11, 12], "212567": 12, "213": 11, "21303": 8, "213030": [11, 12], "22": [8, 13], "220032": 13, "223000": 13, "226": 13, "23": 8, "230": 12, "236726": 12, "24": [8, 13], "244324": 13, "245426": 12, "25": 8, "2544218633": 8, "258": 13, "26": 8, "260388": [11, 12], "27": 8, "274666": 12, "275": 11, "278283": 12, "28": [8, 13], "29": 8, "2d": 8, "2nd": 11, "3": [11, 12], "30": 11, "30hz": 13, "31": [8, 13], "318": 13, "32": 8, "327660": 13, "33": 8, "335": 13, "335180": 12, "34": [8, 13], "35": 8, "353641": 12, "35532450871617": 11, "36": [8, 12], "360605": 12, "366379": 12, "37": [8, 11], "376": 13, "379116": 12, "38": 8, "382535": 12, "39": [8, 11, 12], "3d": [1, 12], "3d_eye_st": [5, 6, 11, 13], "4": [11, 12], "403803": 12, "41": 8, "410354": 12, "4108": 13, "42": 8, "426618": [11, 12], "43": 8, "439696": 12, "44": 8, "440": 13, "441": 13, "442": 13, "443": 13, "444": 13, "444m": 12, "445": 13, "446": 13, "447": [11, 13], "447000": 12, "45": 8, "455": 13, "456": 13, "457": 13, "46": 8, "461626": 12, "47": 8, "473": 13, "473521": [11, 12], "48": 8, "486": [8, 11], "486000": 12, "487429": 13, "49": 8, "493445": 12, "495": 13, "4d34": 11, "4f07": 13, "4f89": 11, "5": [11, 12], "50": 12, "5000000": 12, "500000000": 8, "508251": [11, 12], "511733": 11, "511927": 12, "525265": 12, "527000": 11, "539": 8, "546413": [11, 12], "548737": 13, "550682": 12, "556964": 12, "562393": 12, "564": 11, "564000": 12, "576714": 13, "588647": 12, "591703": 12, "5a1a": 13, "5f3f": 11, "6": [11, 12, 13], "60": 11, "602498": 12, "608856": 13, "61": 8, "611": 12, "612": 12, "613": [11, 12], "615": [11, 12], "617": [11, 12], "620": [8, 11, 12], "621": 13, "639305591f79": 13, "648": 13, "654314": 12, "655640": 13, "691": 13, "692588": 12, "699": 11, "699000": 12, "699777": 12, "7": [11, 12, 13], "716": [3, 6], "72164082": 8, "725032e": 8, "725586": 13, "74": 13, "744383": 12, "748291": 13, "74838272": 8, "748998": [8, 11, 12], "78": 13, "780": 11, "780000": 12, "784": 8, "789613": 12, "79": 13, "7bbfe91ec561": 11, "8": [11, 12, 13], "80": 13, "801082": 12, "8078038925275": 11, "81": 13, "852161732": 11, "856": [8, 11], "856000": 12, "857165732": 11, "861883": 13, "862161732": 11, "866272": 13, "867161732": 11, "872161732": 11, "8727": 11, "88": 13, "891351": 12, "9": [8, 11, 12, 13], "91": 13, "919": 13, "920": 11, "920463": 12, "921757": 12, "9265f7c1": 13, "93": 13, "93b8c234": 11, "940430": 12, "942273": 12, "944117": 12, "944336": 12, "955": 8, "96": 13, "962830": 13, "97": 13, "98": [11, 13], "986206": 13, "990a3de0": 13, "996703": 12, "996810": 12, "996917": 12, "997017": 12, "997115": 12, "9dd1": 13, "A": [0, 5, 12, 13], "AND": 0, "AS": 0, "As": [11, 13], "BE": 0, "BUT": 0, "But": 12, "By": 13, "FOR": 0, "For": [1, 2, 3, 5, 6, 11, 12, 13], "IN": 0, "If": [1, 5, 6, 7, 11, 12], "In": [5, 6, 8, 11, 12, 13], "It": [0, 1, 2, 11, 12, 13], "NO": 0, "NOT": 0, "OF": 0, "OR": 0, "On": [8, 11], "THE": 0, "TO": 0, "The": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 13], "These": [8, 11], "To": [0, 13], "WITH": 0, "_": 6, "__": 11, "_acq": [3, 6], "_channel": 3, "_motion": [3, 6], "_physio": 6, "_physioev": 6, "_record": 6, "_run": [3, 6], "_se": [3, 6], "_task": [3, 6], "_tracksi": [3, 6], "abef": 11, "about": [6, 8, 13], "abov": [0, 12, 13], "acceler": 12, "access": [2, 6, 11, 12], "accompani": 6, "accord": [1, 3, 6], "achiev": 13, "across": 13, "action": 0, "activ": 13, "actual": 13, "ad": [2, 5], "add": [11, 12], "addit": [3, 5, 6], "advanc": 8, "after": [5, 6, 8, 12, 13], "algorithm": [5, 6, 13], "alia": [1, 5, 6], "align": 13, "all": [0, 5, 6, 8, 12, 13], "allow": [12, 13], "along": 11, "also": [0, 5, 6, 8, 11, 12, 13], "altern": [8, 12], "alwai": [5, 12], "amount": 13, "ampl": 12, "an": [0, 2, 3, 5, 6, 8, 11, 12, 13], "analys": 8, "analysi": 8, "ani": [0, 12, 13], "annot": 8, "annotated_data": [5, 8], "anyth": 13, "apart": 8, "api": [0, 11], "app": 0, "appar": 11, "appdata": 8, "appelhoff": [3, 6], "append": 8, "appli": [1, 5, 6, 7], "appropri": 11, "ar": [0, 1, 2, 3, 5, 6, 8, 11, 12, 13], "arang": 8, "argument": 13, "aris": 0, "around": 13, "arrai": 5, "assign": [8, 13], "associ": [0, 5], "assum": 11, "attribut": [1, 2, 11], "author": 0, "auto_titl": [1, 7], "automat": [1, 7, 11], "avail": [6, 7, 11, 13], "averag": [5, 6, 13], "average_interv": 8, "awar": 11, "ax": [1, 6, 7, 11, 12], "ax2": 11, "axi": [1, 6, 7, 8], "axvlin": 12, "axvspan": 11, "azimuth": [8, 11, 12], "base": [1, 2, 5, 8, 12, 13], "basic": 11, "bcff2832": 11, "becaus": 11, "becom": 13, "been": 12, "befor": [5, 8], "begin": 11, "being": [2, 6, 12], "belong": 5, "below": [11, 12, 13], "benchmark": 13, "benefit": 13, "berg": [3, 6], "between": [5, 8, 12, 13], "bf9b": 13, "bia": 11, "bid": [3, 6, 10], "bin": 12, "blink": [1, 5, 6, 8, 11, 12, 13], "blue": [12, 13], "bodi": 13, "bool": [1, 5, 6, 7, 11, 12], "both": 11, "brain": [0, 3, 6, 11], "c": [0, 8, 11], "calcul": [8, 11, 12], "call": [11, 12, 13], "camera": [6, 7, 13], "can": [6, 7, 8, 10, 11, 12, 13], "care": 13, "carri": 13, "case": 6, "caution": 11, "cell": [6, 7, 13], "center": 11, "centr": 11, "central": 12, "cfcb": 11, "chang": [12, 13], "channel": [8, 10], "channnel": 11, "charg": 0, "check": [8, 12], "choos": [6, 7], "chu": 11, "circl": [5, 6], "circle_radiu": [5, 6], "claim": 0, "clash": 13, "class": [4, 5, 11], "clone": 0, "cloud": [0, 2, 6, 11], "cmap": [6, 7], "cockx": [3, 6], "collect": 6, "color": [11, 12], "colormap": [6, 7], "column": [1, 5, 6, 8, 11, 12, 13], "column_id": [5, 8], "com": [1, 6], "combin": 12, "common": [5, 6, 8, 12], "commun": 0, "companion": 0, "compar": 13, "compliant": [3, 6], "comput": [8, 12, 13], "concat_data": [5, 6, 12], "concat_data_slic": 12, "concat_ev": [4, 5, 6], "concat_stream": [4, 5, 6, 12], "concaten": [5, 6, 10], "conda": 0, "condit": 0, "confirm": 8, "connect": [0, 5, 6, 13], "consecut": 12, "consider": 13, "consist": 13, "constant": 12, "construct": 5, "construct_event_tim": [4, 5, 8], "contain": [1, 2, 3, 5, 6, 7, 11, 13], "content": [6, 11], "continu": [1, 3, 6, 8, 11, 12, 13], "contract": 0, "convert": [1, 5], "coordin": 13, "copi": 0, "copyright": 0, "correctli": 8, "correspond": [5, 13], "could": [0, 6], "count": 12, "creat": [1, 5, 6, 7, 11, 13], "create_epoch": [4, 5, 8], "crop": [1, 4, 5], "csv": [1, 2, 6, 11, 13], "current": [2, 8, 13], "custom": 1, "customstream": [1, 4], "d82369213dbf": 13, "damag": 0, "darkorang": 11, "data": [2, 3, 4, 5, 6, 7, 10], "datafram": [1, 2, 5, 6, 8, 11, 12, 13], "dataset": [2, 10, 12, 13], "dataset_dir": [2, 11], "datatyp": 11, "date": 13, "datetim": [6, 11], "deal": [0, 12], "def": 13, "default": [1, 3, 5, 6, 7, 12, 13], "defin": [5, 6, 12, 13], "definit": 13, "deg": [8, 11, 12], "demonstr": [8, 12], "dennot": 13, "denot": [5, 6, 12, 13], "dens": [6, 7], "densiti": 13, "depend": 13, "descript": [5, 8], "desir": 12, "despit": 13, "detail": [1, 5, 6, 13], "detect": 13, "determin": 13, "develop": [0, 2], "deviat": [6, 7], "diamet": [11, 12], "dict": [3, 5, 6], "dictionari": 5, "diff": [8, 12], "differ": [5, 6, 8], "dimens": [5, 6, 7], "directli": [11, 12], "directori": [2, 3, 6, 11, 13], "displai": [5, 6, 8], "distanc": 12, "distribut": [0, 12], "divid": [1, 11], "do": 0, "doc": [6, 11], "document": [11, 13], "doe": 11, "don": 12, "dot": 13, "download": [2, 6, 11], "downsampl": 5, "draw": 13, "driven": 0, "drop": 13, "dtype": [8, 11], "due": 11, "durat": [1, 11, 13], "dure": [5, 6, 11, 13], "dynam": 13, "e": [6, 12], "e116e606": [8, 9, 11, 12], "e3c": 13, "each": [2, 5, 6, 8, 11, 12, 13], "earliest": [5, 6, 12], "easi": 12, "edit": [3, 6], "effect": [1, 11], "effici": 11, "effort": 0, "either": [6, 11, 12], "elev": [8, 11, 12], "empti": [3, 8], "en": [3, 6], "end": [1, 5, 8, 11, 12, 13], "end_t": 12, "end_tim": 12, "enntir": 13, "enrich": [2, 11], "enrichment_dir": 2, "enrichment_info": [2, 11], "ensur": 13, "ep_np": 8, "epoch": [4, 5], "epochs_df": 8, "epochs_np": 5, "equal": [11, 12], "equival": [8, 11], "error": 13, "especi": 12, "essenti": 8, "estim": 12, "estimate_scanpath": [4, 5, 6, 13], "estimated_scanpath": 13, "etc": 0, "evalu": [1, 5], "event": [0, 1, 5, 6, 13], "event_data": 5, "event_nam": [5, 6], "event_tim": [5, 8], "everi": [8, 11, 13], "exampl": [2, 6, 11, 12, 13], "except": 5, "execut": 6, "exemplari": 12, "exist": [6, 11, 13], "exist_ok": 9, "expect": [5, 13], "experi": [3, 6], "explor": 12, "export": [0, 4, 6, 10], "export_motion_bid": [3, 4], "exports_eye_bid": [3, 4], "express": 0, "extend": 8, "extens": [3, 6], "extra_metadata": [3, 6], "extract": [5, 8], "extract_event_tim": [4, 5], "ey": [0, 1, 6, 11, 12, 13], "eye_st": [5, 6, 11, 12], "eye_states_diff": 12, "eye_states_diff_uniqu": 12, "eye_states_nominal_diff": 12, "eye_states_t": 12, "f": [8, 11, 12], "fals": [1, 5, 6, 11], "far": 12, "feed": 13, "few": 8, "field": [3, 6], "fig": [1, 6, 7, 11, 12], "figsiz": [11, 12], "figur": [1, 6, 7, 11, 12], "file": [0, 1, 2, 3, 6, 7, 8, 11, 13], "filenam": [3, 6, 11, 13], "final": [5, 6, 11], "find": 10, "finial": 6, "first": [1, 8, 13], "first_record": 11, "first_t": 1, "fit": 0, "fix": [5, 13], "fixat": [1, 5, 6, 7, 8, 11, 12], "fixation_id": 12, "flag": [5, 6, 13], "flexibli": [6, 7], "float": [1, 5, 6, 7, 11, 13], "float64": 11, "float_kind": [1, 5], "floor": 11, "flow": [5, 6, 13], "folder": [2, 11], "follow": [0, 2, 5, 6, 11, 12, 13], "form": [5, 6, 10], "format": [3, 6, 10, 13], "found": [5, 6, 8, 11], "fp": 1, "frame": [1, 5, 6, 7], "free": 0, "frequenc": [1, 5, 6, 11, 12], "from": [0, 1, 2, 5, 6, 7, 9, 11, 12, 13], "front": 11, "funcion": 13, "function": [8, 11, 12], "furnish": 0, "further": [8, 12, 13], "futur": 0, "g": [6, 12], "gabriel": 8, "gap": 11, "gaussian": [6, 7], "gaze": [0, 1, 2, 5, 6, 7, 8, 12], "gaze_color": 11, "gaze_diff": 12, "gaze_diff_uniqu": 12, "gaze_nominal_diff": 12, "gaze_on_video": 6, "gaze_resampled_data": 12, "gaze_resampled_to_imu_data": 12, "gaze_t": 12, "gener": [1, 6, 7], "get": [0, 8, 10, 12, 13], "get_sample_data": [8, 9, 11, 12], "github": [11, 13], "give": 8, "given": [12, 13], "global": 5, "global_ref_tim": 8, "global_t_ref": [5, 8], "gramann": [3, 6], "grant": 0, "great": 11, "green": [12, 13], "grid": [5, 6, 7, 8, 12], "gridlin": 12, "grothkopp": [3, 6], "gt": [8, 11, 12, 13], "gyro": 11, "gyro_color": 11, "gz": 6, "h": [3, 6], "ha": [8, 11, 12], "half": 13, "hand": [8, 11], "handl": 11, "hardwar": 13, "hartel": 8, "have": [2, 5, 6, 12, 13], "head": [8, 11, 12, 13], "heatmap": [6, 7], "heatmap_sourc": [6, 7], "heavili": 13, "height": [1, 6, 7], "help": [0, 10, 12], "here": [0, 10], "herebi": 0, "hi": 8, "high": 13, "higher": 12, "highest": [5, 6, 12], "hist": 12, "histogram": 12, "holder": [0, 2], "horizon": 11, "horizontalalign": 11, "how": [8, 11, 12], "howev": 13, "html": [3, 6, 11], "http": [1, 3, 6, 11], "human": 11, "hz": [5, 12], "i": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 13], "id": [1, 2, 5, 6, 8, 11, 12, 13], "identifi": 5, "ignor": 5, "iloc": [8, 11], "imag": [3, 6, 11], "imagin": 13, "implement": [2, 13], "impli": 0, "import": [8, 9, 11, 12, 13], "improv": 13, "imu": [0, 1, 3, 5, 6, 11, 12, 13], "imu_diff": 12, "imu_diff_uniqu": 12, "imu_nominal_diff": 12, "imu_t": 12, "includ": [0, 1, 3, 5, 7, 13], "increas": [1, 5, 13], "index": [1, 3, 6, 7, 11, 13], "indic": [5, 8, 11, 13], "individu": [2, 4, 11], "inferno": [6, 7], "info": [2, 5, 6, 8, 11], "info_fil": 1, "inform": [2, 3, 5, 6, 8, 11, 12, 13], "inherit": 1, "initi": 11, "inplac": [1, 5, 6], "input": 5, "inspect": 13, "inspir": 0, "instal": 13, "instead": [0, 11], "int": [1, 5, 6, 7], "int32": 11, "int64": 11, "integ": 12, "integrate_in_tim": 8, "integrated_epoch": 8, "interest": 8, "intermedi": 13, "intern": 5, "interp1d": [1, 5, 6, 12], "interp_float_kind": 5, "interp_other_kind": 5, "interpol": [1, 4, 5, 6, 12, 13], "interv": 13, "intuit": 13, "io": [3, 6, 11], "ipykernel_12180": 8, "issu": 12, "item": [5, 6], "its": [5, 6, 11, 13], "j": [3, 6], "jan": 8, "jeung": [3, 6], "json": [2, 3, 6, 11, 13], "jupyt": 10, "k": [3, 6], "kanad": [5, 6, 13], "kernel": [6, 7], "kind": [0, 1, 5, 6], "known": 11, "lab": [0, 1, 6, 11, 12], "label": [3, 5, 6, 11, 12, 13], "larger": 5, "last": [1, 5, 6, 12, 13], "last_t": 1, "later": [3, 6], "latest": [5, 6, 12], "lead": 13, "left": [11, 12], "legend": 12, "len": 12, "length": 12, "less": [6, 7], "let": [11, 12], "liabil": 0, "liabl": 0, "librari": [0, 11, 13], "lifecycl": 13, "light": 0, "lightgrai": 11, "like": 11, "likelihood": 13, "limit": [0, 13], "line": [5, 6, 13], "line_thick": [5, 6], "linear": [1, 5, 6, 12, 13], "list": [2, 5, 6, 8, 11, 12, 13], "liter": [1, 5, 6, 7], "live": 13, "lk_param": [5, 6], "ll": 8, "load": [1, 2, 6, 11], "load_enrich": 2, "local": 8, "locat": [6, 11, 12, 13], "log": 12, "long": 13, "longer": 13, "look": [11, 13], "lost": 13, "lot": 13, "lowest": [5, 6, 12], "lt": [8, 11, 12], "luca": [5, 6, 13], "m": 12, "mai": [5, 6], "make": [3, 6, 13], "manag": 5, "mani": [12, 13], "map": [5, 6, 10], "map_gaze_to_video": [4, 5, 6, 13], "mapped_gaz": 13, "mapper_facemap": 11, "mapper_manualmap_csv": 11, "mapper_tagmap_csv": 11, "match": [6, 13], "matplotlib": [1, 6, 7, 11, 12], "max": [5, 6, 12], "max_fix": [5, 6], "maximum": [1, 5], "mean": [8, 12], "meat": 13, "median": 5, "memori": 11, "merchant": 0, "merg": 0, "messag": [1, 5, 6, 11], "metadata": [3, 6], "method": [1, 2, 5, 6, 12, 13], "microsaccad": 13, "might": 12, "min": [5, 6], "minimis": 13, "minimum": [1, 5], "miss": [11, 12], "mit": 0, "mkdir": 9, "mm": 12, "modal": [0, 3, 6], "modifi": 0, "modul": 4, "moment": 13, "monoton": [1, 5], "more": [3, 5, 6, 7, 8, 11], "most": 13, "motion": [3, 6, 9], "motion_dir": [3, 6, 9], "movement": 13, "mp4": [5, 6, 13], "multi": 0, "multipl": [0, 2, 11, 13], "must": [1, 2, 5, 6], "n": [1, 5, 6, 8, 11, 12], "n_channel": 5, "n_epoch": 5, "n_frame": 1, "n_time": 5, "na": [8, 11, 12], "name": [1, 5, 6, 7, 8, 11, 12, 13], "nan": [5, 8, 13], "nan_statu": 5, "nanmean": 8, "nanosecond": [1, 5, 8, 12], "nativ": 0, "natur": 13, "ncc": [0, 11], "ndarrai": [1, 5], "nearest": [1, 5, 6, 13], "neatli": 11, "necessari": [12, 13], "necessarili": 12, "need": [8, 13], "neon": [0, 1, 6, 10, 12], "neonblink": [1, 4, 6], "neondata": [1, 4], "neondataset": [4, 11, 13], "neonev": [1, 4, 6], "neoneyest": [1, 4, 6], "neonfix": [1, 4, 6], "neongaz": [1, 4, 6, 11], "neonimu": [1, 3, 4, 6], "neonimu_run": 9, "neonrecord": [2, 3, 4, 5, 7, 8, 9, 12, 13], "neonsaccad": [1, 4, 6], "neonstream": [1, 4], "neonvideo": [1, 4, 6, 7], "nest": 5, "new": [1, 5, 6, 7, 12], "new_t": [1, 5, 12], "next": [11, 13], "nomin": [1, 5, 6, 11, 12, 13], "non": [5, 6, 13], "none": [1, 5, 6, 7, 8, 11, 12], "noninfring": 0, "note": [3, 5, 6, 13], "notebook": 10, "notic": [0, 12], "now": [11, 12, 13], "np": [1, 5, 8, 12, 13], "number": [1, 5, 6, 7, 11], "numer": [5, 6], "numpi": [5, 12, 13], "object": [1, 2, 3, 5, 6, 7, 8, 11, 13], "obtain": [0, 5, 11, 12], "occupi": 13, "occur": 11, "off": 13, "officewalk": [8, 9, 11, 12], "officewalk_fac": 11, "officewalk_mark": 11, "officewalk_stat": 11, "officewalk_tracksi": 9, "often": 11, "old": 5, "one": [8, 11, 12], "ones": 8, "onli": [5, 12, 13], "onset": 12, "oop": 12, "oppos": 11, "optic": [5, 6, 13], "opticalflow": 13, "optimis": 13, "option": [1, 2, 3, 5, 6, 13], "orang": 12, "org": 11, "organ": [3, 6, 11], "origin": [5, 12], "other": [0, 1, 5, 6, 8, 11], "other_kind": [1, 5], "otherwis": [0, 6], "our": 13, "out": 0, "outlin": 6, "output": [3, 5, 6, 11, 13], "output_dir": [3, 6], "over": [5, 6, 13], "overal": 8, "overlai": [5, 6], "overlaid": [5, 6, 13], "overlay_fixations_on_video": 13, "overlay_scanpath_on_video": [4, 5, 6, 13], "overview": 11, "own": 11, "p": 8, "panda": [1, 2, 5, 6, 11, 13], "paramet": [1, 2, 3, 7, 12], "parent": 9, "pars": 2, "partial": 13, "particip": 11, "particular": 0, "past": 13, "path": [1, 2, 3, 5, 6, 11, 13], "pathlib": [1, 2, 3, 6, 11], "pd": [1, 5, 13], "per": [1, 5, 8], "perform": [5, 6, 8, 13], "permiss": 0, "permit": 0, "person": 0, "physio": 6, "physioev": 6, "pickl": 13, "pip": 0, "pipelin": 13, "pitch": 12, "pixel": [1, 6, 7], "pkl": [6, 13], "pl": 0, "plan": 0, "pleas": 0, "plot": [1, 6, 7, 11, 12], "plot_distribut": [4, 6, 7, 11], "plot_fram": [1, 4, 7], "plt": [11, 12], "point": [1, 5, 8, 11, 12, 13], "portion": 0, "posit": 13, "possibl": [12, 13], "practic": 13, "prefix": [3, 6, 9], "preprocess": [4, 8], "present": [5, 6, 13], "preserv": 12, "presum": 11, "previou": 12, "print": [8, 11, 12, 13], "process": [0, 11, 13], "produc": 11, "product": 1, "project": [0, 2, 6, 11], "properti": [6, 11, 13], "provid": [0, 5, 6, 8, 12, 13], "publish": 0, "pupil": [0, 1, 2, 6, 11, 12], "pupillab": 13, "purpos": 0, "px": [8, 11, 12], "py": [8, 11, 13], "pydata": 11, "pyneon": [1, 2, 3, 5, 6, 7, 9, 11, 12, 13], "pypi": 0, "pyplot": [1, 6, 7, 11, 12], "python": 11, "qian": [11, 13], "quaternion": 12, "quirk": 13, "radiu": [5, 6], "random": 13, "rang": [1, 5, 12], "rate": [5, 12], "rather": 8, "raw": [11, 12], "raw_eye_states_data_slic": 12, "raw_gaze_data_slic": 12, "raw_imu_data_slic": 12, "re": 11, "reach": 13, "read": [0, 1, 2, 6, 10], "readabl": [5, 6, 11], "readthedoc": [3, 6], "rec": [3, 5, 6, 7], "recenc": 13, "recent": 13, "record": [0, 1, 2, 3, 5, 6, 7, 8, 10, 12], "recording_dir": [6, 8, 9, 11, 12, 13], "recording_dir_1": 2, "recording_dir_2": 2, "recording_id": 6, "red": [12, 13], "redund": 11, "refer": [0, 3, 5, 6, 8, 11], "rel": [1, 5, 8, 11, 12, 13], "relat": 5, "releas": 0, "relev": 13, "remov": 1, "renam": [5, 6], "render": 13, "repeat": 13, "replac": [1, 5, 6], "report": 13, "repositori": 0, "repres": [5, 6, 11, 13], "reproduc": [3, 6], "request": 11, "requir": [6, 11, 13], "resamp_float_kind": [5, 6, 13], "resamp_other_kind": [5, 6, 13], "resampl": [5, 6, 10, 11], "research": [3, 6], "resolut": 13, "respect": [5, 6, 12, 13], "ressourc": 13, "restrict": 0, "result": [5, 6, 8, 13], "return": [1, 5, 6, 7, 11, 12, 13], "rich": 0, "right": 0, "roll": 12, "roughli": 13, "row": [5, 8, 12, 13], "royalblu": 11, "run": [0, 13], "runtim": 13, "runtimewarn": 8, "saccad": [1, 5, 6, 11, 13], "sacnpath_overlay_video": [5, 6], "same": [12, 13], "sampl": [1, 3, 5, 6, 13], "sample_dir": [9, 11], "sampling_freq": [5, 6], "sampling_freq_effect": [1, 11], "sampling_freq_nomin": [1, 11, 12], "sampling_r": 5, "save": [3, 5, 6, 13], "scanpath": [6, 10], "scatter": [6, 7, 12], "scatter_sourc": [6, 7], "scatterplot": 11, "scene": [0, 2, 6, 7, 11, 13], "scene_camera": [6, 13], "scene_video": [6, 11, 13], "scene_video_info": [11, 13], "scientif": [3, 6], "scipi": [1, 5, 6, 12], "seaborn": 11, "second": [1, 5, 8, 11, 12], "section": [1, 2, 11], "see": [0, 1, 3, 5, 6, 11, 13], "seem": 12, "seen": [11, 12, 13], "select": [5, 6, 8], "self": 13, "sell": 0, "sensor": 11, "seri": 8, "serv": 8, "set": [0, 1, 5, 6, 7, 11, 12], "set_color": 11, "set_titl": 12, "set_xlabel": 12, "set_ylabel": 12, "set_yscal": 12, "shall": 0, "shape": [5, 8, 12], "share": 12, "should": [3, 6, 12, 13], "show": [1, 6, 7, 11, 12, 13], "show_lin": [5, 6], "show_video": [5, 6, 13], "sigma": [6, 7], "sign": 13, "simpli": [11, 12], "simultan": 13, "sinc": [5, 6, 12], "singl": [0, 6, 8, 11, 12, 13], "singular": [5, 6], "size": [5, 6, 7], "slice": 8, "smooth": [5, 6, 7], "sn": 11, "so": 0, "softwar": 0, "some": [11, 13], "sourc": [6, 7], "space": [8, 12, 13], "spars": 13, "spec": 1, "specif": [1, 3, 5, 6, 8, 13], "specifi": [1, 5, 6, 7, 8, 11, 12], "sream": 6, "stabil": 11, "stabilis": 13, "stabl": [3, 6, 11], "standard": [3, 6, 7], "start": [0, 1, 5, 6, 10, 11, 12, 13], "start_datetim": 6, "start_t": 12, "start_tim": [6, 8, 12], "state": [0, 1, 6, 12], "statist": 11, "step_siz": [6, 7], "still": [6, 13], "store": 1, "str": [1, 2, 3, 5, 6, 7, 13], "stream": [1, 5, 6], "stream_nam": [5, 6], "street": 13, "string": 5, "strip": 11, "structur": [2, 3, 6, 11], "sub": [3, 6, 9], "subject": 0, "sublicens": 0, "subplot": [11, 12], "subsequ": [8, 12, 13], "substanti": 0, "success": [5, 6], "suitabl": [6, 7], "support": 5, "sy": 13, "synchron": [12, 13], "t": [1, 3, 6, 12], "t_after": [5, 8], "t_befor": [5, 8], "t_ref": [5, 8], "t_rel": [5, 8], "tabular": [1, 11], "tail": 13, "take": [5, 11, 12, 13], "taken": 12, "target": 13, "task": 11, "temp": 8, "templat": [3, 6], "tend": 11, "test": 13, "test_ev": 8, "text": 11, "than": [5, 11], "thei": [2, 5, 8, 12, 13], "them": [11, 12, 13], "therefor": 13, "thi": [0, 5, 6, 8, 11, 12, 13], "thick": [5, 6], "though": 13, "three": 13, "through": 2, "thu": [6, 7], "tick": 12, "tight_layout": 12, "time": [1, 5, 6, 11, 12, 13], "time_to_t": 12, "time_unit": [5, 8], "times_df": [5, 8], "timeseri": [0, 2, 8, 9, 11, 12], "timestamp": [1, 5, 6, 8, 11, 12, 13], "timestamps_fil": 1, "titl": [1, 7], "tlist": 8, "tmax": [1, 5], "tmin": [1, 5], "to_csv": 13, "to_eye_bid": 6, "to_motion_bid": [6, 9], "to_numpi": [5, 8], "to_pickl": 13, "toler": [5, 6], "tool": 0, "tort": 0, "traceback": 13, "track": [0, 6, 13], "trade": 13, "treat": 13, "true": [1, 5, 6, 7, 8, 9, 11, 12, 13], "try": 11, "ts_diff": 12, "ts_diff_uniqu": 12, "tsv": [3, 6], "tupl": [6, 7], "turn": [12, 13], "tutori": [0, 11, 12, 13], "twinx": 11, "txt": [2, 11], "type": [2, 4, 5, 6, 11, 12, 13], "typeerror": 13, "typic": [6, 7], "u": [12, 13], "unavail": 11, "under": [5, 6], "uniqu": [5, 12], "unit": 5, "unnderli": 13, "until": [6, 11], "unzip": 11, "up": [11, 13], "updat": 13, "upon": 11, "us": [0, 1, 5, 6, 7, 8, 11, 12, 13], "usabl": 13, "user": [3, 6, 7, 8, 11], "userwarn": 11, "usual": 13, "utc": [1, 5, 11, 12], "valu": [5, 8, 12], "ve": 8, "versatil": 0, "vi": 7, "vicin": 13, "video": [0, 1, 2, 5, 6, 7, 10, 11], "video_fil": 1, "video_output_path": [5, 6], "video_with_scanpath": 6, "videocaptur": 1, "visibl": 13, "visual": [4, 13], "w": 12, "wa": [11, 12, 13], "walk": [11, 13], "walk1": [8, 9, 11, 12], "walk2": 11, "want": 12, "warn": 11, "warranti": 0, "we": [0, 8, 11, 12, 13], "wearer": [11, 13], "weight": 0, "well": [8, 11, 13], "welzel": [3, 6], "were": [5, 8, 13], "what": 11, "when": [12, 13], "where": [5, 6, 11, 13], "whether": [0, 1, 5, 7], "which": [0, 5, 11, 12, 13], "while": 13, "wholist": 11, "whom": 0, "width": [1, 6, 7], "width_height": [6, 7], "window": [5, 6], "window_averag": [4, 5], "window_s": 5, "within": [5, 12, 13], "without": [0, 8], "word": 5, "work": [0, 12, 13], "workflow": 13, "world_timestamp": [6, 11, 13], "worn": [8, 11, 12], "would": [2, 12, 13], "x": [8, 11, 12, 13], "xlabel": 11, "xtick": 12, "xx_record": 6, "xx_task": [3, 6], "y": [8, 11, 12, 13], "yaw": 12, "yaxi": 11, "yet": 2, "yield": 13, "ylabel": 11, "you": [0, 10, 11, 13], "your": 13, "ytick": 12, "yy_tracksi": [3, 6], "z": 12, "zeros_lik": 12}, "titles": ["Welcome to PyNeon documentation", "Classes for individual data types", "NeonDataset class", "Exportation module", "PyNeon API", "Preprocessing module", "NeonRecording class", "Visualization module", "Tutorial: Processing Eye-Tracking Data with PyNeon", "Export Neon data recording to BIDS formats", "PyNeon Tutorials", "Reading a Neon dataset/recording", "Resample Data and Concatenate Channels", "Mapping Scanpath to video"], "titleterms": {"1": [8, 13], "2": [8, 13], "3": [8, 13], "4": [8, 13], "5": [8, 13], "6": 8, "7": 8, "8": 8, "across": 8, "api": 4, "arrai": 8, "averag": 8, "bid": 9, "channel": 12, "class": [1, 2, 6, 8], "concaten": 12, "conclus": 8, "construct": 8, "convert": 8, "creat": 8, "data": [0, 1, 8, 9, 11, 12, 13], "dataset": 11, "differ": 12, "document": 0, "epoch": 8, "estim": 13, "event": [8, 11], "export": [3, 9], "ey": 8, "fixat": 13, "format": [0, 9], "frame": 13, "from": 8, "gaze": [11, 13], "heatmap": 11, "individu": 1, "initi": 8, "instal": 0, "interv": 8, "licens": 0, "load": [8, 13], "map": 13, "metadata": 11, "modul": [3, 5, 7], "neon": [9, 11, 13], "neondataset": 2, "neonrecord": [6, 11], "numpi": 8, "over": 8, "overlai": 13, "paramet": [5, 6], "preprocess": 5, "process": 8, "pyneon": [0, 4, 8, 10], "read": 11, "record": [9, 11, 13], "resampl": 12, "sampl": [8, 11, 12], "scanpath": 13, "setup": 13, "statu": 13, "step": 8, "stream": [11, 12], "summari": 13, "time": 8, "track": 8, "tutori": [8, 10], "type": 1, "understand": 13, "unequ": 12, "verifi": 8, "video": 13, "visual": [7, 11], "welcom": 0}}) \ No newline at end of file diff --git a/tutorials/read_recording.html b/tutorials/read_recording.html index 23d18af..b303964 100644 --- a/tutorials/read_recording.html +++ b/tutorials/read_recording.html @@ -376,13 +376,12 @@

Reading a Neon dataset/recordingPupil Cloud.

Reading sample data#

-

We will use a sample recording produced by the NCC Lab called OfficeWalk. It’s a project with 2 recordings and multiple enrichments and can be downloaded with the get_sample_data() function:

+

We will use a sample recording produced by the NCC Lab called OfficeWalk. It’s a project with 2 recordings and multiple enrichments and can be downloaded with the get_sample_data() function. It returns a `Pathlib.Path <https://docs.python.org/3/library/pathlib.html>`__ object to the downloaded & unzipped directory.

[1]:
 
-
import sys
-from pyneon import get_sample_data, NeonDataset, NeonRecording
+
from pyneon import get_sample_data, NeonDataset, NeonRecording
 
 sample_dir = get_sample_data("OfficeWalk")
 
@@ -406,7 +405,7 @@

Reading sample dataTimeseries Data folder contains what PyNeon calls a NeonDataset. It contains multiple recordings, each with its own info.json file and data files. These recordings can either be loaded individually as NeonRecordings or as a wholist NeonDataset.

+

The Timeseries Data folder contains what PyNeon calls a `NeonDataset <https://ncc-brain.github.io/PyNeon/reference/dataset.html#pyneon.NeonDataset>`__. It contains multiple recordings, each with its own info.json file and data files. These recordings can either be loaded individually as a `NeonRecording <https://ncc-brain.github.io/PyNeon/reference/recording.html#pyneon.NeonRecording>`__ or as a wholist NeonDataset.

If loading a NeonDataset, specify the path to the Timeseries Data folder to create a NeonDataset object:

[2]:
@@ -444,7 +443,7 @@ 

Reading sample dataNeonRecording by specifying the path to the recording’s folder:

+

Equivalently, one can directly load a single NeonRecording by specifying the path to the recording’s folder.

[4]:
 
@@ -502,35 +501,14 @@

Data and metadata of a NeonRecordingvideo tutorial.

-

Individual data streams can be accessed as properties of the NeonRecording object. For example, the gaze data can be accessed as recording.gaze, and upon accessing, the tabular data is loaded into memory.

+

Individual data streams can be accessed as properties of the NeonRecording object. For example, the gaze data can be accessed as recording.gaze, and upon accessing, the tabular data is loaded into memory. On the other hand, if you try to access unavailable data like the video, it will simply return None and a warning message.

[6]:
 
-
print(f"recording._gaze size before accessing `gaze`: {sys.getsizeof(recording._gaze)}")
-
-gaze = recording.gaze
-print(f"recording.gaze is of type: {type(gaze)}")
-print(f"recording._gaze size after accessing `gaze`: {sys.getsizeof(recording._gaze)}")
-
-
-
-
-
-
-
-
-recording._gaze size before accessing `gaze`: 16
-recording.gaze is of type: <class 'pyneon.stream.NeonGaze'>
-recording._gaze size after accessing `gaze`: 48
-
-
-

On the other hand, if you try to access unavailable data like the video, it will simply return None.

-

-

We can access the timeseries data in the gaze stream as a pandas DataFrame by accessing the data attribute of the gaze stream. The columns of the DataFrame include timestamp [ns] and channel data columns. During loading, PyNeon strips the redundant section id and recording id columns and adds a more human-readable time [s] column to represent the time of each sample in seconds relative to the start of the data stream.

+

We can access the timeseries data in the gaze stream as a `pandas.DataFrame <https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html>`__ by accessing the data attribute of the gaze stream. The DataFrame has the datetime of each data point as its index. The raw UTC timestamp [ns] is available as a column along with data from channnels like gaze x [px].

+

During loading, PyNeon strips the redundant section id and recording id columns and adds a more human-readable time [s] column to represent the time of each sample in seconds relative to the start of the data stream.

-
[8]:
+
[7]:
 
print(gaze.data.head())
@@ -566,24 +546,31 @@ 

Data and metadata of a NeonRecording
-        timestamp [ns]  gaze x [px]  gaze y [px]  worn  fixation id  blink id  \
-0  1725032224852161732     1067.486      620.856  True            1      <NA>
-1  1725032224857165732     1066.920      617.117  True            1      <NA>
-2  1725032224862161732     1072.699      615.780  True            1      <NA>
-3  1725032224867161732     1067.447      617.062  True            1      <NA>
-4  1725032224872161732     1071.564      613.158  True            1      <NA>
-
-   azimuth [deg]  elevation [deg]  time [s]
-0      16.213030        -0.748998  0.000000
-1      16.176285        -0.511733  0.005004
-2      16.546413        -0.426618  0.010000
-3      16.210049        -0.508251  0.015000
-4      16.473521        -0.260388  0.020000
+                                    timestamp [ns]  gaze x [px]  gaze y [px]  \
+2024-08-30 15:37:04.852161732  1725032224852161732     1067.486      620.856
+2024-08-30 15:37:04.857165732  1725032224857165732     1066.920      617.117
+2024-08-30 15:37:04.862161732  1725032224862161732     1072.699      615.780
+2024-08-30 15:37:04.867161732  1725032224867161732     1067.447      617.062
+2024-08-30 15:37:04.872161732  1725032224872161732     1071.564      613.158
+
+                               worn  fixation id  blink id  azimuth [deg]  \
+2024-08-30 15:37:04.852161732  True            1      <NA>      16.213030
+2024-08-30 15:37:04.857165732  True            1      <NA>      16.176285
+2024-08-30 15:37:04.862161732  True            1      <NA>      16.546413
+2024-08-30 15:37:04.867161732  True            1      <NA>      16.210049
+2024-08-30 15:37:04.872161732  True            1      <NA>      16.473521
+
+                               elevation [deg]  time [s]
+2024-08-30 15:37:04.852161732        -0.748998  0.000000
+2024-08-30 15:37:04.857165732        -0.511733  0.005004
+2024-08-30 15:37:04.862161732        -0.426618  0.010000
+2024-08-30 15:37:04.867161732        -0.508251  0.015000
+2024-08-30 15:37:04.872161732        -0.260388  0.020000
 

PyNeon also automatically sets the column datatype to appropriate types, such as Int64 for timestamps, Int32 for event IDs, and float64 for float data.

-
[9]:
+
[8]:
 
print(gaze.data.dtypes)
@@ -612,7 +599,7 @@ 

Data and metadata of a NeonRecording#

Up to this point, PyNeon simply reads and re-organizes the raw .csv files. Let’s plot some samples from the gaze and eye_states streams and a saccade from the saccades events.

-
[10]:
+
[9]:
 
-

It’s apparent that at the beginning of the recording, there are some missing data points in both the gaze and imu streams. This is presumably due to the time it takes for the sensors to start up and stabilize. We will show how to handle missing data using resampling in the next tutorial. For now, it’s important to be aware of these gaps and that it will require great caution to assume the data is continuously and equally sampled.

PyNeon also calculates the effective (as opposed to the nominal) sampling frequency of each stream by dividing the number of samples by the duration of the recording.

-
[11]:
+
[10]:
 
print(
@@ -707,7 +694,7 @@ 

Data streams and eventsVisualizing gaze heatmap#

Finally, we will show how to plot a heatmap of the gaze/fixation data.

-

we can neatly see that the recorded data shows a centre-bias, which is a well-known effect from eye statistics. In y, we can see that fixations tend to occur below the horizon, which is indicative of a walking task where a participant looks at the floor in front of them more often

diff --git a/tutorials/read_recording.ipynb b/tutorials/read_recording.ipynb index 513a391..0d1a5e8 100644 --- a/tutorials/read_recording.ipynb +++ b/tutorials/read_recording.ipynb @@ -8,7 +8,7 @@ "In this tutorial, we will show how to load a single Neon recording downloaded from [Pupil Cloud](https://docs.pupil-labs.com/neon/pupil-cloud/).\n", "\n", "## Reading sample data\n", - "We will use a sample recording produced by the NCC Lab called `OfficeWalk`. It's a project with 2 recordings and multiple enrichments and can be downloaded with the `get_sample_data()` function:" + "We will use a sample recording produced by the NCC Lab called `OfficeWalk`. It's a project with 2 recordings and multiple enrichments and can be downloaded with the `get_sample_data()` function. It returns a [`Pathlib.Path`](https://docs.python.org/3/library/pathlib.html) object to the downloaded & unzipped directory." ] }, { @@ -17,7 +17,6 @@ "metadata": {}, "outputs": [], "source": [ - "import sys\n", "from pyneon import get_sample_data, NeonDataset, NeonRecording\n", "\n", "sample_dir = get_sample_data(\"OfficeWalk\")" @@ -47,7 +46,7 @@ "└── OfficeWalk_STATIC-IMAGE-MAPPER_ManualMap_csv\n", "```\n", "\n", - "The `Timeseries Data` folder contains what PyNeon calls a `NeonDataset`. It contains multiple recordings, each with its own `info.json` file and data files. These recordings can either be loaded individually as `NeonRecording`s or as a wholist `NeonDataset`.\n", + "The `Timeseries Data` folder contains what PyNeon calls a [`NeonDataset`](https://ncc-brain.github.io/PyNeon/reference/dataset.html#pyneon.NeonDataset). It contains multiple recordings, each with its own `info.json` file and data files. These recordings can either be loaded individually as a [`NeonRecording`](https://ncc-brain.github.io/PyNeon/reference/recording.html#pyneon.NeonRecording) or as a wholist `NeonDataset`.\n", "\n", "If loading a `NeonDataset`, specify the path to the `Timeseries Data` folder to create a `NeonDataset` object:" ] @@ -100,7 +99,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Alternatively, one can directly load a single `NeonRecording` by specifying the path to the recording's folder:" + "Equivalently, one can directly load a single `NeonRecording` by specifying the path to the recording's folder." ] }, { @@ -171,7 +170,7 @@ "source": [ "As seen in the output, this recording contains every file other than the scene video. This is because we downloaded the \"Timeseries Data\" instead of \"Timeseries Data + Scene Video\" from Pupil Cloud. For more information on how to process video files, see the [video tutorial](video.ipynb).\n", "\n", - "Individual data streams can be accessed as properties of the `NeonRecording` object. For example, the gaze data can be accessed as `recording.gaze`, and upon accessing, the tabular data is loaded into memory." + "Individual data streams can be accessed as properties of the `NeonRecording` object. For example, the gaze data can be accessed as `recording.gaze`, and upon accessing, the tabular data is loaded into memory. On the other hand, if you try to access unavailable data like the video, it will simply return `None` and a warning message." ] }, { @@ -183,36 +182,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "recording._gaze size before accessing `gaze`: 16\n", - "recording.gaze is of type: \n", - "recording._gaze size after accessing `gaze`: 48\n" - ] - } - ], - "source": [ - "print(f\"recording._gaze size before accessing `gaze`: {sys.getsizeof(recording._gaze)}\")\n", - "\n", - "gaze = recording.gaze\n", - "print(f\"recording.gaze is of type: {type(gaze)}\")\n", - "print(f\"recording._gaze size after accessing `gaze`: {sys.getsizeof(recording._gaze)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "On the other hand, if you try to access unavailable data like the video, it will simply return `None`." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ + "\n", "None\n" ] }, @@ -220,12 +190,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:273: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", + "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] } ], "source": [ + "gaze = recording.gaze\n", + "print(gaze)\n", "video = recording.video\n", "print(video)" ] @@ -234,31 +206,40 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can access the timeseries data in the gaze stream as a pandas DataFrame by accessing the `data` attribute of the gaze stream. The columns of the DataFrame include `timestamp [ns]` and channel data columns. During loading, PyNeon strips the redundant `section id` and `recording id` columns and adds a more human-readable `time [s]` column to represent the time of each sample in seconds relative to the start of the data stream." + "We can access the timeseries data in the gaze stream as a [`pandas.DataFrame`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html) by accessing the `data` attribute of the gaze stream. The DataFrame has the datetime of each data point as its index. The raw UTC `timestamp [ns]` is available as a column along with data from channnels like `gaze x [px]`.\n", + "\n", + "During loading, PyNeon strips the redundant `section id` and `recording id` columns and adds a more human-readable `time [s]` column to represent the time of each sample in seconds relative to the start of the data stream." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " timestamp [ns] gaze x [px] gaze y [px] worn fixation id blink id \\\n", - "0 1725032224852161732 1067.486 620.856 True 1 \n", - "1 1725032224857165732 1066.920 617.117 True 1 \n", - "2 1725032224862161732 1072.699 615.780 True 1 \n", - "3 1725032224867161732 1067.447 617.062 True 1 \n", - "4 1725032224872161732 1071.564 613.158 True 1 \n", + " timestamp [ns] gaze x [px] gaze y [px] \\\n", + "2024-08-30 15:37:04.852161732 1725032224852161732 1067.486 620.856 \n", + "2024-08-30 15:37:04.857165732 1725032224857165732 1066.920 617.117 \n", + "2024-08-30 15:37:04.862161732 1725032224862161732 1072.699 615.780 \n", + "2024-08-30 15:37:04.867161732 1725032224867161732 1067.447 617.062 \n", + "2024-08-30 15:37:04.872161732 1725032224872161732 1071.564 613.158 \n", "\n", - " azimuth [deg] elevation [deg] time [s] \n", - "0 16.213030 -0.748998 0.000000 \n", - "1 16.176285 -0.511733 0.005004 \n", - "2 16.546413 -0.426618 0.010000 \n", - "3 16.210049 -0.508251 0.015000 \n", - "4 16.473521 -0.260388 0.020000 \n" + " worn fixation id blink id azimuth [deg] \\\n", + "2024-08-30 15:37:04.852161732 True 1 16.213030 \n", + "2024-08-30 15:37:04.857165732 True 1 16.176285 \n", + "2024-08-30 15:37:04.862161732 True 1 16.546413 \n", + "2024-08-30 15:37:04.867161732 True 1 16.210049 \n", + "2024-08-30 15:37:04.872161732 True 1 16.473521 \n", + "\n", + " elevation [deg] time [s] \n", + "2024-08-30 15:37:04.852161732 -0.748998 0.000000 \n", + "2024-08-30 15:37:04.857165732 -0.511733 0.005004 \n", + "2024-08-30 15:37:04.862161732 -0.426618 0.010000 \n", + "2024-08-30 15:37:04.867161732 -0.508251 0.015000 \n", + "2024-08-30 15:37:04.872161732 -0.260388 0.020000 \n" ] } ], @@ -275,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -310,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -319,7 +300,7 @@ "" ] }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, @@ -390,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -423,14 +404,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:273: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", + "C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] }, @@ -473,7 +454,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.12.6" } }, "nbformat": 4,