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.
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.
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 |
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.
View the Data Manager in Action
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.
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 |
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.
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.
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.
© 2019 Symphony-DAS. MATLAB is a registered trademark of The MathWorks, Inc. The OSI logo trademark is the trademark of Open Source Initiative.