Symphony Data Acquisition System

Symphony Logo

Simple, Powerful, Extensible
Protocol-Driven Acquisition in MATLAB®

Download GitHub


What is Symphony?

Symphony is a MATLAB based data acquisition system for electrophysiologists. It provides a framework for writing acquisition routines and a user interface to conduct experiments.

hero

Documentation


Protocol-Driven Acquisition

Symphony is centered around protocol-driven acquisition. Protocols are high-level acquisition routines written in MATLAB using the Symphony framework. Protocols may include sophisticated online analysis as well as support for gap-free and closed-loop recording.

protocol

classdef Pulse < symphonyui.core.Protocol
properties
amp = 'Amp' % Output amplifier
preTime = 50 % Pulse leading duration (ms)
stimTime = 500 % Pulse duration (ms)
tailTime = 50 % Pulse trailing duration (ms)
pulseAmplitude = 100 % Pulse amplitude (mV)
numberOfAverages = 5 % Number of epochs
end
methods
function prepareRun(obj)
prepareRun@symphonyui.core.Protocol(obj);
device = obj.rig.getDevice(obj.amp);
obj.showFigure('symphonyui.builtin.figures.ResponseFigure', device);
obj.showFigure('symphonyui.builtin.figures.MeanResponseFigure', device);
end
function prepareEpoch(obj, epoch)
prepareEpoch@symphonyui.core.Protocol(obj, epoch);
gen = symphonyui.builtin.stimuli.PulseGenerator();
gen.preTime = obj.preTime;
gen.stimTime = obj.stimTime;
gen.tailTime = obj.tailTime;
gen.amplitude = obj.pulseAmplitude;
gen.mean = 0;
gen.sampleRate = obj.sampleRate;
gen.units = 'mV';
stimulus = gen.generate();
device = obj.rig.getDevice(obj.amp);
epoch.addStimulus(device, stimulus);
epoch.addResponse(device);
end
function tf = shouldContinuePreparingEpochs(obj)
tf = obj.numEpochsPrepared < obj.numberOfAverages;
end
function tf = shouldContinueRun(obj)
tf = obj.numEpochsCompleted < obj.numberOfAverages;
end
end
end
view raw Pulse.m hosted with ❤ by GitHub

Built-in Data Manager

Symphony includes a built-in data manager to browse, view, and annotate data during experiments. The data manager makes it easy to maintain visibility across the entire experimental timeline.

data manager

View the Data Manager in Action


Flexible Data Model

Symphony uses a flexible data model that supports a wide variety of organizational approaches. Simple description files may be written to define an experimental structure and metadata that best suits individual needs.

metadata

classdef Subject < symphonyui.core.persistent.descriptions.SourceDescription
methods
function obj = Subject()
import symphonyui.core.*;
obj.addProperty('id', '', ...
'description', 'ID of animal/person (lab convention)');
obj.addProperty('description', '', ...
'description', 'Description of subject and where subject came from (eg, breeder, if animal)');
obj.addProperty('species', '', ...
'description', 'Species');
obj.addProperty('genotype', '', ...
'description', 'Genetic strain');
obj.addProperty('sex', '', ...
'type', PropertyType('char', 'row', {'', 'male', 'female', 'hermaphrodite'}));
obj.addProperty('age', '', ...
'description', 'Age of person, animal, embryo');
obj.addProperty('weight', '', ...
'description', 'Weight at time of experiment, at time of surgery, and at other important times');
obj.addAllowableParentType([]);
end
end
end
view raw Subject.m hosted with ❤ by GitHub

Modular and Extensible

Symphony was built from the ground up to be modular and extensible. At the app-level, modules may be written to add custom features to the user interface. At the core-level, DAQ, device, and persistor implementations may be written to add support for additional hardware and file formats.

modular


Device-Agnostic Programming Interface

Symphony abstracts away device-specific details that allows acquisition routines (i.e. protocols) to be hardware independent. Device-agnosticism allows protocols to be shared across labs and rigs with limited to no modification.

devices


Free and Open Source

Symphony is released under the MIT License, which is an open source license. Pull requests to the Symphony-DAS GitHub organization are welcomed and encouraged.

OSI Logo


© 2019 Symphony-DAS. MATLAB is a registered trademark of The MathWorks, Inc. The OSI logo trademark is the trademark of Open Source Initiative.