Plotting Ceed Experiment Data

 1"""
 2Plotting Ceed Experiment Data
 3=============================
 4
 5This script shows how to read the ceed data stored in an h5 file and then
 6plot it showing the experiment that was played as well as the MEA data.
 7"""
 8from ceed.analysis import CeedDataReader
 9import matplotlib.pyplot as plt
10import numpy as np
11
12ceed_data = '../data/experiment_data_merged.h5'
13
14# create instance that can load the data
15reader = CeedDataReader(ceed_data)
16print('Created reader for file {}'.format(reader.filename))
17# open the data file
18reader.open_h5()
19
20# get the number of experiments and images stored in the file. These images
21# are in addition to the camera images stored with each experiment
22print('Experiment names found in the file: {}'.format(
23      reader.experiments_in_file))
24
25# load the mcs data into memory
26reader.load_mcs_data()
27if not reader.electrodes_data:
28    print('Electrode data not found in the file. Did you forget to merge it '
29          'into the ceed data?')
30if reader.electrode_dig_data is None:
31    print('Electrodes digital data not found in the file')
32
33print('Making plots')
34f, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
35
36print('Showing electrode data')
37electrode = sorted(reader.electrodes_data.keys())[0]
38metadata = reader.electrodes_metadata[electrode]
39offset, scale = reader.get_electrode_offset_scale(electrode)
40freq = metadata['sampling_frequency']
41unit = metadata['Unit']
42data = (np.array(reader.electrodes_data[electrode]) - offset) * scale
43
44ax2.plot(np.arange(len(data)) / freq, data, label=electrode)
45ax2.set_xlabel('Time (s)')
46ax2.set_ylabel('Electrode amplitude ({})'.format(unit))
47
48colors = {'r': 0, 'g': 1, 'b': 2, 'a': 3}
49channel = 'b'
50print('Showing ceed experiment data LED channel "{}"'.format(channel))
51for exp in reader.experiments_in_file:
52    # load a particular experiment
53    reader.load_experiment(exp)
54    print('Loaded experiment {}'.format(reader.loaded_experiment))
55    print('Stage run for this experiment is "{}"'.format(
56        reader.experiment_stage_name))
57    if reader.electrode_intensity_alignment_gpu_rate is None:
58        print('Ceed-MCS alignment not found in the file. Did you forget to '
59              'merge it into the ceed data file?')
60
61    shape_t = np.array(reader.electrode_intensity_alignment_gpu_rate) / freq
62    for shape, intensity in reader.shapes_intensity_rendered_gpu_rate.items():
63        ax1.plot(shape_t, np.array(intensity)[:len(shape_t), colors[channel]],
64                 label='{}-{}'.format(shape, reader.experiment_stage_name))
65
66ax1.set_ylabel('Amplitude')
67ax1.legend()
68plt.show()
69
70print('Closing data file')
71reader.close_h5()