Diff of /MATLAB/private/Mat2sto.m [000000] .. [b87f69]

Switch to side-by-side view

--- a
+++ b/MATLAB/private/Mat2sto.m
@@ -0,0 +1,95 @@
+%-------------------------------------------------------------------------%
+% Copyright (c) 2019 Modenese L.                                          %
+%                                                                         %
+% Licensed under the Apache License, Version 2.0 (the "License");         %
+% you may not use this file except in compliance with the License.        %
+% You may obtain a copy of the License at                                 %
+% http://www.apache.org/licenses/LICENSE-2.0.                             %
+%                                                                         % 
+% Unless required by applicable law or agreed to in writing, software     %
+% distributed under the License is distributed on an "AS IS" BASIS,       %
+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or         %
+% implied. See the License for the specific language governing            %
+% permissions and limitations under the License.                          %
+%                                                                         %
+%    Author:   Luca Modenese                                              %
+%    email:    l.modenese@imperial.ac.uk                                  % 
+% ----------------------------------------------------------------------- %
+% This script writes an OpenSim storage file using a Matlab structure as
+% input.
+%
+% INPUTS:
+%       - MatStruct: matlab structure with the following fields:
+%               a) MatStruct.colheaders: cell array of headers of the
+%                                           .sto file.
+%               b) MatStruct.data: matrix containing the data that
+%                                        will be printed in the .sto file.
+%
+%       - sto_file: a string with the name (and path) of the .sto file to print.
+%
+%       - str_data_description: a string that described the data. It will
+%               be included in the file in a sentence starting with: 
+%                "This file contains..."
+%
+% OUTPUT:
+%       - sto file at the specified path.
+%
+% ----------------------------------------------------------------------- %
+function Mat2sto(MatStruct, sto_file, str_data_description)
+
+% check on the data structure
+if ~isfield(MatStruct,'data') || ~isfield(MatStruct,'colheaders') 
+    error(['The function writeStorageFile needs as input a dataStruct with fields ''colheaders'' and ''data''.',...
+        'The number of columns of DataStruct.data has to equalize the number of headers.']);
+end
+
+% defines local variables and their size
+colheaders  = MatStruct.colheaders;
+data        = MatStruct.data;
+
+% sizes of data
+[N_rows, N_columns] = size(data);
+
+% check on consistency of the structure data
+if size(colheaders,2)~=N_columns
+    error('The number of column headers is not consistent with the number of data rows.')
+end
+
+% file name
+[~,name,ext] = fileparts(sto_file);
+sto_file_name = [name,ext];
+
+% open file
+fid = fopen(sto_file,'w');
+
+% % Write Header
+fprintf(fid,'%s\n',sto_file_name);
+fprintf(fid,'%s\n','version=1');
+fprintf(fid,'%s\n',['nRows=',num2str(N_rows)]);
+fprintf(fid,'%s\n',['nColumns=',num2str(N_columns)]);
+fprintf(fid,'%s\n','inDegrees=no');
+fprintf(fid,'\n');
+fprintf(fid,'%s\n',['This file contains ',str_data_description, '.']);
+fprintf(fid,'\n');
+fprintf(fid,'%s\n','endheader');
+
+% writing the column headers while generating the format for printing the
+% data
+format_string ='';
+for n_headers = 1:N_columns
+    if n_headers == N_columns
+        % prints header
+        fprintf(fid,'%s\n',colheaders{N_columns});
+        % builds up format string
+        format_string = [format_string,'%-14.14f\n']; %#ok<*AGROW>
+    else
+        fprintf(fid,'%s\t', colheaders{n_headers});
+        format_string = [format_string,'%-14.14f\t'];
+    end
+end
+
+% writing the data in OpenSim format
+fprintf(fid, format_string, data');
+fclose all;
+
+end
\ No newline at end of file