12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- function this = link(this, fnamedat, dtype, slope, offset)
- % Links the object to data file (only if exists)
- % FORMAT this = link(this)
- % Will try to find the datafile based on fname and path
- % FORMAT this = link(this, fnamedat)
- % Will find the datafile using the provided name and path
- % FORMAT this = link(this, fnamedat, dtype, slope, offset)
- % Additional parameters for non-float data files
- % _________________________________________________________________________
- % Copyright (C) 2011 Wellcome Trust Centre for Neuroimaging
- % Vladimir Litvak
- % $Id: link.m 6437 2015-05-14 12:27:21Z vladimir $
- if isempty(this)
- error('All header dimensions should be >0');
- end
- if nargin == 1 || isempty(fnamedat)
- [p, f] = fileparts(fullfile(this));
- fnamedat = fullfile(p, [f '.dat']);
- else
- [p, f, x] = fileparts(fnamedat);
- if isempty(p)
- p = path(this);
- end
- if isempty(x)
- x = '.dat';
- end
- fnamedat = fullfile(p, [f x]);
- end
- % This is to re-use existing settings for non-floats. Use unlink to clear
- % these settings.
- if (nargin < 3) && isa(this.data, 'file_array') && ~isequal(lower(this.data.dtype), 'float32-le')
- dtype = this.data.dtype;
- offset = this.data.offset;
- slope = this.data.scl_slope;
- else
- if nargin < 3, dtype = 'float32-le'; end
- if nargin < 4, slope = 1; end
- if nargin < 5, offset = 0; end
- end
- if ~exist(fnamedat, 'file')
- error('Data file not found');
- end
- % Size determination here should worked for unlinked objects and be insensitive
- % to online montages.
- if ~strncmpi(transformtype(this), 'TF', 2)
- siz = [length(this.channels), nsamples(this), ntrials(this)];
- else
- siz = [length(this.channels), nfrequencies(this), nsamples(this), ntrials(this)];
- end
- this.data = file_array(fnamedat, siz, dtype, offset, slope);
- siz = num2cell(size(this));
- try
- this.data(siz{:});
- catch
- error('Dimensions mismatch. Could not link to the data file');
- end
- this = check(this);
|