-
Notifications
You must be signed in to change notification settings - Fork 1
Branched tasklists
Version 4 allows for more complex tasklist designs. In particular, it allows for branched tasklists, where the analysis pipeline splits at some point into two or more parts. As an example, you could evaluate whether doing motion correction or slice timing first is best. Or, you could compare two first level models. Or you could branch twice, and do these two things together.
If you wish some part of your tasklist to be only run on a subset of the sessions you specify, you may used syntax like this
...
<module>
<branch>
<selected_sessions>attention eyemovements</selected_sessions>
... modules for to be only executed on these two sessions ...
</branch>
</module>where the <selected_sessions></selected_sessions> tag may be either names of one or more sessions separated by [space] or a list of sessions numbers.
Here is the first of two branching examples, available in the aa_recipes_and_parametersets directory. It is on the SVN here. In the following example, note the <module></module> tags around the two <branch></branch> structures
Note the data get split following aamod_tsdiffana into the two branches.
The <analysisid_suffix></analysisid_suffix> tags specify a suffix to be added to the analysis directory, to help organize the output.
<?xml version="1.0" encoding="utf-8"?>
<aap>
<tasklist>
<initialisation>
<module><name>aamod_checkparameters</name></module>
<module><name>aamod_evaluatesubjectnames</name></module>
<module><name>aamod_make_subjects_short</name></module>
<module><name>aamod_autoidentifyseries_timtrio</name></module>
<module><name>aamod_study_init</name></module>
<module><name>aamod_newsubj_init</name></module>
</initialisation>
<main>
<module><name>aamod_converttmaps</name></module>
<module><name>aamod_copystructural</name></module>
<module><name>aamod_convert_epis</name></module>
<module><name>aamod_tsdiffana</name></module>
<module>
<branch>
<analysisid_suffix>_realign_then_slicetime</analysisid_suffix>
<module><name>aamod_realign</name></module>
<module><name>aamod_slicetiming</name></module>
<module><name>aamod_coreg_noss</name></module>
<module><name>aamod_norm_noss</name></module>
<module><name>aamod_norm_write</name></module>
<module><name>aamod_smooth</name></module>
</branch>
<branch>
<analysisid_suffix>_slicetime_then_realign</analysisid_suffix>
<module><name>aamod_slicetiming</name></module>
<module><name>aamod_realign</name></module>
<module><name>aamod_coreg_noss</name></module>
<module><name>aamod_norm_noss</name></module>
<module><name>aamod_norm_write</name></module>
<module><name>aamod_smooth</name></module>
</branch>
</module>
</main>
</tasklist>
</aap>On SVN here.
You may add as many nested branches as you wish. This example includes double branching. It is also possible to set parameters (anything in the aap structure, including the spm defaults) using an <extraparameters></extraparameters> field. Both of these are included in this example.
<?xml version="1.0" encoding="utf-8"?>
<aap>
<!-- Example of doubling forking tasklist, and of setting aap parameters for a module within an xml tasklist -->
<tasklist>
<initialisation>
<module><name>aamod_checkparameters</name></module>
<module><name>aamod_evaluatesubjectnames</name></module>
<module><name>aamod_make_subjects_short</name></module>
<module><name>aamod_autoidentifyseries_timtrio</name></module>
<module><name>aamod_study_init</name></module>
<module><name>aamod_newsubj_init</name></module>
</initialisation>
<main>
<module><name>aamod_converttmaps</name></module>
<module><name>aamod_copystructural</name></module>
<module><name>aamod_convert_epis</name></module>
<module><name>aamod_tsdiffana</name></module>
<module>
<!-- First fork: realign or slice timing first? -->
<branch>
<analysisid_suffix>_realign_then_slicetime</analysisid_suffix>
<module><name>aamod_realign</name></module>
<module><name>aamod_slicetiming</name></module>
<module><name>aamod_coreg_noss</name></module>
<module><name>aamod_norm_noss</name></module>
<module><name>aamod_norm_write</name></module>
<module><name>aamod_smooth</name></module>
</branch>
<branch>
<analysisid_suffix>_slicetime_then_realign</analysisid_suffix>
<module><name>aamod_slicetiming</name></module>
<module><name>aamod_realign</name></module>
<module><name>aamod_coreg_noss</name></module>
<module><name>aamod_norm_noss</name></module>
<module><name>aamod_norm_write</name></module>
<module>
<!-- Second fork: for the slice time first, try two different smoothing kernels -->
<branch>
<analysisid_suffix>_regularsmoothing</analysisid_suffix>
<module><name>aamod_smooth</name></module>
</branch>
<branch>
<analysisid_suffix>_moresmoothing</analysisid_suffix>
<module><name>aamod_smooth</name>
<!-- Now set smoothing, equivalent to aap.tasklist.currenttask.settings.FWHM -->
<extraparameters>
<aap><tasklist><currenttask><settings>
<FWHM>16</FWHM>
</settings></currenttask></tasklist></aap>
</extraparameters>
</module>
</branch>
</module>
</branch>
</module>
</main>
</tasklist>
</aap>