Added source Matlab code for reference
This commit is contained in:
parent
b8af977117
commit
b5d99903d2
186 changed files with 61405 additions and 1 deletions
133
matlab/graph/@phyTree/getNewickStr.m
Normal file
133
matlab/graph/@phyTree/getNewickStr.m
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
function str = getnewickstr(tr,varargin)
|
||||
%GETNEWICKSTR creates a NEWICK formatted string.
|
||||
%
|
||||
% STR = GETNEWICKSTR(TREE) returns the NEWICK formatted string of the
|
||||
% phylogenetic tree object TREE.
|
||||
%
|
||||
% GETNEWICKSTR(...,'DISTANCES',false) excludes the distances from the
|
||||
% output. Default is true.
|
||||
%
|
||||
% GETNEWICKSTR(...,'BRANCHNAMES',true) includes the branch names into the
|
||||
% output. Default is false.
|
||||
%
|
||||
% The NEWICK tree format is found at:
|
||||
% http://evolution.genetics.washington.edu/phylip/newicktree.html
|
||||
%
|
||||
% Example:
|
||||
%
|
||||
% seqs = int2nt(ceil(rand(10)*4)); % some random sequences
|
||||
% dist = seqpdist(seqs,'alpha','nt'); % pairwise distances
|
||||
% tree = seqlinkage(dist); % construct phylogenetic tree
|
||||
% str = getnewickstr(tree) % get the NEWICK string
|
||||
%
|
||||
% See also PHYTREE, PHYTREEREAD, PHYTREEWRITE, PHYTREETOOL, SEQLINKAGE,
|
||||
% PHYTREE/GET, PHYTREE/GETBYNAME, PHYTREE/GETCANONICAL.
|
||||
|
||||
% Undocumented:
|
||||
% GETSTR(...,'MULTILINE',true) introduces 'new line' characters for a
|
||||
% multi-line output. This option is used by PHYTREEWRITE. Default is
|
||||
% false.
|
||||
|
||||
% Copyright 2003-2005 The MathWorks, Inc.
|
||||
% $Revision: 1.1.8.1 $ $Author: batserve $ $Date: 2005/06/09 21:55:57 $
|
||||
|
||||
if numel(tr)~=1
|
||||
error('Bioinfo:phytree:getstr:NoMultielementArrays',...
|
||||
'Phylogenetic tree must be an 1-by-1 object.');
|
||||
end
|
||||
|
||||
numBranches = size(tr.tree,1);
|
||||
numLeaves = numBranches + 1;
|
||||
numLabels = numBranches + numLeaves;
|
||||
|
||||
% set defaults
|
||||
writeDistances = true;
|
||||
writeBranchNames = false;
|
||||
multiLine = false;
|
||||
|
||||
nvarargin = numel(varargin);
|
||||
if nvarargin
|
||||
if rem(nvarargin,2)
|
||||
error('Bioinfo:phytree:getstr:IncorrectNumberOfArguments',...
|
||||
'Incorrect number of arguments to %s.',mfilename);
|
||||
end
|
||||
okargs = {'multiline','distances','branchnames'};
|
||||
for j=1:2:nvarargin
|
||||
pname = varargin{j};
|
||||
pval = varargin{j+1};
|
||||
k = find(strncmpi(pname,okargs,numel(pname)));
|
||||
if isempty(k)
|
||||
error('Bioinfo:phytree:getstr:UnknownParameterName',...
|
||||
'Unknown parameter name: %s.',pname);
|
||||
elseif length(k)>1
|
||||
error('Bioinfo:AmbiguousParameterName',...
|
||||
'Ambiguous parameter name: %s.',pname);
|
||||
else
|
||||
switch(k)
|
||||
case 1 % multi-lines
|
||||
multiLine = opttf(pval);
|
||||
if isempty(multiLine)
|
||||
error('Bioinfo:phytree:getstr:multiLineOptionNotLogical',...
|
||||
'%s must be a logical value, true or false.',...
|
||||
upper(char(okargs(k))));
|
||||
end
|
||||
case 2 % write distances
|
||||
writeDistances = opttf(pval);
|
||||
if isempty(writeDistances)
|
||||
error('Bioinfo:phytree:getstr:writeDistancesOptionNotLogical',...
|
||||
'%s must be a logical value, true or false.',...
|
||||
upper(char(okargs(k))));
|
||||
end
|
||||
case 3 % write branch names
|
||||
writeBranchNames = opttf(pval);
|
||||
if isempty(writeBranchNames)
|
||||
error('Bioinfo:phytree:getstr:writeBranchNamesOptionNotLogical',...
|
||||
'%s must be a logical value, true or false.',...
|
||||
upper(char(okargs(k))));
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i=1:numLabels-1;
|
||||
if (i<=numLeaves || writeBranchNames)
|
||||
if writeDistances
|
||||
namedist{i} = [tr.names{i} ':' num2str(tr.dist(i))]; %#ok
|
||||
else
|
||||
namedist{i} = tr.names{i};
|
||||
end
|
||||
elseif writeDistances && ~writeBranchNames
|
||||
namedist{i} = [':' num2str(tr.dist(i))]; %#ok
|
||||
else
|
||||
namedist{i} = '';
|
||||
end
|
||||
end
|
||||
|
||||
if writeBranchNames
|
||||
namedist{numLabels} = [tr.names{numLabels} ';'];
|
||||
else
|
||||
namedist{numLabels} = ';';
|
||||
end
|
||||
|
||||
for i=1:numBranches
|
||||
if tr.tree(i,1) > numLeaves
|
||||
t1 = branchstr{tr.tree(i,1)};
|
||||
else
|
||||
t1 = namedist{tr.tree(i,1)};
|
||||
end
|
||||
if tr.tree(i,2) > numLeaves
|
||||
t2 = branchstr{tr.tree(i,2)};
|
||||
else
|
||||
t2 = namedist{tr.tree(i,2)};
|
||||
end
|
||||
branchstr{i+numLeaves} = ...
|
||||
[ '(\n' t1 ',\n' t2 ')\n' , namedist{i+numLeaves} ]; %#ok
|
||||
end
|
||||
|
||||
str = sprintf(branchstr{numLabels});
|
||||
|
||||
if ~multiLine
|
||||
str = strrep(str,sprintf('\n'),'');
|
||||
end
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue