mfbox_pre_datavalue_run.m

来自「toolbox for spm 5 for data, model free a」· M 代码 · 共 115 行

M
115
字号
function [X,mask,grid,timeline,params,private]=mfbox_pre_datavalue_run(X,mask,grid,timeline,params,runflag,private)% select voxels based on value%% Usage:%  [X,mask,grid,timeline,params,private]=mfbox_pre_datavalue_run(X,mask,grid,timeline,params,runflag,private)%%  X        - (NxT) data%             or struct for mfbox_databackend('getdata',X,i),[],1);%  mask     - data mask (XxYxZ) with sum(mask(:))==N%  grid     - 3d positions (3xN) of the data values%  timeline - timeline (1xT)%  params   - struct with%             priority - evaluation priority%             valmin   - min value%             valmax   - max value%  runflag  - -1 get default parameter%              0 interactive ask parameters%              1 interactive ask parameters and run%              2 run%  private  - private data to enable plot updates while selecting (see also mfbox_databackend)%% Copyright by Peter Gruber and Fabian J. Theis% Signal Processing & Information Theory group% Institute of Biophysics, University of Regensburg, Germany% Homepage: http://research.fabian.theis.name%           http://www-aglang.uni-regensburg.de%% This file is free software, subject to the % GNU GENERAL PUBLIC LICENSE, see gpl.txterror(nargchk(1,7,nargin));error(nargchk(1,6,nargout));if (isstruct(X)), s = [X.dim,X.timesteps];else s = size(X);enddim = s(1:(end-1));if (length(dim)<2), dim = [1,dim]; endn = s(end);if (nargin<2), mask = true(dim); enddim = size(mask);if (length(dim)==length(s)), n = 1; endif (nargin<3), grid = mfbox_mkgrid(dim)'; endif (nargin<4), timeline = 0:(n-1); endif (nargin<5), params = []; endif (nargin<6), runflag = 1; endif (nargin<7), private = []; endif (isstruct(X))    oX = X;    X = zeros([prod(dim),n],'single');    minX = ones(dim)*Inf;    maxX = -ones(dim)*Inf;    for i=1:n        v = reshape(mfbox_databackend('getdata',oX,i),dim);        miv = minX>v; mav = maxX<v;        minX(miv) = v(miv); maxX(mav) = v(mav);        X(:,i) = v(mask);    endelse    minX = reshape(min(reshape(X,[],n),[],2),dim);    maxX = reshape(max(reshape(X,[],n),[],2),dim);endms = size(mask);if (any(ms==0)), ms = 0; endng = mat2cell(mfbox_mkgrid(ms),prod(ms),ones(1,length(ms)));g = cell(1,size(grid,1));for i=1:size(grid,1), g{i} = reshape(grid(i,:),dim); endif (any(cellfun(@(x) any(g{x}(:)~=ng{x}(:)),mat2cell(1:size(grid,1),1,ones(1,size(grid,1))))))    if (~isempty(minX))        minX = reshape(interpn(g{:},minX,ng{:}),dim);    end    if (~isempty(maxX))        maxX = reshape(interpn(g{:},maxX,ng{:}),dim);    endendminval = floor(min(minX(:)));maxval = ceil(max(maxX(:)));miv = max([-1/eps,minval]);mav = min([1/eps,maxval]);params = mfbox_checkparam(params,'pre','datavalue', ...    struct('valmin',miv-1,'valmax',mav+1,'priority',1));if (abs(runflag-0.5)<1)    if (exist('OCTAVE_HOME')~=5)% matlab        [params,private] = mfbox_pre_datavalueg(X,mask,grid,timeline,params,runflag,private);    elseif (exist('OCTAVE_HOME')==5) %octave        [params,runflag] = mfbox_getparam(params,runflag,'mfbox_pre_datavalueg.py');    endendif (runflag>0 && isstruct(params))    v = params.valmin; w = params.valmax;    if (v<w), mask = mask&(minX>v)&(maxX<w);    else mask = mask&((minX<=w)|(maxX>=v));    end    if (~isstruct(X))        sgr = size(grid);        sm = size(mask);        g = mat2cell(min(repmat(sm',1,sgr(2)),max(ones(sgr), ...            round(grid))),ones(1,sgr(1)),sgr(2));        nmask = mask(sub2ind(sm,g{:}));        grid = grid(:,nmask);        X = reshape(X,[],n);        X = X(nmask,:);    endendreturn

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?