diff options
Diffstat (limited to 'graphics/pstricks/contrib/numericplots/MatlabFunctions/struct2latex.m')
-rw-r--r-- | graphics/pstricks/contrib/numericplots/MatlabFunctions/struct2latex.m | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/numericplots/MatlabFunctions/struct2latex.m b/graphics/pstricks/contrib/numericplots/MatlabFunctions/struct2latex.m new file mode 100644 index 0000000000..8edb5d543a --- /dev/null +++ b/graphics/pstricks/contrib/numericplots/MatlabFunctions/struct2latex.m @@ -0,0 +1,187 @@ +function num = struct2latex(data,xname,downsample,filtertype,filename,postfix,options) +%------------------------------------------------ +%2010/09/14 version 1.0 +%num = struct2latex(data,xname,downsample,filename,postfix,options) +%Function to export a matlabstruct to a tex-file for using NumericPlots. +%xname, downsample, filename, postfix and options are optional parameters. +%struct2latex is based on the function export2latex. +%------------------------------------------------ +%output: +%num ...number of y-data exported +%input: +%data ...datastruct +%xname ...name of the x-Axis +%downsample ...downsampling factor (optional, default = 1) +%filtertype ...using filtering data {'none','MinMax','Hull'}(optional, default = 'none') +%filename ...name of the tex-file (optional, default io) +%postfix ...postfix for fieldnames in the tex-file (optional, default '') +%options ...options for export2latex (optional) +% + +% author: Alexander Michel +% date: 2010/08/09 +% changed by Alexander Michel: +% 2010/09/14 mapping of column-vectors +% 2010/09/14 postfix option added +% 2012/08/03 filters added +% 2013/06/26 data consistency check added +% 2013/08/09 data consistency check for x-vector dimension added +% bugfixing of mapping of column-vectors +% bugfixing of fnamesExcludelist +% +% Copyright 2010 Thomas König, Alexander Michel +% +% This file is part of NumericPlots. +% +% NumericPlots is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% any later version. +% +% NumericPlots is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with NumericPlots. If not, see <http://www.gnu.org/licenses/>. + + +%choose x-Axis +allfnames = fieldnames(data); +if(nargin<2) + [xnamenum,selected] = listdlg('PromptString','Choose x-Axis:','SelectionMode','single','ListString',allfnames(1:end)); + if (selected==0) + error('No x-Axis chosen!'); + end + xname = allfnames{xnamenum}; +end + +%exclude special fields from export +fnamesExcludelist = {xname,'dSPACESettings'}; +kk = 1; +for ii = 1:length(allfnames) + if(~strcmp(allfnames{ii},fnamesExcludelist)) + fnames{kk} = allfnames{ii}; + kk = kk+1; + end +end + + +% check x data consistency and +% convert to column vectors if necessary +[nor,noc] = size(data.(xname)); +if(nor>1) + if(noc>1) + error('struct2latex supports only vectors as x-vectors'); + else + data.(xname) = data.(xname)'; + end +end + +% check y data consistency and +% convert to column vectors if necessary +for ii = 1:length(fnames) + [nor,noc] = size(data.(fnames{ii})); + if(nor>1) + if(noc>1) + error('struct2latex supports only vectors as y-vectors'); + else + data.(fnames{ii}) = data.(fnames{ii})'; + end + end + if(length(data.(xname))~=length(data.(fnames{ii}))) + error(['Error in ' fnames{ii} '! Only vectors of the same length are supported!']); + end +end + +%downsample +if(nargin<3) + downsample = 1; +end +idx = 1:downsample:length(data.(xname)); + +%downsample +if(nargin<4) + filtertype = 'none'; +end + + +%postfix +if(nargin<6) + postfix = ''; +end + +if(length(idx)>5000) + buttonname = questdlg('Warning! Number of points exceeds 5000! It is recommended to increase the downsampling factor!','Increase the downsampling factor?','Yes','No','Yes'); + switch buttonname + case 'Yes' + dlgoptions.Resize='on'; + dlgoptions.WindowStyle='normal'; + dlgoptions.Interpreter='tex'; + defans{1} = num2str(ceil(length(data.(xname))/5000)); + answer = inputdlg('Downsampling factor','Input Downsampling factor',1,defans,dlgoptions); + downsample = str2num(answer{1}); + idx = 1:downsample:length(data.(xname)); + case 'No' + warning('number of points exceeds 5000'); + end +end + + +% get x-data +xbuffer = data.(xname); +[nor,noc] = size(xbuffer); +if(nor>1) + if(noc>1) + error('struct2latex supports only vectors'); + else + xbuffer = xbuffer'; + end +end + +% get y-data +latexfnames = genlatexnames(fnames); +for ii = 1:length(fnames) + ybuffer = data.(fnames{ii}); + switch(filtertype) + case{'none'} + ydata = ybuffer(idx); + xdata = xbuffer(idx); + case{'MinMax'} + [xdata,ydata] = LatexFilterMinMax(xbuffer,ybuffer,floor(length(idx)/2)); + case{'Hull'} + [xdata,ydata] = LatexFilterHull(xbuffer,ybuffer,floor(length(idx)/2)); + otherwise + ydata = ybuffer(idx); + xdata = xbuffer(idx); + end + texdata(ii).x = xdata; + texdata(ii).y = ydata; + texdata(ii).ident = [latexfnames{ii} postfix]; +end + +if(nargin<4) + [texname,texpname] = uiputfile('*.tex','Save Tex-File as ...','data'); + filename = [texpname texname(1:end-4)]; +end +if(ischar(filename)) + if(exist('options','var')) + export2latex(texdata,filename,options); + else + export2latex(texdata,filename); + end +else + error('no savefile chosen or illegal name'); +end + +% output info +num = length(fnames); +disp([num2str(length(fnames)) ' data sets exported.']); +disp(['x-data name:']); +disp(['''' xname '''']); +disp(['y-data name:']); +for ii=1:length(latexfnames) + fprintf(['''' latexfnames{ii} '''' ' ']); +end +fprintf(['\n']); |