def test_parse(): """Test .tab parsing """ with ExperimentController(*std_args, stim_fs=44100, **std_kwargs) as ec: ec.identify_trial(ec_id='one', ttl_id=[0]) ec.start_stimulus() ec.write_data_line('misc', 'trial one') ec.stop() ec.trial_ok() ec.write_data_line('misc', 'between trials') ec.identify_trial(ec_id='two', ttl_id=[1]) ec.start_stimulus() ec.write_data_line('misc', 'trial two') ec.stop() ec.trial_ok() ec.write_data_line('misc', 'end of experiment') assert_raises(ValueError, read_tab, ec.data_fname, group_start='foo') assert_raises(ValueError, read_tab, ec.data_fname, group_end='foo') assert_raises(ValueError, read_tab, ec.data_fname, group_end='trial_id') assert_raises(RuntimeError, read_tab, ec.data_fname, group_end='misc') data = read_tab(ec.data_fname) keys = list(data[0].keys()) assert_equal(len(keys), 6) for key in ['trial_id', 'flip', 'play', 'stop', 'misc', 'trial_ok']: assert_in(key, keys) assert_equal(len(data[0]['misc']), 1) assert_equal(len(data[1]['misc']), 1) data = read_tab(ec.data_fname, group_end=None) assert_equal(len(data[0]['misc']), 2) # includes between-trials stuff assert_equal(len(data[1]['misc']), 2)
# -*- coding: utf-8 -*- """ ============ Parsing demo ============ This example shows some of the functionality of ``read_tab``. """ # Author: Eric Larson <*****@*****.**> # # License: BSD (3-clause) print(__doc__) from os import path as op import ast import expyfun.analyze as ea fname = op.join(op.dirname(__file__), 'sample.tab') # from simple_experiment data = ea.read_tab(fname) print('Number of trials: %s' % len(data)) keys = list(data[0].keys()) print('Data keys: %s\n' % keys) for di, d in enumerate(data): if d['trial_id'][0][0] == 'multi-tone': print('Trial %s multi-tone' % (di + 1)) targs = ast.literal_eval(d['multi-tone trial'][0][0]) presses = [int(k[0]) for k in d['keypress']] print(' Targs: %s\n Press: %s' % (targs, presses))