[Master Index]
[Index for Toolbox]
source_grid
(Toolbox/source_grid.m in BrainStorm 2.0 (Alpha))
Function Synopsis
[L1,L2,L3,L4,L5,L6,L7,L8,L9] = ...
Help Text
SOURCE_GRID - generate variable grid of possible source locations
function [L1,L2,L3,L4,L5,L6,L7,L8,L9] = ...
source_grid(sensor_r,source_maxr,source_minr,Factor,STATS,VERBOSE);
Given the scalar radius to the sensors sensor_r,
the maximum scalar radius to the sources source_rmax,
the minimum scalar radius to the sources source_rmin,
then generate possible dipole source locations L in the upper hemisphere.
Optional Factor is the fraction considered significant, default 0.1;
Optional STATS flag means prepend stats onto the first rows of L
Optional VERBOSE flag means describe the results.
Optional [L1,L2,L3,...,L9] = source_grid(...
generate higher order expansion points.
If(STATS), then in each location matrix,
L(1) give the number of surfaces used,
L(2,:) to L(L(1)+1,:) are statistics. The first column of the statistics
rows gives the radial distance of the surface, the second column gives
the spacing used on that surface, and the third gives the number of
source points assigned on that surface. Thus delete L(1:(L(1)+1),:)
after viewing or extracting the statistics.
Cross-Reference Information
This function calls
This function is called by
Listing of function C:\BrainStorm_2001\Toolbox\source_grid.m
function [L1,L2,L3,L4,L5,L6,L7,L8,L9] = ...
source_grid(sensor_r,source_maxr,source_minr,Factor,STATS,VERBOSE);
%SOURCE_GRID - generate variable grid of possible source locations
% function [L1,L2,L3,L4,L5,L6,L7,L8,L9] = ...
% source_grid(sensor_r,source_maxr,source_minr,Factor,STATS,VERBOSE);
% Given the scalar radius to the sensors sensor_r,
% the maximum scalar radius to the sources source_rmax,
% the minimum scalar radius to the sources source_rmin,
% then generate possible dipole source locations L in the upper hemisphere.
%
% Optional Factor is the fraction considered significant, default 0.1;
% Optional STATS flag means prepend stats onto the first rows of L
% Optional VERBOSE flag means describe the results.
% Optional [L1,L2,L3,...,L9] = source_grid(...
% generate higher order expansion points.
%
% If(STATS), then in each location matrix,
% L(1) give the number of surfaces used,
% L(2,:) to L(L(1)+1,:) are statistics. The first column of the statistics
% rows gives the radial distance of the surface, the second column gives
% the spacing used on that surface, and the third gives the number of
% source points assigned on that surface. Thus delete L(1:(L(1)+1),:)
% after viewing or extracting the statistics.
%<autobegin> ---------------------- 26-May-2004 11:34:30 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Forward Modeling
%
% Alphabetical list of external functions (non-Matlab):
% toolbox\sensor_ring.m
%
% At Check-in: $Author: Mosher $ $Revision: 12 $ $Date: 5/26/04 10:02a $
%
% This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 24-May-2004
%
% Principal Investigators and Developers:
% ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
% University of Southern California, Los Angeles, CA
% ** John C. Mosher, PhD, Biophysics Group,
% Los Alamos National Laboratory, Los Alamos, NM
% ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
% CNRS, Hopital de la Salpetriere, Paris, France
%
% See BrainStorm website at http://neuroimage.usc.edu for further information.
%
% Copyright (c) 2004 BrainStorm by the University of Southern California
% This software distributed under the terms of the GNU General Public License
% as published by the Free Software Foundation. Further details on the GPL
% license can be found at http://www.gnu.org/copyleft/gpl.html .
%
% FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
% UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
% WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
% LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
%<autoend> ------------------------ 26-May-2004 11:34:30 -----------------------
% John C. Mosher, Ph.D.
% See Copyright.m file for information
% $Date: 5/26/04 10:02a $ $Revision: 12 $
%
% February 8, 1995 author
% JCM 2/27/95 cleanup from test version to production
% JCM 7/26/95 move first gridding surface down somewhat below the source_maxr
% uses: sensor_ring
if(exist('Factor') ~= 1), % user gave no Factor
Factor = 0.1; % what Factor is considered insignificant
end
if(exist('STATS') ~= 1), % user did not give
STATS = 0; % do not prepend statistics
end
if(exist('VERBOSE') ~= 1), % user did not give
VERBOSE = 0; % silent running
end
for order = 1:nargout, % foreach requested expansion order
% Theory is that an uncovered source is min_d from the nearest sensor. We
% want to be b_offset below this source, such that b_offset + min_d provide
% sufficient coverage. The radius of coverage is such that two
% intersecting circles intersect such that the radius by distance is still
% equivalent to the Factor. So radius of coverage = Factor *
% (min_d+offset). Spacing = sqrt(2)*radius of coverage. Interlace
% sensor_ring routine by 1/2 the spacing on every other surface.
next_source_r = source_maxr; % initialize first source surface
Rdip = []; % source locations
Rstat = []; % statistics
isurfaces = 0; % number of surfaces used
while(next_source_r > source_minr), % for appropriate spherical surfaces
% minimum distance between source and sensor
min_d = sensor_r - next_source_r;
% calculate radius of coverage of these expansions
if(isurfaces == 0), % first surface only
b_offset = min_d/((1/Factor)*sqrt(2)-1);
else
b_offset = min_d/((1/Factor)-1);
end
radius_of_coverage = Factor*(min_d+b_offset);
% set our expansion surface
next_expan_r = next_source_r - b_offset;
% keep sensible
next_expan_r = max(next_expan_r,0);
% create equally spaced expansion points on this surface,
% spaced sqrt(2)*radius_of_coverage apart
isurfaces = isurfaces + 1;
% spacing between sensors on this expansion surface
spacing = sqrt(2)*radius_of_coverage; % (equal to the b_offset*2)
if(spacing > (2*next_expan_r)), % spacing is bigger than radius
Rn = [0 0 next_expan_r]; % single sensor point
else % radius bigger than spacing
theta_inc = acos(1 - 0.5*(spacing/next_expan_r)^2); % sensor increment
if(rem(isurfaces,2)), % if an odd numbered surface
Rn = sensor_ring(next_expan_r,theta_inc,'half');
theta_inc_old = theta_inc; % drop into old bucke
else % interleave from previous theta_inc
Rn = sensor_ring(next_expan_r,[theta_inc_old/2 theta_inc],'half');
end
end % generate spacing on surface
Rdip = [Rdip;Rn]; % add these source locations
% what was the radius and spacing and how many
Rstat = [Rstat; [next_expan_r spacing size(Rn,1)]]; % statistics
% next surface of uncovered sources is at least b_offset below this
% surface.
next_source_r = next_expan_r - b_offset;
% then repeat for this source radius
end
if(STATS), % user wants statistics as well
eval(sprintf('L%.0f = [isurfaces 0 0;Rstat;Rdip];',order));
else % use doesn't want stats
eval(sprintf('L%.0f = [Rdip];',order));
end
if(VERBOSE),
disp(' ')
disp(sprintf('Order %.0f, %.0f surfaces, %.0f sources.',...
order,isurfaces,size(Rdip,1)));
disp(['Surface distances' sprintf(' %.1f',Rstat(:,1)*1000) ' (mm)'])
disp(['Surface spacings ' sprintf(' %.1f',Rstat(:,2)*1000) ' (mm)'])
end
end
if(STATS & VERBOSE), % wanted statistics and verbosity
disp(' ')
disp(...
'Remember to delete the first "surfaces + 1" statistical rows of each L')
end
return
Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON