Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F103590746
fiff_write_float_sparse_rcs.m
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Mar 3, 05:19
Size
2 KB
Mime Type
text/plain
Expires
Wed, Mar 5, 05:19 (1 d, 13 h)
Engine
blob
Format
Raw Data
Handle
24620321
Attached To
R6832 iCAPs public
fiff_write_float_sparse_rcs.m
View Options
function fiff_write_float_sparse_rcs(fid,kind,mat)
%
% fiff_write_float_sparsce_rcs(fid,kind,mat)
%
% Writes a single-precision sparse (RCS) floating-point matrix tag
%
% fid An open fif file descriptor
% kind The tag kind
% mat The data matrix
%
%
% Author : Matti Hamalainen, MGH Martinos Center
% License : BSD 3-clause
%
me='MNE:fiff_write_float_sparse_rcs';
if nargin ~= 3
error(me,'Incorrect number of arguments');
end
if ~issparse(mat)
error(me,'Input should be a sparse matrix');
end
if length(size(mat)) ~= 2
error(me,'Input should be a two-dimensional matrix');
end
FIFFT_FLOAT = 4;
FIFFT_MATRIX = bitshift(16416,16); % 4020
FIFFT_MATRIX_FLOAT_RCS = bitor(FIFFT_FLOAT,FIFFT_MATRIX);
FIFFV_NEXT_SEQ=0;
%
% nnz values
% nnz column indices
% nrow+1 pointers
% dims
% nnz
% ndim
%
nnzm = nnz(mat);
nrow = size(mat,1);
datasize = 4*nnzm + 4*nnzm + 4*(nrow+1) + 4*4;
%
% Nonzero entries
%
[ s(:,1), s(:,2), s(:,3) ] = find(mat);
s = sortrows(s,1);
[ rows, starts ] = unique(s(:,1),'first');
count = fwrite(fid,int32(kind),'int32');
if count ~= 1
error(me,'write failed');
end
count = fwrite(fid,int32(FIFFT_MATRIX_FLOAT_RCS),'int32');
if count ~= 1
error(me,'write failed');
end
count = fwrite(fid,int32(datasize),'int32');
if count ~= 1
error(me,'write failed');
end
count = fwrite(fid,int32(FIFFV_NEXT_SEQ),'int32');
if count ~= 1
error(me,'write failed');
end
%
% The data values
%
count = fwrite(fid,single(s(:,3)),'single');
if count ~= nnzm
error(me,'write failed');
end
%
% Column indices
%
count = fwrite(fid,int32(s(:,2)-1),'int32');
if count ~= nnzm
error(me,'write failed');
end
%
% Pointers
%
ptrs = -ones(1,nrow+1);
for k = 1:length(rows)
ptrs(rows(k)) = starts(k) - 1;
end
ptrs(nrow+1) = nnzm;
%
% Fill in pointers for empty rows
%
for k = nrow:-1:1
if ptrs(k) < 0
ptrs(k) = ptrs(k+1);
end
end
%
count = fwrite(fid,int32(ptrs),'int32');
if count ~= nrow+1
error(me,'write failed');
end
%
% Dimensions
%
dims(1) = nnz(mat);
dims(2) = size(mat,1);
dims(3) = size(mat,2);
dims(4) = 2;
count = fwrite(fid,int32(dims),'int32');
if count ~= 4
error(me,'write failed');
end
return;
Event Timeline
Log In to Comment