123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- function [tscounts, wfcounts, evcounts] = plx_info(filename, fullread)
- % plx_info(filename, fullread) -- read and display .plx file info
- %
- % [tscounts, wfcounts] = plx_info(filename, fullread)
- %
- % INPUT:
- % filename - if empty string, will use File Open dialog
- % fullread - if 0, reads only the file header
- % if 1, reads all the file
- % OUTPUT:
- % tscounts - 5x130 array of timestamp counts
- % tscounts(i, j) is the number of timestamps for channel i, unit j
- % wfcounts - 5x130 array of waveform counts
- % wfcounts(i, j) is the number of waveforms for channel i, unit j
- % evcounts - 1x512 array of external event counts
- % evcounts(i) is the number of events for channel i
- if(nargin ~= 2)
- disp('2 input arguments are required')
- return
- end
- if(isempty(filename))
- [fname, pathname] = uigetfile('*.plx', 'Select a plx file');
- filename = strcat(pathname, fname);
- end
- fid = fopen(filename, 'r');
- if(fid == -1)
- disp('cannot open file');
- return
- end
- disp(strcat('file = ', filename));
- header = fread(fid, 64, 'int32');
- version = header(2);
- freq = header(35); % frequency
- ndsp = header(36); % number of dsp channels
- nevents = header(37); % number of external events
- nslow = header(38); % number of slow channels
- npw = header(39); % number of points in wave
- npr = header(40); % number of points before threshold
- disp(strcat('version = ', num2str(version)));
- disp(strcat('frequency = ', num2str(freq)));
- disp(strcat('number of DSP headers = ', num2str(ndsp)));
- disp(strcat('number of Event headers = ', num2str(nevents)));
- disp(strcat('number of A/D headers = ', num2str(nslow)));
- tscounts = fread(fid, [5, 130], 'int32');
- wfcounts = fread(fid, [5, 130], 'int32');
- evcounts = fread(fid, [1, 512], 'int32');
- if fullread > 0
- % reset counters
- tscounts = zeros(5, 130);
- wfcounts = zeros(5, 130);
- evcounts = zeros(1, 512);
- % skip variable headers
- fseek(fid, 1020*ndsp + 296*nevents + 296*nslow, 'cof');
- record = 0;
- while feof(fid) == 0
- type = fread(fid, 1, 'int16');
- upperbyte = fread(fid, 1, 'int16');
- timestamp = fread(fid, 1, 'int32');
- channel = fread(fid, 1, 'int16');
- unit = fread(fid, 1, 'int16');
- nwf = fread(fid, 1, 'int16');
- nwords = fread(fid, 1, 'int16');
- toread = nwords;
- if toread > 0
- wf = fread(fid, toread, 'int16');
- end
- if type == 1
- tscounts(unit+1, channel+1) = tscounts(unit+1, channel+1) + 1;
- if toread > 0
- wfcounts(unit+1, channel+1) = wfcounts(unit+1, channel+1) + 1;
- end
- end
- if type == 4
- evcounts(channel+1) = evcounts(channel+1) + 1;
- end
-
- record = record + 1;
- if feof(fid) == 1
- break
- end
- end
- disp(strcat('number of records = ', num2str(record)));
- end
- disp(' ');
- disp(' Timestamps:');
- disp(' ch unit count');
- for i=1:130
- for j=1:5
- if tscounts(j, i) > 0
- disp(sprintf('%3d %4d %6d', i-1, j-1, tscounts(j, i)));
- end
- end
- end
- disp(' ');
- disp(' Waveforms:');
- disp(' ch unit count');
- for i=1:130
- for j=1:5
- if wfcounts(j, i) > 0
- disp(sprintf('%3d %4d %6d', i-1, j-1, wfcounts(j, i)));
- end
- end
- end
- disp(' ');
- disp(' Events:');
- disp(' ch count');
- for i=1:300
- if evcounts(i) > 0
- disp(sprintf('%3d %6d', i-1, evcounts(i)));
- end
- end
- disp(' ');
- disp(' A/D channels:');
- disp(' ch count');
- for i=301:364
- if evcounts(i) > 0
- disp(sprintf('%3d %6d', i-301, evcounts(i)));
- end
- end
- fclose(fid);
|