Skip to main content

saveNeuralControlPersonalizationResults.m


function saveNeuralControlPersonalizationResults(synergyWeights, ...
synergyCommands, activations, moments, inputs, resultsDirectory, ...
precalInputs)
if ~exist(resultsDirectory, "dir")
mkdir(resultsDirectory);
end
if ~exist(fullfile(resultsDirectory, "combinedMuscleActivations"))
mkdir(fullfile(resultsDirectory, "combinedMuscleActivations"))
end
if ~exist(fullfile(resultsDirectory, "modelMoments"))
mkdir(fullfile(resultsDirectory, "modelMoments"))
end
writeToSto( ...
inputs.muscleTendonColumnNames, ...
1:size(synergyWeights, 1), ...
synergyWeights, ...
fullfile(resultsDirectory, "synergyWeights.sto"));
commandColumns = [];
for i = 1 : size(synergyWeights, 1)
commandColumns = [commandColumns convertCharsToStrings(num2str(i))];
end
for i = 1 : size(synergyCommands, 1)
writeToSto( ...
commandColumns, ...
inputs.time(i, :), ...
squeeze(synergyCommands(i, :, :)), ...
fullfile( ...
resultsDirectory, ...
inputs.prefixes(i) + "_synergyCommands.sto" ...
) ...
)
tempActivations = permute(activations(i, :, :), [3 1 2]);
writeToSto( ...
inputs.muscleTendonColumnNames, ...
inputs.time(i, :), ...
tempActivations, ...
fullfile( ...
resultsDirectory, ...
"combinedMuscleActivations", ...
inputs.prefixes(i) + "_combinedActivations.sto" ...
) ...
)
tempMoments = permute(moments(i, :, :), [3 1 2]);
momentColumns = inputs.coordinateNames;
model = Model(inputs.model);
for j = 1:length(momentColumns)
if strcmpi(model.getCoordinateSet.get(momentColumns(j)).getMotionType.toString.toCharArray', 'Rotational')
momentColumns(j) = momentColumns(j) + "_moment";
else
momentColumns(j) = momentColumns(j) + "_force";
end
end
writeToSto( ...
momentColumns, ...
inputs.time(i, :), ...
tempMoments, ...
fullfile( ...
resultsDirectory, ...
"modelMoments", ...
inputs.prefixes(i) + "_modeledMoments.sto" ...
) ...
)
end
if isstruct(precalInputs)
writeNeuralControlPersonalizationOsimxFile(inputs, ...
resultsDirectory, precalInputs)
end
end