function [calculatedSoundVelocity] = calculateSoundVelocity(pTemperature, pPressure, pMethod, pSoundSource)
%CALCULATESOUNDVELOCITY Calculates the sound velocity based on the given values.
%   Parameters:
%       pTemperature    The temperature array.
%       pPressure       The pressure array.
%       pMethod         The chosen method. Available methods are:
%                       del grosso
%                       linear
%                       soundsource
%       pSoundSource    The sound source data. Only required if pMethod is
%                       set to soundsource.
%
%   Returns:
%       The calculated sound velocity in m/s.

switch lower(pMethod) % del grosso is default
    case 'linear'
        indices = (pTemperature > 0 & pTemperature < 20);
        meanTemperature = mean(pTemperature(indices));
        if meanTemperature > 0
            calculatedSoundVelocity = (meanTemperature - 7) * 0.0011 + 1490;
        else
            calculatedSoundVelocity = 1490;
        end
        clear indices;
    case 'soundsource'
        calculatedSoundVelocity = pSoundSource.sound_speed;
    otherwise
        calculatedSoundVelocity = artoa.vendor.oceanstoolbox.sndspd( ...
            35, mean(pTemperature(~isnan(pTemperature))), mean(pPressure(~isnan(pPressure))), 'del grosso' ...
        );
end

end

