function varargout = exp_mclachlan2021(varargin)
%EXP_MCLACHLAN2021 Results from McLachlan et al. (2021)
% Usage: data = exp_mclachlan2021(flag)
%
% EXP_MCLACHLAN2021(flag) reproduces figures of the study from
% McLachlan et al. (2021).
%
% The following flags can be specified
%
% 'fig6' Reproduce Fig.6
%
% 'fig7a' Reproduce Fig.7a
%
% 'fig7b' Reproduce Fig.7b
%
% 'fig7c' Reproduce Fig.7c
%
% Examples:
% ---------
%
% To display Fig.6 use :
%
% exp_mclachlan2021('fig6');
%
% To display Fig.7a use :
%
% exp_mclachlan2021('fig7a');
%
% To display Fig.7b use :
%
% exp_mclachlan2021('fig7b');
%
% To display Fig.7c use :
%
% exp_mclachlan2021('fig7c');
%
%
% See also: mclachlan2021
%
% References:
% G. McLachlan, P. Majdak, J. Reijniers, and H. Peremans. Towards
% modelling active dynamic sound localisation based on Bayesian
% inference. Acta Acustica, 2021.
%
%
% Url: http://amtoolbox.org/amt-1.3.0/doc/experiments/exp_mclachlan2021.php
%% ------ Check input options ---------------------------------------------
definput.import = {'amt_cache'};
definput.keyvals.MarkerSize = 6;
definput.keyvals.FontSize = 12;
definput.flags.type = {'missingflag','fig6','fig7a',...
'fig7b','fig7c'};
definput.flags.plot = {'plot', 'no_plot'};
definput.flags.plot_type = {'interp','scatter'};
[flags,kv] = ltfatarghelper({},definput,varargin);
if flags.do_missingflag
flagnames=[sprintf('%s, ',definput.flags.type{2:end-2}),...
sprintf('%s or %s',definput.flags.type{end-1},...
definput.flags.type{end})];
error('%s: You must specify one of the following flags: %s.', ...
upper(mfilename),flagnames);
end
%% Get listener's data
SOFA_obj = SOFAload(fullfile(SOFAdbPath,'mclachlan2021', ...
'HRIR_L2354.sofa'));
%% Run model
fig = [];
% Preprocessing
[template, target] = ...
mclachlan2021_preproc(SOFA_obj,flags.type);
[fig.doa, fig.params] = ...
mclachlan2021(template, target, flags.type);
%amt_cache('set','fig',fig); % save model output in cache
if flags.do_plot
mclachlan2021_metrics(fig.doa,'polar');
met = mclachlan2021_metrics(fig.doa, 'fbc');
else
met = mclachlan2021_metrics(fig.doa);
end
% Calcualte performance measures
amt_disp('------------------------')
amt_disp('Performance Predictions:')
amt_disp('------------------------')
met.entropy = mean(fig.params.entropy);
met.information = mean(fig.params.information);
%amt_disp(sprintf('Lateral accuracy: %0.2fdeg', met.accL))
amt_disp(sprintf('Lateral RMS: %0.2f', met.rmsL))
%amt_disp(sprintf('Elevation accuracy: %0.2fdeg', met.accE))
amt_disp(sprintf('Polar RMS: %0.2f', met.rmsP))
%amt_disp(sprintf('Quadrant error: %0.6f%%',met.querr))
amt_disp(sprintf('Mean entropy: %0.2fbits', met.entropy))
amt_disp('------------------------')