function el_bias_study( eval_detloc_filename, i_array, figure_output_dir )

  if nargin < 3
    error( [ mfilename ' needs 3 input argument.' ] );
  end
  
  array_name = sprintf( ' (array #%d)', i_array );

  array_filename = sprintf( '-array_%d', i_array );

  % Load the error of the estimated elevation

  load( eval_detloc_filename, 'eval_result' );

  for i_list = 1:numel( eval_result.list )

    recording_name = eval_result.list( i_list ).name;

    % Error of the estimated elevation of the speaker's mouth relative to the microphone array,
    % converted from radians to degrees.
    %
    % ("restricted" means only frames where we have the GT location for ALL speakers,
    % for more details see "eval_detloc.m" and/or IDIAP RR 06-26)
    
    el_error    = eval_result.list( i_list ).restricted.el_error / pi * 180;   
    
    % True elevation of the speaker's mouth relative to the microphone array,
    % converted from radians to degrees.
    
    true_el = eval_result.list( i_list ).gt.person( 1 ).interp_sph( 4, eval_result.list( i_list ).restricted.gt_frame_ind ) / pi * 180;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    % Now let's look at the dependency of el error on true el
    hfig = figure; 
    v = [ 0  max( true_el ) ];
    h_plot = plot( v(1:2), [ 0 0],'--','color', [ 0.5 0.5 0.5 ]);
    hold on;
    h_plot2 = plot( true_el, el_error, 'k.' );
    set( gca, 'fontsize', 20 );
    
    xlabel( 'ground-truth mouth elevation (degrees)' );
    ylabel( 'estimated mouth elevation (degrees)' );
    
    legend( [ h_plot  h_plot2 ], 'ideal', 'result' );

    % Write out ".eps" file for this figure
    out_filename = fullfile( figure_output_dir, [ mfilename '-' recording_name array_filename '-raw-bw.eps' ] );
    print( hfig, '-depsc2', out_filename );
    disp( [ mfilename ' wrote out "' out_filename '".' ] );
    title( strrep( [ recording_name  array_name ] , '_', '\_' ) );
    
    % Means may show it more clearly
    u_true_el   = unique( true_el );
    n_u_true_el = numel( u_true_el );
    
    bias    = repmat( NaN, 1, n_u_true_el );
    std_dev = repmat( NaN, 1, n_u_true_el );
    
    for n = 1:n_u_true_el
      
      ind = find( abs( true_el - u_true_el( n ) ) < 10 * eps );
      
      bias( n )    = mean( el_error( ind ) );
      std_dev( n ) = std( el_error( ind ) );
      
    end 
    
    % Plot it
    hfig = figure; 
    h = errorbar( u_true_el, bias, std_dev, 'k.' ); set( h, 'markersize', 20 ); 
    v = axis; v(1) = 0; axis( v );
    
    % Draw the line corresponding to the "no error" case
    hold on; h_plot = plot( v(1:2), [ 0 0],'--','color', [ 0.5 0.5 0.5 ]);
    set( gca, 'fontsize', 20 );
    
    % Make sure results are on top
    errorbar( u_true_el, bias, std_dev, 'k.' ); set( h, 'markersize', 20 );
    
    % Annotate the graph
    xlabel( 'ground-truth mouth elevation (degrees)' );
    ylabel( 'error of the estimated mouth elevation (degrees)' );
    
    legend( [ h_plot, h( 2 ), h( 1 ) ], 'ideal', 'bias', 'std dev' );
    title( strrep( [ recording_name array_name ], '_', '\_' ) );
    
    % Write out ".eps" file for this figure
    out_filename = fullfile( figure_output_dir, [ mfilename '-' recording_name array_filename '-bias-std_dev-bw.eps' ] );
    print( hfig, '-depsc2', out_filename );
    disp( [ mfilename ' wrote out "' out_filename '".' ] );
    
  end
  
  
