-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmat2rawdata.m
More file actions
64 lines (56 loc) · 2.93 KB
/
Copy pathmat2rawdata.m
File metadata and controls
64 lines (56 loc) · 2.93 KB
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
function rawData = mat2rawdata(cfg, matData)
% mat2rawdata takes one mat file with data of one patient (as obtained from
% createDB_revised) and returns a fieldtrip compatible structure for
% preprocessing functions.
%
% cfg.continuous = 'yes' or 'no'; (contecanate all trials (and keep track
% of which is which using rawData.trialtype, or keep different trials. This only affects)
%
% e.g.: cfg=[]; cfg.continuous = 'no'; rawData = mat2rawdata(cfg, 'C:\Users\Roey\Documents\Lab\PNES Project\DB\rereferenced\pRoey');
% TODO: do we want to write a header for our eeg records, simply to be read
% using ft_definetrial and ft_read_header? This could be better than simply
% adding another non-fieldtrip field like interpolatedElectrodes.
matData = load(matData);
conditions = fields(matData);
rawData = struct;
eval(['rawData.label = matData.' conditions{1} '.label'';']);
rawData.trial = [];
rawData.time = [];
rawData.sampleinfo = [];
eval(['rawData.fsample = matData.' conditions{1} '.fsample;']);
rawData.trialtype = []; % cell array containing the condition name of each trial
rawData.interpolatedElectrodes = []; % these are actually the electrodes that need to be interpolated
rawData.trialStartTime = [];
rawData.trialinfo = [];
if strcmp(cfg.continuous, 'yes')
for conditionI = 1:length(conditions)
eval(['matDataTemp = matData.' conditions{conditionI} ';']);
for trialI = 1:length(matDataTemp.trial)
% concatenate all trials
rawData.trial{1}(:, end+1:end+length(matDataTemp.trial{trialI})) = matDataTemp.trial{trialI};
rawData.trialtype{end+1} = conditions{conditionI};
rawData.interpolatedElectrodes{end+1} = matDataTemp.interpolatedElectrodes{trialI};
end
end
rawData.time{trialI} = 0 : 1/(rawData.fsample) : ((size(rawData.trial{trialI},2)-1)/(rawData.fsample));
rawData.sampleinfo = [1, length(rawData.time{1})];
rawData.trialStartTime = matData.startTime;
else
rawData.sampleinfo = [0 0]; % will be deleted later
for conditionI = 1:length(conditions)
eval(['matDataTemp = matData.' conditions{conditionI} ';']);
for trialI = 1:length(matDataTemp.trial)
% concatenate all trials
rawData.trial{end+1} = matDataTemp.trial{trialI};
rawData.trialtype{end+1} = conditions{conditionI};
rawData.interpolatedElectrodes{end+1} = matDataTemp.interpolatedElectrodes{trialI};
rawData.time{end+1} = 0 : 1/(rawData.fsample) : ((size(rawData.trial{end},2)-1)/(rawData.fsample));
rawData.sampleinfo(end+1,:) = [rawData.sampleinfo(end,2)+1, rawData.sampleinfo(end,2)+length(matDataTemp.trial{trialI})];
rawData.trialinfo = [1:length(rawData.trial)]'; % this is the ordinal number of each trial
rawData.trialStartTime{end+1} = matDataTemp.startTime{trialI};
end
end
rawData.sampleinfo(1,:) = [];
end
% Add a trialinfo field, holding the ordinal number of each trial
end