% SYN_TREE Steady-state synaptic electrotonic signature of a tree.
% (trees package)
%
% syn = syn_tree (intree, ge, gi, Ee, Ei, I, options)
% ---------------------------------------------------
%
% calculates the steady state potentials with a given synaptic input
%
% Input
% -----
% - intree::integer:index of tree in trees or structured tree
% - ge::Nx1 vector or value:excitatory synaptic input ind. compartments
% (or allround) {DEFAULT: 0 uS in all nodes}
% - gi::Nx1 vector or value:inhibitory synaptic input ind. compartments
% (or allround) {DEFAULT: 0 uS in all nodes}
% - Ee::Nx1 vector or value:excitatory reversal potential ind. compartments
% (or allround) {DEFAULT: 60 mV}
% - Ei::Nx1 vector or value:inhibitory reversal potential ind. compartments
% (or allround) {DEFAULT: -20 mV}
% - I::Nx1 vector:current injection vector {DEFAULT 0 nA}
% - options::string: {DEFAULT: ''}
% '-s' : show
%
% Output
% ------
% - syn::Nx1 matrix: voltage output
%
% Example
% -------
% syn_tree (sample_tree, 100, 95, [], [], [], '-s')
% syn_tree (sample_tree, 100, 105, [], [], [], '-s')
%
% See also M_tree sse_tree syncat_tree
% Uses M_tree ver_tree
%
% the TREES toolbox: edit, visualize and analyze neuronal trees
% Copyright (C) 2009 Hermann Cuntz
function syn = syn_tree (intree, ge, gi, Ee, Ei, I, options)
% trees : contains the tree structures in the trees package
global trees
if (nargin < 1)||isempty(intree),
intree = length (trees);
end;
ver_tree (intree);
M = M_tree (intree);
N = size (M, 1);
if (nargin < 2)||isempty(ge),
ge = sparse (N, 1);
end
if (nargin < 3)||isempty(gi),
gi = sparse (N, 1);
end
if (nargin < 4)||isempty(Ee),
Ee = 60;
end
if (nargin < 5)||isempty(Ei),
Ei = -20;
end
if numel (ge) == 1,
dg = ge;
ge = sparse (N, 1); ge (dg) =1;
end
if numel (gi) == 1,
dg = gi;
gi = sparse (N, 1); gi (dg) =1;
end
if (nargin < 6)||isempty(I),
I = sparse (size (ge, 1), 1);
end
if (nargin < 7)||isempty(options),
options = '';
end
% feed into M the synaptic conductances
M = M + spdiags (ge, 0, N, N) + spdiags (gi, 0, N, N);
% and then inject the corresponding current
syn = M \ ((ge .* Ee) + (gi .* Ei) + I);
if strfind (options, '-s'),
clf; shine; hold on; plot_tree (intree, syn(:, 1)); colorbar;
L (1) = pointer_tree (intree, find (ge ~= 0), [], [0 1 0], [], '-l');
L (2) = pointer_tree (intree, find (gi ~= 0), [], [1 0 0], [], '-l');
legend (L, {'exc', 'inh'});
set (L, 'facealpha', .5);
title ('potential distribution [mV]');
xlabel ('x [\mum]'); ylabel ('y [\mum]'); zlabel ('z [\mum]');
view(3); grid on; axis image;
end