function [search_volume, num_voxels]= ... glass_brain(input_file,input_thresh,mask_file,mask_thresh,flip); %GLASS_BRAIN makes an SPM stlye maximum intensity projection. % % [SEARCH_VOLUME, NUM_VOXELS] = % GLASS_BRAIN( INPUT_FILE, INPUT_THRESH [, MASK_FILE, MASK_THRESH [, FLIP]]) % % Makes an SPM stlye maximum projection of INPUT_FILE above INPUT_THRESH % and MASK_FILE above MASK_THRESH (ignored if empty; empty by default). % If MASK_THRESH is a vector [a b], a<=b, then mask is a=2 mask_thresh2=mask_thresh(2); else mask_thresh2=Inf; end d=fmris_read_image(mask_file,0,0); numslices=d.dim(3); d=fmris_read_image(mask_file,1:numslices,1); mask=d.data; mask= (mask>mask_thresh1 & mask<=mask_thresh2); num_voxels=sum(sum(sum(mask))); xf=find(max(max(mask,[],2),[],3)); xr=min(xf):max(xf); yf=find(max(max(mask,[],1),[],3)); yr=min(yf):max(yf); zf=find(max(max(mask,[],1),[],2)); zr=min(zf):max(zf); mask=mask(xr,yr,zr); d=fmris_read_image(input_file); X=d.data(xr,yr,zr)*flip; X(X<=input_thresh)=input_thresh-1; X(~mask)=input_thresh-2; else d=fmris_read_image(input_file); numslices=d.dim(3); X=d.data*flip; X(X<=input_thresh)=input_thresh-1; xr=1:d.dim(1); yr=1:d.dim(2); zr=1:d.dim(3); num_voxels=prod(d.dim(1:D)); end D=2+(numslices>1); voxel_volume=abs(prod(d.vox(1:D))); search_volume=num_voxels*voxel_volume num_voxels ax=abs(d.vox(1))*length(xr); ay=abs(d.vox(2))*length(yr); az=abs(d.vox(3))*length(zr); ext=input_file((length(input_file)-2):length(input_file)); isanalyze= all(ext=='img') if d.vox(1)>0 xr=xr-1; xlab='x'; else xr=-(d.dim(1)-xr); xlab='-x'; if isanalyze X=flipdim(X,1); end end if d.vox(2)>0 yr=yr-1; ylab='y'; else yr=-(d.dim(2)-yr); ylab='-y'; if isanalyze X=flipdim(X,2); end end h=0.75; clf; axes('position',[.1 .15+ax/(ax+az)*h ay/(ay+ax)*h az/(ax+az)*h]) X1=squeeze(max(X,[],1)); imagesc(yr,zr-1,X1'); if d.vox(3)>0 axis xy; end ylabel('z'); grid on; title([input_file ' > ' num2str(input_thresh)]); axes('position',[.15+ay/(ay+ax)*h .15+ax/(ax+az)*h ax/(ay+ax)*h az/(ax+az)*h]) X2=squeeze(max(X,[],2)); imagesc(xr,zr-1,X2'); if d.vox(3)>0 axis xy; end xlabel(xlab); grid on; if flip==1 title('Positive values'); else title('Negative values'); end axes('position',[.1 .1 ay/(ay+ax)*h*7/6 ax/(ax+az)*h]) X3=squeeze(max(X,[],3)); imagesc(yr,xr,X3); colorbar; xlabel(ylab); ylabel(xlab); grid on; return