% Test ao/removeVal for:% - functionality%% M Hueller 10-03-10%% $Id: test_ao_removeVal.m,v 1.1 2010/03/13 06:36:20 mauro Exp $%%% Start with an AO with no "bad" data in ita_orig = ao(plist(... 'waveform', 'sinewave', ... 'Nsecs', 100, ... 'fs', 1, ... 'f', 0.02, ... 'yunits', 'V', ... 't0', '2010-03-10 20:00:00.000' ... )) + 2;a_orig.setName('original');%% 1) Test the case where we remove only Inf, removing datavalue = Inf;% Prepare a list of index where we add the "bad" pointsN = randi(10, 1);bad_index = randi(numel(a_orig.x), N, 1);% Mix the AO with the "bad" valuesy_orig = a_orig.y();y_bad = y_orig;y_bad(bad_index) = value;a_bad = a_orig.setY(y_bad);a_bad.setName('corrupted');% Run the ao/removeVal methoda_clean = a_bad.removeVal(plist('value', value));a_clean.setName('cleaned');% Compare against the original:% unitsif ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!');endif ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!');end% t0if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!');endindex = true(size(a_bad.x));index(bad_index) = false;% "good" values: xx_clean = a_clean.x;x_bad = a_bad.x;if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!');end% "good" values: yy_clean = a_clean.y;y_bad = a_bad.y;if ~eq(y_bad(index), y_clean) disp('Warning: wrong y values!');end%% 2) Test the case where we remove only NaN, removing datavalue = NaN;% Prepare a list of index where we add the "bad" pointsN = randi(10, 1);bad_index = randi(numel(a_orig.x), N, 1);% Mix the AO with the "bad" valuesy_orig = a_orig.y();y_bad = y_orig;y_bad(bad_index) = value;a_bad = a_orig.setY(y_bad);a_bad.setName('corrupted');% Run the ao/removeVal methoda_clean = a_bad.removeVal(plist('value', value));a_clean.setName('cleaned');% Compare against the original:% unitsif ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!');endif ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!');end% t0if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!');endindex = true(size(a_bad.x));index(bad_index) = false;% "good" values: xx_clean = a_clean.x;x_bad = a_bad.x;if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!');end% "good" values: yy_clean = a_clean.y;y_bad = a_bad.y;if ~eq(y_bad(index), y_clean) disp('Warning: wrong y values!');end%% 3) Test the case where we remove only 0s, removing datavalue = 0;% Prepare a list of index where we add the "bad" pointsN = randi(10, 1);bad_index = randi(numel(a_orig.x), N, 1);% Mix the AO with the "bad" valuesy_orig = a_orig.y();y_bad = y_orig;y_bad(bad_index) = value;a_bad = a_orig.setY(y_bad);a_bad.setName('corrupted');% Run the ao/removeVal methoda_clean = a_bad.removeVal(plist('value', value));a_clean.setName('cleaned');% Compare against the original:% unitsif ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!');endif ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!');end% t0if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!');endindex = true(size(a_bad.x));index(bad_index) = false;% "good" values: xx_clean = a_clean.x;x_bad = a_bad.x;if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!');end% "good" values: yy_clean = a_clean.y;y_bad = a_bad.y;if ~eq(y_bad(index), y_clean) disp('Warning: wrong y values!');end%% 4) Test the case where we remove Inf AND NaN AND 0s, removing data% Prepare a list of index where we add the "bad" pointsN_nan = randi(10, 1);N_inf = randi(10, 1);N_zeros = randi(10, 1);nan_index = randi(numel(a_orig.x), N_nan, 1);inf_index = randi(numel(a_orig.x), N_inf, 1);zeros_index = randi(numel(a_orig.x), N_zeros, 1);% Mix the AO with NaN, Inf, and 0s insidey_orig = a_orig.y();y_bad = y_orig;y_bad(nan_index) = NaN;y_bad(inf_index) = Inf;y_bad(zeros_index) = 0;a_bad = a_orig.setY(y_bad);a_bad.setName('corrupted');% Run the ao/removeVal methodvalue = [Inf NaN 0];a_clean = a_bad.removeVal(plist('value', value));a_clean.setName('cleaned');% Compare against the original% unitsif ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!');endif ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!');end% t0if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!');endindex = true(size(a_bad.x));index(nan_index) = false;index(inf_index) = false;index(zeros_index) = false;% "good" values: xx_clean = a_clean.x;x_bad = a_bad.x;if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!');end% "good" values: yy_clean = a_clean.y;y_bad = a_bad.y;if ~eq(y_bad(index), y_clean) disp('Warning: wrong y values!');end% plots the original, "bad", and "clean" dataiplot(a_orig, a_bad, a_clean, plist('LineStyles', {'-', '-', 'None'}, 'Markers', {'.', '.', 'o'}));%% 5) Test the case where we remove Inf AND NaN AND 0s, interpolating data% Prepare a list of index where we add the "bad" pointsN_nan = randi(10, 1);N_inf = randi(10, 1);N_zeros = randi(10, 1);nan_index = randi(numel(a_orig.x), N_nan, 1);inf_index = randi(numel(a_orig.x), N_inf, 1);zeros_index = randi(numel(a_orig.x), N_zeros, 1);% Mix the AO with NaN, Inf, and 0s insidey_orig = a_orig.y();y_bad = y_orig;y_bad(nan_index) = NaN;y_bad(inf_index) = Inf;y_bad(zeros_index) = 0;a_bad = a_orig.setY(y_bad);a_bad.setName('corrupted');% Run the ao/removeVal methodvalue = [Inf NaN 0];a_clean = a_bad.removeVal(plist('value', value, 'method', 'interp'));a_clean.setName('cleaned');% Compare against the original% unitsif ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!');endif ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!');end% t0if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!');end% plots the original, "bad", and "clean" dataiplot(a_orig, a_bad, a_clean, plist('LineStyles', {'-', '-', 'None'}, 'Markers', {'.', '.', 'o'}));