spm_data_id.m 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. function ID = spm_data_id(varargin)
  2. % generates a specific real number in a deterministic way
  3. % from any data structure
  4. % FORMAT ID = spm_data_id(X);
  5. % X - numeric, character, cell or stucture array[s]
  6. % ID - specific ID
  7. %__________________________________________________________________________
  8. % Copyright (C) 2009 Wellcome Trust Centre for Neuroimaging
  9. % Vladimir Litvak (based on Karl's spm_vec)
  10. % $Id: spm_data_id.m 6712 2016-02-04 15:12:25Z peter $
  11. X = varargin;
  12. if length(X) == 1
  13. X = X{1};
  14. end
  15. ID = 0;
  16. if ischar(X) % For now strings are not taken into account
  17. ID = 0;
  18. elseif isnumeric(X)
  19. Y = double(X(:));
  20. ID = sum(abs(Y(~isnan(Y) & ~isinf(Y))));
  21. elseif isstruct(X) || isobject(X)
  22. X = struct(X);
  23. f = fieldnames(X);
  24. X = X(:);
  25. ID = 0;
  26. for i = 1:length(f)
  27. ID = ID + spm_data_id({X.(f{i})});
  28. end
  29. elseif iscell(X)
  30. X = X(:);
  31. ID = 0;
  32. for i = 1:length(X)
  33. ID = ID + spm_data_id(X{i});
  34. end
  35. end
  36. if ID > 0
  37. ID = 10^-(floor(log10(ID))-2)*ID;
  38. end