@@ -271,44 +271,48 @@ def from_csv(
271
271
def from_asc (
272
272
file : str | Path ,
273
273
* ,
274
- patterns : str | list | None = 'eyelink' ,
274
+ patterns : str | list [dict [str , Any ] | str ] | None = 'eyelink' ,
275
+ metadata_patterns : list [dict [str , Any ] | str ] | None = None ,
275
276
schema : dict [str , Any ] | None = None ,
276
277
experiment : Experiment | None = None ,
277
278
add_columns : dict [str , str ] | None = None ,
278
- column_schema_overrides : dict [str , type ] | None = None ,
279
- ) -> GazeDataFrame :
279
+ column_schema_overrides : dict [str , Any ] | None = None ,
280
+ ) -> tuple [ GazeDataFrame , dict [ str , Any ]] :
280
281
"""Initialize a :py:class:`pymovements.gaze.gaze_dataframe.GazeDataFrame`.
281
282
282
283
Parameters
283
284
----------
284
285
file: str | Path
285
286
Path of IPC/feather file.
286
- patterns: str | list | None
287
- list of patterns to match for additional columns or a key identifier of eye tracker specific
287
+ patterns: str | list[dict[str, Any] | str] | None
288
+ List of patterns to match for additional columns or a key identifier of eye tracker specific
288
289
default patterns. Supported values are: eyelink. (default: 'eyelink')
290
+ metadata_patterns: list[dict[str, Any] | str] | None
291
+ List of patterns to match for extracting metadata from custom logged messages.
292
+ (default: None)
289
293
schema: dict[str, Any] | None
290
294
Dictionary to optionally specify types of columns parsed by patterns. (default: None)
291
295
experiment: Experiment | None
292
296
The experiment definition. (default: None)
293
297
add_columns: dict[str, str] | None
294
298
Dictionary containing columns to add to loaded data frame.
295
299
(default: None)
296
- column_schema_overrides: dict[str, type ] | None
300
+ column_schema_overrides: dict[str, Any ] | None
297
301
Dictionary containing types for columns.
298
302
(default: None)
299
303
300
304
Returns
301
305
-------
302
- GazeDataFrame
303
- The gaze data frame read from the asc file.
306
+ tuple[ GazeDataFrame, dict[str, Any]]
307
+ The gaze data frame and a metadata dictionary read from the asc file.
304
308
305
309
Examples
306
310
--------
307
311
Let's assume we have an EyeLink asc file stored at `tests/files/eyelink_monocular_example.asc`.
308
312
We can then load the data into a ``GazeDataFrame``:
309
313
310
314
>>> from pymovements.gaze.io import from_asc
311
- >>> gaze = from_asc(file='tests/files/eyelink_monocular_example.asc', patterns='eyelink ')
315
+ >>> gaze, metadata = from_asc(file='tests/files/eyelink_monocular_example.asc')
312
316
>>> gaze.frame
313
317
shape: (16, 3)
314
318
┌─────────┬───────┬────────────────┐
@@ -328,7 +332,8 @@ def from_asc(
328
332
│ 2339290 ┆ 618.0 ┆ [637.6, 531.4] │
329
333
│ 2339291 ┆ 618.0 ┆ [637.3, 531.2] │
330
334
└─────────┴───────┴────────────────┘
331
-
335
+ >>> metadata['sampling_rate']
336
+ 1000.0
332
337
"""
333
338
if isinstance (patterns , str ):
334
339
if patterns == 'eyelink' :
@@ -338,7 +343,9 @@ def from_asc(
338
343
raise ValueError (f"unknown pattern key '{ patterns } '. Supported keys are: eyelink" )
339
344
340
345
# Read data.
341
- gaze_data , _ = parse_eyelink (file , patterns = patterns , schema = schema )
346
+ gaze_data , metadata = parse_eyelink (
347
+ file , patterns = patterns , schema = schema , metadata_patterns = metadata_patterns ,
348
+ )
342
349
343
350
if add_columns is not None :
344
351
gaze_data = gaze_data .with_columns ([
@@ -361,7 +368,7 @@ def from_asc(
361
368
time_unit = 'ms' ,
362
369
pixel_columns = ['x_pix' , 'y_pix' ],
363
370
)
364
- return gaze_df
371
+ return gaze_df , metadata
365
372
366
373
367
374
def from_ipc (
0 commit comments