% GET_TEST_OBJECTS_AO returns a set of AOs suitable for many of the UTPs
%
% CALL:   [at1,at2,at3,at4,at5,at6,atvec,atmat] = get_test_objects_ao();
%
% OUTPUTS:
%         at1   - a tsdata AO containing 2 seconds of a 1.23Hz sine wave sampled at 10Hz.
%         at2   - an fsdata AO containing 1000 samples of white noise
%         at3   - an xydata AO containing 100 data samples
%         at4   - a cdata AO containing a 3x3 matrix
%         at5   - a tsdata AO containing 30s of noise at 10Hz           (data-vector = row vector)
%         at6   - a tsdata AO containing 30s of different noise at 10Hz (data-vector = column vector)
%         atvec - a vector of AOs containing [at1 at3 at3]
%         atmat - a matrix of AOs containing [at1 at2 at3; at4 at5 at6]
%
% M Hewitson 06-08-08
%
% $Id: get_test_objects_ao.m,v 1.8 2011/04/01 08:07:25 mauro Exp $
%
function [at1,at2,at3,at4,at5,at6,atvec,atmat] = get_test_objects_ao

  %% Single AO containing a sine wave
  fs  = 10;
  pl1 = plist();
  pl1.append('fs', fs);
  pl1.append('nsecs', 30);
  pl1.append('waveform', 'sine wave');
  pl1.append('f', 1.23);
  pl1.append('phi', 30);
  at1 = ao(pl1);


  % Single AO containing an xydata object
  x = 1:100;
  y = exp(x.^.5/2);
  at3 = ao(x,y, plist('type', 'xydata'));

  %% Single AO with a matrix
  at4 = ao([1 -2 3; 4  5 -6; -7 8  9]);

  %% Single AO with 30s of noise
  at5 = ao(plist('tsfcn', 'randn(size(t))', 'nsecs', 30, 'fs', fs));
  at5.setDy(at5.y*.1);

  %% Single AO with 30s of noise
  at6 = ao(plist('tsfcn', 'randn(size(t)).''', 'nsecs', 30, 'fs', fs));

  %% Single AO containing some fsdata
  at2 = psd(at5);
  at2.setDy(at2.y*.1);

  %% Set AOs yunits
  
  % Pick units and prefix from those supported
  unit_list = unit.supportedUnits;
  % remove the first empty unit '' from the list, because then is it
  % possible that we add a prefix to an empty unit
  unit_list = unit_list(2:end);
  prefix_list = unit.supportedPrefixes;
  
  % Set units by choosing a random prefix and a random unit
  at1.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  at2.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  at3.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  at4.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  at5.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  at6.setYunits(...
    unit([cell2mat(utils.math.randelement(prefix_list,1)) cell2mat(utils.math.randelement(unit_list,1))]));
  
  %% Vector of AOs
  atvec = [at2 at5 at6];

  %% Matrix of AOs
  atmat = [at1 at2 at3; at4 at5 at6];

  %% Set AO names.
  %  Don't remove the setting of the AO names and it must be at the last position.
  at1.setName;
  at2.setName;
  at3.setName;
  at4.setName;
  at5.setName;
  at6.setName;

end

