-
Notifications
You must be signed in to change notification settings - Fork 0
/
nfb_dataread_mvpc.m
executable file
·76 lines (67 loc) · 2.2 KB
/
nfb_dataread_mvpc.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
function [result norm_par] = nfb_dataread_mvpc(result, rtconfig, targ_data, bg_data, n, norm_par)
global MAX_POS MAX_NEG;
result.ts(n,3) = mean(targ_data);
result.ts(n,4) = mean(bg_data);
eval(struct_extract(norm_par));
% Normalization: based on the most recent rest period
% normalization in the baseline period
if result.ts(n,2) == 11
% normalize
targ_vect(end+1,:) = targ_data;
if ~isempty(rtconfig.data.bg_roi)
bg_vect(end+1,:) = bg_data;
end
else
% do not normalize
if ~isempty(targ_vect)
% finish normalization
targ_base = mean(targ_vect);
if ~isempty(rtconfig.data.bg_roi)
bg_base = mean(bg_vect);
end
targ_vect = [];
bg_vect = [];
end
end
norm_par = struct_update(norm_par, targ_vect, bg_vect, targ_base, bg_base);
if targ_base(1)
mvpc = rtconfig.reference.mv_Train;
if mvpc.cfg.Perc
data_test = perc_data(double(targ_data), 0, targ_base);
bg_test = perc_data(double(bg_data), 0, bg_base);
else
data_test = double(targ_data);
bg_test = double(bg_data);
end
result.ts(n,7) = mean(data_test);
result.ts(n,8) = mean(bg_test);
switch mvpc.cfg.Bg
case 1
data_test = data_test-mean(bg_test);
case 2
data_test = [data_test; bg_test];
end
if strcmp(mvpc.cfg.Method,'NN')
r = sim(mvpc.model.net, data_test);
result.ts(n,9) = r(end);
elseif strcmp(mvpc.cfg.Method,'SVM')
[e, r] = svmclassify(data_test', 0, mvpc.model);
r = detrend([result.ts(:,9); r]);
if (abs(r(end)) > 1)
result.ts(n,9) = (r(end)/abs(r(end))+1)/2;
else
result.ts(n,9) = (r(end)+1)/2;
end
end
result.ts(n,5) = result.ts(n,9);
if rtconfig.feedback.break_yn
% parameters of breakpoints
br_l = rtconfig.feedback.break_low;
br_h = rtconfig.feedback.break_high;
sl_mid = rtconfig.feedback.sl_middle;
sl_ext = rtconfig.feedback.sl_extremity;
result.ts(n,10)= slope_fun(result.ts(n,9), 21, MAX_NEG, MAX_POS, br_l, br_h, sl_mid, sl_ext);
else
result.ts(n,10)= slope_fun(result.ts(n,9), 21, MAX_NEG, MAX_POS);
end
end