cosmo set path

function cosmo_set_path()
% set the matlab path for CoSMoMVPA
%
% cosmo_set_path()
%
% Notes:
%  - if $ROOT is the root directory of CoSMoMVPA, then this function adds
%    the paths $ROOT/{mvpa,external}, and their subdirectories, to the
%    matlab path. It removes $ROOT{doc,examples,tests}.
%  - A warning message is given if an unexpected directory structure is
%    encountered.
%  - To store the path, run savepath after calling this function.
%
% Example:
%   cosmo_set_path();
%   savepath();
%
% #   For CoSMoMVPA's copyright information and license terms,   #
% #   see the COPYING file distributed with CoSMoMVPA.           #

    % directories to be added and removed from the path
    remove_subdirs={'doc','examples','tests'};
    add_subdirs={'mvpa','external'};

    remove_add_subdirs={remove_subdirs, add_subdirs};

    % get path of this very function
    me_pth=fileparts(which(mfilename()));

    % get CoSMoMVPA root path
    root_pth=fileparts(me_pth);

    % get matlab path, each path in a cell
    pathsep_=pathsep(); % store path separator
    matlab_pth=cosmo_strsplit(path(),pathsep_);

    for add=[0,1]
        subdirs=remove_add_subdirs{add+1};

        n=numel(subdirs);
        for k=1:n
            subdir=subdirs{k};
            full_pth=fullfile(root_pth,subdir);

            if exist(full_pth,'file') && isdir(full_pth)
                % generate all subdirectories
                all_pths=cosmo_strsplit(genpath(full_pth),pathsep_);

                % see which ones are in the matlab path
                in_matlab_pth=cosmo_match(all_pths,matlab_pth);

                for j=1:numel(all_pths)
                    pth=all_pths{j};
                    if add && ~in_matlab_pth(j)
                        addpath(pth);
                    elseif ~add && in_matlab_pth(j)
                        rmpath(pth);
                    else
                        % do nothing
                    end
                end
            else
                cosmo_warning(['Path ''%s'' not found - this is an '...
                            'unexpected directory structure. ',...
                            'Please check your path settings'],full_pth);
            end

        end
    end