nex_int.m 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. function [n, ts_left, ts_right] = nex_int(filename, varname)
  2. % nex_int(filename, varname): Read interval variable from a .nex file
  3. %
  4. % [n, ts_left, ts_right] = nex_int(filename, varname)
  5. %
  6. % INPUT:
  7. % filename - if empty string, will use File Open dialog
  8. % varname - variable name
  9. % OUTPUT:
  10. % n - number of intervals
  11. % ts_left - array of left ends of the intervals (in seconds)
  12. % ts_right - array of right ends of the intervals (in seconds)
  13. n = 0;
  14. ts_left = 0;
  15. ts_right = 0;
  16. if(nargin ~= 2)
  17. disp('2 input arguments are required')
  18. return
  19. end
  20. if(ischar(filename) == 0)
  21. disp('input arguments should be character arrays')
  22. return
  23. end
  24. if(ischar(varname) == 0)
  25. disp('input arguments should be character arrays')
  26. return
  27. end
  28. if(isempty(filename))
  29. [fname, pathname] = uigetfile('*.nex', 'Select a Nex file');
  30. filename = strcat(pathname, fname);
  31. end
  32. fid = fopen(filename, 'r');
  33. if(fid == -1)
  34. disp('cannot open file');
  35. return
  36. end
  37. disp(strcat('file = ', filename));
  38. magic = fread(fid, 1, 'int32');
  39. version = fread(fid, 1, 'int32');
  40. comment = fread(fid, 256, 'char');
  41. freq = fread(fid, 1, 'double');
  42. tbeg = fread(fid, 1, 'int32');
  43. tend = fread(fid, 1, 'int32');
  44. nvar = fread(fid, 1, 'int32');
  45. fseek(fid, 260, 'cof');
  46. name = zeros(1, 64);
  47. found = 0;
  48. for i=1:nvar
  49. type = fread(fid, 1, 'int32');
  50. var_version = fread(fid, 1, 'int32');
  51. name = fread(fid, [1 64], 'char');
  52. offset = fread(fid, 1, 'int32');
  53. n = fread(fid, 1, 'int32');
  54. name = char(name);
  55. name = deblank(name);
  56. k = strcmp(name, deblank(varname));
  57. if(k == 1)
  58. if type ~= 2
  59. disp(sprintf('%s is not an interval variable', deblank(varname)));
  60. return;
  61. end
  62. found = 1;
  63. fseek(fid, offset, 'bof');
  64. ts_left = fread(fid, [1 n], 'int32');
  65. ts_right = fread(fid, [1 n], 'int32');
  66. break
  67. end
  68. dummy = fread(fid, 128, 'char');
  69. end
  70. fclose(fid);
  71. if found == 0
  72. disp('did not find variable in the file');
  73. else
  74. ts_left = ts_left/freq;
  75. ts_right = ts_right/freq;
  76. disp(strcat('number of intervals = ', num2str(n)));
  77. end