-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvoltage_extra.m
110 lines (97 loc) · 3.06 KB
/
voltage_extra.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
function hdr = voltage_extra(hdr)
%VOLTAGE_EXTRA Retrofit a header with an added session.
%
% hdr = voltage_extra(hdr)
old_hdr = hdr;
par = hdr.par;
session = 3;
% environment and object information
newpar = struct();
newpar.env = [0 5];
newpar.obj = 17:24;
newpar.n_obj = 4;
newpar.n_env = 2;
obj_dir = fullfile(par.exp_dir, 'stimuli');
newpar.obj_files = cell(1, length(newpar.obj));
for j = 1:length(newpar.obj)
newpar.obj_files{j} = ...
fullfile(obj_dir, sprintf('object_%03d.jpg', newpar.obj(j)));
end
% pool design
dnew = struct();
dnew.learn = voltage_master(newpar);
hdr.design.learn.env = [hdr.design.learn.env; dnew.learn.env];
hdr.design.learn.obj = [hdr.design.learn.obj; dnew.learn.obj];
% study
par.study.nSessions = 1;
dnew.study = nav_design(dnew.learn.env, par.study);
% test
par.test.nSessions = 1;
dnew.test = nav_design(dnew.learn.env, par.test);
% disp
par.disp.nSessions = 1;
dnew.disp = disp_design(dnew.learn, par.disp);
% update the existing header with the new session
phase = {'learn' 'study' 'test' 'disp'};
pnav = {'study' 'test'};
for i = 1:length(phase)
% update parameters
if ~strcmp(phase{i}, 'learn')
hdr.par.(phase{i}).nSessions = session;
else
pool_par = hdr.par.pool.learn;
pool_par.env = [pool_par.env newpar.env];
pool_par.obj = [pool_par.obj newpar.obj];
pool_par.n_env = length(pool_par.env);
pool_par.obj_files = [pool_par.obj_files newpar.obj_files];
hdr.par.pool.learn = pool_par;
end
% update design
update = hdr.design.(phase{i});
new = dnew.(phase{i});
f = fieldnames(new);
for j = 1:length(f)
if strcmp(f{j}, 'session')
new.(f{j}) = repmat(session, size(new.(f{j})));
end
update.(f{j}) = [update.(f{j}); new.(f{j})];
end
hdr.design.(phase{i}) = update;
% update output files
if strcmp(phase{i}, 'disp')
name = {'log' 'mat'};
ext = {'.txt' '.mat'};
elseif ismember(phase{i}, pnav)
name = {'config' 'log' 'sync' 'frame'};
ext = {'.txt' '.xml' '.xml' '.xml'};
else
continue
end
out = voltage_output(phase{i}, name, ext, ...
hdr.par.(phase{i}).nSessions, ...
hdr.par.(phase{i}).nRuns);
hdr.output.(phase{i}) = out;
end
% write config files for all navigation tasks
for i = 1:length(pnav)
phase = pnav{i};
phase_par = hdr.par.(phase);
for j = 1:phase_par.nSessions
for k = 1:phase_par.nRuns
config_file = fullfile(hdr.subj_dir, ...
hdr.output.(phase).config{j,k});
if exist(config_file, 'file')
continue
else
fprintf('Writing config: %s\n', config_file);
voltage_config(hdr, pnav{i}, j, k);
end
end
end
end
% write header
header_file = fullfile(hdr.subj_dir, 'header.mat');
backup_file = fullfile(hdr.subj_dir, 'header_orig.mat');
fprintf('Header backup: %s\n', backup_file);
movefile(header_file, backup_file);
save(header_file, 'hdr');