Diff for "BatchRenderRfx" - MRC CBU Imaging Wiki
location: Diff for "BatchRenderRfx"
Differences between revisions 17 and 40 (spanning 23 versions)
Revision 17 as of 2008-03-12 16:14:02
Size: 8654
Editor: pc0302
Comment:
Revision 40 as of 2013-03-07 21:24:07
Size: 9395
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Modified version Ferath's script to threshhold and print SPM5 results. The script prints glass brains and rendered activations as well as the first page of the results table. The lines in block (3) are the ones you need to (or are most likely to want to) change. Originally modified by DannyMitchell and subsequently by IanNimmoSmith. Modified version Ferath's script ([[attachment:BatchRenderRFX.m]]) to threshhold and print SPM5 results. The script prints glass brains and rendered activations as well as the first page of the results table. The lines in block (3) are the ones you need to (or are most likely to want to) change. Originally modified by DannyMitchell and subsequently by IanNimmoSmith.
Line 3: Line 3:
 1. The program needs files [[attachment:cls_getRes.m]] and [[attachment:cls_getSPM2.m]] . For CBU people the following line should find them, otherwise you need to download them and point to their path. {{{addpath /imaging/dm01/MoreTools/spm2Batch}}}. Also, you should add a path to the custom spm_render_dm, which solves some of the issues of the default spm_render command {{{addpath /imaging/dm01/MEG/aaMEG}}}. Finally, if you are using AAL, you should add the path to its toolkit, e.g. {{addpath /imaging/av02/tools/aal}}
Line 4: Line 5:
 1. The program needs files attachment:cls_getRes.m and attachment:cls_getSPM2.m . For CBU people the following line should find them, otherwise you need to download them and point to their path. {{{addpath /imaging/dm01/MoreTools/spm2Batch}}}. Also, you should add a path to the custom spm_render_dm, which solves some of the issues of the default spm_render command {{{addpath /imaging/dm01/MEG/aaMEG}}}

 1. Last updated 02/07 by DannyMitchell
 1. Last updated 03/08 by DannyMitchell and [[http://imaging.mrc-cbu.cam.ac.uk/basewiki/AlejandroVicenteGrabovetsky|AlejandroVicenteGrabovetsky]]
Line 15: Line 14:
Line 18: Line 16:
% rendered activations and deactivations (assumes that positive and negative
% second level contrasts have already been calculated;
Glass brains will
% rendered activations and deactivations (Glass brains will
Line 29: Line 26:
Line 32: Line 28:
dis=8; % distance among clusters (mm)}}} dis=8; % distance among clusters (mm)
doaal = 0; % Label anatomical clusters with AAL? 1=yes 0=no
ignore_empty = 1 % (AVG) Create a file if there are no significant voxels? 1=yes 0=no
Line 34: Line 32:
 2. {{{ coi=[29, -57, 45] % coordinate of interest for check_reg if no significant voxels}}}

 1. {{{
Line 39: Line 39:
if exist(fullfile(dataroot,strcat(outputdir,outputfilesuffix)))==2
    delete(fullfile(dataroot,strcat(outputdir,outputfilesuffix)));
end;
Line 46: Line 42:
try q=defaults.units{3}; catch; defaults.units={'mm','mm','mm'}; end; % for some reason I had to add this line 15/01/07 try q=defaults.units{3}; catch; defaults.units={'mm','mm','mm'}; end;
}}}
Line 48: Line 45:
%--------------------------------------------------------------------
3
. {{{ %- xSPM is a structure for the parameters}}}

 
 1. {{{
%- xSPM is a structure for the parameters
Line 62: Line 57:
Line 65: Line 59:
 4. {{{  1. {{{
Line 68: Line 62:
Line 70: Line 63:
        if exist(strcat(condir,outputfilesuffix),'file')==2         if exist(strcat(condir,outputfilesuffix),'file')
Line 73: Line 66:
Line 76: Line 68:
Line 97: Line 88:
Line 102: Line 92:
        for con=2:-1:1 % get any negative tail first, so that glass brain ends up showing positive tail         for con=2:-1:1 % get any -ve tail first, so that glass brain ends up showing +ve tail
Line 108: Line 98:
Line 139: Line 128:
                    ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,') No significant effects'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none');                     if ignore_empty == 0
                        %%(AVG) Probably no need to draw, so do next contrast rather than print this one
                        continue;
                    else
                        %%(djm) Overlay the results of individual subjects
                        spm_check_registration(char(SPM.xY.P));
                        spm_orthviews('reposition',coi)
                        ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,') No significant voxels; showing all subjects at %s'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none',mat2str(coi));
                    end
Line 144: Line 141:
        drawnow
Line 157: Line 155:
            try spm_print(strcat(condir,outputfilesuffix));
            catch fprintf('\nFailed to print! (check write permissions?)'); return
            end
Line 163: Line 158:
        %Following section borrowed from Mirjana Bozic's script
        if doaal == 1
            % SPM_print anatomical labels for clusters using batch-enabled AAL scripts
            gin_clusters_plabels_auto('List',xSPM);
            spm_print(strcat(condir,outputfilesuffix));
        end
Line 168: Line 169:
}}}

Modified version Ferath's script (BatchRenderRFX.m) to threshhold and print SPM5 results. The script prints glass brains and rendered activations as well as the first page of the results table. The lines in block (3) are the ones you need to (or are most likely to want to) change. Originally modified by DannyMitchell and subsequently by IanNimmoSmith.

  1. The program needs files cls_getRes.m and cls_getSPM2.m . For CBU people the following line should find them, otherwise you need to download them and point to their path. addpath /imaging/dm01/MoreTools/spm2Batch. Also, you should add a path to the custom spm_render_dm, which solves some of the issues of the default spm_render command addpath /imaging/dm01/MEG/aaMEG. Finally, if you are using AAL, you should add the path to its toolkit, e.g. addpath /imaging/av02/tools/aal

  2. Last updated 03/08 by DannyMitchell and AlejandroVicenteGrabovetsky

  3. dataroot = ''; % path to data
    anadirs = {''}; % name of folder(s), in above directory, where analysis is (useful if you have used several models in analysis)
    cond_dir={''}; % cell array of folder names in outputdir, containing the SPMs for each contrast
    % %%(AVG) Alternatively, save the data from your 'aamod_firstlevel_contrasts.m' file onto a 'contrast_names.mat' file and do the following:
    % load contrast_names
    % cond_dir=cname; %cname is the array of contrast names and their directory names in your second level analysis folder
    outputfilesuffix='_RFX_Rendered.ps'
    %{set the following variable to 'yes' to do a 2-tailed test and show
    % rendered activations and deactivations (Glass brains will
    % only show positive activations). Set it to 'no' to to a 1-tailed test
    % and only calculate positive activations. %}
    ShowDeactivations = 'no';
    Threshold=0.05; % p threshold
    ExtentThreshold=0; % minimum number of contiguous voxels
    addpath /imaging/dm01/MoreTools/spm2Batch %{the program needs files cls_getRes.m and cls_getSPM2.m. For CBU people this line will find them, otherwise you need to download them and point to their path.%}
    MCC='FDR'; % method for correcting for multiple comparisons : 'FWE','FDR', or 'none'
    Brain='/imaging/local/spm/spm5/rend/render_smooth_average.mat'%render_single_subj.mat' %render_smooth_average.mat'; % the brain on which you want to render the results
    Style=1; % Rendering Style: NaN=old, 1=normal, <1=brighter (0.75 = light, 0.5 = more, 0.25 = lots)
    % for results table
    num=3;    % number of maxima per cluster
    dis=8;    % distance among clusters (mm)
    doaal = 0; % Label anatomical clusters with AAL? 1=yes 0=no
    ignore_empty = 1 % (AVG) Create a file if there are no significant voxels? 1=yes 0=no
    
    coi=[29, -57, 45] % coordinate of interest for check_reg if no significant voxels
  4. %%%%%%% Do it:
    for  j = 1:size(anadirs,2)
        outputdir=anadirs{j};
    
    spm_defaults;
    global defaults
    defaults.modality='FMRI';
    try q=defaults.units{3}; catch; defaults.units={'mm','mm','mm'}; end;
  5. %- xSPM is a structure for the parameters
    xSPM = struct( ...
        'swd', '', ... % full path to SPM.mat file
        'Ic', [], ... % no of contrast (or contrasts for conjunction)
        'Im', [],... % no of contrast to mask with. Empty for no masking
        'pm', [],... % masking contrast uncorrected p
        'Ex', [],... % whether masking is inclusive or exclusive
        'title', '',... % if empty results in default contrast title
        'Mcp', MCC,... % Mutiple comp method: FWE|FDR|none
        'u', Threshold,... % threshold (corrected or uncorrected, as above)
        'k', ExtentThreshold); % extent threshold
    clear SPM
  6.     for i = 1:size(cond_dir,2)
            condir = fullfile(dataroot,outputdir,cond_dir{i});
            % Checks if there is a rendered file made for this contrast and deletes the old one
            if exist(strcat(condir,outputfilesuffix),'file')
                delete(strcat(condir,outputfilesuffix));
            end;
            cd(condir);
            xSPM.spmmat = fullfile(condir,'SPM.mat'); % Get SPM path
            %%%%%%%%% modified 080308 to run 2nd level contrasts if not found
            % Set significance thresholds and run t-tests if not done already
            load(xSPM.spmmat)
            if isempty(SPM.xCon)
                SPM.xCon = spm_FcUtil('Set',cond_dir{i},'T','c',1,SPM.xX.xKXs);
            end
            if lower(ShowDeactivations(1))=='y'
                xSPM.u=Threshold/2; % 2-tailed
                TailText=strcat('2-tailed, p<',num2str(Threshold));
                if length(SPM.xCon)<2
                    SPM.xCon(end+1) = spm_FcUtil('Set',strcat('Negative_',cond_dir{i}),'T','c',-1,SPM.xX.xKXs);
                end
            else
                xSPM.u=Threshold; % 1-tailed
                TailText=strcat('1-tailed, p<',num2str(Threshold));
            end
            if isempty(SPM.xCon(1).Vcon)
                spm_contrasts(SPM);
            end
            %%%%%%%%%%%%%%
            xSPM.k=ExtentThreshold;
            bck_xSPM=xSPM;
            delete(gcf) % this is a bit annoying, but for some reason I had problems without it
            clear dat
            for con=2:-1:1 % get any -ve tail first, so that glass brain ends up showing +ve tail
                xSPM=bck_xSPM; % Reset xSPM to default
                xSPM.Ic=con; %Set the current contrast Index
                if strcmp(ShowDeactivations,'no') && con==2; continue; end;
                try
                    [hReg,xSPM,SPM] = csl_getRes(xSPM);
                    if exist('dat','var')
                        dat(end+1) = struct('XYZ', xSPM.XYZ,'t', xSPM.Z','mat', xSPM.M,'dim', xSPM.DIM);
                    else
                        dat(1) = struct('XYZ', xSPM.XYZ,'t', xSPM.Z','mat', xSPM.M,'dim', xSPM.DIM);
                    end
                catch
                    xSPM.u=Threshold; % 1-tailed
                    TailText=strcat('1-tailed, p<',num2str(Threshold));
                end
            end
    
            dat=circshift(dat,[1 1]);
    
            try
                % should work if all tails tested have significant voxels
                spm_render_dm(dat,Style,Brain);
                ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,', red=positive)'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none');
            catch
                try
                    % just render +ve tail if no significant -ve voxels
                    spm_render_dm(dat(1),Style,Brain);
                    ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,', red=positive)'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none');
                catch
                    try
                        % just render -ve tail if no significant +ve voxels
                        dat(1)=dat(2); dat(1).t=zeros(length(dat(1).XYZ),1); % set dat(1) as empty dat(2)
                        spm_render_dm(dat,Style,Brain);
                        ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,', blue=negative)'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none');
                    catch
                        % probably no significant voxels
                        if ignore_empty == 0
                            %%(AVG) Probably no need to draw, so do next contrast rather than print this one
                            continue;
                        else
                            %%(djm) Overlay the results of individual subjects
                            spm_check_registration(char(SPM.xY.P));
                            spm_orthviews('reposition',coi)
                            ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,') No significant voxels; showing all subjects at %s'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none',mat2str(coi));
                        end
                    end
                end
            end
    
            drawnow
            try spm_print(strcat(condir,outputfilesuffix));
            catch fprintf('\nFailed to print! (check write permissions?)'); return
            end
    
            TabDat=spm_list('List',xSPM,hReg,num, dis);
            tot=0;
            for r=1:size(TabDat.dat,1)
                if ~isempty(TabDat.dat{r,4}); tot=tot+TabDat.dat{r,4};end
            end
            if tot>0
                delete(ann1);
                ann1=annotation('textbox',[0 .94 1 .06],'Color','r','String',{strcat('RFX results (',TailText,' correction=',MCC,')'),strcat('Data:...',condir),strcat('Date:...',datestr(now,0))},'edge','none');
                ann2=annotation('textbox',[0 0 1 .02],'Color','r','String',strcat('First page of table only. Total number of significant voxels=',num2str(tot)),'edge','none');
                delete(ann2);
            end
    
            %Following section borrowed from Mirjana Bozic's script
            if doaal == 1
                % SPM_print anatomical labels for clusters using batch-enabled AAL scripts
                gin_clusters_plabels_auto('List',xSPM);
                spm_print(strcat(condir,outputfilesuffix));
            end
            xSPM= bck_xSPM; % Reset xSPM to default
            delete(ann1);
        end
        fprintf('\nFinished.\nResults saved to: %s.\r',strcat(condir,outputfilesuffix));
    end

CbuImaging: BatchRenderRfx (last edited 2013-03-07 21:24:07 by localhost)