|
181 | 181 | for i = 1:ceil(M/voxelsPerRun) |
182 | 182 | % partition voxels |
183 | 183 | usedVoxels = (i-1)*voxelsPerRun + 1:min(i*voxelsPerRun,M); |
184 | | - |
| 184 | + |
185 | 185 | fpart = f(usedVoxels); |
186 | 186 | Dpart = D(usedVoxels); |
187 | 187 | Dstarpart = Dstar(usedVoxels); |
|
263 | 263 |
|
264 | 264 | % Display iteration every 500th iteration |
265 | 265 | if ~mod(j,500) && j > burns |
266 | | - disp(['Iterations: ' num2str(j-burns)]); |
| 266 | + %disp(['Iterations: ' num2str(j-burns)]); |
267 | 267 | elseif ~mod(j,100) && j < burns |
268 | | - disp(['Burn in-steps: ' num2str(j)]); |
| 268 | + %disp(['Burn in-steps: ' num2str(j)]); |
269 | 269 | elseif j == burns |
270 | | - disp(['Burn in complete: ' num2str(j)]); |
| 270 | + %disp(['Burn in complete: ' num2str(j)]); |
271 | 271 | end |
272 | 272 | end |
273 | 273 |
|
|
286 | 286 | out.S0.std(usedVoxels) = sqrt(theta2sum(:,4)/n-(thetasum(:,4)/n).^2); |
287 | 287 | else |
288 | 288 | %mean |
289 | | - out.f.mean(usedVoxels) = mean(squeeze(theta(:,1,burns + 1:n+burns)),2); |
290 | | - out.D.mean(usedVoxels) = mean(squeeze(theta(:,2,burns + 1:n+burns)),2); |
291 | | - out.Dstar.mean(usedVoxels) = mean(squeeze(theta(:,3,burns + 1:n+burns)),2); |
292 | | - out.S0.mean(usedVoxels) = mean(squeeze(theta(:,4,burns + 1:n+burns)),2); |
| 289 | + out.f.mean(usedVoxels) = mean(reshape(theta(:,1,burns + 1:n+burns),[size(theta,1),n]),2); |
| 290 | + out.D.mean(usedVoxels) = mean(reshape(theta(:,2,burns + 1:n+burns),[size(theta,1),n]),2); |
| 291 | + out.Dstar.mean(usedVoxels) = mean(reshape(theta(:,3,burns + 1:n+burns),[size(theta,1),n]),2); |
| 292 | + out.S0.mean(usedVoxels) = mean(reshape(theta(:,4,burns + 1:n+burns),[size(theta,1),n]),2); |
293 | 293 |
|
294 | 294 | %median |
295 | | - out.f.median(usedVoxels) = median(squeeze(theta(:,1,burns + 1:n+burns)),2); |
296 | | - out.D.median(usedVoxels) = median(squeeze(theta(:,2,burns + 1:n+burns)),2); |
297 | | - out.Dstar.median(usedVoxels) = median(squeeze(theta(:,3,burns + 1:n+burns)),2); |
298 | | - out.S0.median(usedVoxels) = median(squeeze(theta(:,4,burns + 1:n+burns)),2); |
| 295 | + out.f.median(usedVoxels) = median(reshape(theta(:,1,burns + 1:n+burns),[size(theta,1),n]),2); |
| 296 | + out.D.median(usedVoxels) = median(reshape(theta(:,2,burns + 1:n+burns),[size(theta,1),n]),2); |
| 297 | + out.Dstar.median(usedVoxels) = median(reshape(theta(:,3,burns + 1:n+burns),[size(theta,1),n]),2); |
| 298 | + out.S0.median(usedVoxels) = median(reshape(theta(:,4,burns + 1:n+burns),[size(theta,1),n]),2); |
299 | 299 |
|
300 | 300 | % mode |
301 | | - out.f.mode(usedVoxels) = halfSampleMode(squeeze(theta(:,1,burns + 1:n+burns))); |
302 | | - out.D.mode(usedVoxels) = halfSampleMode(squeeze(theta(:,2,burns + 1:n+burns))); |
303 | | - out.Dstar.mode(usedVoxels) = halfSampleMode(squeeze(theta(:,3,burns + 1:n+burns))); |
304 | | - out.S0.mode(usedVoxels) = halfSampleMode(squeeze(theta(:,4,burns + 1:n+burns))); |
| 301 | + out.f.mode(usedVoxels) = halfSampleMode(reshape(theta(:,1,burns + 1:n+burns),[size(theta,1),n])); |
| 302 | + out.D.mode(usedVoxels) = halfSampleMode(reshape(theta(:,2,burns + 1:n+burns),[size(theta,1),n])); |
| 303 | + out.Dstar.mode(usedVoxels) = halfSampleMode(reshape(theta(:,3,burns + 1:n+burns),[size(theta,1),n])); |
| 304 | + out.S0.mode(usedVoxels) = halfSampleMode(reshape(theta(:,4,burns + 1:n+burns),[size(theta,1),n])); |
305 | 305 |
|
306 | 306 | % standard deviation |
307 | | - out.f.std(usedVoxels) = std(squeeze(theta(:,1,burns + 1:n+burns)),1,2); |
308 | | - out.D.std(usedVoxels) = std(squeeze(theta(:,2,burns + 1:n+burns)),1,2); |
309 | | - out.Dstar.std(usedVoxels) = std(squeeze(theta(:,3,burns + 1:n+burns)),1,2); |
310 | | - out.S0.std(usedVoxels) = std(squeeze(theta(:,4,burns + 1:n+burns)),1,2); |
| 307 | + out.f.std(usedVoxels) = std(reshape(theta(:,1,burns + 1:n+burns),[size(theta,1),n]),1,2); |
| 308 | + out.D.std(usedVoxels) = std(reshape(theta(:,2,burns + 1:n+burns),[size(theta,1),n]),1,2); |
| 309 | + out.Dstar.std(usedVoxels) = std(reshape(theta(:,3,burns + 1:n+burns),[size(theta,1),n]),1,2); |
| 310 | + out.S0.std(usedVoxels) = std(reshape(theta(:,4,burns + 1:n+burns),[size(theta,1),n]),1,2); |
311 | 311 | end |
312 | 312 | end |
313 | 313 |
|
|
381 | 381 | y(b < 3.75) = log(1.0 + a1.*(3.5156229 + a1.*(3.0899424 + a1.*(1.2067492 + a1.*(0.2659732 + a1.*(0.0360768 + a1.*0.0045813)))))); |
382 | 382 | y(b >= 3.75) = b(b >= 3.75) + log((0.39894228+a2.*(0.01328592+a2.*(0.00225319+a2.*(-0.00157565+a2.*(0.00916281+a2.*(-0.02057706+a2.*(0.02635537+a2.*(-0.01647633+a2.*0.00392377))))))))./sqrt(b(b>=3.75))); |
383 | 383 |
|
384 | | - |
| 384 | +function hsm = halfSampleMode(X) |
| 385 | +% calculates the half sample mode for each row in X |
| 386 | +if ~ismatrix(X) |
| 387 | + error('X must be a matrix or vector'); |
| 388 | +end |
| 389 | +X = sort(X,2); |
| 390 | +n = size(X,2); |
| 391 | +hsm = HSM_rec(n,X); |
| 392 | +function hsm = HSM_rec(n,X) |
| 393 | +% special cases |
| 394 | +if size(X,2) == 1 |
| 395 | + hsm = X; |
| 396 | + return; |
| 397 | +elseif size(X,2) == 2 |
| 398 | + hsm = sum(X,2)/2; |
| 399 | + return; |
| 400 | +elseif size(X,2) == 3 |
| 401 | + hsm = zeros(size(X,1),1); |
| 402 | + low = (X(:,2) - X(:,1)) < (X(:,3) - X(:,2)); % use lower pair |
| 403 | + eq = (X(:,2) - X(:,1)) == (X(:,3) - X(:,2)); % use mid value |
| 404 | + |
| 405 | + if any(low) |
| 406 | + hsm(low) = sum(X(low,1:2),2)/2; |
| 407 | + end |
| 408 | + if any(eq) |
| 409 | + hsm(eq) = X(eq,2); |
| 410 | + end |
| 411 | + if any(~(low|eq)) |
| 412 | + hsm(~(low|eq)) = sum(X(~(low|eq),2:3),2)/2; % otherwise |
| 413 | + end |
| 414 | + return |
| 415 | +end |
| 416 | +% general case (n > 3) |
| 417 | +wmin = X(:,end) - X(:,1); |
| 418 | +N = ceil(n/2); |
| 419 | +j = ones(size(X,1),1); |
| 420 | +for i = 1:(n-N+1) |
| 421 | + w = X(:,i+N-1) - X(:,i); |
| 422 | + m = w < wmin; |
| 423 | + wmin(m) = w(m); |
| 424 | + j(m) = i; |
| 425 | +end |
| 426 | +rowsub = repmat((1:size(X,1))',1,N); |
| 427 | +colsub = repmat(j,1,N) + repmat(0:N-1,size(X,1),1); |
| 428 | +Xsub = reshape(X(sub2ind(size(X),rowsub,colsub)),size(X,1),N); |
| 429 | +hsm = HSM_rec(N,Xsub); |
385 | 430 |
|
386 | 431 |
|
387 | 432 |
|
|
0 commit comments