[Master Index] [Index for Toolbox]

# subcorr_gui

## (Toolbox/subcorr_gui.m in BrainStorm 2.0 (Alpha))

### Function Synopsis

    [Co,X,Y] = subcorr_gui(A,B,GUI);

### Help Text

    SUBCORR_GUI - Subcorr function custom to the gui features
     function [Co,X,Y] = subcorr_gui(A,B,GUI);
     GUI.REG is a regularization switch
     GUI is a struction with regularization fields to match
     See REGCHECK
     Note that BOTH A and B are regularized in this call.

     approaches Truncated Condition and Truncated Energy have
      effectively the regularization built in by simply truncating the space.
      Column normalization should
      have already been done before the call, if requested.
      Here we are only concerned with Tikhonov regularization by building the
      filter functions, if requested.

### Cross-Reference Information

This function calls

    regsubspace                        C:\BrainStorm_2001\Toolbox\regsubspace.m

This function is called by

    rapmusic_gui                       C:\BrainStorm_2001\Toolbox\rapmusic_gui.m
    source_grids                       C:\BrainStorm_2001\Toolbox\source_grids.m

### Listing of function C:\BrainStorm_2001\Toolbox\subcorr_gui.m

    function [Co,X,Y] = subcorr_gui(A,B,GUI);
    %SUBCORR_GUI - Subcorr function custom to the gui features
    % function [Co,X,Y] = subcorr_gui(A,B,GUI);
    % GUI.REG is a regularization switch
    % GUI is a struction with regularization fields to match
    % See REGCHECK
    % Note that BOTH A and B are regularized in this call.
    %
    % approaches Truncated Condition and Truncated Energy have
    %  effectively the regularization built in by simply truncating the space.
    %  Column normalization should
    %  have already been done before the call, if requested.
    %  Here we are only concerned with Tikhonov regularization by building the
    %  filter functions, if requested.

    %<autobegin> ---------------------- 26-May-2004 11:34:33 -----------------------
    % --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
    %
    % CATEGORY: Inverse Modeling
    %
    % Alphabetical list of external functions (non-Matlab):
    %   toolbox\regsubspace.m
    %   toolbox\subcorr_gui.m  NOTE: Routine calls itself explicitly
    %
    % At Check-in: $Author: Mosher $  $Revision: 13 $  $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:33 -----------------------

    % ----------------------------- Script History ---------------------------------
    % 1994 by John C. Mosher, Ph.D.
    % 10/29/99 JCM, some optimizations.
    % JCM 10-May-2002 Adjustments to display in command window, not message window
    % 19-May-2004 JCM Comments Cleaning
    % ----------------------------- Script History ---------------------------------

    [Ua,Sa,Va]= svd(A,0);
    [Ub,Sb,Vb]= svd(B,0);

    % trim the subspace to the appropriate size
    Ua = regsubspace(GUI,Ua,Sa);
    Ub = regsubspace(GUI,Ub,Sb);

    C = Ua'*Ub;

    if(nargout < 2)  % want only angles

       Co = svd(C);
       too_big = find(Co > 1);    % numerical error
       Co(too_big) = 1; % matlab 5.3 allows scalar to vector mapping
       too_small = find(Co < 0); % more numerical error
       Co(too_small) = 0; % the null case is also adequately handled
       return

    else % nargout is 2 or more

       % trim to the rank
       rnk_a = size(Ua,2);
       rnk_b = size(Ub,2);

       if(length(Sa) > 1),
          Sa = diag(Sa);
       end
       if(length(Sb) > 1),
          Sb = diag(Sb);
       end

       Sa = Sa(1:rnk_a);
       Va = Va(:,1:rnk_a);

       Sb = Sb(1:rnk_b);
       Vb = Vb(:,1:rnk_b);

       [Uc,Co,Vc] = svd(C);
       if(min(size(Co))==1),
          Co = Co(1);
       else,
          Co = diag(Co);
       end
       too_big = find(Co > 1);    % numerical error
       Co(too_big) = ones(length(too_big),1);
       too_small = find(Co < 0);    % numerical error
       Co(too_small) = zeros(length(too_small),1);

       switch GUI.REG
       case 'Tikhonov'
          Lambda = Sa(1)/GUI.Tikhonov; % relative condition setting
          Fa = Sa.^2 ./ (Sa.^2 + Lambda^2);
          Lambda = Sb(1)/GUI.Tikhonov; % relative condition setting
          Fb = Sb.^2 ./ (Sb.^2 + Lambda^2);
          VaSai = Va*diag(Fa./Sa); % filtered
          VbSbi = Vb*diag(Fb./Sb);
       otherwise
          % all other conditions are truncated types
          VaSai = Va*diag(1../Sa);
          VbSbi = Vb*diag(1../Sb);
       end

       X = VaSai*Uc;
       Y = VbSbi*Vc;

       % debugging comments
       switch GUI.REG
       case 'Tikhonov'

          % don't send to the message window,
          %  too detailed, more of a debugging set
          disp('Subcorr gui Comments:')
          disp(['Co:          ',sprintf('%.4f ',Co)]);
          disp(['Regularized: ',sprintf('%.4f ',subcorr_gui(A*X(:,1),B*Y(:,1),struct('REG','None')))])
          disp(['Filters a and b: ',sprintf('%.3f ',Fa) ' ; ' sprintf('%.3f ',Fb)])

       otherwise
          % nothing, orientation not altered
       end

       return

    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