From 0e62588034c4aea489f8c9a85e6ba5ee81059e59 Mon Sep 17 00:00:00 2001 From: qian-chu Date: Sun, 6 Oct 2024 23:19:07 +0000 Subject: [PATCH] deploy: efd20656447019641036c02add2bf45a5faae901 --- ...tutorials_interpolate_and_concat_15_1.png} | Bin ...tutorials_interpolate_and_concat_17_1.png} | Bin ... tutorials_interpolate_and_concat_7_0.png} | Bin _images/tutorials_read_recording_17_1.png | Bin 33873 -> 0 bytes _images/tutorials_read_recording_17_2.png | Bin 0 -> 8614 bytes _sources/reference/data.rst.txt | 2 +- _sources/tutorials/index.rst.txt | 2 +- ...b.txt => interpolate_and_concat.ipynb.txt} | 146 ++++++------ _sources/tutorials/read_recording.ipynb.txt | 119 +++++----- genindex.html | 62 +++--- objects.inv | Bin 3473 -> 3548 bytes py-modindex.html | 10 +- reference/data.html | 210 +++++++++++------- reference/index.html | 5 +- reference/preprocess.html | 91 +++----- reference/recording.html | 2 +- searchindex.js | 2 +- tutorials/export_to_bids.html | 2 +- tutorials/index.html | 4 +- ...oncat.html => interpolate_and_concat.html} | 178 +++++++-------- ...cat.ipynb => interpolate_and_concat.ipynb} | 146 ++++++------ tutorials/read_recording.html | 169 +++++++++----- tutorials/read_recording.ipynb | 119 +++++----- tutorials/video.html | 8 +- 24 files changed, 671 insertions(+), 606 deletions(-) rename _images/{tutorials_resample_and_concat_15_1.png => tutorials_interpolate_and_concat_15_1.png} (100%) rename _images/{tutorials_resample_and_concat_17_1.png => tutorials_interpolate_and_concat_17_1.png} (100%) rename _images/{tutorials_resample_and_concat_7_0.png => tutorials_interpolate_and_concat_7_0.png} (100%) delete mode 100644 _images/tutorials_read_recording_17_1.png create mode 100644 _images/tutorials_read_recording_17_2.png rename _sources/tutorials/{resample_and_concat.ipynb.txt => interpolate_and_concat.ipynb.txt} (96%) rename tutorials/{resample_and_concat.html => interpolate_and_concat.html} (81%) rename tutorials/{resample_and_concat.ipynb => interpolate_and_concat.ipynb} (96%) diff --git a/_images/tutorials_resample_and_concat_15_1.png b/_images/tutorials_interpolate_and_concat_15_1.png similarity index 100% rename from _images/tutorials_resample_and_concat_15_1.png rename to _images/tutorials_interpolate_and_concat_15_1.png diff --git a/_images/tutorials_resample_and_concat_17_1.png b/_images/tutorials_interpolate_and_concat_17_1.png similarity index 100% rename from _images/tutorials_resample_and_concat_17_1.png rename to _images/tutorials_interpolate_and_concat_17_1.png diff --git a/_images/tutorials_resample_and_concat_7_0.png b/_images/tutorials_interpolate_and_concat_7_0.png similarity index 100% rename from _images/tutorials_resample_and_concat_7_0.png rename to _images/tutorials_interpolate_and_concat_7_0.png diff --git a/_images/tutorials_read_recording_17_1.png b/_images/tutorials_read_recording_17_1.png deleted file mode 100644 index 1655eed7716ee47c86c46e60799299ab5d0db5a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33873 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 G`u-m{GQGb5 diff --git a/_images/tutorials_read_recording_17_2.png b/_images/tutorials_read_recording_17_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1cded3efbb3a3c08daa646363c79a195086960 GIT binary patch literal 8614 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 W+vwHm=LO55j+>t{%R74h>VE=sE 16.213030 -0.748998 \n", - "1 16.176315 -0.511927 \n", - "2 16.546413 -0.426618 \n", - "3 16.210049 -0.508251 \n", - "4 16.473521 -0.260388 \n", "Only one unique time difference: [5000000]\n" ] } ], "source": [ "# Resample to the nominal sampling frequency\n", - "gaze_resampled_data = gaze.interpolate()\n", - "print(gaze_resampled_data.head())\n", + "gaze_resampled = gaze.interpolate()\n", "\n", - "ts = gaze_resampled_data[\"timestamp [ns]\"].values\n", - "ts_diffs = np.diff(ts)\n", - "ts_diff_unique = np.unique(ts_diffs)\n", - "print(f\"Only one unique time difference: {np.unique(ts_diffs)}\")" + "print(f\"Only one unique time difference: {np.unique(gaze_resampled.ts_diff)}\")" ] }, { @@ -211,15 +184,17 @@ "text": [ "Original gaze data length: 18769\n", "Original IMU data length: 10919\n", - "Data length after resampling to IMU: 10919\n" + "Gaze data length after resampling to IMU: 10919\n" ] } ], "source": [ "print(f\"Original gaze data length: {gaze.data.shape[0]}\")\n", "print(f\"Original IMU data length: {imu.data.shape[0]}\")\n", - "gaze_resampled_to_imu_data = gaze.interpolate(new_ts=imu.ts)\n", - "print(f\"Data length after resampling to IMU: {gaze_resampled_to_imu_data.shape[0]}\")" + "gaze_resampled_to_imu = gaze.interpolate(new_ts=imu.ts)\n", + "print(\n", + " f\"Gaze data length after resampling to IMU: {gaze_resampled_to_imu.data.shape[0]}\"\n", + ")" ] }, { @@ -235,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -249,48 +224,55 @@ "Using lowest sampling rate: 110 Hz (['imu'])\n", "Using latest start timestamp: 1725032224878547732 (['imu'])\n", "Using earliest last timestamp: 1725032319533909732 (['imu'])\n", - " timestamp [ns] time [s] gaze x [px] gaze y [px] worn fixation id \\\n", - "0 1725032224878547732 0.000000 1073.410354 611.095861 True 1 \n", - "1 1725032224887638641 0.009091 1069.801082 613.382535 True 1 \n", - "2 1725032224896729550 0.018182 1070.090109 613.439696 True 1 \n", - "3 1725032224905820459 0.027273 1069.891351 612.921757 True 1 \n", - "4 1725032224914911368 0.036364 1069.692588 612.403803 True 1 \n", + " gaze x [px] gaze y [px] worn fixation id blink id \\\n", + "1725032224878547732 1073.410354 611.095861 True 1 \n", + "1725032224887638641 1069.801082 613.382535 True 1 \n", + "1725032224896729550 1070.090109 613.439696 True 1 \n", + "1725032224905820459 1069.891351 612.921757 True 1 \n", + "1725032224914911368 1069.692588 612.403803 True 1 \n", + "\n", + " azimuth [deg] elevation [deg] pupil diameter left [mm] \\\n", + "1725032224878547732 16.591703 -0.129540 5.036588 \n", + "1725032224887638641 16.360605 -0.274666 5.093205 \n", + "1725032224896729550 16.379116 -0.278283 5.078107 \n", + "1725032224905820459 16.366379 -0.245426 5.077680 \n", + "1725032224914911368 16.353641 -0.212567 5.077253 \n", "\n", - " blink id azimuth [deg] elevation [deg] pupil diameter left [mm] ... \\\n", - "0 16.591703 -0.129540 5.036588 ... \n", - "1 16.360605 -0.274666 5.093205 ... \n", - "2 16.379116 -0.278283 5.078107 ... \n", - "3 16.366379 -0.245426 5.077680 ... \n", - "4 16.353641 -0.212567 5.077253 ... \n", + " pupil diameter right [mm] eyeball center left x [mm] \\\n", + "1725032224878547732 4.254749 -31.742046 \n", + "1725032224887638641 4.358431 -31.746807 \n", + "1725032224896729550 4.439704 -31.700505 \n", + "1725032224905820459 4.442760 -31.711353 \n", + "1725032224914911368 4.445815 -31.722201 \n", "\n", - " acceleration x [g] acceleration y [g] acceleration z [g] roll [deg] \\\n", - "0 0.063477 -0.058594 0.940430 -2.550682 \n", - "1 0.057486 -0.048916 0.942273 -2.602498 \n", - "2 0.051494 -0.039238 0.944117 -2.654314 \n", - "3 0.046721 -0.045800 0.944336 -2.699777 \n", - "4 0.042113 -0.054556 0.944336 -2.744383 \n", + " ... acceleration x [g] acceleration y [g] \\\n", + "1725032224878547732 ... 0.063477 -0.058594 \n", + "1725032224887638641 ... 0.057486 -0.048916 \n", + "1725032224896729550 ... 0.051494 -0.039238 \n", + "1725032224905820459 ... 0.046721 -0.045800 \n", + "1725032224914911368 ... 0.042113 -0.054556 \n", "\n", - " pitch [deg] yaw [deg] quaternion w quaternion x quaternion y \\\n", - "0 -4.461626 -172.335180 0.067636 -0.024792 0.037342 \n", - "1 -4.493445 -172.562393 0.065682 -0.025185 0.037639 \n", - "2 -4.525265 -172.789613 0.063728 -0.025579 0.037936 \n", - "3 -4.556964 -173.013398 0.061802 -0.025917 0.038238 \n", - "4 -4.588647 -173.236726 0.059879 -0.026247 0.038541 \n", + " acceleration z [g] roll [deg] pitch [deg] yaw [deg] \\\n", + "1725032224878547732 0.940430 -2.550682 -4.461626 -172.335180 \n", + "1725032224887638641 0.942273 -2.602498 -4.493445 -172.562393 \n", + "1725032224896729550 0.944117 -2.654314 -4.525265 -172.789613 \n", + "1725032224905820459 0.944336 -2.699777 -4.556964 -173.013398 \n", + "1725032224914911368 0.944336 -2.744383 -4.588647 -173.236726 \n", "\n", - " quaternion z \n", - "0 -0.996703 \n", - "1 -0.996810 \n", - "2 -0.996917 \n", - "3 -0.997017 \n", - "4 -0.997115 \n", + " quaternion w quaternion x quaternion y quaternion z \n", + "1725032224878547732 0.067636 -0.024792 0.037342 -0.996703 \n", + "1725032224887638641 0.065682 -0.025185 0.037639 -0.996810 \n", + "1725032224896729550 0.063728 -0.025579 0.037936 -0.996917 \n", + "1725032224905820459 0.061802 -0.025917 0.038238 -0.997017 \n", + "1725032224914911368 0.059879 -0.026247 0.038541 -0.997115 \n", "\n", - "[5 rows x 36 columns]\n" + "[5 rows x 34 columns]\n" ] } ], "source": [ - "concat_data = recording.concat_streams([\"gaze\", \"eye_states\", \"imu\"])\n", - "print(concat_data.head())" + "concat_stream = recording.concat_streams([\"gaze\", \"eye_states\", \"imu\"])\n", + "print(concat_stream.data.head())" ] }, { @@ -329,8 +311,8 @@ "source": [ "start_time = 5\n", "end_time = 5.3\n", - "start_ts = time_to_ts(start_time, concat_data)\n", - "end_ts = time_to_ts(end_time, concat_data)\n", + "start_ts = time_to_ts(start_time, concat_stream)\n", + "end_ts = time_to_ts(end_time, concat_stream)\n", "\n", "raw_gaze_data_slice = gaze.data[\n", " (gaze.data[\"timestamp [ns]\"] >= start_ts) & (gaze.data[\"timestamp [ns]\"] <= end_ts)\n", @@ -342,9 +324,9 @@ "raw_imu_data_slice = imu.data[\n", " (imu.data[\"timestamp [ns]\"] >= start_ts) & (imu.data[\"timestamp [ns]\"] <= end_ts)\n", "]\n", - "concat_data_slice = concat_data[\n", - " (concat_data[\"timestamp [ns]\"] >= start_ts)\n", - " & (concat_data[\"timestamp [ns]\"] <= end_ts)\n", + "concat_data_slice = concat_stream[\n", + " (concat_stream[\"timestamp [ns]\"] >= start_ts)\n", + " & (concat_stream[\"timestamp [ns]\"] <= end_ts)\n", "]\n", "\n", "# plot all data in the same scatter plot\n", @@ -448,7 +430,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/_sources/tutorials/read_recording.ipynb.txt b/_sources/tutorials/read_recording.ipynb.txt index 19644ff..9568f42 100644 --- a/_sources/tutorials/read_recording.ipynb.txt +++ b/_sources/tutorials/read_recording.ipynb.txt @@ -143,19 +143,19 @@ "Wearer ID: bcff2832-cfcb-4f89-abef-7bbfe91ec561\n", "Wearer name: Qian\n", "Recording start time: 2024-08-30 17:37:01.527000\n", - "Recording duration: 98.213 s\n", - " exist filename path\n", - "3d_eye_states True 3d_eye_states.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\3d_eye_states.csv\n", - "blinks True blinks.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\blinks.csv\n", - "events True events.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\events.csv\n", - "fixations True fixations.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\fixations.csv\n", - "gaze True gaze.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\gaze.csv\n", - "imu True imu.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\imu.csv\n", - "labels True labels.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\labels.csv\n", - "saccades True saccades.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\saccades.csv\n", - "world_timestamps True world_timestamps.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\world_timestamps.csv\n", - "scene_video_info False None None\n", - "scene_video False None None\n", + "Recording duration: 98.213s\n", + " exist filename path\n", + "3d_eye_states True 3d_eye_states.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\3d_eye_states.csv\n", + "blinks True blinks.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\blinks.csv\n", + "events True events.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\events.csv\n", + "fixations True fixations.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\fixations.csv\n", + "gaze True gaze.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\gaze.csv\n", + "imu True imu.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\imu.csv\n", + "labels True labels.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\labels.csv\n", + "saccades True saccades.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\saccades.csv\n", + "world_timestamps True world_timestamps.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\world_timestamps.csv\n", + "scene_video_info False None None\n", + "scene_video False None None\n", "\n" ] } @@ -182,7 +182,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", + "\n", "None\n" ] }, @@ -190,7 +190,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "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", + "D:\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] } @@ -220,26 +220,21 @@ "name": "stdout", "output_type": "stream", "text": [ - " 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", - " 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", + " gaze x [px] gaze y [px] worn fixation id blink id \\\n", + "timestamp [ns] \n", + "1725032224852161732 1067.486 620.856 True 1 \n", + "1725032224857165732 1066.920 617.117 True 1 \n", + "1725032224862161732 1072.699 615.780 True 1 \n", + "1725032224867161732 1067.447 617.062 True 1 \n", + "1725032224872161732 1071.564 613.158 True 1 \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" + " azimuth [deg] elevation [deg] \n", + "timestamp [ns] \n", + "1725032224852161732 16.213030 -0.748998 \n", + "1725032224857165732 16.176285 -0.511733 \n", + "1725032224862161732 16.546413 -0.426618 \n", + "1725032224867161732 16.210049 -0.508251 \n", + "1725032224872161732 16.473521 -0.260388 \n" ] } ], @@ -263,7 +258,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "timestamp [ns] Int64\n", "gaze x [px] float64\n", "gaze y [px] float64\n", "worn bool\n", @@ -271,7 +265,6 @@ "blink id Int32\n", "azimuth [deg] float64\n", "elevation [deg] float64\n", - "time [s] float64\n", "dtype: object\n" ] } @@ -291,22 +284,43 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "saccade id 2.0\n", + "end timestamp [ns] 1725032225347526656.0\n", + "duration [ms] 65.0\n", + "amplitude [px] 228.36139\n", + "amplitude [deg] 14.676102\n", + "mean velocity [px/s] 3685.269894\n", + "peak velocity [px/s] 5411.775481\n", + "Name: 1725032225282527732, dtype: Float64\n" + ] + }, + { + "ename": "TypeError", + "evalue": "unhashable type: 'numpy.ndarray'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[12], line 19\u001b[0m\n\u001b[0;32m 17\u001b[0m saccade \u001b[38;5;241m=\u001b[39m saccades\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39miloc[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28mprint\u001b[39m(saccade)\n\u001b[1;32m---> 19\u001b[0m \u001b[43max\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maxvspan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 20\u001b[0m \u001b[43m \u001b[49m\u001b[43msaccade\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msaccade\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mend timestamp [ns]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlightgray\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n\u001b[0;32m 21\u001b[0m \u001b[43m)\u001b[49m\n\u001b[0;32m 22\u001b[0m ax\u001b[38;5;241m.\u001b[39mtext(\n\u001b[0;32m 23\u001b[0m (saccade\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mto_numpy() \u001b[38;5;241m+\u001b[39m saccade[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mend timestamp [ns]\u001b[39m\u001b[38;5;124m\"\u001b[39m]) \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m,\n\u001b[0;32m 24\u001b[0m \u001b[38;5;241m1050\u001b[39m,\n\u001b[0;32m 25\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSaccade\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 26\u001b[0m horizontalalignment\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 27\u001b[0m )\n\u001b[0;32m 29\u001b[0m \u001b[38;5;66;03m# Visualize gaze x and pupil diameter left\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axes\\_axes.py:1087\u001b[0m, in \u001b[0;36mAxes.axvspan\u001b[1;34m(self, xmin, xmax, ymin, ymax, **kwargs)\u001b[0m\n\u001b[0;32m 1085\u001b[0m \u001b[38;5;66;03m# Strip units away.\u001b[39;00m\n\u001b[0;32m 1086\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_no_units([ymin, ymax], [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mymin\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mymax\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m-> 1087\u001b[0m (xmin, xmax), \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_process_unit_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mxmin\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxmax\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1089\u001b[0m p \u001b[38;5;241m=\u001b[39m mpatches\u001b[38;5;241m.\u001b[39mRectangle((xmin, ymin), xmax \u001b[38;5;241m-\u001b[39m xmin, ymax \u001b[38;5;241m-\u001b[39m ymin, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1090\u001b[0m p\u001b[38;5;241m.\u001b[39mset_transform(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_xaxis_transform(which\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgrid\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axes\\_base.py:2585\u001b[0m, in \u001b[0;36m_AxesBase._process_unit_info\u001b[1;34m(self, datasets, kwargs, convert)\u001b[0m\n\u001b[0;32m 2583\u001b[0m \u001b[38;5;66;03m# Update from data if axis is already set but no unit is set yet.\u001b[39;00m\n\u001b[0;32m 2584\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m axis\u001b[38;5;241m.\u001b[39mhave_units():\n\u001b[1;32m-> 2585\u001b[0m \u001b[43maxis\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_units\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2586\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m axis_name, axis \u001b[38;5;129;01min\u001b[39;00m axis_map\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 2587\u001b[0m \u001b[38;5;66;03m# Return if no axis is set.\u001b[39;00m\n\u001b[0;32m 2588\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axis.py:1756\u001b[0m, in \u001b[0;36mAxis.update_units\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 1754\u001b[0m neednew \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter \u001b[38;5;241m!=\u001b[39m converter\n\u001b[0;32m 1755\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter \u001b[38;5;241m=\u001b[39m converter\n\u001b[1;32m-> 1756\u001b[0m default \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconverter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdefault_units\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1757\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m default \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39munits \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1758\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_units(default)\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:105\u001b[0m, in \u001b[0;36mStrCategoryConverter.default_units\u001b[1;34m(data, axis)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[38;5;66;03m# the conversion call stack is default_units -> axis_info -> convert\u001b[39;00m\n\u001b[0;32m 104\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis\u001b[38;5;241m.\u001b[39munits \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 105\u001b[0m axis\u001b[38;5;241m.\u001b[39mset_units(\u001b[43mUnitData\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 106\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 107\u001b[0m axis\u001b[38;5;241m.\u001b[39munits\u001b[38;5;241m.\u001b[39mupdate(data)\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:181\u001b[0m, in \u001b[0;36mUnitData.__init__\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 179\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_counter \u001b[38;5;241m=\u001b[39m itertools\u001b[38;5;241m.\u001b[39mcount()\n\u001b[0;32m 180\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 181\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:214\u001b[0m, in \u001b[0;36mUnitData.update\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 212\u001b[0m \u001b[38;5;66;03m# check if convertible to number:\u001b[39;00m\n\u001b[0;32m 213\u001b[0m convertible \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m--> 214\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m val \u001b[38;5;129;01min\u001b[39;00m \u001b[43mOrderedDict\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfromkeys\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[0;32m 215\u001b[0m \u001b[38;5;66;03m# OrderedDict just iterates over unique values in data.\u001b[39;00m\n\u001b[0;32m 216\u001b[0m _api\u001b[38;5;241m.\u001b[39mcheck_isinstance((\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;28mbytes\u001b[39m), value\u001b[38;5;241m=\u001b[39mval)\n\u001b[0;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m convertible:\n\u001b[0;32m 218\u001b[0m \u001b[38;5;66;03m# this will only be called so long as convertible is True.\u001b[39;00m\n", + "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'numpy.ndarray'" + ] }, { "data": { - "image/png": "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VeSLI5Q9pkufz/0fkHirbWEeC1Z89Xm33XYb+vXrh3379uHQoUP48ccfsWrVKsybNw933XUXdu3ahQ8++ACnTp1CWVkZTCYTjEYjKisroVKpcPz4caSlSVcE/vPPP1FVVYVevXrV+/xbtmzBJ598gjNnzqCiogImkwlhYWE2bYwYMcLmMd26dcOePXsAABUVFThz5gzmzp2LefPmWa+p2w4RkbdjqCQiIt9lmb5aX3jcvxT4xyZAHgRk15oey4qvfkOhUKBv377o27cvJk+ejLlz5+Ltt9/G9ddfj2nTpmHEiBGYPn06IiIicODAAcyZMwfV1dVQqVRQKBQNttuQgwcPYubMmXj44Ydx4403IiwsDN98843kqGd9KioqAABz585Ft27dbM7J5dz1jYh8B0MlERH5LkWE+Of+peJ2IYBtsGxzIxDZERjyWa2tRiLEEUoGSr/Uvn177NixA0ePHoXZbMZTTz1lDWhbt261ufaqq67C7t27MXXqVLt2kpKSoFQqsXv3bsnpbb/++itat25tLdoDALm5uXZ9OXToEP7+979bjx06dMj691atWiE2NhZnz57FnXfe6doLJiLyAgyVRETku9Rx4qhjdqbtdiEmA6CMAqJSgLDW4rUMkX6luLgYTzzxBO666y5cddVV0Gg0OHLkCFatWoUBAwYgMTERNTU1WLduHW6++WYcPHgQ//rXv2zamDBhAu6++2689NJLGD58OEJCQrBnzx6kpaVBp9Nh3LhxeO211xASEoIePXqgsLAQJ0+exN13343ExETk5eXhm2++wTXXXIPvv/8e27fbjpSPHj0azz//PK6++mr06NEDmzdvxsmTJ21C6sMPP4xXXnkFWq0WN954I6qqqnDkyBGUlpZizJgxLfK1JCJqKoZKIiLyXUqdOI01c4IYLC3bhVimt1oCJfkdtVqNrl274uOPP8bZs2dRU1ODuLg4ZGRkYOLEiVAqlXjqqafw4Ycf4o033kDPnj3x2GOP4dlnn7W2kZycjHfffRfLli3DfffdB4VCgW7duuH2228HADz00EMICgrC8uXLceHCBcTExFjXSA4YMAD3338/Xn75ZVRVVaFfv3546KGHsGLFCmv7gwcPxpkzZ/D666/DaDRi4MCBGDFiBH7++WfrNRkZGVAqlVi9ejVeffVVqFQqXHnllbj//vtb6CtJRNR0rP7q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iIiIiMhlwZ7ugC8wm80AgNzcXA/3hIiIKLAYDAbk5+d7uhteRalUQqlUerobRAHLkgksGYEYKh1i+WF2ww03eLgnRERERETkDfLz85GYmOjpbngFmSAIgqc74e1qampw4MABxMXFQS7njGF30Ov16NKlC44ePQqtVuvp7lAdfH+8F98b78b3x3vxvfFufH+8F98be2azGfn5+ejRoweCgzlGBzBUkoeUlpYiIiICJSUlCA8P93R3qA6+P96L74134/vjvfjeeDe+P96L7w05gsNuRERERERE5DKGSiIiIiIiInIZQyV5hEKhwNy5c6FQKDzdFZLA98d78b3xbnx/vBffG+/G98d78b0hR3BNJREREREREbmMI5VERERERETkMoZKIiIiIiIichlDJREREREREbmMoZKIiIiIiIhcxlBJLeaVV16BTCbDY489Zj128uRJ/OMf/0BMTAzCw8MxYsQI5Ofne66TAWTevHmQyWQ2t86dO1vPGwwGTJ06FdHR0QgLC0NGRgbfmxbS2Hvz3nvvoX///ggPD4dMJkNxcbHnOhuAGnp/CgsLMX36dHTq1AkqlQqJiYl45JFHUFJS4uFeB47G/v889NBD6NChA1QqFWJiYpCeno5jx455sMeBo7H3xkIQBNx+++2QyWTYuHFjy3c0QDX2/vTv39/u/OTJkz3YY/ImwZ7uAAWGPXv24N1330W3bt2sx8rLy5GWloZrr70WO3bsAADMnj0bQ4cOxf/+9z/I5fydR3O7+uqr8d///td6Pzj48reEGTNmYPPmzfjiiy8QERGBadOm4e6778ZPP/3kia4GnIbem4qKCgwePBiDBw/GrFmzPNG9gFff+3P+/HmcP38eS5YsQZcuXXD69GlMnjwZ58+fx/r16z3V3YDT0P+fnj17YtSoUUhMTERhYSHmzZuHtLQ0nDp1CkFBQZ7obkBp6L2xWLp0KWQyWUt2i/7S2PszceJEvPjii9b7arW6xfpG3o2hkppdWVkZRo0ahZUrV+Kll16yHv/pp5+QnZ2NAwcOIDw8HACwZs0a6HQ67NixAwMHDvRUlwNGcHAw4uPj7Y6XlJTggw8+wLp163DLLbcAAFatWoWUlBT873//Q+/evVu6qwGnvvcGgHW0/9tvv225DpGN+t6fa665Bhs2bLDe79ChAxYsWIDRo0ejpqZG8gM0uV9D/38m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fPLJJw5/nS0WLFiAvn37Qq1WIzIyUvKaPXv24NZbb0VkZCR0Oh0GDRqEX3/91ennCgQMlURE1Kz69+9vF4j69u2L3NxcREREeKZT8J1gGx4ejtzcXMyfP99tbe7ZswcbNmxwW3tEvqa8vBzXXnstli9f7tLjT506hfT0dNxyyy04ePAgtm7dikuXLuHuu++u9zHz5s3D2LFjG+zTTTfdhH/+858O9+PLL79Ebm6u9Xb48GEEBQVh+PDhAICKigrs378fs2fPxv79+/Hll1/i+PHj+Pvf/27X1osvvmjT1vTp063nSktLkZaWhqSkJOzbtw+LFy/GvHnz8N5771mviYqKwnPPPYddu3bh0KFDePDBB/Hggw9i69atDvfl2LFjMJvNePfdd3HkyBG8/vrreOedd/Dss89ar/n555/RrVs3bNiwwfo8DzzwADZt2uTw1w0AqqqqMHz4cEyZMkXyfFlZGQYPHozExETs3r0bP/74I7RaLQYNGoTq6mqnnisgCERERM3o5ptvFh599FFPd8POzp07BQBCUVGRp7tSr1WrVgkRERHN0rYvvH6ilgBA+Pe//21zzGAwCE888YTQpk0bQa1WCzfccIOwc+dO6/kvvvhCCA4OFkwmk/XYf/7zH0EmkwlVVVWSzzN37lxhzJgxjfbn1KlTAgDhwIEDTr+W119/XdBqtUJZWVm91/zyyy8CAOH06dPWY0lJScLrr79e72PefvttQafTCUaj0XrsmWeeETp16tRgf3r06CE8//zzTvWlrkWLFgnt2rVr8HnuuOMO4cEHH7Q5tnLlSqFz586CQqEQOnXqJCxfvlzysfV9n92zZ48AQMjJybEeO3TokABAOHHiRIP9CUQcqSQiomYzduxYfPfdd3jjjTesU6qys7PtRglXr16NyMhIbNq0CZ06dYJarcawYcNQUVGBNWvWIDk5GTqdDo888ghMJpO1faPRiCeffBJt27aFRqNBr1698O2331rPnz59GkOHDoVOp4NGo8HVV1+N//u//0N2djYGDBgAANDpdJDJZNYRhC1btuCmm25CZGQkoqOjceedd+LkyZPWNrOzsyGTyfCvf/0Lf/vb36BSqXD99dfj999/x549e5CamoqwsDDcfvvtuHjxos3X4q677sILL7yAmJgYhIeHY/LkyTbTuhyVnJyMl19+GePGjYNWq0ViYqLN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171Z/l8LgrhGvW4bx44dEwAImZmZdm1avl9J3SxrHS3fGyMiIgSlUimkpKQIL7/8snU9pcWvv/4q3HTTTYJCoRDatm0rvPLKKzbnn3vuOaFjx46CUqkUdDqd0KdPH5vCao70pb6vQe3IMmbMGMnzN998s01/PvnkE6F79+5CaGiooNPphH79+glffvllo+3UXgOamZkp3HjjjUJERISg0+mEW265Rdi1a1d9b2FAY6gkIqJmdfz4caF3796CSqUSAAinTp1yW6hs7IPftGnThA4dOggKhUKIiYkR7r//fuHSpUvWx7/44otCfHy8IJPJrB/Utm3bJqSkpAgKhULo1q2b8O2337otVKanpwtz5swRoqOjhbCwMGHixIl2H9xqczVUvvfee0L37t0FjUYjhIeHC7feequwf/9+m+sZKomIyF1kgiAI7h79JCIiIltjx45FcXExNm7c6PBjVq9ejccee8y6n6c7ffvttxgwYACKiooa3COOiIioMfYrX4mIiMhrlJSUICwsDM8884zb2rz66qtx++23u609IiIKbCzUQ0RE5KUyMjJw0003AYBbRxP/7//+D9XV1QDQ6NYCREREjeH0VyIiIiIiInIZp78SERERERGRyxgqiYiIiIiIyGUMlUREREREROQyhkoiIiIiIiJyGUMlERERERERuYyhkoiIiIiIiFzGUElEREREREQuY6gkIiIiIiIilzFUEhERERERkcv+HzudIOxnlYGYAAAAAElFTkSuQmCC", + "image/png": "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arlCa9KkSVFeXh4dHR0D1js6OmLKlCmDXjNlypRc+yMGf9svIqJQKAx4exBS6+zsjIiImpoaZ40LylljuDhrDBdnjeHy/vm67LLLPvSsDVe/DCbXTx2sqKiIOXPmRGtra3Gtv78/Wltbo76+ftBr6uvrB+yPiHj55ZfPuh8AACCFUvZL7o8ONjU1xdKlS2Pu3Lkxb968WLduXXR3d8eyZcsiImLJkiVRU1MTLS0tERFxzz33xE033RSPP/543HrrrbFp06b49a9/HU8//XTeWwMAAORSqn7JHVoLFy6MkydPxqpVq6K9vT1mz54d27ZtK35h7MiRI1FW9sEbZddff30899xz8dBDD8UDDzwQf/3Xfx0vvvjiGV9eO5fKyspobm7+2H3uktHHWWO4OGsMF2eN4eKsMVzynrVS9EvEEH6PFgAAAOeW6ztaAAAAfDihBQAAkJjQAgAASExoAQAAJPaxCa3169fHjBkzoqqqKurq6mLHjh3n3P+Tn/wkrrrqqqiqqoqrr746tm7dOkyTMtLlOWsbN26MG2+8MSZOnBgTJ06MhoaGDz2b8L68f6+9b9OmTTFmzJhYsGDBhR2QUSPvWXv77bdj+fLlMXXq1KisrIwrr7zSv0c5L3nP2rp16+LTn/50XHzxxVEoFOK+++6LP/zhD8M0LSPRL3/5y5g/f35MmzYtxowZEy+++OKHXrN9+/b43Oc+F5WVlfGpT30qnn322Qs+5/n4WITW5s2bo6mpKZqbm2PXrl0xa9asaGxsjBMnTgy6/9VXX41FixbF7bffHrt3744FCxbEggULYu/evcM8OSNN3rO2ffv2WLRoUbzyyivR1tYWhUIhbrnlljh+/PgwT85Ik/esve/w4cPxjW98I2688cZhmpSRLu9Z6+3tjS984Qtx+PDheP755+PgwYOxcePGqKmpGebJGWnynrXnnnsuVqxYEc3NzbF///545plnYvPmzfHAAw8M8+SMJN3d3TFr1qxYv379ee1/880349Zbb42bb7459uzZE/fee2/ccccd8dJLL13gSc9D9jEwb968bPny5cXnfX192bRp07KWlpZB93/5y1/Obr311gFrdXV12T/+4z9e0DkZ+fKetT91+vTpbNy4cdmPfvSjCzUio8RQztrp06ez66+/PvvBD36QLV26NPu7v/u7YZiUkS7vWfv+97+fXX755Vlvb+9wjcgokfesLV++PPvbv/3bAWtNTU3ZDTfccEHnZPSIiOyFF144555vfvOb2Wc/+9kBawsXLswaGxsv4GTnp+TvaPX29sbOnTujoaGhuFZWVhYNDQ3R1tY26DVtbW0D9kdENDY2nnU/RAztrP2pd999N95777247LLLLtSYjAJDPWvf+ta3YvLkyXH77bcPx5iMAkM5az/72c+ivr4+li9fHtXV1TFz5sxYs2ZN9PX1DdfYjEBDOWvXX3997Ny5s/jxwkOHDsXWrVvji1/84rDMzJ+Hj3MXjC31AKdOnYq+vr7ib2Z+X3V1dRw4cGDQa9rb2wfd397efsHmZOQbyln7U/fff39MmzbtjP9Cw/83lLP2q1/9Kp555pnYs2fPMEzIaDGUs3bo0KH4z//8z/jKV74SW7dujTfeeCO+/vWvx3vvvRfNzc3DMTYj0FDO2m233RanTp2Kz3/+85FlWZw+fTruuusuHx0kqbN1QWdnZ/z+97+Piy++uESTfUy+owUjwdq1a2PTpk3xwgsvRFVVVanHYRTp6uqKxYsXx8aNG2PSpEmlHodRrr+/PyZPnhxPP/10zJkzJxYuXBgPPvhgbNiwodSjMcps37491qxZE0899VTs2rUrfvrTn8aWLVvi0UcfLfVoMCxK/o7WpEmTory8PDo6Ogasd3R0xJQpUwa9ZsqUKbn2Q8TQztr7HnvssVi7dm384he/iGuuueZCjskokPes/eY3v4nDhw/H/Pnzi2v9/f0RETF27Ng4ePBgXHHFFRd2aEakofy9NnXq1LjooouivLy8uPaZz3wm2tvbo7e3NyoqKi7ozIxMQzlrDz/8cCxevDjuuOOOiIi4+uqro7u7O+6888548MEHo6zM/9/PR3e2Lhg/fnxJ382K+Bi8o1VRURFz5syJ1tbW4lp/f3+0trZGfX39oNfU19cP2B8R8fLLL591P0QM7axFRHz3u9+NRx99NLZt2xZz584djlEZ4fKetauuuipee+212LNnT/HxpS99qfgTlAqFwnCOzwgylL/XbrjhhnjjjTeKMR8R8frrr8fUqVNFFmc1lLP27rvvnhFT7wd+lmUXblj+rHysu6DUP40jy7Js06ZNWWVlZfbss89m+/bty+68887s0ksvzdrb27Msy7LFixdnK1asKO7/r//6r2zs2LHZY489lu3fvz9rbm7OLrroouy1114r1R+BESLvWVu7dm1WUVGRPf/889lbb71VfHR1dZXqj8AIkfes/Sk/dZDzlfesHTlyJBs3blz2T//0T9nBgwezn//859nkyZOzb3/726X6IzBC5D1rzc3N2bhx47J///d/zw4dOpT9x3/8R3bFFVdkX/7yl0v1R2AE6Orqynbv3p3t3r07i4jsiSeeyHbv3p399re/zbIsy1asWJEtXry4uP/QoUPZJZdckv3zP/9ztn///mz9+vVZeXl5tm3btlL9EYo+FqGVZVn2r//6r9lf/uVfZhUVFdm8efOy//7v/y7+ZzfddFO2dOnSAft//OMfZ1deeWVWUVGRffazn822bNkyzBMzUuU5a3/1V3+VRcQZj+bm5uEfnBEn799r/5/QIo+8Z+3VV1/N6urqssrKyuzyyy/PvvOd72SnT58e5qkZifKctffeey9bvXp1dsUVV2RVVVVZoVDIvv71r2f/8z//M/yDM2K88sorg/5vr/fP1tKlS7ObbrrpjGtmz56dVVRUZJdffnn2b//2b8M+92DGZJn3bgEAAFIq+Xe0AAAARhuhBQAAkJjQAgAASExoAQAAJCa0AAAAEhNaAAAAiQktAACAxIQWAABAYkILAAAgMaEFAACQmNACAABITGgBAAAk9n+93APIaM1xaAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -333,11 +347,10 @@ "\n", "# Visualize the 2nd saccade\n", "saccade = saccades.data.iloc[1]\n", - "ax.axvspan(\n", - " saccade[\"start timestamp [ns]\"], saccade[\"end timestamp [ns]\"], color=\"lightgray\"\n", - ")\n", + "print(saccade)\n", + "ax.axvspan(saccade.index.values, saccade[\"end timestamp [ns]\"], color=\"lightgray\")\n", "ax.text(\n", - " (saccade[\"start timestamp [ns]\"] + saccade[\"end timestamp [ns]\"]) / 2,\n", + " (saccade.index.values + saccade[\"end timestamp [ns]\"]) / 2,\n", " 1050,\n", " \"Saccade\",\n", " horizontalalignment=\"center\",\n", @@ -347,14 +360,14 @@ "sns.scatterplot(\n", " ax=ax,\n", " data=gaze.data.head(100),\n", - " x=\"timestamp [ns]\",\n", + " x=gaze.data.index,\n", " y=\"gaze x [px]\",\n", " color=gaze_color,\n", ")\n", "sns.scatterplot(\n", " ax=ax2,\n", " data=imu.data.head(60),\n", - " x=\"timestamp [ns]\",\n", + " x=imu.data.index,\n", " y=\"gyro x [deg/s]\",\n", " color=gyro_color,\n", ")" @@ -465,7 +478,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/genindex.html b/genindex.html index 94af96f..ad8b0ea 100644 --- a/genindex.html +++ b/genindex.html @@ -366,20 +366,16 @@

C

  • (pyneon.NeonRecording method)
  • -
  • construct_event_times() (in module pyneon.preprocess) -
  • @@ -389,12 +385,16 @@

    D

    @@ -430,7 +430,7 @@

    F

    +
  • is_uniformly_sampled (pyneon.stream.NeonStream property) +
  • L

    - +
    • pyneon.export @@ -617,6 +610,8 @@

      P

    • module
    +
    • pyneon.preprocess @@ -629,6 +624,13 @@

      P

    • +
    • + pyneon.tabular + +
    • @@ -667,7 +669,7 @@

      S

    diff --git a/objects.inv b/objects.inv index fa92d37d23d9362eea64ba8861b0df6660c64ac4..6949c4d5558c1be28a9c7d158aa2ee766d93103e 100644 GIT binary patch delta 3466 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 delta 3390 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 UCvQ`sO~7U&L0;Ma0Ws?PfKy<3jQ{`u diff --git a/py-modindex.html b/py-modindex.html index 894198e..bebf4fe 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -339,11 +339,6 @@

    Python Module Index

    pyneon - - -     - pyneon.data -     @@ -364,6 +359,11 @@

    Python Module Index

        pyneon.stream + + +     + pyneon.tabular +     diff --git a/reference/data.html b/reference/data.html index ae28c0a..ee2e14f 100644 --- a/reference/data.html +++ b/reference/data.html @@ -370,23 +370,39 @@
    -
    -

    Classes for individual data types#

    +
    +

    Classes for individual data types#

    -
    -class pyneon.data.NeonTabular(file: Path)#
    +
    +class pyneon.tabular.NeonTabular(file: Path)#

    Bases: object

    Base for Neon tabular data. It reads from a CSV file and stores the data as a pandas DataFrame (with section and recording IDs removed). The timestamp [ns] (for streams) or start timestamp [ns] (for events) column is set as the index.

    +
    +
    Parameters:
    +

    file (Path) – Path to the CSV file.

    +
    +
    +
    +
    +data#
    +

    The processed data with the timestamp index.

    +
    +
    Type:
    +

    pd.DataFrame

    +
    +
    +
    +
    class pyneon.stream.NeonStream(file: Path)#
    -

    Bases: NeonTabular

    +

    Bases: NeonTabular

    Base for Neon continuous data (gaze, eye states, IMU). -It must contain a timestamp [ns] column.

    +It’s indexed by timestamp [ns].

    Parameters:

    file (pathlib.Path) – Path to the CSV file containing the stream data.

    @@ -415,144 +431,161 @@
    -
    -timestamps#
    -

    Timestamps of the stream in nanoseconds.

    +
    +sampling_freq_nominal#
    +

    Nominal sampling frequency of the stream as specified by Pupil Labs +(https://pupil-labs.com/products/neon/specs).

    Type:
    -

    np.ndarray

    +

    int or None

    -
    +
    +
    +property timestamps: ndarray#
    +

    Timestamps of the stream in nanoseconds.

    +
    + +
    -ts#
    +property ts: ndarray#

    Alias for timestamps.

    -
    -
    Type:
    -

    np.ndarray

    -
    -
    -
    +
    -first_ts#
    +property first_ts: int#

    First timestamp of the stream.

    -
    -
    Type:
    -

    int

    -
    -
    -
    +
    -last_ts#
    +property last_ts: int#

    Last timestamp of the stream.

    -
    -
    Type:
    -

    int

    -
    -
    -
    +
    +
    +property ts_diff: ndarray#
    +

    Difference between consecutive timestamps.

    +
    + +
    -times#
    +property times: ndarray#

    Timestamps converted to seconds relative to stream start.

    -
    -
    Type:
    -

    np.ndarray

    -
    -
    -
    +
    -duration#
    +property duration: float#

    Duration of the stream in seconds.

    -
    -
    Type:
    -

    float

    -
    -
    -
    +
    -sampling_freq_effective#
    -

    Effective sampling frequency of the stream -(number of time points divided by duration).

    -
    -
    Type:
    -

    float

    -
    -
    +property sampling_freq_effective: float# +

    Effective sampling frequency of the stream.

    -
    -
    -sampling_freq_nominal#
    -

    Nominal sampling frequency of the stream as specified by Pupil Labs -(https://pupil-labs.com/products/neon/specs).

    -
    -
    Type:
    -

    int

    -
    -
    +
    +
    +property is_uniformly_sampled: bool#
    +

    Whether the stream is uniformly sampled.

    +
    + +
    +
    +time_to_ts(time: Number | ndarray) ndarray#
    +

    Convert time(s) in seconds to timestamp(s) in nanoseconds.

    -crop(tmin: Number | None = None, tmax: Number | None = None, by: Literal['timestamp', 'time'] = 'timestamp', inplace: bool = False) DataFrame#
    -

    Crop data to a specific time range.

    +crop(tmin: Number | None = None, tmax: Number | None = None, by: Literal['timestamp', 'time', 'row'] = 'timestamp', inplace: bool = False) NeonStream | None# +

    Crop data to a specific time range based on timestamps, +relative times since start, or row numbers.

    Parameters:
      -
    • tmin (number, optional) – Start time or timestamp to crop the data to. If None, -the minimum timestamp or time in the data is used. Defaults to None.

    • -
    • tmax (number, optional) – End time or timestamp to crop the data to. If None, -the maximum timestamp or time in the data is used. Defaults to None.

    • -
    • by ("timestamp" or "time", optional) – Whether tmin and tmax are UTC timestamps in nanoseconds -or relative times in seconds. Defaults to “timestamp”.

    • +
    • tmin (number, optional) – Start timestamp/time/row to crop the data to. If None, +the minimum timestamp/time/row in the data is used. Defaults to None.

    • +
    • tmax (number, optional) – End timestamp/time/row to crop the data to. If None, +the maximum timestamp/time/row in the data is used. Defaults to None.

    • +
    • by ("timestamp" or "time" or "row", optional) – Whether tmin and tmax are UTC timestamps in nanoseconds +OR relative times in seconds OR row numbers of the stream data. +Defaults to “timestamp”.

    • inplace (bool, optional) – Whether to replace the data in the object with the cropped data. Defaults to False.

    Returns:
    -

    Cropped data.

    +

    Cropped stream if inplace=False, otherwise None.

    Return type:
    -

    pd.DataFrame

    +

    NeonStream or None

    -interpolate(new_ts: None | ndarray = None, float_kind: str = 'linear', other_kind: str = 'nearest', inplace: bool = False) DataFrame#
    +interpolate(new_ts: ndarray | None = None, float_kind: str = 'linear', other_kind: str = 'nearest', inplace: bool = False) NeonStream | None#

    Interpolate the stream to a new set of timestamps.

    Parameters:
      -
    • new_ts (np.ndarray, optional) – New timestamps to evaluate the interpolant at. If None, new timestamps +

    • new_ts (np.ndarray, optional) – An array of new timestamps (in nanoseconds) +at which to evaluate the interpolant. If None (default), new timestamps are generated according to the nominal sampling frequency of the stream as specified by Pupil Labs: https://pupil-labs.com/products/neon/specs.

    • -
    • data (pd.DataFrame) – Data to interpolate. Must contain a monotonically increasing -timestamp [ns] column.

    • float_kind (str, optional) – Kind of interpolation applied on columns of float type, -by default “linear”. For details see scipy.interpolate.interp1d.

    • +by default "linear". For details see scipy.interpolate.interp1d.

    • other_kind (str, optional) – Kind of interpolation applied on columns of other types, -by default “nearest”.

    • +by default "nearest". For details see scipy.interpolate.interp1d.

      +
    • inplace (bool, optional) – Whether to replace the data in the object with the interpolated data. +Defaults to False.

    Returns:
    -

    Interpolated data.

    +

    Interpolated stream if inplace=False, otherwise None.

    Return type:
    -

    pandas.DataFrame

    +

    NeonStream or None

    +
    +
    +
    + +
    +
    +window_average(new_ts: ndarray, window_size: int | None = None, inplace: bool = False) NeonStream | None#
    +

    Take the average over a time window to obtain smoothed data at new timestamps.

    +
    +
    Parameters:
    +
      +
    • new_ts (np.ndarray) – An array of new timestamps (in nanoseconds) +at which to compute the windowed averages. +The median interval between these new timestamps must be larger than +the median interval between the original data timestamps, i.e., +np.median(np.diff(new_ts)) > np.median(np.diff(data.index)). +In other words, only downsampling is supported.

    • +
    • window_size (int, optional) – The size of the time window (in nanoseconds) +over which to compute the average around each new timestamp. +If None (default), the window size is set to the median interval +between the new timestamps, i.e., np.median(np.diff(new_ts)). +The window size must be larger than the median interval between the original data timestamps, +i.e., window_size > np.median(np.diff(data.index)).

    • +
    • inplace (bool, optional) – Whether to replace the data in the object with the window averaged data. +Defaults to False.

    • +
    +
    +
    Returns:
    +

    Stream with window average applied on data if inplace=False, otherwise None.

    +
    +
    Return type:
    +

    NeonStream or None

    @@ -590,7 +623,7 @@
    class pyneon.events.NeonEV(file)#
    -

    Bases: NeonTabular

    +

    Bases: NeonTabular

    Base for Neon event data (blinks, fixations, saccades, “events” messages).

    @@ -776,20 +809,27 @@
    -
    -
    -pyneon.preprocess.window_average(new_ts: ndarray, data: DataFrame, window_size: int | None = None) DataFrame#
    -

    Take the average over a time window to obtain smoothed data at new timestamps.

    -
    -
    Parameters:
    -
      -
    • new_ts (np.ndarray) – New timestamps to evaluate the window average at. The median of the differences -between the new timestamps must be larger than the median of the differences -between the old timestamps. In other words, only downsampling is supported.

    • -
    • data (pd.DataFrame) – Data to apply window average to. Must contain a monotonically increasing -timestamp [ns] column.

    • -
    • window_size (int, optional) – Size of the time window in nanoseconds. If None, the window size is -set to the median of the differences between the new timestamps. -Defaults to None.

    • -
    -
    -
    Returns:
    -

    Data with window average applied.

    -
    -
    Return type:
    -

    pd.DataFrame

    -
    -
    -
    -
    pyneon.preprocess.map_gaze_to_video(rec: NeonRecording) DataFrame#
    @@ -770,11 +750,10 @@

    Parameters: @@ -371,9 +371,9 @@
    -
    -

    Resample Data and Concatenate Channels#

    -

    Informative as it is, raw Neon data is not always easy to work with. Different data streams (e.g., gaze, eye states, IMU) are sampled at different rates, don’t necessarily share a common start timestamp, and within each stream data might not have been sampled at a constant rate. This tutorial demonstrates how to deal with these issues by resampling data streams and concatenating them into a single DataFrame.

    +
    +

    Interpolate Data and Concatenate Channels#

    +

    Informative as it is, raw Neon data is not always easy to work with. Different data streams (e.g., gaze, eye states, IMU) are sampled at different rates, don’t necessarily share a common start timestamp, and within each stream data might not have been sampled at a constant rate. This tutorial demonstrates how to deal with these issues by interpolating data streams and concatenating them into a single DataFrame.

    We will use the same OfficeWalk dataset as in the previous tutorial.

    -
    -

    Resampling data streams#

    -

    Given the unequal sampling, if we want to obtain continuous data streams, interpolation is necessary. PyNeon uses the scipy.interpolate.interp1d function to interpolate data streams. We can resample each stream by simply calling resample() which returns a new DataFrame with the resampled data.

    +
    +

    Interpolating data streams#

    +

    Given the unequal sampling, if we want to obtain continuous data streams, interpolation is necessary. PyNeon uses the scipy.interpolate.interp1d function to interpolate data streams. We can interpolate each stream by simply calling interpolate() which returns a copy of the object with the interpolated data.

    [5]:
     
    # Resample to the nominal sampling frequency
    -gaze_resampled_data = gaze.interpolate()
    -print(gaze_resampled_data.head())
    +gaze_resampled = gaze.interpolate()
     
    -ts = gaze_resampled_data["timestamp [ns]"].values
    -ts_diffs = np.diff(ts)
    -ts_diff_unique = np.unique(ts_diffs)
    -print(f"Only one unique time difference: {np.unique(ts_diffs)}")
    +print(f"Only one unique time difference: {np.unique(gaze_resampled.ts_diff)}")
     
    @@ -507,19 +493,6 @@

    Resampling data streams
    -        timestamp [ns]  time [s]  gaze x [px]  gaze y [px]  worn  fixation id  \
    -0  1725032224852161732     0.000  1067.486000   620.856000  True            1
    -1  1725032224857161732     0.005  1066.920463   617.120061  True            1
    -2  1725032224862161732     0.010  1072.699000   615.780000  True            1
    -3  1725032224867161732     0.015  1067.447000   617.062000  True            1
    -4  1725032224872161732     0.020  1071.564000   613.158000  True            1
    -
    -   blink id  azimuth [deg]  elevation [deg]
    -0      <NA>      16.213030        -0.748998
    -1      <NA>      16.176315        -0.511927
    -2      <NA>      16.546413        -0.426618
    -3      <NA>      16.210049        -0.508251
    -4      <NA>      16.473521        -0.260388
     Only one unique time difference: [5000000]
     
    @@ -531,8 +504,10 @@

    Resampling data streams
    print(f"Original gaze data length: {gaze.data.shape[0]}")
     print(f"Original IMU data length: {imu.data.shape[0]}")
    -gaze_resampled_to_imu_data = gaze.interpolate(new_ts=imu.ts)
    -print(f"Data length after resampling to IMU: {gaze_resampled_to_imu_data.shape[0]}")
    +gaze_resampled_to_imu = gaze.interpolate(new_ts=imu.ts)
    +print(
    +    f"Gaze data length after resampling to IMU: {gaze_resampled_to_imu.data.shape[0]}"
    +)
     
    @@ -543,7 +518,7 @@

    Resampling data streams
     Original gaze data length: 18769
     Original IMU data length: 10919
    -Data length after resampling to IMU: 10919
    +Gaze data length after resampling to IMU: 10919
     

    @@ -552,11 +527,11 @@

    Concatenating different streamsconcat_streams() provides such functionality. It takes a list of stream names and resamples them to common timestamps, defined by the latest start and earliest end timestamps of the streams. The news ampling frequency can either be directly specified or taken from the lowest/highest sampling frequency of the streams.

    In the following example, we will concatenate the gaze, eye states, and IMU streams into a single DataFrame using the default parameters (e.g., using the lowest sampling frequency of the streams).

    @@ -774,7 +756,7 @@

    Concatenating different streams @@ -782,7 +764,7 @@

    Concatenating different streams diff --git a/tutorials/resample_and_concat.ipynb b/tutorials/interpolate_and_concat.ipynb similarity index 96% rename from tutorials/resample_and_concat.ipynb rename to tutorials/interpolate_and_concat.ipynb index 3507830..6dd1a44 100644 --- a/tutorials/resample_and_concat.ipynb +++ b/tutorials/interpolate_and_concat.ipynb @@ -4,9 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Resample Data and Concatenate Channels\n", + "# Interpolate Data and Concatenate Channels\n", "\n", - "Informative as it is, raw Neon data is not always easy to work with. Different data streams (e.g., gaze, eye states, IMU) are sampled at different rates, don't necessarily share a common start timestamp, and within each stream data might not have been sampled at a constant rate. This tutorial demonstrates how to deal with these issues by resampling data streams and concatenating them into a single DataFrame.\n", + "Informative as it is, raw Neon data is not always easy to work with. Different data streams (e.g., gaze, eye states, IMU) are sampled at different rates, don't necessarily share a common start timestamp, and within each stream data might not have been sampled at a constant rate. This tutorial demonstrates how to deal with these issues by interpolating data streams and concatenating them into a single DataFrame.\n", "\n", "We will use the same ``OfficeWalk`` dataset as in the [previous tutorial](read_recording.ipynb)." ] @@ -69,20 +69,10 @@ } ], "source": [ - "# Get the data points\n", - "gaze_ts = gaze.data[\"timestamp [ns]\"].values\n", - "eye_states_ts = eye_states.data[\"timestamp [ns]\"].values\n", - "imu_ts = imu.data[\"timestamp [ns]\"].values\n", - "\n", - "# Calculate the distances between subsequent data points\n", - "gaze_diff = np.diff(gaze_ts)\n", - "eye_states_diff = np.diff(eye_states_ts)\n", - "imu_diff = np.diff(imu_ts)\n", - "\n", "# Unique values\n", - "gaze_diff_unique = np.unique(gaze_diff)\n", - "eye_states_diff_unique = np.unique(eye_states_diff)\n", - "imu_diff_unique = np.unique(imu_diff)\n", + "gaze_diff_unique = np.unique(gaze.ts_diff)\n", + "eye_states_diff_unique = np.unique(eye_states.ts_diff)\n", + "imu_diff_unique = np.unique(imu.ts_diff)\n", "\n", "print(\n", " f\"Unique gaze time differences: {len(gaze_diff_unique)}, max: {np.max(gaze_diff_unique)/1e6}ms\"\n", @@ -125,15 +115,15 @@ "\n", "fig, axs = plt.subplots(3, 1, tight_layout=True)\n", "\n", - "axs[0].hist(gaze_diff, bins=50)\n", + "axs[0].hist(gaze.ts_diff, bins=50)\n", "axs[0].axvline(gaze_nominal_diff, color=\"red\", label=\"Nominal\")\n", "axs[0].set_title(\"Gaze\")\n", "\n", - "axs[1].hist(eye_states_diff, bins=50)\n", + "axs[1].hist(eye_states.ts_diff, bins=50)\n", "axs[1].axvline(eye_states_nominal_diff, color=\"red\", label=\"Nominal\")\n", "axs[1].set_title(\"Eye states\")\n", "\n", - "axs[2].hist(imu_diff, bins=50)\n", + "axs[2].hist(imu.ts_diff, bins=50)\n", "axs[2].axvline(imu_nominal_diff, color=\"red\", label=\"Nominal\")\n", "axs[2].set_title(\"IMU\")\n", "\n", @@ -149,9 +139,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Resampling data streams\n", + "## Interpolating data streams\n", "\n", - "Given the unequal sampling, if we want to obtain continuous data streams, interpolation is necessary. PyNeon uses the `scipy.interpolate.interp1d` function to interpolate data streams. We can resample each stream by simply calling `resample()` which returns a new DataFrame with the resampled data." + "Given the unequal sampling, if we want to obtain continuous data streams, interpolation is necessary. PyNeon uses the `scipy.interpolate.interp1d` function to interpolate data streams. We can interpolate each stream by simply calling `interpolate()` which returns a copy of the object with the interpolated data." ] }, { @@ -163,32 +153,15 @@ "name": "stdout", "output_type": "stream", "text": [ - " timestamp [ns] time [s] gaze x [px] gaze y [px] worn fixation id \\\n", - "0 1725032224852161732 0.000 1067.486000 620.856000 True 1 \n", - "1 1725032224857161732 0.005 1066.920463 617.120061 True 1 \n", - "2 1725032224862161732 0.010 1072.699000 615.780000 True 1 \n", - "3 1725032224867161732 0.015 1067.447000 617.062000 True 1 \n", - "4 1725032224872161732 0.020 1071.564000 613.158000 True 1 \n", - "\n", - " blink id azimuth [deg] elevation [deg] \n", - "0 16.213030 -0.748998 \n", - "1 16.176315 -0.511927 \n", - "2 16.546413 -0.426618 \n", - "3 16.210049 -0.508251 \n", - "4 16.473521 -0.260388 \n", "Only one unique time difference: [5000000]\n" ] } ], "source": [ "# Resample to the nominal sampling frequency\n", - "gaze_resampled_data = gaze.interpolate()\n", - "print(gaze_resampled_data.head())\n", + "gaze_resampled = gaze.interpolate()\n", "\n", - "ts = gaze_resampled_data[\"timestamp [ns]\"].values\n", - "ts_diffs = np.diff(ts)\n", - "ts_diff_unique = np.unique(ts_diffs)\n", - "print(f\"Only one unique time difference: {np.unique(ts_diffs)}\")" + "print(f\"Only one unique time difference: {np.unique(gaze_resampled.ts_diff)}\")" ] }, { @@ -211,15 +184,17 @@ "text": [ "Original gaze data length: 18769\n", "Original IMU data length: 10919\n", - "Data length after resampling to IMU: 10919\n" + "Gaze data length after resampling to IMU: 10919\n" ] } ], "source": [ "print(f\"Original gaze data length: {gaze.data.shape[0]}\")\n", "print(f\"Original IMU data length: {imu.data.shape[0]}\")\n", - "gaze_resampled_to_imu_data = gaze.interpolate(new_ts=imu.ts)\n", - "print(f\"Data length after resampling to IMU: {gaze_resampled_to_imu_data.shape[0]}\")" + "gaze_resampled_to_imu = gaze.interpolate(new_ts=imu.ts)\n", + "print(\n", + " f\"Gaze data length after resampling to IMU: {gaze_resampled_to_imu.data.shape[0]}\"\n", + ")" ] }, { @@ -235,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -249,48 +224,55 @@ "Using lowest sampling rate: 110 Hz (['imu'])\n", "Using latest start timestamp: 1725032224878547732 (['imu'])\n", "Using earliest last timestamp: 1725032319533909732 (['imu'])\n", - " timestamp [ns] time [s] gaze x [px] gaze y [px] worn fixation id \\\n", - "0 1725032224878547732 0.000000 1073.410354 611.095861 True 1 \n", - "1 1725032224887638641 0.009091 1069.801082 613.382535 True 1 \n", - "2 1725032224896729550 0.018182 1070.090109 613.439696 True 1 \n", - "3 1725032224905820459 0.027273 1069.891351 612.921757 True 1 \n", - "4 1725032224914911368 0.036364 1069.692588 612.403803 True 1 \n", + " gaze x [px] gaze y [px] worn fixation id blink id \\\n", + "1725032224878547732 1073.410354 611.095861 True 1 \n", + "1725032224887638641 1069.801082 613.382535 True 1 \n", + "1725032224896729550 1070.090109 613.439696 True 1 \n", + "1725032224905820459 1069.891351 612.921757 True 1 \n", + "1725032224914911368 1069.692588 612.403803 True 1 \n", + "\n", + " azimuth [deg] elevation [deg] pupil diameter left [mm] \\\n", + "1725032224878547732 16.591703 -0.129540 5.036588 \n", + "1725032224887638641 16.360605 -0.274666 5.093205 \n", + "1725032224896729550 16.379116 -0.278283 5.078107 \n", + "1725032224905820459 16.366379 -0.245426 5.077680 \n", + "1725032224914911368 16.353641 -0.212567 5.077253 \n", "\n", - " blink id azimuth [deg] elevation [deg] pupil diameter left [mm] ... \\\n", - "0 16.591703 -0.129540 5.036588 ... \n", - "1 16.360605 -0.274666 5.093205 ... \n", - "2 16.379116 -0.278283 5.078107 ... \n", - "3 16.366379 -0.245426 5.077680 ... \n", - "4 16.353641 -0.212567 5.077253 ... \n", + " pupil diameter right [mm] eyeball center left x [mm] \\\n", + "1725032224878547732 4.254749 -31.742046 \n", + "1725032224887638641 4.358431 -31.746807 \n", + "1725032224896729550 4.439704 -31.700505 \n", + "1725032224905820459 4.442760 -31.711353 \n", + "1725032224914911368 4.445815 -31.722201 \n", "\n", - " acceleration x [g] acceleration y [g] acceleration z [g] roll [deg] \\\n", - "0 0.063477 -0.058594 0.940430 -2.550682 \n", - "1 0.057486 -0.048916 0.942273 -2.602498 \n", - "2 0.051494 -0.039238 0.944117 -2.654314 \n", - "3 0.046721 -0.045800 0.944336 -2.699777 \n", - "4 0.042113 -0.054556 0.944336 -2.744383 \n", + " ... acceleration x [g] acceleration y [g] \\\n", + "1725032224878547732 ... 0.063477 -0.058594 \n", + "1725032224887638641 ... 0.057486 -0.048916 \n", + "1725032224896729550 ... 0.051494 -0.039238 \n", + "1725032224905820459 ... 0.046721 -0.045800 \n", + "1725032224914911368 ... 0.042113 -0.054556 \n", "\n", - " pitch [deg] yaw [deg] quaternion w quaternion x quaternion y \\\n", - "0 -4.461626 -172.335180 0.067636 -0.024792 0.037342 \n", - "1 -4.493445 -172.562393 0.065682 -0.025185 0.037639 \n", - "2 -4.525265 -172.789613 0.063728 -0.025579 0.037936 \n", - "3 -4.556964 -173.013398 0.061802 -0.025917 0.038238 \n", - "4 -4.588647 -173.236726 0.059879 -0.026247 0.038541 \n", + " acceleration z [g] roll [deg] pitch [deg] yaw [deg] \\\n", + "1725032224878547732 0.940430 -2.550682 -4.461626 -172.335180 \n", + "1725032224887638641 0.942273 -2.602498 -4.493445 -172.562393 \n", + "1725032224896729550 0.944117 -2.654314 -4.525265 -172.789613 \n", + "1725032224905820459 0.944336 -2.699777 -4.556964 -173.013398 \n", + "1725032224914911368 0.944336 -2.744383 -4.588647 -173.236726 \n", "\n", - " quaternion z \n", - "0 -0.996703 \n", - "1 -0.996810 \n", - "2 -0.996917 \n", - "3 -0.997017 \n", - "4 -0.997115 \n", + " quaternion w quaternion x quaternion y quaternion z \n", + "1725032224878547732 0.067636 -0.024792 0.037342 -0.996703 \n", + "1725032224887638641 0.065682 -0.025185 0.037639 -0.996810 \n", + "1725032224896729550 0.063728 -0.025579 0.037936 -0.996917 \n", + "1725032224905820459 0.061802 -0.025917 0.038238 -0.997017 \n", + "1725032224914911368 0.059879 -0.026247 0.038541 -0.997115 \n", "\n", - "[5 rows x 36 columns]\n" + "[5 rows x 34 columns]\n" ] } ], "source": [ - "concat_data = recording.concat_streams([\"gaze\", \"eye_states\", \"imu\"])\n", - "print(concat_data.head())" + "concat_stream = recording.concat_streams([\"gaze\", \"eye_states\", \"imu\"])\n", + "print(concat_stream.data.head())" ] }, { @@ -329,8 +311,8 @@ "source": [ "start_time = 5\n", "end_time = 5.3\n", - "start_ts = time_to_ts(start_time, concat_data)\n", - "end_ts = time_to_ts(end_time, concat_data)\n", + "start_ts = time_to_ts(start_time, concat_stream)\n", + "end_ts = time_to_ts(end_time, concat_stream)\n", "\n", "raw_gaze_data_slice = gaze.data[\n", " (gaze.data[\"timestamp [ns]\"] >= start_ts) & (gaze.data[\"timestamp [ns]\"] <= end_ts)\n", @@ -342,9 +324,9 @@ "raw_imu_data_slice = imu.data[\n", " (imu.data[\"timestamp [ns]\"] >= start_ts) & (imu.data[\"timestamp [ns]\"] <= end_ts)\n", "]\n", - "concat_data_slice = concat_data[\n", - " (concat_data[\"timestamp [ns]\"] >= start_ts)\n", - " & (concat_data[\"timestamp [ns]\"] <= end_ts)\n", + "concat_data_slice = concat_stream[\n", + " (concat_stream[\"timestamp [ns]\"] >= start_ts)\n", + " & (concat_stream[\"timestamp [ns]\"] <= end_ts)\n", "]\n", "\n", "# plot all data in the same scatter plot\n", @@ -448,7 +430,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/tutorials/read_recording.html b/tutorials/read_recording.html index 862fa6e..b7a33cb 100644 --- a/tutorials/read_recording.html +++ b/tutorials/read_recording.html @@ -45,7 +45,7 @@ - + @@ -311,7 +311,7 @@ @@ -527,7 +527,7 @@

    Data and metadata of a NeonRecording
    -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.
    +D:\GitHub\pyneon\pyneon\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.
       warnings.warn(
     
    @@ -546,26 +546,21 @@

    Data and metadata of a NeonRecording
    -                                    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
    +                     gaze x [px]  gaze y [px]  worn  fixation id  blink id  \
    +timestamp [ns]
    +1725032224852161732     1067.486      620.856  True            1      <NA>
    +1725032224857165732     1066.920      617.117  True            1      <NA>
    +1725032224862161732     1072.699      615.780  True            1      <NA>
    +1725032224867161732     1067.447      617.062  True            1      <NA>
    +1725032224872161732     1071.564      613.158  True            1      <NA>
    +
    +                     azimuth [deg]  elevation [deg]
    +timestamp [ns]
    +1725032224852161732      16.213030        -0.748998
    +1725032224857165732      16.176285        -0.511733
    +1725032224862161732      16.546413        -0.426618
    +1725032224867161732      16.210049        -0.508251
    +1725032224872161732      16.473521        -0.260388
     

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

    @@ -582,7 +577,6 @@

    Data and metadata of a NeonRecording
    -timestamp [ns]       Int64
     gaze x [px]        float64
     gaze y [px]        float64
     worn                  bool
    @@ -590,7 +584,6 @@ 

    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.

    -
    [9]:
    +
    [12]:
     
    -
    [9]:
    -
    +
    +
    +
    +
    +saccade id                                2.0
    +end timestamp [ns]      1725032225347526656.0
    +duration [ms]                            65.0
    +amplitude [px]                      228.36139
    +amplitude [deg]                     14.676102
    +mean velocity [px/s]              3685.269894
    +peak velocity [px/s]              5411.775481
    +Name: 1725032225282527732, dtype: Float64
    +
    +
    +
    +
    -<Axes: xlabel='timestamp [ns]', ylabel='gyro x [deg/s]'>
    +---------------------------------------------------------------------------
    +TypeError                                 Traceback (most recent call last)
    +Cell In[12], line 19
    +     17 saccade = saccades.data.iloc[1]
    +     18 print(saccade)
    +---> 19 ax.axvspan(
    +     20     saccade.index.to_numpy(), saccade["end timestamp [ns]"], color="lightgray"
    +     21 )
    +     22 ax.text(
    +     23     (saccade.index.to_numpy() + saccade["end timestamp [ns]"]) / 2,
    +     24     1050,
    +     25     "Saccade",
    +     26     horizontalalignment="center",
    +     27 )
    +     29 # Visualize gaze x and pupil diameter left
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\axes\_axes.py:1087, in Axes.axvspan(self, xmin, xmax, ymin, ymax, **kwargs)
    +   1085 # Strip units away.
    +   1086 self._check_no_units([ymin, ymax], ['ymin', 'ymax'])
    +-> 1087 (xmin, xmax), = self._process_unit_info([("x", [xmin, xmax])], kwargs)
    +   1089 p = mpatches.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin, **kwargs)
    +   1090 p.set_transform(self.get_xaxis_transform(which="grid"))
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\axes\_base.py:2585, in _AxesBase._process_unit_info(self, datasets, kwargs, convert)
    +   2583     # Update from data if axis is already set but no unit is set yet.
    +   2584     if axis is not None and data is not None and not axis.have_units():
    +-> 2585         axis.update_units(data)
    +   2586 for axis_name, axis in axis_map.items():
    +   2587     # Return if no axis is set.
    +   2588     if axis is None:
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\axis.py:1756, in Axis.update_units(self, data)
    +   1754 neednew = self.converter != converter
    +   1755 self.converter = converter
    +-> 1756 default = self.converter.default_units(data, self)
    +   1757 if default is not None and self.units is None:
    +   1758     self.set_units(default)
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\category.py:105, in StrCategoryConverter.default_units(data, axis)
    +    103 # the conversion call stack is default_units -> axis_info -> convert
    +    104 if axis.units is None:
    +--> 105     axis.set_units(UnitData(data))
    +    106 else:
    +    107     axis.units.update(data)
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\category.py:181, in UnitData.__init__(self, data)
    +    179 self._counter = itertools.count()
    +    180 if data is not None:
    +--> 181     self.update(data)
    +
    +File c:\Users\QianC\.conda\envs\pyneon\Lib\site-packages\matplotlib\category.py:214, in UnitData.update(self, data)
    +    212 # check if convertible to number:
    +    213 convertible = True
    +--> 214 for val in OrderedDict.fromkeys(data):
    +    215     # OrderedDict just iterates over unique values in data.
    +    216     _api.check_isinstance((str, bytes), value=val)
    +    217     if convertible:
    +    218         # this will only be called so long as convertible is True.
    +
    +TypeError: unhashable type: 'numpy.ndarray'
     
    -../_images/tutorials_read_recording_17_1.png +../_images/tutorials_read_recording_17_2.png

    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.

    @@ -751,11 +816,11 @@

    Visualizing gaze heatmap

    next

    -

    Resample Data and Concatenate Channels

    +

    Interpolate Data and Concatenate Channels

    diff --git a/tutorials/read_recording.ipynb b/tutorials/read_recording.ipynb index 19644ff..9568f42 100644 --- a/tutorials/read_recording.ipynb +++ b/tutorials/read_recording.ipynb @@ -143,19 +143,19 @@ "Wearer ID: bcff2832-cfcb-4f89-abef-7bbfe91ec561\n", "Wearer name: Qian\n", "Recording start time: 2024-08-30 17:37:01.527000\n", - "Recording duration: 98.213 s\n", - " exist filename path\n", - "3d_eye_states True 3d_eye_states.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\3d_eye_states.csv\n", - "blinks True blinks.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\blinks.csv\n", - "events True events.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\events.csv\n", - "fixations True fixations.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\fixations.csv\n", - "gaze True gaze.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\gaze.csv\n", - "imu True imu.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\imu.csv\n", - "labels True labels.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\labels.csv\n", - "saccades True saccades.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\saccades.csv\n", - "world_timestamps True world_timestamps.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\world_timestamps.csv\n", - "scene_video_info False None None\n", - "scene_video False None None\n", + "Recording duration: 98.213s\n", + " exist filename path\n", + "3d_eye_states True 3d_eye_states.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\3d_eye_states.csv\n", + "blinks True blinks.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\blinks.csv\n", + "events True events.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\events.csv\n", + "fixations True fixations.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\fixations.csv\n", + "gaze True gaze.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\gaze.csv\n", + "imu True imu.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\imu.csv\n", + "labels True labels.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\labels.csv\n", + "saccades True saccades.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\saccades.csv\n", + "world_timestamps True world_timestamps.csv D:\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\world_timestamps.csv\n", + "scene_video_info False None None\n", + "scene_video False None None\n", "\n" ] } @@ -182,7 +182,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", + "\n", "None\n" ] }, @@ -190,7 +190,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "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", + "D:\\GitHub\\pyneon\\pyneon\\recording.py:275: UserWarning: Scene video not loaded because no video or video timestamps file was found.\n", " warnings.warn(\n" ] } @@ -220,26 +220,21 @@ "name": "stdout", "output_type": "stream", "text": [ - " 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", - " 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", + " gaze x [px] gaze y [px] worn fixation id blink id \\\n", + "timestamp [ns] \n", + "1725032224852161732 1067.486 620.856 True 1 \n", + "1725032224857165732 1066.920 617.117 True 1 \n", + "1725032224862161732 1072.699 615.780 True 1 \n", + "1725032224867161732 1067.447 617.062 True 1 \n", + "1725032224872161732 1071.564 613.158 True 1 \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" + " azimuth [deg] elevation [deg] \n", + "timestamp [ns] \n", + "1725032224852161732 16.213030 -0.748998 \n", + "1725032224857165732 16.176285 -0.511733 \n", + "1725032224862161732 16.546413 -0.426618 \n", + "1725032224867161732 16.210049 -0.508251 \n", + "1725032224872161732 16.473521 -0.260388 \n" ] } ], @@ -263,7 +258,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "timestamp [ns] Int64\n", "gaze x [px] float64\n", "gaze y [px] float64\n", "worn bool\n", @@ -271,7 +265,6 @@ "blink id Int32\n", "azimuth [deg] float64\n", "elevation [deg] float64\n", - "time [s] float64\n", "dtype: object\n" ] } @@ -291,22 +284,43 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "saccade id 2.0\n", + "end timestamp [ns] 1725032225347526656.0\n", + "duration [ms] 65.0\n", + "amplitude [px] 228.36139\n", + "amplitude [deg] 14.676102\n", + "mean velocity [px/s] 3685.269894\n", + "peak velocity [px/s] 5411.775481\n", + "Name: 1725032225282527732, dtype: Float64\n" + ] + }, + { + "ename": "TypeError", + "evalue": "unhashable type: 'numpy.ndarray'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[12], line 19\u001b[0m\n\u001b[0;32m 17\u001b[0m saccade \u001b[38;5;241m=\u001b[39m saccades\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39miloc[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28mprint\u001b[39m(saccade)\n\u001b[1;32m---> 19\u001b[0m \u001b[43max\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maxvspan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 20\u001b[0m \u001b[43m \u001b[49m\u001b[43msaccade\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_numpy\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msaccade\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mend timestamp [ns]\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcolor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlightgray\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n\u001b[0;32m 21\u001b[0m \u001b[43m)\u001b[49m\n\u001b[0;32m 22\u001b[0m ax\u001b[38;5;241m.\u001b[39mtext(\n\u001b[0;32m 23\u001b[0m (saccade\u001b[38;5;241m.\u001b[39mindex\u001b[38;5;241m.\u001b[39mto_numpy() \u001b[38;5;241m+\u001b[39m saccade[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mend timestamp [ns]\u001b[39m\u001b[38;5;124m\"\u001b[39m]) \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m,\n\u001b[0;32m 24\u001b[0m \u001b[38;5;241m1050\u001b[39m,\n\u001b[0;32m 25\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSaccade\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 26\u001b[0m horizontalalignment\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcenter\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 27\u001b[0m )\n\u001b[0;32m 29\u001b[0m \u001b[38;5;66;03m# Visualize gaze x and pupil diameter left\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axes\\_axes.py:1087\u001b[0m, in \u001b[0;36mAxes.axvspan\u001b[1;34m(self, xmin, xmax, ymin, ymax, **kwargs)\u001b[0m\n\u001b[0;32m 1085\u001b[0m \u001b[38;5;66;03m# Strip units away.\u001b[39;00m\n\u001b[0;32m 1086\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_no_units([ymin, ymax], [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mymin\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mymax\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m-> 1087\u001b[0m (xmin, xmax), \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_process_unit_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mx\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mxmin\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mxmax\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1089\u001b[0m p \u001b[38;5;241m=\u001b[39m mpatches\u001b[38;5;241m.\u001b[39mRectangle((xmin, ymin), xmax \u001b[38;5;241m-\u001b[39m xmin, ymax \u001b[38;5;241m-\u001b[39m ymin, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 1090\u001b[0m p\u001b[38;5;241m.\u001b[39mset_transform(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_xaxis_transform(which\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mgrid\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axes\\_base.py:2585\u001b[0m, in \u001b[0;36m_AxesBase._process_unit_info\u001b[1;34m(self, datasets, kwargs, convert)\u001b[0m\n\u001b[0;32m 2583\u001b[0m \u001b[38;5;66;03m# Update from data if axis is already set but no unit is set yet.\u001b[39;00m\n\u001b[0;32m 2584\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m axis\u001b[38;5;241m.\u001b[39mhave_units():\n\u001b[1;32m-> 2585\u001b[0m \u001b[43maxis\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate_units\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 2586\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m axis_name, axis \u001b[38;5;129;01min\u001b[39;00m axis_map\u001b[38;5;241m.\u001b[39mitems():\n\u001b[0;32m 2587\u001b[0m \u001b[38;5;66;03m# Return if no axis is set.\u001b[39;00m\n\u001b[0;32m 2588\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\axis.py:1756\u001b[0m, in \u001b[0;36mAxis.update_units\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 1754\u001b[0m neednew \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter \u001b[38;5;241m!=\u001b[39m converter\n\u001b[0;32m 1755\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter \u001b[38;5;241m=\u001b[39m converter\n\u001b[1;32m-> 1756\u001b[0m default \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconverter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdefault_units\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1757\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m default \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39munits \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1758\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mset_units(default)\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:105\u001b[0m, in \u001b[0;36mStrCategoryConverter.default_units\u001b[1;34m(data, axis)\u001b[0m\n\u001b[0;32m 103\u001b[0m \u001b[38;5;66;03m# the conversion call stack is default_units -> axis_info -> convert\u001b[39;00m\n\u001b[0;32m 104\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m axis\u001b[38;5;241m.\u001b[39munits \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 105\u001b[0m axis\u001b[38;5;241m.\u001b[39mset_units(\u001b[43mUnitData\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 106\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 107\u001b[0m axis\u001b[38;5;241m.\u001b[39munits\u001b[38;5;241m.\u001b[39mupdate(data)\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:181\u001b[0m, in \u001b[0;36mUnitData.__init__\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 179\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_counter \u001b[38;5;241m=\u001b[39m itertools\u001b[38;5;241m.\u001b[39mcount()\n\u001b[0;32m 180\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 181\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mupdate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\QianC\\.conda\\envs\\pyneon\\Lib\\site-packages\\matplotlib\\category.py:214\u001b[0m, in \u001b[0;36mUnitData.update\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 212\u001b[0m \u001b[38;5;66;03m# check if convertible to number:\u001b[39;00m\n\u001b[0;32m 213\u001b[0m convertible \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m--> 214\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m val \u001b[38;5;129;01min\u001b[39;00m \u001b[43mOrderedDict\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfromkeys\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[0;32m 215\u001b[0m \u001b[38;5;66;03m# OrderedDict just iterates over unique values in data.\u001b[39;00m\n\u001b[0;32m 216\u001b[0m _api\u001b[38;5;241m.\u001b[39mcheck_isinstance((\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;28mbytes\u001b[39m), value\u001b[38;5;241m=\u001b[39mval)\n\u001b[0;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m convertible:\n\u001b[0;32m 218\u001b[0m \u001b[38;5;66;03m# this will only be called so long as convertible is True.\u001b[39;00m\n", + "\u001b[1;31mTypeError\u001b[0m: unhashable type: 'numpy.ndarray'" + ] }, { "data": { - "image/png": "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VeSLI5Q9pkufz/0fkHirbWEeC1Z89Xm33XYb+vXrh3379uHQoUP48ccfsWrVKsybNw933XUXdu3ahQ8++ACnTp1CWVkZTCYTjEYjKisroVKpcPz4caSlSVcE/vPPP1FVVYVevXrV+/xbtmzBJ598gjNnzqCiogImkwlhYWE2bYwYMcLmMd26dcOePXsAABUVFThz5gzmzp2LefPmWa+p2w4RkbdjqCQiIt9lmb5aX3jcvxT4xyZAHgRk15oey4qvfkOhUKBv377o27cvJk+ejLlz5+Ltt9/G9ddfj2nTpmHEiBGYPn06IiIicODAAcyZMwfV1dVQqVRQKBQNttuQgwcPYubMmXj44Ydx4403IiwsDN98843kqGd9KioqAABz585Ft27dbM7J5dz1jYh8B0MlERH5LkWE+Of+peJ2IYBtsGxzIxDZERjyWa2tRiLEEUoGSr/Uvn177NixA0ePHoXZbMZTTz1lDWhbt261ufaqq67C7t27MXXqVLt2kpKSoFQqsXv3bsnpbb/++itat25tLdoDALm5uXZ9OXToEP7+979bjx06dMj691atWiE2NhZnz57FnXfe6doLJiLyAgyVRETku9Rx4qhjdqbtdiEmA6CMAqJSgLDW4rUMkX6luLgYTzzxBO666y5cddVV0Gg0OHLkCFatWoUBAwYgMTERNTU1WLduHW6++WYcPHgQ//rXv2zamDBhAu6++2689NJLGD58OEJCQrBnzx6kpaVBp9Nh3LhxeO211xASEoIePXqgsLAQJ0+exN13343ExETk5eXhm2++wTXXXIPvv/8e27fbjpSPHj0azz//PK6++mr06NEDmzdvxsmTJ21C6sMPP4xXXnkFWq0WN954I6qqqnDkyBGUlpZizJgxLfK1JCJqKoZKIiLyXUqdOI01c4IYLC3bhVimt1oCJfkdtVqNrl274uOPP8bZs2dRU1ODuLg4ZGRkYOLEiVAqlXjqqafw4Ycf4o033kDPnj3x2GOP4dlnn7W2kZycjHfffRfLli3DfffdB4VCgW7duuH2228HADz00EMICgrC8uXLceHCBcTExFjXSA4YMAD3338/Xn75ZVRVVaFfv3546KGHsGLFCmv7gwcPxpkzZ/D666/DaDRi4MCBGDFiBH7++WfrNRkZGVAqlVi9ejVeffVVqFQqXHnllbj//vtb6CtJRNR0rP7q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iIiIiMhlwZ7ugC8wm80AgNzcXA/3hIiIKLAYDAbk5+d7uhteRalUQqlUerobRAHLkgksGYEYKh1i+WF2ww03eLgnRERERETkDfLz85GYmOjpbngFmSAIgqc74e1qampw4MABxMXFQS7njGF30Ov16NKlC44ePQqtVuvp7lAdfH+8F98b78b3x3vxvfFufH+8F98be2azGfn5+ejRoweCgzlGBzBUkoeUlpYiIiICJSUlCA8P93R3qA6+P96L74134/vjvfjeeDe+P96L7w05gsNuRERERERE5DKGSiIiIiIiInIZQyV5hEKhwNy5c6FQKDzdFZLA98d78b3xbnx/vBffG+/G98d78b0hR3BNJREREREREbmMI5VERERERETkMoZKIiIiIiIichlDJREREREREbmMoZKIiIiIiIhcxlBJLeaVV16BTCbDY489Zj128uRJ/OMf/0BMTAzCw8MxYsQI5Ofne66TAWTevHmQyWQ2t86dO1vPGwwGTJ06FdHR0QgLC0NGRgbfmxbS2Hvz3nvvoX///ggPD4dMJkNxcbHnOhuAGnp/CgsLMX36dHTq1AkqlQqJiYl45JFHUFJS4uFeB47G/v889NBD6NChA1QqFWJiYpCeno5jx455sMeBo7H3xkIQBNx+++2QyWTYuHFjy3c0QDX2/vTv39/u/OTJkz3YY/ImwZ7uAAWGPXv24N1330W3bt2sx8rLy5GWloZrr70WO3bsAADMnj0bQ4cOxf/+9z/I5fydR3O7+uqr8d///td6Pzj48reEGTNmYPPmzfjiiy8QERGBadOm4e6778ZPP/3kia4GnIbem4qKCgwePBiDBw/GrFmzPNG9gFff+3P+/HmcP38eS5YsQZcuXXD69GlMnjwZ58+fx/r16z3V3YDT0P+fnj17YtSoUUhMTERhYSHmzZuHtLQ0nDp1CkFBQZ7obkBp6L2xWLp0KWQyWUt2i/7S2PszceJEvPjii9b7arW6xfpG3o2hkppdWVkZRo0ahZUrV+Kll16yHv/pp5+QnZ2NAwcOIDw8HACwZs0a6HQ67NixAwMHDvRUlwNGcHAw4uPj7Y6XlJTggw8+wLp163DLLbcAAFatWoWUlBT873//Q+/evVu6qwGnvvcGgHW0/9tvv225DpGN+t6fa665Bhs2bLDe79ChAxYsWIDRo0ejpqZG8gM0uV9D/38m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fPLJJw5/nS0WLFiAvn37Qq1WIzIyUvKaPXv24NZbb0VkZCR0Oh0GDRqEX3/91ennCgQMlURE1Kz69+9vF4j69u2L3NxcREREeKZT8J1gGx4ejtzcXMyfP99tbe7ZswcbNmxwW3tEvqa8vBzXXnstli9f7tLjT506hfT0dNxyyy04ePAgtm7dikuXLuHuu++u9zHz5s3D2LFjG+zTTTfdhH/+858O9+PLL79Ebm6u9Xb48GEEBQVh+PDhAICKigrs378fs2fPxv79+/Hll1/i+PHj+Pvf/27X1osvvmjT1vTp063nSktLkZaWhqSkJOzbtw+LFy/GvHnz8N5771mviYqKwnPPPYddu3bh0KFDePDBB/Hggw9i69atDvfl2LFjMJvNePfdd3HkyBG8/vrreOedd/Dss89ar/n555/RrVs3bNiwwfo8DzzwADZt2uTw1w0AqqqqMHz4cEyZMkXyfFlZGQYPHozExETs3r0bP/74I7RaLQYNGoTq6mqnnisgCERERM3o5ptvFh599FFPd8POzp07BQBCUVGRp7tSr1WrVgkRERHN0rYvvH6ilgBA+Pe//21zzGAwCE888YTQpk0bQa1WCzfccIOwc+dO6/kvvvhCCA4OFkwmk/XYf/7zH0EmkwlVVVWSzzN37lxhzJgxjfbn1KlTAgDhwIEDTr+W119/XdBqtUJZWVm91/zyyy8CAOH06dPWY0lJScLrr79e72PefvttQafTCUaj0XrsmWeeETp16tRgf3r06CE8//zzTvWlrkWLFgnt2rVr8HnuuOMO4cEHH7Q5tnLlSqFz586CQqEQOnXqJCxfvlzysfV9n92zZ48AQMjJybEeO3TokABAOHHiRIP9CUQcqSQiomYzduxYfPfdd3jjjTesU6qys7PtRglXr16NyMhIbNq0CZ06dYJarcawYcNQUVGBNWvWIDk5GTqdDo888ghMJpO1faPRiCeffBJt27aFRqNBr1698O2331rPnz59GkOHDoVOp4NGo8HVV1+N//u//0N2djYGDBgAANDpdJDJZNYRhC1btuCmm25CZGQkoqOjceedd+LkyZPWNrOzsyGTyfCvf/0Lf/vb36BSqXD99dfj999/x549e5CamoqwsDDcfvvtuHjxos3X4q677sILL7yAmJgYhIeHY/LkyTbTuhyVnJyMl19+GePGjYNWq0ViYqLN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171Z/l8LgrhGvW4bx44dEwAImZmZdm1avl9J3SxrHS3fGyMiIgSlUimkpKQIL7/8snU9pcWvv/4q3HTTTYJCoRDatm0rvPLKKzbnn3vuOaFjx46CUqkUdDqd0KdPH5vCao70pb6vQe3IMmbMGMnzN998s01/PvnkE6F79+5CaGiooNPphH79+glffvllo+3UXgOamZkp3HjjjUJERISg0+mEW265Rdi1a1d9b2FAY6gkIqJmdfz4caF3796CSqUSAAinTp1yW6hs7IPftGnThA4dOggKhUKIiYkR7r//fuHSpUvWx7/44otCfHy8IJPJrB/Utm3bJqSkpAgKhULo1q2b8O2337otVKanpwtz5swRoqOjhbCwMGHixIl2H9xqczVUvvfee0L37t0FjUYjhIeHC7feequwf/9+m+sZKomIyF1kgiAI7h79JCIiIltjx45FcXExNm7c6PBjVq9ejccee8y6n6c7ffvttxgwYACKiooa3COOiIioMfYrX4mIiMhrlJSUICwsDM8884zb2rz66qtx++23u609IiIKbCzUQ0RE5KUyMjJw0003AYBbRxP/7//+D9XV1QDQ6NYCREREjeH0VyIiIiIiInIZp78SERERERGRyxgqiYiIiIiIyGUMlUREREREROQyhkoiIiIiIiJyGUMlERERERERuYyhkoiIiIiIiFzGUElEREREREQuY6gkIiIiIiIilzFUEhERERERkcv+HzudIOxnlYGYAAAAAElFTkSuQmCC", + "image/png": "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arlCa9KkSVFeXh4dHR0D1js6OmLKlCmDXjNlypRc+yMGf9svIqJQKAx4exBS6+zsjIiImpoaZ40LylljuDhrDBdnjeHy/vm67LLLPvSsDVe/DCbXTx2sqKiIOXPmRGtra3Gtv78/Wltbo76+ftBr6uvrB+yPiHj55ZfPuh8AACCFUvZL7o8ONjU1xdKlS2Pu3Lkxb968WLduXXR3d8eyZcsiImLJkiVRU1MTLS0tERFxzz33xE033RSPP/543HrrrbFp06b49a9/HU8//XTeWwMAAORSqn7JHVoLFy6MkydPxqpVq6K9vT1mz54d27ZtK35h7MiRI1FW9sEbZddff30899xz8dBDD8UDDzwQf/3Xfx0vvvjiGV9eO5fKyspobm7+2H3uktHHWWO4OGsMF2eN4eKsMVzynrVS9EvEEH6PFgAAAOeW6ztaAAAAfDihBQAAkJjQAgAASExoAQAAJPaxCa3169fHjBkzoqqqKurq6mLHjh3n3P+Tn/wkrrrqqqiqqoqrr746tm7dOkyTMtLlOWsbN26MG2+8MSZOnBgTJ06MhoaGDz2b8L68f6+9b9OmTTFmzJhYsGDBhR2QUSPvWXv77bdj+fLlMXXq1KisrIwrr7zSv0c5L3nP2rp16+LTn/50XHzxxVEoFOK+++6LP/zhD8M0LSPRL3/5y5g/f35MmzYtxowZEy+++OKHXrN9+/b43Oc+F5WVlfGpT30qnn322Qs+5/n4WITW5s2bo6mpKZqbm2PXrl0xa9asaGxsjBMnTgy6/9VXX41FixbF7bffHrt3744FCxbEggULYu/evcM8OSNN3rO2ffv2WLRoUbzyyivR1tYWhUIhbrnlljh+/PgwT85Ik/esve/w4cPxjW98I2688cZhmpSRLu9Z6+3tjS984Qtx+PDheP755+PgwYOxcePGqKmpGebJGWnynrXnnnsuVqxYEc3NzbF///545plnYvPmzfHAAw8M8+SMJN3d3TFr1qxYv379ee1/880349Zbb42bb7459uzZE/fee2/ccccd8dJLL13gSc9D9jEwb968bPny5cXnfX192bRp07KWlpZB93/5y1/Obr311gFrdXV12T/+4z9e0DkZ+fKetT91+vTpbNy4cdmPfvSjCzUio8RQztrp06ez66+/PvvBD36QLV26NPu7v/u7YZiUkS7vWfv+97+fXX755Vlvb+9wjcgokfesLV++PPvbv/3bAWtNTU3ZDTfccEHnZPSIiOyFF144555vfvOb2Wc/+9kBawsXLswaGxsv4GTnp+TvaPX29sbOnTujoaGhuFZWVhYNDQ3R1tY26DVtbW0D9kdENDY2nnU/RAztrP2pd999N95777247LLLLtSYjAJDPWvf+ta3YvLkyXH77bcPx5iMAkM5az/72c+ivr4+li9fHtXV1TFz5sxYs2ZN9PX1DdfYjEBDOWvXX3997Ny5s/jxwkOHDsXWrVvji1/84rDMzJ+Hj3MXjC31AKdOnYq+vr7ib2Z+X3V1dRw4cGDQa9rb2wfd397efsHmZOQbyln7U/fff39MmzbtjP9Cw/83lLP2q1/9Kp555pnYs2fPMEzIaDGUs3bo0KH4z//8z/jKV74SW7dujTfeeCO+/vWvx3vvvRfNzc3DMTYj0FDO2m233RanTp2Kz3/+85FlWZw+fTruuusuHx0kqbN1QWdnZ/z+97+Piy++uESTfUy+owUjwdq1a2PTpk3xwgsvRFVVVanHYRTp6uqKxYsXx8aNG2PSpEmlHodRrr+/PyZPnhxPP/10zJkzJxYuXBgPPvhgbNiwodSjMcps37491qxZE0899VTs2rUrfvrTn8aWLVvi0UcfLfVoMCxK/o7WpEmTory8PDo6Ogasd3R0xJQpUwa9ZsqUKbn2Q8TQztr7HnvssVi7dm384he/iGuuueZCjskokPes/eY3v4nDhw/H/Pnzi2v9/f0RETF27Ng4ePBgXHHFFRd2aEakofy9NnXq1LjooouivLy8uPaZz3wm2tvbo7e3NyoqKi7ozIxMQzlrDz/8cCxevDjuuOOOiIi4+uqro7u7O+6888548MEHo6zM/9/PR3e2Lhg/fnxJ382K+Bi8o1VRURFz5syJ1tbW4lp/f3+0trZGfX39oNfU19cP2B8R8fLLL591P0QM7axFRHz3u9+NRx99NLZt2xZz584djlEZ4fKetauuuipee+212LNnT/HxpS99qfgTlAqFwnCOzwgylL/XbrjhhnjjjTeKMR8R8frrr8fUqVNFFmc1lLP27rvvnhFT7wd+lmUXblj+rHysu6DUP40jy7Js06ZNWWVlZfbss89m+/bty+68887s0ksvzdrb27Msy7LFixdnK1asKO7/r//6r2zs2LHZY489lu3fvz9rbm7OLrroouy1114r1R+BESLvWVu7dm1WUVGRPf/889lbb71VfHR1dZXqj8AIkfes/Sk/dZDzlfesHTlyJBs3blz2T//0T9nBgwezn//859nkyZOzb3/726X6IzBC5D1rzc3N2bhx47J///d/zw4dOpT9x3/8R3bFFVdkX/7yl0v1R2AE6Orqynbv3p3t3r07i4jsiSeeyHbv3p399re/zbIsy1asWJEtXry4uP/QoUPZJZdckv3zP/9ztn///mz9+vVZeXl5tm3btlL9EYo+FqGVZVn2r//6r9lf/uVfZhUVFdm8efOy//7v/y7+ZzfddFO2dOnSAft//OMfZ1deeWVWUVGRffazn822bNkyzBMzUuU5a3/1V3+VRcQZj+bm5uEfnBEn799r/5/QIo+8Z+3VV1/N6urqssrKyuzyyy/PvvOd72SnT58e5qkZifKctffeey9bvXp1dsUVV2RVVVVZoVDIvv71r2f/8z//M/yDM2K88sorg/5vr/fP1tKlS7ObbrrpjGtmz56dVVRUZJdffnn2b//2b8M+92DGZJn3bgEAAFIq+Xe0AAAARhuhBQAAkJjQAgAASExoAQAAJCa0AAAAEhNaAAAAiQktAACAxIQWAABAYkILAAAgMaEFAACQmNACAABITGgBAAAk9n+93APIaM1xaAAAAABJRU5ErkJggg==", "text/plain": [ "
    " ] @@ -333,11 +347,10 @@ "\n", "# Visualize the 2nd saccade\n", "saccade = saccades.data.iloc[1]\n", - "ax.axvspan(\n", - " saccade[\"start timestamp [ns]\"], saccade[\"end timestamp [ns]\"], color=\"lightgray\"\n", - ")\n", + "print(saccade)\n", + "ax.axvspan(saccade.index.values, saccade[\"end timestamp [ns]\"], color=\"lightgray\")\n", "ax.text(\n", - " (saccade[\"start timestamp [ns]\"] + saccade[\"end timestamp [ns]\"]) / 2,\n", + " (saccade.index.values + saccade[\"end timestamp [ns]\"]) / 2,\n", " 1050,\n", " \"Saccade\",\n", " horizontalalignment=\"center\",\n", @@ -347,14 +360,14 @@ "sns.scatterplot(\n", " ax=ax,\n", " data=gaze.data.head(100),\n", - " x=\"timestamp [ns]\",\n", + " x=gaze.data.index,\n", " y=\"gaze x [px]\",\n", " color=gaze_color,\n", ")\n", "sns.scatterplot(\n", " ax=ax2,\n", " data=imu.data.head(60),\n", - " x=\"timestamp [ns]\",\n", + " x=imu.data.index,\n", " y=\"gyro x [deg/s]\",\n", " color=gyro_color,\n", ")" @@ -465,7 +478,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.12.4" } }, "nbformat": 4, diff --git a/tutorials/video.html b/tutorials/video.html index caa7cea..72987c7 100644 --- a/tutorials/video.html +++ b/tutorials/video.html @@ -46,7 +46,7 @@ - + @@ -311,7 +311,7 @@