[422372]: / functions / studyfunc / std_loadalleeg.m

Download this file

205 lines (187 with data), 9.7 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
 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
% STD_LOADALLEEG - constructs an ALLEEG structure, given the paths and file names
% of all the EEG datasets that will be loaded into the ALLEEG
% structure. The EEG datasets may be loaded without their EEG.data
% (see the POP_EDITOPTIONS function), so many datasets can be
% loaded simultaneously. The loaded EEG datasets have dataset
% information and a (filename) pointer to the data.
% Usage:
% % Load sseveral EEG datasets into an ALLEEG structure.
% >> ALLEEG = std_loadalleeg(paths,datasets) ;
% >> ALLEEG = std_loadalleeg(STUDY) ;
% Inputs:
% paths - [cell array of strings] cell array with all the datasets paths.
% datasets - [cell array of strings] cell array with all the datasets file names.
%
% Output:
% ALLEEG - an EEGLAB data structure, which holds the loaded EEG sets
% (can also be one EEG set).
% Example:
% >> paths = {'/home/eeglab/data/sub1/','/home/eeglab/data/sub2/', ...
% >> '/home/eeglab/data/sub3/', '/home/eeglab/data/sub6/'};
% >> datasets = { 'visattS1', 'visattS2', 'visattS3', 'visattS4'};
% >> ALLEEG = std_loadalleeg(paths,datasets) ;
%
% See also: POP_LOADSTUDY, POP_STUDY
%
% Authors: Hilit Serby, Arnaud Delorme, SCCN, INC, UCSD, October , 2004
% Copyright (C) Hilit Serby, SCCN, INC, UCSD, October 11, 2004, hilit@sccn.ucsd.edu
%
% This file is part of EEGLAB, see https://eeglab.org
% for the documentation and details.
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% 1. Redistributions of source code must retain the above copyright notice,
% this list of conditions and the following disclaimer.
%
% 2. Redistributions in binary form must reproduce the above copyright notice,
% this list of conditions and the following disclaimer in the documentation
% and/or other materials provided with the distribution.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
% THE POSSIBILITY OF SUCH DAMAGE.
function ALLEEG = std_loadalleeg(varargin)
if nargin < 1
help std_loadalleeg;
return;
end
genpath = '';
oldgenpath = '';
if isstruct(varargin{1})
datasets = {varargin{1}.datasetinfo.filename};
try,
paths = {varargin{1}.datasetinfo.filepath};
catch,
paths = cell(1,length(datasets));
paths(:) = { '' };
end
genpath = varargin{1}.filepath;
if isfield(varargin{1}.etc, 'oldfilepath')
oldgenpath = varargin{1}.etc.oldfilepath;
end
else
paths = varargin{1};
if nargin > 1
datasets = varargin{2};
else
datasets = paths;
paths = cell(size(datasets));
end
end
set = 1;
ALLEEG = [];
eeglab_options;
% read datasets
% -------------
comp = computer;
warnfold = 'off';
if length(oldgenpath) > 1 && oldgenpath(2) == ':' && ~strcmpi(comp(1:2), 'PC')
oldgenpath = [ filesep oldgenpath(4:end) ];
oldgenpath(find(oldgenpath == '\')) = filesep;
end
for dset = 1:length(paths)
if ~isempty(paths{dset})
if paths{dset}(2) == ':' && ~strcmpi(comp(1:2), 'PC')
paths{dset} = [ filesep paths{dset}(4:end) ];
paths{dset}(find(paths{dset} == '\')) = filesep;
end
end
[sub2 sub1] = fileparts(char(paths{dset}));
[sub3 sub2] = fileparts(sub2);
% priority is given to relative path of the STUDY if STUDY has moved
if ~isempty(oldgenpath) && oldgenpath(end) == filesep
oldgenpath(end) = [];
end
if ~isequal(genpath, oldgenpath) && ~isempty(oldgenpath) %
oldgenpath = strrep(oldgenpath, [ filesep filesep ], filesep);
if ~isequal(genpath, oldgenpath) && ~isempty(oldgenpath)
disp('Warning: STUDY moved since last saved, trying to load data files using relative path');
if ~isempty(strfind(char(paths{dset}), oldgenpath))
relativePath = char(paths{dset}(length(oldgenpath)+1:end));
relativePath = fullfile(genpath, relativePath);
else
disp('Important warning: relative path cannot calculated, make sure the correct data files are loaded');
relativePath = char(paths{dset});
end
% fix issue when datasets are in a parent folder of the STUDY
if dset == 1
indCommon = 1;
while indCommon <= length(oldgenpath) && indCommon <= length(paths{1}) && paths{1}(indCommon) == oldgenpath(indCommon)
indCommon = indCommon+1;
end
indCommon = indCommon-1;
if indCommon > 1 && indCommon < length(genpath) % do not change path if nothing in common between the two paths
genpath(indCommon-length(oldgenpath)+length(genpath)+1:end) = [];
end
end
else
relativePath = char(paths{dset});
end
else
relativePath = char(paths{dset});
end
% load files with a variety of extension using file-io
[~,~,ext] = fileparts(datasets{dset});
if ~isequal(lower(ext), '.set')
disp('Importing binary file and resaving with a .set file extension as an EEGLAB dataset');
EEG = pop_biosig(fullfile(relativePath, datasets{dset}));
[pathTmp,fileTmp,ext] = fileparts(fullfile(relativePath, datasets{dset}));
EEG = pop_saveset(EEG, fullfile(pathTmp, [ fileTmp '.set' ]));
elseif exist(fullfile(relativePath, datasets{dset})) == 2
EEG = pop_loadset('filename', datasets{dset}, 'filepath', relativePath, 'loadmode', 'info', 'check', 'off');
elseif exist(fullfile(char(paths{dset}), datasets{dset})) == 2
EEG = pop_loadset('filename', datasets{dset}, 'filepath', char(paths{dset}), 'loadmode', 'info', 'check', 'off');
elseif exist( fullfile(genpath, datasets{dset})) == 2
[tmpp tmpf ext] = fileparts(fullfile(genpath, datasets{dset}));
EEG = pop_loadset('filename', [tmpf ext], 'filepath',tmpp, 'loadmode', 'info', 'check', 'off');
warnfold = 'on';
elseif exist( fullfile(genpath, sub1, datasets{dset})) == 2
[tmpp tmpf ext] = fileparts(fullfile(genpath, sub1, datasets{dset}));
EEG = pop_loadset('filename', [tmpf ext], 'filepath',tmpp, 'loadmode', 'info', 'check', 'off');
warnfold = 'on';
elseif exist( fullfile(genpath, sub2, datasets{dset})) == 2
[tmpp tmpf ext] = fileparts(fullfile(genpath, sub2, datasets{dset}));
EEG = pop_loadset('filename', [tmpf ext], 'filepath',tmpp, 'loadmode', 'info', 'check', 'off');
warnfold = 'on';
elseif exist( fullfile(genpath, sub2, sub1, datasets{dset})) == 2
[tmpp tmpf ext] = fileparts(fullfile(genpath, sub2, sub1, datasets{dset}));
EEG = pop_loadset('filename', [tmpf ext], 'filepath',tmpp, 'loadmode', 'info', 'check', 'off');
warnfold = 'on';
elseif exist(lower(fullfile(char(paths{dset}), datasets{dset}))) == 2
EEG = pop_loadset('filename', lower(datasets{dset}), 'filepath',lower(char(paths{dset})), 'loadmode', 'info', 'check', 'off');
elseif exist(fullfile(pwd, datasets{dset})) == 2
EEG = pop_loadset('filename', lower(datasets{dset}), 'filepath',pwd, 'loadmode', 'info', 'check', 'off');
else
txt = [ sprintf('The dataset %s is missing\n', datasets{dset}) 10 ...
'Is it possible that it might have been deleted?' 10 ...
'If this is the case, re-create the STUDY using the remaining datasets' ];
error(txt);
end
EEG = eeg_checkset(EEG);
if ~option_storedisk
EEG = eeg_checkset(EEG, 'loaddata');
elseif ~ischar(EEG.data)
EEG.data = 'in set file';
EEG.icaact = [];
end
[ALLEEG, EEG] = eeg_store(ALLEEG, EEG, 0, 'notext');
end
ALLEEG = eeg_checkset(ALLEEG);
if strcmpi(warnfold, 'on') && ~strcmpi(pwd, genpath) && ~isempty(genpath)
disp('Changing current path to STUDY path...');
cd(genpath);
end
if strcmpi(warnfold, 'on')
disp('This STUDY has a relative path set for the datasets');
disp('so the current path MUST remain the STUDY path');
end