Reader and analysis tools for dserv ESS experiment log files
Project description
essfile
Pure Python reader and analysis tools for dserv ESS experiment log files.
Installation
pip install essfile
This installs essfile with numpy and dgread (for stimulus parameter decoding).
For pandas DataFrame support:
pip install essfile[pandas]
Quick Start
Inspect an ESS file from the command line
essread session.ess
essread session.ess --raw # show flat datapoint stream
Read in Python
from essfile import ESSFile
f = ESSFile('session.ess')
print(f.identity) # {'ess': 'hapticvis', 'subject': 'human', ...}
print(f.params) # {'stim_duration': '30000', ...}
print(f.n_obs) # 12
print(f.stimdg) # dict of numpy arrays (stimulus parameters)
Extract trials
from essfile import ESSFile
from essfile.extract.hapticvis import extract_trials
f = ESSFile('session.ess')
trials = extract_trials(f)
print(trials['rt']) # reaction times
print(trials['correct']) # 0/1 accuracy
# Convert to DataFrame
import pandas as pd
df = pd.DataFrame(trials)
Low-level access
from essfile import read_dslog, read_ess
# Flat datapoint stream (varname, timestamp, vals columns)
d = read_dslog('session.ess')
# Obs-period oriented with parsed preamble
ess = read_ess('session.ess')
Architecture
The package has three layers:
| Layer | Function | Description |
|---|---|---|
essread |
read_dslog() |
Binary parser → flat datapoint stream |
essread |
read_ess() |
Segments into obs periods, parses preamble |
essfile |
ESSFile |
Event query API (select, sparse, nested) |
extract.* |
extract_trials() |
System-specific trial extraction |
ESSFile API
The ESSFile class provides methods matching the Tcl df::File API:
f = ESSFile('session.ess')
# Event selection (returns list of bool arrays, one per obs)
mask = f.select_evt('ENDTRIAL')
mask = f.select_evt('STIMULUS', 'ON')
# Sparse extraction (one value per trial, fill=-1 if missing)
valid = np.where(some_condition)[0]
times = f.event_time_sparse(valid, 'RESP')
params = f.event_param_sparse(valid, 'STIMTYPE')
subtypes = f.event_subtype_sparse(valid, 'ENDTRIAL')
# Nested extraction (variable count per trial)
decide_times = f.event_times_nested(valid, 'DECIDE', 'SELECT')
# Name lookups
f.type_id('ENDTRIAL') # -> 40
f.subtype_id('ENDTRIAL', 'CORRECT') # -> 1
f.has_event_type('CHOICES') # -> True
Writing Extractors
System-specific extractors live in essfile.extract. Each provides an
extract_trials(f) function that takes an ESSFile and returns a dict
of equal-length arrays (one entry per valid trial).
See essfile/extract/hapticvis.py for a complete example.
File Format
ESS files use the dslog binary format produced by dserv's logger:
- 16-byte header: magic
dslog, version, timestamp - Sequence of datapoint records: varname, timestamp, type, data
- Events encoded with type/subtype/puttype in a 4-byte union
- Pre-obs preamble contains event name tables, parameters, stimdg
Requirements
- Python ≥ 3.9
- numpy
- dgread (for stimulus parameter decoding)
- pandas (optional, for DataFrame conversion)
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file essfile-0.2.1.tar.gz.
File metadata
- Download URL: essfile-0.2.1.tar.gz
- Upload date:
- Size: 17.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd0c3b3e16c6c24a37abce93bf0c8a4ee90a901d53b72205415ddd1786d95b6e
|
|
| MD5 |
c858fba3a8a8ff014760167395060212
|
|
| BLAKE2b-256 |
db763d36cbafc3b1fdca893ae0d456c2ea3373980d287efeecf4d798603b533a
|
File details
Details for the file essfile-0.2.1-py3-none-any.whl.
File metadata
- Download URL: essfile-0.2.1-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f59becf302e5c286cc3f12555f415f92cd819c7ce18eec1c78d238f54304729
|
|
| MD5 |
2b3cf2346f0c2e722714141b518f97ac
|
|
| BLAKE2b-256 |
188dfedf0237f471af14ed3aade81304d9cf78cdb8bd5dc20f088aa9fa44f1a9
|