summaryrefslogtreecommitdiff
path: root/graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m')
-rw-r--r--graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m147
1 files changed, 147 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m b/graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m
new file mode 100644
index 0000000000..f1195fc933
--- /dev/null
+++ b/graphics/pstricks/contrib/numericplots/MatlabFunctions/dspace2struct.m
@@ -0,0 +1,147 @@
+function dat = dspace2struct(filename,version,alternative_struct_name)
+% ------------------------------------------------
+% dat = dspace2struct(dspacename,version)
+% Function to export dSPACE-mat-file to Matlab struct.
+% The fieldnames of the struct are the same as the dSPACE-signalnames.
+% ------------------------------------------------
+% Output:
+% dat ... matlab struct
+%
+% Input:
+% filename ... (optional) .mat-File generated by dSPACE (string) (
+% version ... (optional) version = 'NG' if using dSpace Next Genertion
+% alternative_struct_name ...(optional) needed if structname is different
+% from filename. Often caused by renaming .mat
+% files after saving.
+%
+% author: Alexander Michel
+% date: 2010/08/09
+%
+% changes: - 2011/06/29 Alexander Michel: - customized for dSpace Next
+% Generation data structure
+% - 2011/07/29 Alexander Michel: - GUI added when no file is
+% provided
+% - Path can be provided
+% - 2012/05/02 Alexander Michel: - Bug fixing for dSpace NG naming
+% of calculations
+% - Multiple XData for dSpace NG
+% added
+% - 2013/06/17 Alexander Michel: - Array out for dSpace NG support
+% added
+% - 2013/07/11 Alexander Michel: - alternative structname support
+%
+% Copyright 2012 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/>.
+
+if(nargin<1 || strcmp(filename,''))
+ [fname datapath] = uigetfile('*.mat','choose .mat-file generated by dSPACE');
+ filename = fullfile(datapath, fname);
+ if isequal(fname,0) || isequal(datapath,0)
+ disp('User pressed cancel')
+ return;
+ else
+ disp(['User selected ', filename])
+ end
+end
+
+if(isempty(strfind(filename,'\')))
+ idx1name = 1;
+else
+ idxes = strfind(filename,'\');
+ idx1name = idxes(end)+1;
+end
+
+if(nargin>2)
+ dspacename = alternative_struct_name;
+else
+ if(isempty(strfind(filename,'.mat')))
+ dspacename = filename(idx1name:end);
+ else
+ dspacename = filename(idx1name:end-4);
+ end
+end
+
+
+if(nargin<2)
+ version = 'OG';
+end
+
+load(filename);
+
+dspace = eval(genvarname(dspacename));
+if(strcmp(version,'NG'))
+ for ii = 1:length(dspace.X)
+ dat.time{ii} = dspace.X(ii).Data;
+ end
+else
+ dat.time = dspace.X.Data;
+end
+validx = [];
+for ii = 1:length(dspace.Y)
+ if(strcmp(version,'NG'))
+ if(isempty(dspace.Y(ii).Path))
+ newfieldname = dspace.Y(ii).Name;
+ else
+ stridx = strfind(dspace.Y(ii).Path,'/');
+ newfieldname = dspace.Y(ii).Path(stridx(end)+1:end);
+ end
+ else
+ stridx = strfind(dspace.Y(ii).Name,'"');
+ lastname = dspace.Y(ii).Name(stridx(end-1)+1:stridx(end)-1);
+ stridxM1 = strfind(lastname,'[');
+ if(~isempty(stridxM1))
+ stridxM2 = strfind(lastname,']');
+ if(~isempty(stridxM2))
+ validx = sscanf(lastname(stridxM1:stridxM2),'[%i,%i]');
+ possiblefieldname = lastname(1:stridxM1-1);
+ end
+ else
+ possiblefieldname = lastname;
+ end
+ if(isempty(strfind(possiblefieldname,'In1')) && isempty(strfind(possiblefieldname,'Out1')))
+ newfieldname = possiblefieldname;
+ else
+ newfieldname = dspace.Y(ii).Name(stridx(end-3)+1:stridx(end-2)-1);
+ end
+ end
+ if(isvarname(newfieldname) == 0)
+ newfieldname = newfieldname(isstrprop(newfieldname,'alphanum'));
+ if(isvarname(newfieldname) == 0)
+ newfieldname = newfieldname(2:end);
+ end
+ end
+ if(strcmp(version,'NG'))
+ if(isfield(dat,newfieldname))
+ dat.(newfieldname).Data = [dat.(newfieldname).Data; dspace.Y(ii).Data];
+ else
+ dat.(newfieldname).Data = dspace.Y(ii).Data;
+ end
+ dat.(newfieldname).timeidx = dspace.Y(ii).XIndex;
+ else
+ if(isempty(validx))
+ dat.(newfieldname) = dspace.Y(ii).Data;
+ else
+ dat.(newfieldname){validx(2)} = dspace.Y(ii).Data;
+ validx = [];
+ end
+ end
+end
+if(~strcmp(version,'NG'));
+ dat.dSPACESettings.Capture = dspace.Capture;
+ dat.dSPACESettings.Description = dspace.Description;
+ dat.dSPACESettings.RTProgram = dspace.RTProgram;
+end