Commit 4ea50119 authored by jayd1860's avatar jayd1860
Browse files

-- Sync with v1.1.1 Utils library: add some diagnostic data simulation scripts...

-- Sync with v1.1.1 Utils library: add some diagnostic data simulation scripts to Utils/Shared library which can add data time course to for instance probe.SD for testing AtlasViewer probe registration
parent 811cc8dd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
1.1.0
1.1.1
+56 −0
Original line number Diff line number Diff line
function generateSimData(dirname, format)
if ~exist('dirname','var')
    dirname = pwd;
end
if ~exist('format','var')
    format = '.snirf';
end
dirname = filesepStandard(dirname);

files = DataFilesClass(dirname, format, 'standalone').files;
for ii = 1:length(files)
    if ~isempty(findstr(files(ii).name, '_sim'))
        continue;
    end
    obj = generateSimDataOneFile([files(ii).rootdir, files(ii).name]);
    
    [p,f,e] = fileparts([files(ii).rootdir, files(ii).name]);
    fname = [filesepStandard(p),f,'_sim',e];
    fprintf('Saving simulated data in %s\n', fname);
    obj.Save(fname);
end




% ---------------------------------------------------------------
function obj = generateSimDataOneFile(obj)
d = [];
if ischar(obj)
    obj = SnirfClass(obj);
    d = obj.data;
elseif isa(obj, 'SnirfClass')
    d = obj.data;
elseif isa(obj, 'DataClass')
    d = obj;
    obj = SnirfClass(d);
end
ml = d.GetMeasurementList('matrix');
for iBlk = length(d)
    nTpts = size(d(iBlk).dataTimeSeries,1);
    for iM = 1:length(d(iBlk).measurementList)
        data = ml(iM,:);
        stepsize = floor(nTpts / length(data));
        for iDt = 1:length(data)
            y = data(iDt);
            iTptS = (iDt-1) * stepsize + 1;
            iTptE = iTptS + stepsize - 1;            
            if nTpts-iTptE < stepsize
                iTptE = nTpts;
            end
            d(iBlk).dataTimeSeries(iTptS:iTptE, iM) = y;
        end
    end
end
obj.data = d;
+29 −0
Original line number Diff line number Diff line
function [t, y] = simulateDataTimeSeries(N, alpha, sigma)

if ~exist('N','var')
    N = 1e3; 
end
if ~exist('alpha','var')
    alpha = 1;
end
if ~exist('sigma','var')
    sigma = .4; 
end

% generate time
nTpts = N;
sampleRate = 10;
timeTotal = 1/sampleRate * nTpts;
t = 0:1/sampleRate:timeTotal;
t(N+1:end) = [];

% Generate data

y = zeros(N, 1); 
y(1) = randn; % Initialize
fprintf('Rand = %0.4f\n', y(1));

for k = 2:N
    y(k) = alpha*y(k-1) + randn*sigma;
end
+22 −0
Original line number Diff line number Diff line
function snirf = simulateProbeData(probefile, ntpts)
snirf = SnirfClass.empty();
if ~exist('probefile','var')
    return;
end
if ~exist('ntpts','var')
    ntpts = 1e3;
end

if ~ispathvalid(probefile)
    return;
end

nirs = NirsClass(probefile);
for iM = 1:length(nirs.SD.MeasList)
    [nirs.t, nirs.d(:,iM)] = simulateDataTimeSeries(ntpts);
end
snirf = SnirfClass(nirs.d, nirs.t, nirs.SD, [], []);
[p,f] = fileparts(probefile);
snirf.Save(['./',f,'.snirf']);