


Build a sparse block-diagonal matrix with ones in all filled elements.
A = feBuildSparseBlockDiag(nBvecs,nVoxels, [values]);
This is used to build the matrix used to represent the isotropic
component contributions to the diffusion data in each voxel.
INPUTS:
nBvecs - How many directions in your DWI data.
nVoxels - How many voxels in the ROI.
values - Either a value for every voxel (column, size(values) = nVoxels) OR
one value for all the voxels, e.g., 0.5
OUTPUTS:
A - A block-diagonal matrix.
In each column, there are nBvecs filled rows. These are always filled
with either a '1' OR a value (if passed in). The location of the
non-zero elements in each column is:
col * nBvecs + 1: (col + 1) * nBvecs
EXAMPLE:
>> A = feBuildSparseBlockDiag(3,3)
A = (1,1) 1
(2,1) 1
(3,1) 1
(4,2) 1
(5,2) 1
(6,2) 1
(7,3) 1
(8,3) 1
(9,3) 1
Copyright (2013-2014), Franco Pestilli, Stanford University, pestillifranco@gmail.com.

0001 function A = feBuildSparseBlockDiag(nBvecs,nVoxels, values) 0002 % Build a sparse block-diagonal matrix with ones in all filled elements. 0003 % 0004 % A = feBuildSparseBlockDiag(nBvecs,nVoxels, [values]); 0005 % 0006 % This is used to build the matrix used to represent the isotropic 0007 % component contributions to the diffusion data in each voxel. 0008 % 0009 % INPUTS: 0010 % nBvecs - How many directions in your DWI data. 0011 % nVoxels - How many voxels in the ROI. 0012 % values - Either a value for every voxel (column, size(values) = nVoxels) OR 0013 % one value for all the voxels, e.g., 0.5 0014 % 0015 % OUTPUTS: 0016 % A - A block-diagonal matrix. 0017 % In each column, there are nBvecs filled rows. These are always filled 0018 % with either a '1' OR a value (if passed in). The location of the 0019 % non-zero elements in each column is: 0020 % col * nBvecs + 1: (col + 1) * nBvecs 0021 % 0022 % EXAMPLE: 0023 % >> A = feBuildSparseBlockDiag(3,3) 0024 % A = (1,1) 1 0025 % (2,1) 1 0026 % (3,1) 1 0027 % (4,2) 1 0028 % (5,2) 1 0029 % (6,2) 1 0030 % (7,3) 1 0031 % (8,3) 1 0032 % (9,3) 1 0033 % 0034 % Copyright (2013-2014), Franco Pestilli, Stanford University, pestillifranco@gmail.com. 0035 0036 if notDefined('values'),values = ones(1,nVoxels);end 0037 0038 % If only one value is passed in (the same value for all voxels) 0039 % We replicate it. 0040 if (length(values) == 1), values = values .* ones(1,nVoxels);end 0041 0042 idx_rows = 1:nBvecs * nVoxels; 0043 idx_columns = reshape(repmat(1:nVoxels,nBvecs,1), 1, nBvecs * nVoxels); 0044 A = sparse(idx_rows, idx_columns, ones(nBvecs, nVoxels) .* ... 0045 repmat(values,nBvecs,1)); 0046 0047 end