function NewField = concatstruct(OldField1,OldField2); name1=fieldnames(OldField1); name2=fieldnames(OldField2); if size(name1,1) ~= size(name2,1) disp('The 2 structures must have the same number of fields') NewField=[]; return end NewField=[]; for i=1:size(name1,1) if char(name1(i)) == char(name2(i)) nameloc = char(name1(i)); disp(['Field : ',nameloc]) %size(getfield(OldField1,nameloc)); if strcmp(nameloc,'T') disp([' concatenating, 1d']) NewField=setfield(NewField,nameloc, ... cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); elseif strcmp(nameloc,'iter') disp([' concatenating, 1d']) NewField=setfield(NewField,nameloc, ... cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); elseif ( strcmp(nameloc,'iters_read_from_file') | strcmp(nameloc,'iters_from_file') ) disp([' concatenating, 1d']) NewField=setfield(NewField,nameloc, ... cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); elseif ndims(getfield(OldField2,nameloc)) == 4 disp([' concatenating, 4d']) NewField=setfield(NewField,nameloc, ... cat(4,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); elseif ndims(getfield(OldField2,nameloc)) == 3 if length(getfield(OldField2,'iters_from_file')) == 1 disp([' concatenating, 4d']) NewField=setfield(NewField,nameloc, ... cat(4,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); else disp([' concatenating, 3d']) NewField=setfield(NewField,nameloc, ... cat(3,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); end elseif ndims(getfield(OldField2,nameloc)) == 2 disp([' concatenating, 2d']) NewField=setfield(NewField,nameloc, ... cat(3,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); % elseif strcmp(nameloc,'iters_from_file') % disp([' concatenating, 1d']) % NewField=setfield(NewField,nameloc, ... % cat(1,getfield(OldField1,nameloc),getfield(OldField2,nameloc))); else disp([' replacing']) NewField=setfield(NewField,nameloc,getfield(OldField1,nameloc)); end end end return