% EUCL_TREE Euclidean distances of all nodes of a tree to a point.
% (trees package)
%
% eucl = eucl_tree (intree, point, options)
% -----------------------------------------
%
% returns the euclidean (as the bird flies) distance between all points on
% the tree and the root or any other point.
%
% Input
% -----
% - intree::integer:index of tree in trees or structured tree
% alternatively, intree can be a Nx3 matrix XYZ of points
% - point::XYZ 3-tupel horizontal: XYZ coordinates of reference point or
% node index {DEFAULT: root, i.e. index 1}
% - options::string: {DEFAULT: ''}
% '-s' : show
%
% Output
% ------
% eucl::Nx1 vector: euclidean distance values for each node
%
% Example
% -------
% eucl_tree (sample_tree, [], '-s')
%
% See also Pvec_tree len_tree
% Uses ver_tree X Y Z
%
% the TREES toolbox: edit, visualize and analyze neuronal trees
% Copyright (C) 2009 Hermann Cuntz
function eucl = eucl_tree (intree, point, options)
% trees : contains the tree structures in the trees package
global trees
if (nargin < 1)||isempty(intree),
intree = length(trees); % {DEFAULT tree: last tree in trees cell array}
end;
if (nargin < 3)||isempty(options),
options = ''; % {DEFAULT: no option}
end
% use only node position for this function
if isnumeric(intree) && numel(intree)>1,
X = intree (:, 1);
Y = intree (:, 2);
Z = intree (:, 3);
else
ver_tree (intree); % verify that input is a tree structure
if ~isstruct (intree),
X = trees {intree}.X;
Y = trees {intree}.Y;
if isempty (strfind (options, '-2d')),
Z = trees {intree}.Z;
end
else
X = intree.X;
Y = intree.Y;
if isempty (strfind (options, '-2d')),
Z = intree.Z;
end
end
end
if (nargin <2)||isempty(point),
point = 1; % {DEFAULT: comparison point is the root}
end
if numel (point) == 1,
point = [X(point) Y(point) Z(point)]; % coordinates for selected node
end
if isempty (strfind (options, '-2d')), % 3D option
eucl = sqrt((X - point(1)).^2+ (Y - point(2)).^2 + (Z - point(3)).^2);
else
eucl = sqrt((X - point(1)).^2+ (Y - point(2)).^2);
end
if strfind (options, '-s'), % show option
clf; hold on; shine; plot_tree (intree, eucl); colorbar;
title ('euclidean distance [\mum]');
xlabel ('x [\mum]'); ylabel ('y [\mum]'); zlabel ('z [\mum]');
view(2); grid on; axis image;
end