--- a +++ b/manuscript_material/a_sensitivityStudy_Example1.m @@ -0,0 +1,99 @@ +%-------------------------------------------------------------------------% +% Copyright (c) 2019 Modenese L., Ceseracciu, E., Reggiani M., Lloyd, D.G.% +% % +% 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, August 2014 % +% revised for paper May 2015 % +% email: l.modenese@imperial.ac.uk % +% ----------------------------------------------------------------------- % +% +% Script optimizing muscle parameters for the Example 1 described in +% Modenese L, Ceseracciu E, Reggiani M, Lloyd DG (2015). "Estimation of +% musculotendon parameters for scaled and subject specific musculoskeletal +% models using an optimization technique" Journal of Biomechanics (submitted) +% The script performes a sensitivity study from which the Figures of the +% papers are then produced. +% The script: +% 1) optimizes muscle parameters varying the number of points used in the +% optimization from 5 to 15 per degree of freedom. Optimized models and +% optimization log are saved in the folder "Example1>OptimModels" +% 2) evaluates the results of the optimization in terms of muscle +% parameters variation and muscle mapping metrics (and saves structures +% summarizing the results in the folder "Example1>Results" + +clear;clc;close all +% importing OpenSim libraries +import org.opensim.modeling.* +% importing muscle optimizer's functions +addpath(genpath('./Functions_MusOptTool')) + + +%========= USERS SETTINGS ======= +% select case to simulate: 1 or 2 +example_nr = 1; +% evaluations +N_eval_set = 5:15; +%================================ + + +%=========== INITIALIZING FOLDERS AND FILES ============= +% getting example details +[case_id, osimModel_ref_file, osimModel_targ_file] = getExampleInfo(example_nr); +% folders used by the script +refModel_folder = ['./',case_id,'/MSK_Models']; +targModel_folder = refModel_folder; +OptimizedModel_folder = ['./',case_id,'/OptimModels'];% folder for storing optimized model +Results_folder = ['./',case_id,'/Results']; +log_folder = OptimizedModel_folder; +checkFolder(OptimizedModel_folder);% creates results folder is not existing +checkFolder(Results_folder); +% model files with paths +osimModel_ref_filepath = fullfile(refModel_folder,osimModel_ref_file); +osimModel_targ_filepath = fullfile(targModel_folder,osimModel_targ_file); + +% reference model for calculating results metrics +osimModel_ref = Model(osimModel_ref_filepath); + + +for N_eval = N_eval_set; + + %====== MUSCLE OPTIMIZER ======== + % optimizing target model based on reference model fro N_eval points per + % degree of freedom + [osimModel_opt, SimsInfo{N_eval}] = optimMuscleParams(osimModel_ref_filepath, osimModel_targ_filepath, N_eval, log_folder); + + %====== PRINTING OPT MODEL ======= + % setting the output folder + if strcmp(OptimizedModel_folder,'') || isempty(OptimizedModel_folder) + OptimizedModel_folder = targModel_folder; + end + % printing the optimized model + osimModel_opt.print(fullfile(OptimizedModel_folder, char(osimModel_opt.getName()))); + + %====== SAVING RESULTS =========== + % variation in muscle parameters + Results_MusVarMetrics = assessMuscleParamVar(osimModel_ref, osimModel_opt, N_eval); + % assess muscle mapping (RMSE, max error, etc) at n_Metrics points + % between reference and optimized model + n_Metrics = 10; + Results_MusMapMetrics = assessMuscleMapping(osimModel_ref, osimModel_opt,N_eval, n_Metrics); + % move results mat file to result folder + movefile('./*.mat',Results_folder) +end + +% save simulations infos +save([Results_folder,'./SimsInfo'],'SimsInfo'); + +% removing functions from path +rmpath(genpath('./Functions_MusOptTool')); + \ No newline at end of file