function [err, slc] = GetAfniSliceTriplet (Brik, BrikInfo, DM, Opt) % % [err, slc] = GetAfniSliceTriplet (Brik, BrikInfo, DM, Opt) % %Purpose: % Get the slices to display as they appear in the AFNI window % % %Input Parameters: % Brik: is a vector or a matrix containing the brik values % BrikInfo is a structure containing Header info % (both are output by BrikLoad function) % % DM is the output of function AFNI_SliceDispManip % % Opt is a an options structure with the following fields % .iSlc is an 1x3 vector with the Axial, Sagittal and Coronal slice indices to show (a la AFNI, first slice is indexed 0) % for examle [45 12 3] retrieves Axial slice 45, Sagittal slice 12 and Coronal slice 3. % if you need just one slice, then pass -1 where you do not need any slices % for example [45 -1 3] retrieves the axial and coronal slices only % .index is the sub-brick index, default is 0 % %Output Parameters: % err : 0 No Problem % : 1 Mucho Problems % slc is a structure [3x1] vector containing the slices requested in .iSlc % (where iSlc is -1, slc is empty) % .M [N x M] the slice as present in the brick % .Mdisp [O x P] the slice ready for display % % %Key Terms: % %More Info : % Test_DispAFNISlice % GetSurfSliceTriplet % % % Author : Ziad Saad % Date : Tue Aug 22 18:36:04 PDT 2000 % LBC/NIMH/ National Institutes of Health, Bethesda Maryland % last modified: Mon Aug 27 13:29:42 PDT 2001 %Define the function name for easy referencing FuncName = 'GetAfniSliceTriplet'; %Debug Flag DBG = 1; %initailize return variables err = 1; %turn Brick into a matrix if it isn't already if (ndims(Brik) < 3), Brik = reshape(Brik, BrikInfo.DATASET_DIMENSIONS(1), BrikInfo.DATASET_DIMENSIONS(2),... BrikInfo.DATASET_DIMENSIONS(3), BrikInfo.DATASET_RANK(2)); end if (~isfield(Opt, 'index') | isempty(Opt.index)), Opt.index = 0; end for (ip = 1:1:3), if (Opt.iSlc(ip) > 0), if (DM(ip).zflip), %added -1 on Mon Aug 27 13:29:42 PDT 2001 Opt.iSlc(ip) = BrikInfo.DATASET_DIMENSIONS(DM(ip).SliceDim) - Opt.iSlc(ip) -1; end %grab the slices switch DM(ip).SliceDim, case 1, slc(ip).M = permute(Brik(Opt.iSlc(ip)+1, :, : , Opt.index+1), [2 3 1]); case 2 slc(ip).M = permute(Brik(:, Opt.iSlc(ip)+1, :, Opt.index+1), [1 3 2]); case 3 slc(ip).M = Brik(:, :, Opt.iSlc(ip)+1, Opt.index+1); end %now manipulate them to have them display properly if (DM(ip).orpermute), slc(ip).Mdisp = permute(slc(ip).M,[2 1]); else slc(ip).Mdisp = slc(ip).M; end if (DM(ip).udflip), slc(ip).Mdisp = flipud(slc(ip).Mdisp); end if (DM(ip).lrflip), slc(ip).Mdisp = fliplr(slc(ip).Mdisp); end else slc(ip).M = []; slc(ip).Mdisp = []; end end %plane err = 0; return;