THG_FASTER_4_channel_x_epoch_artifacts_20140302.m 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. function [index parm zval] = THG_FASTER_4_channel_x_epoch_artifacts_20140302(cfg,data)
  2. %% defaults
  3. if ~isfield(cfg,'criterion'); criterion = 3; else criterion = cfg.criterion; end
  4. if ~isfield(cfg,'recursive'); recursive = 1; else recursive = strcmp(cfg.recursive,'yes'); end
  5. %% generate data structure
  6. sz = size(data.trial{1});
  7. nt = length(data.trial);
  8. tmp = zeros([sz(1)*nt sz(2)]);
  9. for t = 1:nt
  10. tmp((t-1)*sz(1)+1:t*sz(1),:) = data.trial{t};
  11. end; clear t
  12. % overall mean (calculation adopted from FASTER)
  13. alltmp = zeros([size(data.trial{1}) length(data.trial)]);
  14. for t = 1:length(data.trial)
  15. alltmp(:,:,t) = data.trial{t};
  16. end; clear t
  17. means = mean(mean(alltmp,2),3);
  18. means = repmat(means,nt,1);
  19. %% parameter
  20. % variance
  21. parm.c_x_e_var = var(tmp',1)';
  22. % median gradient
  23. parm.c_x_e_med = median(diff(tmp'))';
  24. % amplitude range
  25. parm.c_x_e_amp = (max(tmp') - min(tmp'))';
  26. % deviation of the mean amplitude
  27. parm.c_x_e_dev = mean(tmp')' - means;
  28. %% zscores
  29. zval.c_x_e_var = zscore(parm.c_x_e_var);
  30. zval.c_x_e_med = zscore(parm.c_x_e_med);
  31. zval.c_x_e_amp = zscore(parm.c_x_e_amp);
  32. zval.c_x_e_dev = zscore(parm.c_x_e_dev);
  33. %% find outlier
  34. % temporary zscores
  35. tmpz = zval;
  36. % variance outlier
  37. tmpz.c_x_e_var = cm_outlier2nan_20140311(tmpz.c_x_e_var,'>',criterion,recursive);
  38. % median gradient outlier
  39. tmpz.c_x_e_med = cm_outlier2nan_20140311(tmpz.c_x_e_med,'>',criterion,recursive);
  40. % amplitude range outlier
  41. tmpz.c_x_e_amp = cm_outlier2nan_20140311(tmpz.c_x_e_amp,'>',criterion,recursive);
  42. % deviation outlier
  43. tmpz.c_x_e_dev = cm_outlier2nan_20140311(tmpz.c_x_e_dev,'>',criterion,recursive);
  44. %% mark outlier
  45. ind_ = find( isnan(tmpz.c_x_e_var) | isnan(tmpz.c_x_e_med) | ...
  46. isnan(tmpz.c_x_e_amp) | isnan(tmpz.c_x_e_dev) );
  47. index = zeros(sz(1),nt);
  48. index(ind_) = 1;
  49. %% restructure data
  50. % parameter
  51. parm.c_x_e_var = reshape(parm.c_x_e_var,sz(1),nt);
  52. parm.c_x_e_med = reshape(parm.c_x_e_med,sz(1),nt);
  53. parm.c_x_e_amp = reshape(parm.c_x_e_amp,sz(1),nt);
  54. parm.c_x_e_dev = reshape(parm.c_x_e_dev,sz(1),nt);
  55. % zscores
  56. zval.c_x_e_var = reshape(zval.c_x_e_var,sz(1),nt);
  57. zval.c_x_e_med = reshape(zval.c_x_e_med,sz(1),nt);
  58. zval.c_x_e_amp = reshape(zval.c_x_e_amp,sz(1),nt);
  59. zval.c_x_e_dev = reshape(zval.c_x_e_dev,sz(1),nt);