Skip to content

Commit d5f3f20

Browse files
committed
improved variable naming | improved masking
1 parent 49325fb commit d5f3f20

File tree

1 file changed

+26
-28
lines changed

1 file changed

+26
-28
lines changed

code/matlab/IRM.m

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
%
2626
% Input-referred model (IRM) mapping tool.
2727
%
28-
% irm = IRM(params) creates an instance of the IRM class.
29-
% params is a structure with 5 required fields
28+
% irm = IRM(parameters) creates an instance of the IRM class.
29+
% parameters is a structure with 5 required fields
3030
% - f_sampling: sampling frequency (1/TR)
3131
% - n_samples : number of samples (volumes)
3232
% - n_rows : number of rows (in-plane resolution)
@@ -55,7 +55,7 @@
5555
% (e.g. help IRM.mapping)
5656
%
5757
% typical workflow:
58-
% 1. irm = IRM(params);
58+
% 1. irm = IRM(parameters);
5959
% 2. irm.set_stimulus();
6060
% 3. irm.create_timecourse(FUN,xdata);
6161
% 4. results = irm.mapping(data);
@@ -87,24 +87,24 @@
8787

8888
methods (Access = public)
8989

90-
function self = IRM(params,varargin)
90+
function self = IRM(parameters,varargin)
9191
% constructor
9292
p = inputParser;
93-
addRequired(p,'params',@isstruct);
93+
addRequired(p,'parameters',@isstruct);
9494
addOptional(p,'hrf',[]);
95-
p.parse(params,varargin{:});
95+
p.parse(parameters,varargin{:});
9696

9797
self.is = 'input-referred modeling tool';
9898

9999
self.two_gamma = @(t) (6*t.^5.*exp(-t))./gamma(6)...
100100
-1/6*(16*t.^15.*exp(-t))/gamma(16);
101101

102-
self.f_sampling = p.Results.params.f_sampling;
102+
self.f_sampling = p.Results.parameters.f_sampling;
103103
self.p_sampling = 1/self.f_sampling;
104-
self.n_samples = p.Results.params.n_samples;
105-
self.n_rows = p.Results.params.n_rows;
106-
self.n_cols = p.Results.params.n_cols;
107-
self.n_slices = p.Results.params.n_slices;
104+
self.n_samples = p.Results.parameters.n_samples;
105+
self.n_rows = p.Results.parameters.n_rows;
106+
self.n_cols = p.Results.parameters.n_cols;
107+
self.n_slices = p.Results.parameters.n_slices;
108108
self.n_total = self.n_rows*self.n_cols*self.n_slices;
109109

110110
if ~isempty(p.Results.hrf)
@@ -228,7 +228,7 @@ function create_timecourse(self,FUN,xdata)
228228
%
229229
% optional inputs are
230230
% - threshold: minimum voxel intensity (default = 100.0)
231-
% - mask : binary mask for selecting voxels
231+
% - mask : binary mask for selecting voxels
232232

233233
text = 'mapping input-referred model...';
234234
fprintf('%s\n',text)
@@ -247,7 +247,7 @@ function create_timecourse(self,FUN,xdata)
247247
data = reshape(data(1:self.n_samples,:,:,:),...
248248
self.n_samples,self.n_total);
249249
mean_signal = mean(data);
250-
data = zscore(data);
250+
251251

252252
if isempty(mask)
253253
mask = mean_signal>=threshold;
@@ -256,53 +256,51 @@ function create_timecourse(self,FUN,xdata)
256256
voxel_index = find(mask);
257257
n_voxels = numel(voxel_index);
258258

259-
mag_d = sqrt(sum(data(:,mask).^2));
259+
data = zscore(data(:,mask));
260+
mag_d = sqrt(sum(data.^2));
260261

261262
results.R = zeros(self.n_total,1);
262263
results.P = zeros(self.n_total,self.n_predictors);
263264

264265
if size(self.hrf,2)==1
265-
hrf_fft = fft(repmat([self.hrf;...
266-
zeros(self.n_samples-self.l_hrf,1)],...
267-
[1,self.n_points]));
266+
hrf_fft = fft([self.hrf;...
267+
zeros(self.n_samples-self.l_hrf,1)]);
268268
tc = zscore(ifft(self.tc_fft.*hrf_fft))';
269269

270270
mag_tc = sqrt(sum(tc.^2,2));
271271
for m=1:n_voxels
272272
v = voxel_index(m);
273273

274-
CS = (tc*data(:,v))./...
275-
(mag_tc*mag_d(v));
274+
CS = (tc*data(:,m))./...
275+
(mag_tc*mag_d(m));
276276
id = isinf(CS) | isnan(CS);
277277
CS(id) = 0;
278278
[results.R(v),j] = max(CS);
279279
for p=1:self.n_predictors
280280
results.P(v,p) = self.xdata{p}(self.idx(j,p));
281281
end
282282

283-
waitbar(v/self.n_total,wb)
283+
waitbar(m/n_voxels,wb)
284284
end
285285
else
286-
hrf_fft_all = fft([self.hrf;...
287-
zeros(self.n_samples-self.l_hrf,self.n_total)]);
286+
hrf_fft_all = fft([self.hrf(:,mask);...
287+
zeros(self.n_samples-self.l_hrf,n_voxels)]);
288288
for m=1:n_voxels
289289
v = voxel_index(m);
290290

291-
hrf_fft = repmat(hrf_fft_all(:,v),...
292-
[1,self.n_points]);
293-
tc = zscore(ifft(self.tc_fft.*hrf_fft))';
291+
tc = zscore(ifft(self.tc_fft.*hrf_fft_all(:,m)))';
294292
mag_tc = sqrt(sum(tc.^2,2));
295293

296-
CS = (tc*data(:,v))./...
297-
(mag_tc*mag_d(v));
294+
CS = (tc*data(:,m))./...
295+
(mag_tc*mag_d(m));
298296
id = isinf(CS) | isnan(CS);
299297
CS(id) = 0;
300298
[results.R(v),j] = max(CS);
301299
for p=1:self.n_predictors
302300
results.P(v,p) = self.xdata(self.idx(j,p),p);
303301
end
304302

305-
waitbar(v/self.n_total,wb)
303+
waitbar(m/n_voxels,wb)
306304
end
307305
end
308306
results.R = reshape(results.R,self.n_rows,self.n_cols,self.n_slices);

0 commit comments

Comments
 (0)