Unverified Commit 2774c2ad authored by stephen scott tucker's avatar stephen scott tucker Committed by GitHub
Browse files

User function fixes and changes (#56)

* prevented ArgClass Extract from indexing into empty list

* FuncCallClass GetInputs and GetOutputs convenience function for returning strings

* GetProcInputs method returns all properties of ProcInputClass for use with proc stream checking

* Processing stream is only run if Check returns zero, else an error msg is raised

* Changed uses of properties to propnames in ProcInputClass GetProcInputs

* tCCAaux_inx is a list again as variable length parameters are supported

* Standardized tIncMan, mlActAuto in code

* Properly generate the tIncCh matrix if it is not provided

* Include mlActAuto and tIncAuto in PCA motion correction

* recurse updated to work with new function inputs

* mlActMan and mlActAuto both used for wavelet correction

* OD2Conc wavelength restriction removed

* Phase out old GLM for new stim GLM, suppress a line in errchk

* Prevent stim amps getter from crashing on empty data

* Removed registry from PR
parent 3a11afd5
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1061,6 +1061,7 @@ classdef SnirfClass < AcqDataClass & FileLoadSaveClass
            s = zeros(length(t), length(obj.stim));
            for ii=1:length(obj.stim)
                data = obj.stim.GetData();
                if ~isempty(data)
                    [~, k] = nearest_point(t, data(:, 1));
                    if isempty(k)
                        continue;
@@ -1068,6 +1069,7 @@ classdef SnirfClass < AcqDataClass & FileLoadSaveClass
                    s(k,ii) = data(:, 3);
                end
            end
        end
        
        
        % ----------------------------------------------------------------------------------
−106 KiB

File deleted.

+54 −54
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@
% trange: [-2.0, 20.0]
% glmSolveMethod: 1
% idxBasis: 1
% paramsBasis: [1.0 1.0 0.0 0.0 0.0 0.0], maxnum: 6
% paramsBasis: [1.0 1.0 0.0 0.0]
% rhoSD_ssThresh: 15.0
% flagNuisanceRMethod: 1
% driftOrder: 3
@@ -131,8 +131,9 @@ end
% GetStims method to convert stim to the s vector that this function needs.
snirf = SnirfClass(data_y, stim);
t = snirf.GetTimeCombined();
s = snirf.GetStims(t);
nTrials = repmat({zeros(1, size(s,2))}, length(data_y), 1);
stimStates = snirf.GetStims(t);
stimAmps = snirf.GetStimAmps(t);
nTrials = repmat({zeros(1, size(stimStates,2))}, length(data_y), 1);

for iBlk=1:length(data_y)
    
@@ -227,19 +228,33 @@ for iBlk=1:length(data_y)
    end
    
    %%%%%%%%%%%%%%%%
    % Prune good stim
    % Prune good stim, generate onset matrix
    %%%%%%%%%%%%%%%%
    % handle case of conditions with 0 trials
    lstCond = find(sum(s>0,1)>0);
    nCond = length(lstCond); %size(s,2);
    onset = zeros(nT,nCond);
    % Get only indices of conditions with any stimStates that are 1
    lstCond = find(sum(stimStates == 1, 1) > 0);
    nCond = length(lstCond); % size(stimStates,2);
    nTrials{iBlk} = zeros(nCond,1);
    onset = zeros(nT, nCond);
    for iCond = 1:nCond
        lstT = find(s(:,lstCond(iCond))==1);
        lstp = find((lstT+nPre)>=1 & (lstT+nPost)<=nTpts);
        lstT = find(stimStates(:, lstCond(iCond)) == 1);  % Indices of stims enabled (== 1)
        lstp = find((lstT+nPre) >= 1 & (lstT+nPost) <= nTpts);  % Indices of stims not clipped by signal
        lst = lstT(lstp);
        nTrials{iBlk}(iCond) = length(lst);
        onset(lst+nPre,iCond) = 1;
        % Generate basis boxcars of stim amplitude and duration
        starts = lst+nPre;
        if ~isempty(stim(iCond).data)
            durations = stim(iCond).data(:, 2);
            amplitudes = stim(iCond).data(:, 3);
            for i = 1:length(starts)
                if idxBasis == 1  % Gaussian has no duration T (yet)
                   pulse_duration = 1; 
                else
                   pulse_duration = round(durations(i) / dt); 
                end
                pulse = (amplitudes(i) / pulse_duration) * ones(pulse_duration, 1);
                onset(starts(i):starts(i) + pulse_duration - 1, iCond) = pulse;
            end
        end
    end
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -254,19 +269,22 @@ for iBlk=1:length(data_y)
        tbasis = zeros(ntHRF,nB);
        for b=1:nB
            tbasis(:,b) = exp(-(tHRF-(trange(1)+b*gms)).^2/(2*gstd.^2));
            tbasis(:,b) = tbasis(:,b)./max(tbasis(:,b)); %normalize to 1
            tbasis(:,b) = tbasis(:,b)./max(tbasis(:,b));
        end
        
    elseif idxBasis==2
        % Modified Gamma
        if length(paramsBasis)==2
            nConc = 1;
        else
            nConc = 2;
        end
            
        nB = 1;
        tbasis = zeros(ntHRF,nB,nConc);
        for iConc = 1:nConc
            tau = paramsBasis((iConc-1)*3+1);
            sigma = paramsBasis((iConc-1)*3+2);
            T = paramsBasis((iConc-1)*3+3);
            tau = paramsBasis((iConc-1)*2+1);
            sigma = paramsBasis((iConc-1)*2+2);
            
            tbasis(:,1,iConc) = (exp(1)*(tHRF-tau).^2/sigma^2) .* exp( -(tHRF-tau).^2/sigma^2 );
            lstNeg = find(tHRF<0);
@@ -276,28 +294,21 @@ for iBlk=1:length(data_y)
                tbasis(1:round((tau-tHRF(1))/dt),1,iConc) = 0;
            end
            
            if T>0
                for ii=1:nB
                    foo = conv(tbasis(:,ii,iConc),ones(round(T/dt),1)) / round(T/dt);
                    tbasis(:,ii,iConc) = foo(1:ntHRF,1);
                end
            end
        end
        
    elseif idxBasis==3
        % Modified Gamma and Derivative
        if length(paramsBasis)==3
        if length(paramsBasis)==2
            nConc = 1;
        elseif length(paramsBasis)==6
        else
            nConc = 2;
        end
        
        nB = 2;
        tbasis=zeros(ntHRF,nB,nConc);
        for iConc = 1:nConc
            tau = paramsBasis((iConc-1)*3+1);
            sigma = paramsBasis((iConc-1)*3+2);
            T = paramsBasis((iConc-1)*3+3);
            tau = paramsBasis((iConc-1)*2+1);
            sigma = paramsBasis((iConc-1)*2+2);
            
            tbasis(:,1,iConc) = (exp(1)*(tHRF-tau).^2/sigma^2) .* exp( -(tHRF-tau).^2/sigma^2 );
            tbasis(:,2,iConc) = 2*exp(1)*( (tHRF-tau)/sigma^2 - (tHRF-tau).^3/sigma^4 ) .* exp( -(tHRF-tau).^2/sigma^2 );
@@ -306,19 +317,13 @@ for iBlk=1:length(data_y)
                tbasis(1:round((tau-tHRF(1))/dt),1:2,iConc) = 0;
            end
            
            if T>0
                for ii=1:nB
                    foo = conv(tbasis(:,ii,iConc),ones(round(T/dt),1)) / round(T/dt);
                    tbasis(:,ii,iConc) = foo(1:ntHRF,1);
                end
            end
        end
        
    elseif idxBasis==4
        % AFNI Gamma function
        if length(paramsBasis)==3
        if length(paramsBasis)==2
            nConc = 1;
        elseif length(paramsBasis)==6
        else
            nConc = 2;
        end
        
@@ -326,16 +331,11 @@ for iBlk=1:length(data_y)
        tbasis=zeros(ntHRF,nB,nConc);
        for iConc = 1:nConc
            
            p = paramsBasis((iConc-1)*3+1);
            q = paramsBasis((iConc-1)*3+2);
            T = paramsBasis((iConc-1)*3+3);
            p = paramsBasis((iConc-1)*2+1);
            q = paramsBasis((iConc-1)*2+2);
            
            tbasis(:,1,iConc) = (tHRF/(p*q)).^p.* exp(p-tHRF/q);
            
            if T>0
                foo = conv(tbasis(:,1,iConc),ones(round(T/dt),1)) / round(T/dt);
                tbasis(:,1,iConc) = foo(1:ntHRF,1);
            end
        end
        
    end
@@ -577,19 +577,19 @@ for iBlk=1:length(data_y)
                    yresid = zeros(size(y));
                    
                    foo = nTrials{iBlk};
                    nTrials{iBlk} = zeros(1,size(s,2));
                    nTrials{iBlk} = zeros(1,size(stimAmps,2));
                    nTrials{iBlk}(lstCond) = foo;
                    
                    foo = yavg;
                    yavg = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
                    yavg = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
                    yavg(:,:,:,lstCond) = foo;
                    
                    foo = yavgstd;
                    yavgstd = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
                    yavgstd = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
                    yavgstd(:,:,:,lstCond) = foo;
                    
                    foo = ysum2;
                    ysum2 = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
                    ysum2 = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
                    ysum2(:,:,:,lstCond) = foo;
                    
                    beta = [];
@@ -732,23 +732,23 @@ for iBlk=1:length(data_y)
    end
    
    foo = nTrials{iBlk};
    nTrials{iBlk} = zeros(1,size(s,2));
    nTrials{iBlk} = zeros(1,size(stimAmps,2));
    nTrials{iBlk}(lstCond) = foo;
    
    foo = yavg;
    yavg = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
    yavg = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
    yavg(:,:,:,lstCond) = foo;
    
    foo = yavgstd;
    yavgstd = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
    yavgstd = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
    yavgstd(:,:,:,lstCond) = foo;
    
    foo = ysum2;
    ysum2 = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
    ysum2 = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
    ysum2(:,:,:,lstCond) = foo;
    
    foo = tb;
    beta = zeros(size(foo,1),size(foo,2),size(foo,3),size(s,2));
    beta = zeros(size(foo,1),size(foo,2),size(foo,3),size(stimAmps,2));
    beta(:,:,:,lstCond) = foo;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ function errmsg = hmrR_GLM_errchk(trange, glmSolveMethod, idxBasis, paramsBasis,
       errmsg = 'Select a valid basis function (0-4)';
       return
    elseif glmSolveMethod > 2 || glmSolveMethod < 1
       errmsg = 'Select a valid solve method (1-2)'
       errmsg = 'Select a valid solve method (1-2)';
       return
    end
end
 No newline at end of file
+232 −86

File changed and moved.

Preview size limit exceeded, changes collapsed.

Loading