123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- function [n, nm, nl, ts, names, m] = nex_marker(filename, varname)
- % nex_marker(filename, varname): Read a marker variable from a .nex file
- %
- % [n, nm, nl, ts, names, m] = nex_marker(filename, varname)
- %
- % INPUT:
- % filename - if empty string, will use File Open dialog
- % varname - variable name
- %
- % continuous (a/d) data come in fragments. Each fragment has a timestamp
- % and a number of a/d data points. The timestamp corresponds to
- % the time of recording of the first a/d value in this fragment.
- % All the data values stored in the vector d.
- % OUTPUT:
- % n - number of markers
- % nm - number of fields in each marker
- % nl - number of characters in each marker field
- % ts - array of marker timestamps (in seconds)
- % names - names of marker fields ([nm 64] character array)
- % m - character array of marker values [n nl nm]
- n = 0;
- nm = 0;
- nl = 0;
- ts = 0;
- m = 0;
- names = 0;
- if(nargin ~= 2)
- disp('2 input arguments are required')
- return
- end
- if(ischar(filename) == 0)
- disp('input arguments should be character arrays')
- return
- end
- if(ischar(varname) == 0)
- disp('input arguments should be character arrays')
- return
- end
- if(isempty(filename))
- [fname, pathname] = uigetfile('*.nex', 'Select a Nex file');
- filename = strcat(pathname, fname);
- end
- fid = fopen(filename, 'r');
- if(fid == -1)
- disp('cannot open file');
- return
- end
- disp(strcat('file = ', filename));
- magic = fread(fid, 1, 'int32');
- version = fread(fid, 1, 'int32');
- comment = fread(fid, 256, 'char');
- freq = fread(fid, 1, 'double');
- tbeg = fread(fid, 1, 'int32');
- tend = fread(fid, 1, 'int32');
- nvar = fread(fid, 1, 'int32');
- fseek(fid, 260, 'cof');
- name = zeros(1, 64);
- found = 0;
- for i=1:nvar
- type = fread(fid, 1, 'int32');
- var_version = fread(fid, 1, 'int32');
- name = fread(fid, [1 64], 'char');
- offset = fread(fid, 1, 'int32');
- n = fread(fid, 1, 'int32');
- dummy = fread(fid, 32, 'char');
- adfreq = fread(fid, 1, 'double');
- adtomv = fread(fid, 1, 'double');
- npw = fread(fid, 1, 'int32');
- nm = fread(fid, 1, 'int32');
- nl = fread(fid, 1, 'int32');
- dummy = fread(fid, 68, 'char');
- name = char(name);
- name = deblank(name);
- k = strcmp(name, deblank(varname));
- if(k == 1)
- if type ~= 6
- disp(sprintf('%s is not a marker variable', deblank(varname)));
- return;
- end
- found = 1;
- fseek(fid, offset, 'bof');
- ts = fread(fid, [1 n], 'int32');
- names = zeros(1,64);
- m = zeros(n, nl, nm);
- for j=1:nm
- names(j, :) = fread(fid, [1 64], 'char');
- for p = 1:n
- m(p, :, j) = fread(fid, [1 nl], 'char');
- end
- end
- break
- end
- end
- fclose(fid);
- if found == 0
- disp('did not find variable in the file');
- else
- names = char(names);
- m = char(m);
- ts = ts/freq;
- disp(strcat('number of markers = ', num2str(n)));
- end
|