


A function to concatenate data contained within a structure.
does something like cat(1,data(:).*);
function all_data = concat_by_struct(in_struct,last)
DESCRIPTION:
Concatenates data contained within a structure. It only works on the first dimension unless
logical variable "last" is set to true.
INPUT
in_struct = Structured variable with dimension such as
in_struct(1:10).data1, in_struct(1:10).data2...
last = logical variable. Enable to work on last dimension only
OUTPUT:
all_data = struct with first dimension removed.
EXAMPLE USAGE
all_data = concat_by_struct(in_struct,true)
Author(s):
Ricardo Torres (Plymouth Marine Laboratory)
Revision history
2018-03-22 First version in fvcom-toolbox.
==============================================================================

0001 function all_data = concat_by_struct(in_struct,last) 0002 0003 % A function to concatenate data contained within a structure. 0004 % does something like cat(1,data(:).*); 0005 % function all_data = concat_by_struct(in_struct,last) 0006 % 0007 % DESCRIPTION: 0008 % Concatenates data contained within a structure. It only works on the first dimension unless 0009 % logical variable "last" is set to true. 0010 % 0011 % INPUT 0012 % in_struct = Structured variable with dimension such as 0013 % in_struct(1:10).data1, in_struct(1:10).data2... 0014 % last = logical variable. Enable to work on last dimension only 0015 % 0016 % OUTPUT: 0017 % all_data = struct with first dimension removed. 0018 % 0019 % EXAMPLE USAGE 0020 % all_data = concat_by_struct(in_struct,true) 0021 % 0022 % Author(s): 0023 % Ricardo Torres (Plymouth Marine Laboratory) 0024 % 0025 % Revision history 0026 % 0027 % 2018-03-22 First version in fvcom-toolbox. 0028 % 0029 %============================================================================== 0030 0031 subname = mfilename; 0032 global ftbverbose 0033 if ftbverbose 0034 fprintf('\nbegin : %s \n', subname) 0035 end 0036 0037 vars = fieldnames(in_struct); 0038 maxl=1;sizes=1; 0039 for kk = 1:size(vars,1) 0040 % find largest record 0041 eval(['xyz=size(in_struct(1).',char(vars(kk)) ');']) 0042 sizes=[sizes;xyz(:)];; 0043 end 0044 0045 for kk = 1:size(vars,1) 0046 if eval(['isstruct(in_struct(1).' char(vars(kk)) ')']) 0047 in_vars = fieldnames(in_struct); 0048 eval(['all_data.' char(vars(kk)) ' = concat_by_struct([in_struct.' char(vars(kk)) '],last);']); 0049 else 0050 eval(['xyz=ndims(in_struct(1).',char(vars(kk)) ');']) 0051 if last % If concatenating on the last dimension 0052 0053 eval(['all_data.' char(vars(kk)) ' = cat(xyz,in_struct(:).' char(vars(kk)) ');']); 0054 else % concatenate on the first dimension 0055 eval(['all_data.' char(vars(kk)) ' = cat(1,in_struct(:).' char(vars(kk)) ');']); 0056 end 0057 end 0058 end 0059 0060 if ftbverbose 0061 fprintf('end : %s\n', subname) 0062 end