Skip to content

Commit 5fd7163

Browse files
authored
Merge v1.70.1: Fix menu item "Load Stim from TSV" file. (#154)
* v1.70.1 -- Fix menu item "Load Stim from TSV" file. -- Fix ProbeClass converting SD probe data to ProbeClass - instead of SD.refpts it should be SD.Landmarks * -- 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
1 parent 67b7c9f commit 5fd7163

File tree

9 files changed

+124
-17
lines changed

9 files changed

+124
-17
lines changed

DataTree/AcquiredData/Nirs/NirsClass.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,19 +220,19 @@ function SortData(obj)
220220
err = 0;
221221
end
222222

223-
if isproperty(fdata,'t')
223+
if isproperty(fdata,'t') && isproperty(fdata,'d')
224224
obj.t = fdata.t;
225225
if ~isempty(obj.t)
226226
obj.errmargin = min(diff(obj.t))/10;
227227
elseif err == 0
228228
err = -3;
229229
end
230+
if length(fdata.t) ~= size(fdata.d,1) && err == 0
231+
err = -3;
232+
end
230233
elseif err == 0
231234
err = -3;
232235
end
233-
if length(fdata.t) ~= size(fdata.d,1) && err == 0
234-
err = -3;
235-
end
236236
end
237237

238238

DataTree/AcquiredData/Snirf/ProbeClass.m

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@
5555
else
5656
obj.detectorPos3D = SD.DetPos;
5757
end
58-
if isfield(SD,'refpts')
59-
obj.landmarkPos3D = SD.refpts.pos;
60-
obj.landmarkLabels = SD.refpts.labels;
61-
if isfield(SD,'refpts2D')
62-
obj.landmarkPos2D = SD.refpts2D.pos;
58+
if isfield(SD,'Landmarks3D')
59+
obj.landmarkPos3D = SD.Landmarks3D.pos;
60+
obj.landmarkLabels = SD.Landmarks3D.labels;
61+
if isfield(SD,'Landmarks2D')
62+
obj.landmarkPos2D = SD.Landmarks2D.pos;
6363
end
64+
else
65+
obj.landmarkPos3D = SD.DummyPos;
66+
obj.landmarkLabels = SD.Landmarks3D.labels;
6467
end
6568
obj.frequencies = 1;
6669
obj.timeDelays = 0;

DataTree/Version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.3.0
1+
1.3.1

MainGUI/MainGUI.m

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2195,11 +2195,8 @@ function menuItemExportStim_Callback(~, ~, ~)
21952195

21962196

21972197
% --------------------------------------------------------------------
2198-
function menuItemReloadStim_Callback(~, ~, handles)
2198+
function menuItemReloadStim_Callback(hObject, ~, handles)
21992199
global maingui
2200-
[iGroup, iSubj, iSess, iRun] = maingui.dataTree.GetCurrElemIndexID();
22012200
maingui.dataTree.ReloadStim();
2202-
Update('DataTreeClass',[iGroup, iSubj, iSess, iRun]);
2203-
DisplayStim(handles);
2204-
2201+
DisplayData(handles, hObject);
22052202

Utils/Shared/Version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.0
1+
1.1.1
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
function generateSimData(dirname, format)
2+
if ~exist('dirname','var')
3+
dirname = pwd;
4+
end
5+
if ~exist('format','var')
6+
format = '.snirf';
7+
end
8+
dirname = filesepStandard(dirname);
9+
10+
files = DataFilesClass(dirname, format, 'standalone').files;
11+
for ii = 1:length(files)
12+
if ~isempty(findstr(files(ii).name, '_sim'))
13+
continue;
14+
end
15+
obj = generateSimDataOneFile([files(ii).rootdir, files(ii).name]);
16+
17+
[p,f,e] = fileparts([files(ii).rootdir, files(ii).name]);
18+
fname = [filesepStandard(p),f,'_sim',e];
19+
fprintf('Saving simulated data in %s\n', fname);
20+
obj.Save(fname);
21+
end
22+
23+
24+
25+
26+
% ---------------------------------------------------------------
27+
function obj = generateSimDataOneFile(obj)
28+
d = [];
29+
if ischar(obj)
30+
obj = SnirfClass(obj);
31+
d = obj.data;
32+
elseif isa(obj, 'SnirfClass')
33+
d = obj.data;
34+
elseif isa(obj, 'DataClass')
35+
d = obj;
36+
obj = SnirfClass(d);
37+
end
38+
ml = d.GetMeasurementList('matrix');
39+
for iBlk = length(d)
40+
nTpts = size(d(iBlk).dataTimeSeries,1);
41+
for iM = 1:length(d(iBlk).measurementList)
42+
data = ml(iM,:);
43+
stepsize = floor(nTpts / length(data));
44+
for iDt = 1:length(data)
45+
y = data(iDt);
46+
iTptS = (iDt-1) * stepsize + 1;
47+
iTptE = iTptS + stepsize - 1;
48+
if nTpts-iTptE < stepsize
49+
iTptE = nTpts;
50+
end
51+
d(iBlk).dataTimeSeries(iTptS:iTptE, iM) = y;
52+
end
53+
end
54+
end
55+
obj.data = d;
56+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function [t, y] = simulateDataTimeSeries(N, alpha, sigma)
2+
3+
if ~exist('N','var')
4+
N = 1e3;
5+
end
6+
if ~exist('alpha','var')
7+
alpha = 1;
8+
end
9+
if ~exist('sigma','var')
10+
sigma = .4;
11+
end
12+
13+
% generate time
14+
nTpts = N;
15+
sampleRate = 10;
16+
timeTotal = 1/sampleRate * nTpts;
17+
t = 0:1/sampleRate:timeTotal;
18+
t(N+1:end) = [];
19+
20+
% Generate data
21+
22+
y = zeros(N, 1);
23+
y(1) = randn; % Initialize
24+
fprintf('Rand = %0.4f\n', y(1));
25+
26+
for k = 2:N
27+
y(k) = alpha*y(k-1) + randn*sigma;
28+
end
29+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function snirf = simulateProbeData(probefile, ntpts)
2+
snirf = SnirfClass.empty();
3+
if ~exist('probefile','var')
4+
return;
5+
end
6+
if ~exist('ntpts','var')
7+
ntpts = 1e3;
8+
end
9+
10+
if ~ispathvalid(probefile)
11+
return;
12+
end
13+
14+
nirs = NirsClass(probefile);
15+
for iM = 1:length(nirs.SD.MeasList)
16+
[nirs.t, nirs.d(:,iM)] = simulateDataTimeSeries(ntpts);
17+
end
18+
snirf = SnirfClass(nirs.d, nirs.t, nirs.SD, [], []);
19+
[p,f] = fileparts(probefile);
20+
snirf.Save(['./',f,'.snirf']);
21+
22+

Version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.70.0
1+
1.70.1

0 commit comments

Comments
 (0)