nex_marker.m 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. function [n, nm, nl, ts, names, m] = nex_marker(filename, varname)
  2. % nex_marker(filename, varname): Read a marker variable from a .nex file
  3. %
  4. % [n, nm, nl, ts, names, m] = nex_marker(filename, varname)
  5. %
  6. % INPUT:
  7. % filename - if empty string, will use File Open dialog
  8. % varname - variable name
  9. %
  10. % continuous (a/d) data come in fragments. Each fragment has a timestamp
  11. % and a number of a/d data points. The timestamp corresponds to
  12. % the time of recording of the first a/d value in this fragment.
  13. % All the data values stored in the vector d.
  14. % OUTPUT:
  15. % n - number of markers
  16. % nm - number of fields in each marker
  17. % nl - number of characters in each marker field
  18. % ts - array of marker timestamps (in seconds)
  19. % names - names of marker fields ([nm 64] character array)
  20. % m - character array of marker values [n nl nm]
  21. n = 0;
  22. nm = 0;
  23. nl = 0;
  24. ts = 0;
  25. m = 0;
  26. names = 0;
  27. if(nargin ~= 2)
  28. disp('2 input arguments are required')
  29. return
  30. end
  31. if(ischar(filename) == 0)
  32. disp('input arguments should be character arrays')
  33. return
  34. end
  35. if(ischar(varname) == 0)
  36. disp('input arguments should be character arrays')
  37. return
  38. end
  39. if(isempty(filename))
  40. [fname, pathname] = uigetfile('*.nex', 'Select a Nex file');
  41. filename = strcat(pathname, fname);
  42. end
  43. fid = fopen(filename, 'r');
  44. if(fid == -1)
  45. disp('cannot open file');
  46. return
  47. end
  48. disp(strcat('file = ', filename));
  49. magic = fread(fid, 1, 'int32');
  50. version = fread(fid, 1, 'int32');
  51. comment = fread(fid, 256, 'char');
  52. freq = fread(fid, 1, 'double');
  53. tbeg = fread(fid, 1, 'int32');
  54. tend = fread(fid, 1, 'int32');
  55. nvar = fread(fid, 1, 'int32');
  56. fseek(fid, 260, 'cof');
  57. name = zeros(1, 64);
  58. found = 0;
  59. for i=1:nvar
  60. type = fread(fid, 1, 'int32');
  61. var_version = fread(fid, 1, 'int32');
  62. name = fread(fid, [1 64], 'char');
  63. offset = fread(fid, 1, 'int32');
  64. n = fread(fid, 1, 'int32');
  65. dummy = fread(fid, 32, 'char');
  66. adfreq = fread(fid, 1, 'double');
  67. adtomv = fread(fid, 1, 'double');
  68. npw = fread(fid, 1, 'int32');
  69. nm = fread(fid, 1, 'int32');
  70. nl = fread(fid, 1, 'int32');
  71. dummy = fread(fid, 68, 'char');
  72. name = char(name);
  73. name = deblank(name);
  74. k = strcmp(name, deblank(varname));
  75. if(k == 1)
  76. if type ~= 6
  77. disp(sprintf('%s is not a marker variable', deblank(varname)));
  78. return;
  79. end
  80. found = 1;
  81. fseek(fid, offset, 'bof');
  82. ts = fread(fid, [1 n], 'int32');
  83. names = zeros(1,64);
  84. m = zeros(n, nl, nm);
  85. for j=1:nm
  86. names(j, :) = fread(fid, [1 64], 'char');
  87. for p = 1:n
  88. m(p, :, j) = fread(fid, [1 nl], 'char');
  89. end
  90. end
  91. break
  92. end
  93. end
  94. fclose(fid);
  95. if found == 0
  96. disp('did not find variable in the file');
  97. else
  98. names = char(names);
  99. m = char(m);
  100. ts = ts/freq;
  101. disp(strcat('number of markers = ', num2str(n)));
  102. end