123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- function res = getset(this, parent, fieldname, ind, values)
- % Generic method for getting and setting multiple fields of meeg struct
- % FORMAT res = getset(this, parent, fieldname, ind, values)
- % _______________________________________________________________________
- % Copyright (C) 2008-2012 Wellcome Trust Centre for Neuroimaging
- % Vladimir Litvak
- % $Id: getset.m 6535 2015-08-25 11:45:26Z vladimir $
- this = struct(this);
- if nargin == 3 || ~isnumeric(ind)
- try
- ind = 1:numel(getfield(this, parent));
- catch
- res = [];
- return;
- end
- end
- % Get
- if nargin <= 4
- res = cell(1, length(ind));
- for i = 1:length(ind)
- res{i} = getfield(this, parent, {ind(i)}, fieldname);
- end
- if isempty(res) || (all(cellfun('isclass', res, 'double') & (cellfun(@numel, res) == 1)))
- res = [res{:}];
- end
- if iscell(res) && (numel(res) == 1) && (numel(getfield(this, parent)) == 1) &&...
- strcmp(parent, 'trials') && strcmp(this.type, 'continuous')
- res = res{1};
- end
-
- return
- end
- % Set
- if nargin == 5
- % This might fail in some pathological cases, but not in what it's
- % supposed to be used for.
- if (isnumeric(values) || islogical(values)) && (length(values) == length(ind))
- values = num2cell(values);
- end
-
- if iscell(values) && ~(numel(values)==1 || numel(values) == length(ind))
- error('Illegal assignment: cannot match values and indices.');
- end
-
- for i = 1:length(ind)
- if iscell(values)
- this = setfield(this, parent, {ind(i)}, fieldname, values{i});
- else
- this = setfield(this, parent, {ind(i)}, fieldname, values);
- end
- end
- % getset is sometimes used on subfields of meeg then checkmeeg should
- % not be used
- if all(isfield(this, {'type', 'Nsamples', 'Fsample', 'timeOnset'}))
- res = meeg(this);
- else
- res = this;
- end
- end
|