% This function is part of the NMSM Pipeline, see file for full license.
%
% (Array of number, struct) -> (Array of number)
% returns the cost for all rounds of the Muscle Tendon optimization
function cost = calcNormalizedFiberLengthDeviationCost(modeledValues, ...
experimentalData, costTerm)
errorCenter = valueOrAlternate(costTerm, "errorCenter", 0);
maximumAllowableError = valueOrAlternate(costTerm, "maxAllowableError", 0.1);
normalizedFiberLengthMagnitudeDeviation = calcMagnitudeDeviations( ...
modeledValues.normalizedFiberLength, ...
experimentalData.normalizedFiberLength);
normalizedFiberLengthMagnitudeDeviationCost = calcDeviationCostTerm( ...
normalizedFiberLengthMagnitudeDeviation, errorCenter, ...
maximumAllowableError);
normalizedFiberLengthShapeDeviation = calcShapeDeviations( ...
modeledValues.normalizedFiberLength, ...
experimentalData.normalizedFiberLength);
normalizedFiberLengthShapeDeviationCost = calcDeviationCostTerm( ...
normalizedFiberLengthShapeDeviation, errorCenter, ...
maximumAllowableError);
cost = normalizedFiberLengthMagnitudeDeviationCost + ...
normalizedFiberLengthShapeDeviationCost;
end