<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>BatchRenderRfx</title><revhistory><revision><revnumber>40</revnumber><date>2013-03-07 21:24:07</date><authorinitials>localhost</authorinitials><revremark>converted to 1.6 markup</revremark></revision><revision><revnumber>39</revnumber><date>2008-03-14 13:34:40</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>38</revnumber><date>2008-03-14 13:24:15</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>37</revnumber><date>2008-03-12 18:40:49</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>36</revnumber><date>2008-03-12 18:39:35</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>35</revnumber><date>2008-03-12 18:39:13</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>34</revnumber><date>2008-03-12 18:39:03</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>33</revnumber><date>2008-03-12 18:37:59</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>32</revnumber><date>2008-03-12 18:28:20</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>31</revnumber><date>2008-03-12 18:22:49</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>30</revnumber><date>2008-03-12 17:55:41</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>29</revnumber><date>2008-03-12 17:54:00</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>28</revnumber><date>2008-03-12 17:46:54</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>27</revnumber><date>2008-03-12 17:46:33</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>26</revnumber><date>2008-03-12 17:45:55</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>25</revnumber><date>2008-03-12 16:43:29</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>24</revnumber><date>2008-03-12 16:43:09</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>23</revnumber><date>2008-03-12 16:42:43</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>22</revnumber><date>2008-03-12 16:42:26</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>21</revnumber><date>2008-03-12 16:15:56</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>20</revnumber><date>2008-03-12 16:15:11</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>19</revnumber><date>2008-03-12 16:14:50</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>18</revnumber><date>2008-03-12 16:14:28</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>17</revnumber><date>2008-03-12 16:14:02</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>16</revnumber><date>2008-03-12 16:13:18</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>15</revnumber><date>2008-03-12 13:27:09</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>14</revnumber><date>2008-03-12 13:26:23</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>13</revnumber><date>2008-03-12 13:24:46</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>12</revnumber><date>2008-03-12 13:24:04</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>11</revnumber><date>2008-03-12 13:23:52</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>10</revnumber><date>2008-03-12 13:22:57</date><authorinitials>pc0302.mrc-cbu.cam.ac.uk</authorinitials></revision><revision><revnumber>9</revnumber><date>2007-02-28 16:56:06</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>8</revnumber><date>2006-11-04 14:57:25</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>7</revnumber><date>2006-11-04 14:53:26</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>6</revnumber><date>2006-11-03 10:39:30</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>5</revnumber><date>2006-11-03 10:32:12</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>4</revnumber><date>2006-11-03 10:29:44</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>3</revnumber><date>2006-11-03 10:23:52</date><authorinitials>DannyMitchell2</authorinitials></revision><revision><revnumber>2</revnumber><date>2006-10-01 20:18:33</date><authorinitials>IanNimmoSmith</authorinitials></revision><revision><revnumber>1</revnumber><date>2006-10-01 20:12:08</date><authorinitials>IanNimmoSmith</authorinitials></revision></revhistory></articleinfo><para>Modified version Ferath's script (<ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/BatchRenderRfx?action=AttachFile&amp;do=get&amp;target=BatchRenderRFX.m">BatchRenderRFX.m</ulink>) 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 <ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/DannyMitchell#">DannyMitchell</ulink> and subsequently by <ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/IanNimmoSmith#">IanNimmoSmith</ulink>. </para><orderedlist numeration="arabic"><listitem><para>The program needs files <ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/BatchRenderRfx?action=AttachFile&amp;do=get&amp;target=cls_getRes.m">cls_getRes.m</ulink> and <ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/BatchRenderRfx?action=AttachFile&amp;do=get&amp;target=cls_getSPM2.m">cls_getSPM2.m</ulink> . For CBU people the following line should find them, otherwise you need to download them and point to their path. <code>addpath /imaging/dm01/MoreTools/spm2Batch</code>. Also, you should add a path to the custom spm_render_dm, which solves some of the issues of the default spm_render command <code>addpath /imaging/dm01/MEG/aaMEG</code>. Finally, if you are using AAL, you should add the path to its toolkit, e.g. <!--transclusion is not implemented in DocBook formatter-->addpath /imaging/av02/tools/aal<!--transclusion is not implemented in DocBook formatter--> </para></listitem><listitem><para>Last updated 03/08 by <ulink url="https://lsr-wiki-02.mrc-cbu.cam.ac.uk/imaging/BatchRenderRfx/imaging/DannyMitchell#">DannyMitchell</ulink> and <ulink url="http://imaging.mrc-cbu.cam.ac.uk/basewiki/AlejandroVicenteGrabovetsky">AlejandroVicenteGrabovetsky</ulink> </para></listitem><listitem><screen><![CDATA[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
]]><![CDATA[
coi=[29, -57, 45] % coordinate of interest for check_reg if no significant voxels]]></screen></listitem><listitem><screen><![CDATA[%%%%%%% Do it:
for  j = 1:size(anadirs,2)
    outputdir=anadirs{j};
]]><![CDATA[
spm_defaults;
global defaults
defaults.modality='FMRI';
try q=defaults.units{3}; catch; defaults.units={'mm','mm','mm'}; end;]]></screen></listitem><listitem><screen><![CDATA[%- 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]]></screen></listitem><listitem><screen><![CDATA[    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
]]><![CDATA[
        dat=circshift(dat,[1 1]);
]]><![CDATA[
        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
]]><![CDATA[
        drawnow
        try spm_print(strcat(condir,outputfilesuffix));
        catch fprintf('\nFailed to print! (check write permissions?)'); return
        end
]]><![CDATA[
        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
]]><![CDATA[
        %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]]></screen></listitem></orderedlist></article>