function spec=dsCombineSpecifications(spec,varargin)
% Purpose: combine populations, connections, and (optionally) mechanisms
% from multiple specifications. This is a useful first step in combining
% two or more network models or models of multicompartment neurons.
%
% Example:
% s=dsCombineSpecifications('E:dv/dt=-v','I:dv/dt=-v');
% s.connections(1).direction='E->I';
% s.connections(1).mechanism_list='iAMPA';
%
% Example:
% s1=load('spec1.mat','spec'); % defines network with TC, RE (saved from GUI)
% s2=load('spec2.mat','spec'); % defines network with RS, FS (saved from GUI)
% s=dsCombineSpecification(s1,s2);
% s.connections(1).direction='RS->TC';
% s.connections(1).mechanism_list='iAMPA';
%
% Example:
% s=dsCombineSpecifications('[E:dv/dt=-v][I:dv/dt=-v]','[TC:dv/dt=-v][RE:dv/dt=-v]');
%
% Author: Jason Sherfey, PhD <jssherfey@gmail.com>
% Copyright (C) 2017 Jason Sherfey, Boston University, USA
spec=dsCheckSpecification(spec);
for i=1:length(varargin)
s=dsCheckSpecification(varargin{i});
spec.populations=cat(2,spec.populations,s.populations);
spec.connections=cat(2,spec.connections,s.connections);
spec.mechanisms=cat(2,spec.mechanisms,s.mechanisms);
end
% unique-ify population names
% ...
% (in .populations)
% (in .connections)
%{
file1='/home/jason/Dropbox/Code/tests/thalamus_specification.mat';
spec1=getfield(load(file1),'spec');
dsPlot(dsSimulate(spec1))
%}