{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Importing Data Example\n", "\n", "In order to import data into `pypillometry`, we have to load the data from the source using other packages and then wrap it into `PupilData` objects. \n", "\n", "Here we will show and example where we translate a file recorded in Eyelinks EDF-format to a file readable by `pandas.read_table()`.\n", "\n", "First, we import the needed modules." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sys, os\n", "sys.path.insert(0,\"..\") # this is not needed if you have installed pypillometry\n", "import pypillometry as pp\n", "import pandas as pd\n", "import numpy as np\n", "import pylab as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this example, we use data recorded with an Eyelink-eyetracker. These eyetrackers store the files in binary files with the extension `.edf`. Some information about this file-format is [here](http://download.sr-support.com/dispdoc/page25.html). We use a command-line utility released by Eyelink to convert this proprietory format into a more easily read `.asc` file that is a whitespace-separated plain-text format. The converter, `edf2asc` is a program that can be downloaded for different platforms from the [Eyelink support forum](https://www.sr-research.com/support/). There is a GUI-based program for windows and command-line programs for linux and mac. Binaries of the command-line tools for linux and mac are included in `pypillometry` under [this link](https://github.com/ihrke/pypillometry/tree/master/external). \n", "\n", "On linux, we would call these programs on an example edf-file twice as follows. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "EDF2ASC: EyeLink EDF file -> ASCII (text) file translator\n", "EDF2ASC version 3.1 MacOS X Jul 13 2010 \n", "(c)1995-2009 by SR Research, last modified Jul 13 2010\n", "\n", "processing file ../data/test.edf \n", "=======================Preamble of file ../data/test.edf=======================\n", "| DATE: Fri Feb 14 08:48:33 2020 |\n", "| TYPE: EDF_FILE BINARY EVENT SAMPLE TAGGED |\n", "| VERSION: EYELINK II 1 |\n", "| SOURCE: EYELINK CL |\n", "| EYELINK II CL v6.12 Feb 1 2018 (EyeLink Portable Duo) |\n", "| CAMERA: EyeLink USBCAM Version 1.01 |\n", "| SERIAL NUMBER: CLU-DAC49 |\n", "| CAMERA_CONFIG: DAC49200.SCD |\n", "| Psychopy GC demo |\n", "===============================================================================\n", "\n", "Converted successfully: 0 events, 1245363 samples, 6 blocks.\n", "\n", "EDF2ASC: EyeLink EDF file -> ASCII (text) file translator\n", "EDF2ASC version 3.1 MacOS X Jul 13 2010 \n", "(c)1995-2009 by SR Research, last modified Jul 13 2010\n", "\n", "processing file ../data/test.edf \n", "=======================Preamble of file ../data/test.edf=======================\n", "| DATE: Fri Feb 14 08:48:33 2020 |\n", "| TYPE: EDF_FILE BINARY EVENT SAMPLE TAGGED |\n", "| VERSION: EYELINK II 1 |\n", "| SOURCE: EYELINK CL |\n", "| EYELINK II CL v6.12 Feb 1 2018 (EyeLink Portable Duo) |\n", "| CAMERA: EyeLink USBCAM Version 1.01 |\n", "| SERIAL NUMBER: CLU-DAC49 |\n", "| CAMERA_CONFIG: DAC49200.SCD |\n", "| Psychopy GC demo |\n", "===============================================================================\n", "\n", "Converted successfully: 36371 events, 0 samples, 6 blocks.\n" ] } ], "source": [ "!../external/edf2asc-mac -y -s ../data/test.edf ../data/test_samples.asc\n", "!../external/edf2asc-mac -y -e ../data/test.edf ../data/test_events.asc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This results in two files, one containing all the samples and one all the recorded events." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "fname_samples=\"../data/test_samples.asc\"\n", "fname_events=\"../data/test_events.asc\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The samples-files contains a large table containing the timestamp, x/y-coordinates for the eyeposition and pupil-area for both the left and the right eye. Here are the first few rows of this file:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3385900\t 817.3\t 345.2\t 1707.0\t 860.6\t 375.2\t 1738.0\t.....\n", "3385902\t 817.0\t 343.5\t 1706.0\t 860.7\t 375.9\t 1739.0\t.....\n", "3385904\t 816.7\t 341.6\t 1705.0\t 861.2\t 376.6\t 1739.0\t.....\n", "3385906\t 816.7\t 340.4\t 1706.0\t 861.7\t 376.8\t 1740.0\t.....\n", "3385908\t 816.7\t 340.2\t 1707.0\t 861.6\t 376.9\t 1742.0\t.....\n", "3385910\t 816.8\t 340.2\t 1708.0\t 861.1\t 377.1\t 1743.0\t.....\n", "3385912\t 816.9\t 340.9\t 1708.0\t 860.7\t 377.5\t 1744.0\t.....\n", "3385914\t 816.1\t 342.1\t 1710.0\t 861.1\t 378.7\t 1745.0\t.....\n", "3385916\t 815.2\t 343.2\t 1712.0\t 862.5\t 380.0\t 1746.0\t.....\n", "3385918\t 814.4\t 343.6\t 1713.0\t 863.9\t 380.7\t 1747.0\t.....\n" ] } ], "source": [ "!head $fname_samples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can easily read this file using `pandas.read_csv()`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timeleft_xleft_yleft_pright_xright_yright_p
03385900817.3345.21707.0860.6375.21738.0
13385902817.0343.51706.0860.7375.91739.0
23385904816.7341.61705.0861.2376.61739.0
33385906816.7340.41706.0861.7376.81740.0
43385908816.7340.21707.0861.6376.91742.0
........................
12453585923060..0.0..0.0
12453595923062..0.0..0.0
12453605923064..0.0..0.0
12453615923066..0.0..0.0
12453625923068..0.0..0.0
\n", "

1245363 rows × 7 columns

\n", "
" ], "text/plain": [ " time left_x left_y left_p right_x right_y right_p\n", "0 3385900 817.3 345.2 1707.0 860.6 375.2 1738.0\n", "1 3385902 817.0 343.5 1706.0 860.7 375.9 1739.0\n", "2 3385904 816.7 341.6 1705.0 861.2 376.6 1739.0\n", "3 3385906 816.7 340.4 1706.0 861.7 376.8 1740.0\n", "4 3385908 816.7 340.2 1707.0 861.6 376.9 1742.0\n", "... ... ... ... ... ... ... ...\n", "1245358 5923060 . . 0.0 . . 0.0\n", "1245359 5923062 . . 0.0 . . 0.0\n", "1245360 5923064 . . 0.0 . . 0.0\n", "1245361 5923066 . . 0.0 . . 0.0\n", "1245362 5923068 . . 0.0 . . 0.0\n", "\n", "[1245363 rows x 7 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.read_table(fname_samples, index_col=False, \n", " names=[\"time\", \"left_x\", \"left_y\", \"left_p\", \n", " \"right_x\", \"right_y\", \"right_p\"])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can already use this information to create our `PupilData`-object. We simply pass in the pupil-area of the right eye (column `right_p`) and the timestamp-array from the samples-file (Note: we could just as easily have used the left eye or the mean of both):" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> Filling in 5 gaps\n", "[32.35 4.012 6.21 2.02 1.862] seconds\n" ] }, { "data": { "text/plain": [ "PupilData(test, 135.5MiB):\n", " n : 1268585\n", " nmiss : 212551\n", " perc_miss : 16.75496714843704\n", " nevents : 0\n", " nblinks : 0\n", " ninterpolated : 0\n", " blinks_per_min : 0.0\n", " fs : 500.0\n", " duration_minutes : 42.28616666666667\n", " start_min : 56.431666666666665\n", " end_min : 98.7178\n", " baseline_estimated: False\n", " response_estimated: False\n", " History:\n", " *" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pp.PupilData(df.right_p, time=df.time, name=\"test\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, this dataset is still missing the important information contained in the event-file which we will use for analysing trial-related pupil-diameter data. For that, we will have to read the events-file, which has a more complicated structure than the samples-file: " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "** CONVERTED FROM ../data/test.edf using edfapi 3.1 MacOS X Jul 13 2010 on Wed May 27 16:45:20 2020\n", "** DATE: Fri Feb 14 08:48:33 2020\n", "** TYPE: EDF_FILE BINARY EVENT SAMPLE TAGGED\n", "** VERSION: EYELINK II 1\n", "** SOURCE: EYELINK CL\n", "** EYELINK II CL v6.12 Feb 1 2018 (EyeLink Portable Duo)\n", "** CAMERA: EyeLink USBCAM Version 1.01\n", "** SERIAL NUMBER: CLU-DAC49\n", "** CAMERA_CONFIG: DAC49200.SCD\n", "** Psychopy GC demo\n", "**\n", "\n", "INPUT\t2767568\t0\n", "MSG\t2784000 !CAL \n", ">>>>>>> CALIBRATION (HV9,P-CR) FOR LEFT: <<<<<<<<<\n", "MSG\t2784000 !CAL Calibration points: \n", "MSG\t2784000 !CAL -29.4, -23.5 -0, -2 \n", "MSG\t2784000 !CAL -29.3, -35.7 -0, -1544 \n", "MSG\t2784000 !CAL -32.9, -10.4 -0, 1559 \n", "MSG\t2784000 !CAL -49.7, -23.0 -2835, -2 \n" ] } ], "source": [ "!head -20 $fname_events" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After a header (lines starting with '\\*\\*') containing meta-information, we get a sequence of \"events\" which have different formats for all rows. We are interested in lines starting with \"MSG\" because those contain our experimental markers. Therefore, we read the samples file and remove all rows that do not start with \"MSG\" first:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['MSG\\t2784000 !CAL \\n',\n", " 'MSG\\t2784000 !CAL Calibration points: \\n',\n", " 'MSG\\t2784000 !CAL -29.4, -23.5 -0, -2 \\n',\n", " 'MSG\\t2784000 !CAL -29.3, -35.7 -0, -1544 \\n',\n", " 'MSG\\t2784000 !CAL -32.9, -10.4 -0, 1559 \\n',\n", " 'MSG\\t2784000 !CAL -49.7, -23.0 -2835, -2 \\n',\n", " 'MSG\\t2784000 !CAL -10.8, -27.4 2835, -2 \\n',\n", " 'MSG\\t2784000 !CAL -48.3, -33.3 -2818, -1544 \\n',\n", " 'MSG\\t2784000 !CAL -11.0, -34.2 2818, -1544 \\n',\n", " 'MSG\\t2784000 !CAL -56.2, -9.2 -2852, 1559 \\n']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read the whole file into variable `events` (list with one entry per line)\n", "with open(fname_events) as f:\n", " events=f.readlines()\n", "\n", "# keep only lines starting with \"MSG\"\n", "events=[ev for ev in events if ev.startswith(\"MSG\")]\n", "events[0:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we added an experimental marker that was sent as the experiment was started. This marker was called `experiment_start`. Hence, we can remove all events before this marker." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['MSG\\t3387245 C_GW_1_1_UD_UD\\n',\n", " 'MSG\\t3390421 F_GW_1_1_10_0\\n',\n", " 'MSG\\t3392759 C_NW_1_2_UD_UD\\n',\n", " 'MSG\\t3394293 R_NW_1_2_UD_UD\\n',\n", " 'MSG\\t3395952 F_NW_1_2_-1_0\\n',\n", " 'MSG\\t3397974 C_NA_1_3_UD_UD\\n',\n", " 'MSG\\t3399892 R_NA_1_3_UD_UD\\n',\n", " 'MSG\\t3400999 F_NA_1_3_-11_0\\n',\n", " 'MSG\\t3403206 C_GA_1_4_UD_UD\\n',\n", " 'MSG\\t3404640 R_GA_1_4_UD_UD\\n']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "experiment_start_index=np.where([\"experiment_start\" in ev for ev in events])[0][0]\n", "events=events[experiment_start_index+1:]\n", "events[0:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is in a format where we can convert it into a `pandas.DataFrame` object for further processing." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678
0MSG3387245C_GW_1_1_UD_UDNoneNoneNoneNoneNoneNone
1MSG3390421F_GW_1_1_10_0NoneNoneNoneNoneNoneNone
2MSG3392759C_NW_1_2_UD_UDNoneNoneNoneNoneNoneNone
3MSG3394293R_NW_1_2_UD_UDNoneNoneNoneNoneNoneNone
4MSG3395952F_NW_1_2_-1_0NoneNoneNoneNoneNoneNone
..............................
1065MSG5893078V_UD_UD_16_UD_UDNoneNoneNoneNoneNoneNone
1066MSG5899076V_UD_UD_17_UD_UDNoneNoneNoneNoneNoneNone
1067MSG5905073V_UD_UD_18_UD_UDNoneNoneNoneNoneNoneNone
1068MSG5911072V_UD_UD_19_UD_UDNoneNoneNoneNoneNoneNone
1069MSG5917071V_UD_UD_20_UD_UDNoneNoneNoneNoneNoneNone
\n", "

1070 rows × 9 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8\n", "0 MSG 3387245 C_GW_1_1_UD_UD None None None None None None\n", "1 MSG 3390421 F_GW_1_1_10_0 None None None None None None\n", "2 MSG 3392759 C_NW_1_2_UD_UD None None None None None None\n", "3 MSG 3394293 R_NW_1_2_UD_UD None None None None None None\n", "4 MSG 3395952 F_NW_1_2_-1_0 None None None None None None\n", "... ... ... ... ... ... ... ... ... ...\n", "1065 MSG 5893078 V_UD_UD_16_UD_UD None None None None None None\n", "1066 MSG 5899076 V_UD_UD_17_UD_UD None None None None None None\n", "1067 MSG 5905073 V_UD_UD_18_UD_UD None None None None None None\n", "1068 MSG 5911072 V_UD_UD_19_UD_UD None None None None None None\n", "1069 MSG 5917071 V_UD_UD_20_UD_UD None None None None None None\n", "\n", "[1070 rows x 9 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_ev=pd.DataFrame([ev.split() for ev in events])\n", "df_ev" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this table, the second column contains the time-stamp (identical to the time-stamp in the samples file), and the third column contains our custom markers (the format like \"C_GW_1_1_UD_UD\" and so on is specific for our experimental design). There are many more columns which seem to contain no information in our samples. Let's check what those columns are for by printing the rows in our data-frame where these columns are not `None`:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345678
209MSG3900393RECCFGCR50021LRNone
211MSG3900393GAZE_COORDS0.000.001919.001079.00NoneNone
212MSG3900393THRESHOLDSL56231R66239
213MSG3900393ELCL_WINDOW_SIZES17618800NoneNone
215MSG3900393ELCL_PROCCENTROID(3)NoneNoneNoneNone
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 \\\n", "209 MSG 3900393 RECCFG CR 500 2 1 LR \n", "211 MSG 3900393 GAZE_COORDS 0.00 0.00 1919.00 1079.00 None \n", "212 MSG 3900393 THRESHOLDS L 56 231 R 66 \n", "213 MSG 3900393 ELCL_WINDOW_SIZES 176 188 0 0 None \n", "215 MSG 3900393 ELCL_PROC CENTROID (3) None None None \n", "\n", " 8 \n", "209 None \n", "211 None \n", "212 239 \n", "213 None \n", "215 None " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_ev[np.array(df_ev[4])!=None].head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently, there are more eye-tracker specific markers in our files (in this case due to drift-checks during the experiments). We can safely drop those from our set of interesting events by dropping all rows in which the fourth column is not `None` and then dropping all non-interesting columns." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timeevent
03387245C_GW_1_1_UD_UD
13390421F_GW_1_1_10_0
23392759C_NW_1_2_UD_UD
33394293R_NW_1_2_UD_UD
43395952F_NW_1_2_-1_0
.........
10655893078V_UD_UD_16_UD_UD
10665899076V_UD_UD_17_UD_UD
10675905073V_UD_UD_18_UD_UD
10685911072V_UD_UD_19_UD_UD
10695917071V_UD_UD_20_UD_UD
\n", "

1035 rows × 2 columns

\n", "
" ], "text/plain": [ " time event\n", "0 3387245 C_GW_1_1_UD_UD\n", "1 3390421 F_GW_1_1_10_0\n", "2 3392759 C_NW_1_2_UD_UD\n", "3 3394293 R_NW_1_2_UD_UD\n", "4 3395952 F_NW_1_2_-1_0\n", "... ... ...\n", "1065 5893078 V_UD_UD_16_UD_UD\n", "1066 5899076 V_UD_UD_17_UD_UD\n", "1067 5905073 V_UD_UD_18_UD_UD\n", "1068 5911072 V_UD_UD_19_UD_UD\n", "1069 5917071 V_UD_UD_20_UD_UD\n", "\n", "[1035 rows x 2 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_ev=df_ev[np.array(df_ev[4])==None][[1,2]]\n", "df_ev.columns=[\"time\", \"event\"]\n", "df_ev" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can pass those event-markers into our `PupilData`-object." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> Filling in 5 gaps\n", "[32.35 4.012 6.21 2.02 1.862] seconds\n" ] }, { "data": { "text/plain": [ "PupilData(test, 135.5MiB):\n", " n : 1268585\n", " nmiss : 212551\n", " perc_miss : 16.75496714843704\n", " nevents : 1035\n", " nblinks : 0\n", " ninterpolated : 0\n", " blinks_per_min : 0.0\n", " fs : 500.0\n", " duration_minutes : 42.28616666666667\n", " start_min : 56.431666666666665\n", " end_min : 98.7178\n", " baseline_estimated: False\n", " response_estimated: False\n", " History:\n", " *" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d=pp.PupilData(df.right_p, time=df.time, event_onsets=df_ev.time, event_labels=df_ev.event, name=\"test\")\n", "d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The summary of the dataset shows us that the eyetracker started recording at time=56.4 minutes. We can reset the time index to start with 0 by using the `reset_time()` function." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "d=d.reset_time().blinks_detect()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can store away this dataset in `pypillometry`-format and use all the `pypillometry`-functions on it, e.g., plot a minute of this dataset." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "d.sub_slice(4, 6, units=\"min\").drop_original().write_file(\"../data/test.pd\")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15,5)); \n", "d.plot((4, 5), units=\"min\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generalize to multiple similar datasets\n", "\n", "Now that we have successfully found a way to create our `PupilData` structure from the raw `.EDF` files, we can wrap the code from this notebook into an easily accessible function that creates `PupilData` objects for a given `.EDF` file that has the same structure.\n", "\n", "We simply create a function that takes the name of an `EDF`-file as input and runs all the code above, returning the final `PupilData` object. For convenience, we will assume that the `EDF2ASC` utility has already run such that `.asc` files are already available (see above for details)." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "datapath=\"../data\" ## this is where the datafiles are located\n", "\n", "def read_dataset(edffile):\n", " basename=os.path.splitext(edffile)[0] ## remove .edf from filename\n", " fname_samples=os.path.join(datapath, basename+\"_samples.asc\")\n", " fname_events=os.path.join(datapath, basename+\"_events.asc\")\n", " \n", " print(\"> Attempt loading '%s' and '%s'\"%(fname_samples, fname_events))\n", " ## read samples-file\n", " df=pd.read_table(fname_samples, index_col=False, \n", " names=[\"time\", \"left_x\", \"left_y\", \"left_p\", \n", " \"right_x\", \"right_y\", \"right_p\"])\n", " \n", " ## read events-file\n", " # read the whole file into variable `events` (list with one entry per line)\n", " with open(fname_events) as f:\n", " events=f.readlines()\n", "\n", " # keep only lines starting with \"MSG\"\n", " events=[ev for ev in events if ev.startswith(\"MSG\")]\n", " # remove events before experiment start\n", " experiment_start_index=np.where([\"experiment_start\" in ev for ev in events])[0][0]\n", " events=events[experiment_start_index+1:]\n", "\n", " # re-arrange as described above\n", " df_ev=pd.DataFrame([ev.split() for ev in events])\n", " df_ev=df_ev[np.array(df_ev[4])==None][[1,2]]\n", " df_ev.columns=[\"time\", \"event\"]\n", " \n", " # create `PupilData`-object\n", " d=pp.PupilData(df.right_p, time=df.time, event_onsets=df_ev.time, event_labels=df_ev.event, name=edffile)\n", " return d\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can test this code by simply running the function with a certain filename located in `datapath`:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> Attempt loading '../data/test_samples.asc' and '../data/test_events.asc'\n", "> Filling in 5 gaps\n", "[32.35 4.012 6.21 2.02 1.862] seconds\n" ] }, { "data": { "text/plain": [ "PupilData(test.edf, 135.5MiB):\n", " n : 1268585\n", " nmiss : 212551\n", " perc_miss : 16.75496714843704\n", " nevents : 1035\n", " nblinks : 0\n", " ninterpolated : 0\n", " blinks_per_min : 0.0\n", " fs : 500.0\n", " duration_minutes : 42.28616666666667\n", " start_min : 56.431666666666665\n", " end_min : 98.7178\n", " baseline_estimated: False\n", " response_estimated: False\n", " History:\n", " *" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_dataset(\"test.edf\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Storing/Loading several datasets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So now it is easy to read a set of datasets into a Python `list` from the same experimental setup with a simple loop, e.g.," ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> Attempt loading '../data/test_samples.asc' and '../data/test_events.asc'\n", "> Filling in 5 gaps\n", "[32.35 4.012 6.21 2.02 1.862] seconds\n" ] } ], "source": [ "files=[\"test.edf\", \"test2.edf\", \"test3.edf\"]\n", "datasets=[read_dataset(fname) for fname in files]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After that, we might want to save the final `PupilData` objects as `.pd` files that can be readily loaded back. Here, we loop through the list of datasets and store each of them in separate files using the `name` attribute of the object as filename." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "for ds in datasets:\n", " fname=os.path.join(datapath, ds.name+\".pd\")\n", " ds.write_file(fname)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These datasets can be read back using the `PupilData.from_file()` method:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "# all filenames in `datapath` that end with `.pd`\n", "pd_files=[fname for fname in os.listdir(datapath) if fname.endswith(\".pd\")]\n", "datasets=[]\n", "for fname in pd_files:\n", " fname=os.path.join(datapath, fname)\n", " d=pp.PupilData.from_file(fname)\n", " datasets.append(d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to store the whole `list` as a single file by using the `pd_write_pickle()`-function:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "pp.pd_write_pickle(datasets, \"full_dataset.pd\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which can be read-back using the `pd_read_pickle()` function like so:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "datasets=pp.pd_read_pickle(\"full_dataset.pd\")" ] } ], "metadata": { "hide_input": false, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }