Mercurial > hg > ltpda
view m-toolbox/test/test_ao_removeVal.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line source
% 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 it a_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 data value = Inf; % Prepare a list of index where we add the "bad" points N = randi(10, 1); bad_index = randi(numel(a_orig.x), N, 1); % Mix the AO with the "bad" values y_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 method a_clean = a_bad.removeVal(plist('value', value)); a_clean.setName('cleaned'); % Compare against the original: % units if ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!'); end if ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!'); end % t0 if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!'); end index = true(size(a_bad.x)); index(bad_index) = false; % "good" values: x x_clean = a_clean.x; x_bad = a_bad.x; if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!'); end % "good" values: y y_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 data value = NaN; % Prepare a list of index where we add the "bad" points N = randi(10, 1); bad_index = randi(numel(a_orig.x), N, 1); % Mix the AO with the "bad" values y_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 method a_clean = a_bad.removeVal(plist('value', value)); a_clean.setName('cleaned'); % Compare against the original: % units if ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!'); end if ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!'); end % t0 if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!'); end index = true(size(a_bad.x)); index(bad_index) = false; % "good" values: x x_clean = a_clean.x; x_bad = a_bad.x; if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!'); end % "good" values: y y_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 data value = 0; % Prepare a list of index where we add the "bad" points N = randi(10, 1); bad_index = randi(numel(a_orig.x), N, 1); % Mix the AO with the "bad" values y_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 method a_clean = a_bad.removeVal(plist('value', value)); a_clean.setName('cleaned'); % Compare against the original: % units if ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!'); end if ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!'); end % t0 if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!'); end index = true(size(a_bad.x)); index(bad_index) = false; % "good" values: x x_clean = a_clean.x; x_bad = a_bad.x; if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!'); end % "good" values: y y_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" points N_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 inside y_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 method value = [Inf NaN 0]; a_clean = a_bad.removeVal(plist('value', value)); a_clean.setName('cleaned'); % Compare against the original % units if ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!'); end if ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!'); end % t0 if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!'); end index = true(size(a_bad.x)); index(nan_index) = false; index(inf_index) = false; index(zeros_index) = false; % "good" values: x x_clean = a_clean.x; x_bad = a_bad.x; if ~eq(x_bad(index), x_clean) disp('Warning: wrong x values!'); end % "good" values: y y_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" data iplot(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" points N_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 inside y_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 method value = [Inf NaN 0]; a_clean = a_bad.removeVal(plist('value', value, 'method', 'interp')); a_clean.setName('cleaned'); % Compare against the original % units if ~eq(a_clean.yunits, a_bad.yunits) disp('Warning: wrong yunits!'); end if ~eq(a_clean.xunits, a_bad.xunits) disp('Warning: wrong xunits!'); end % t0 if ~eq(a_clean.t0, a_bad.t0) disp('Warning: wrong t0!'); end % plots the original, "bad", and "clean" data iplot(a_orig, a_bad, a_clean, plist('LineStyles', {'-', '-', 'None'}, 'Markers', {'.', '.', 'o'}));