{
"cells": [
{
"cell_type": "markdown",
"id": "594d685b-5d99-4a53-81d3-98080298e985",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"\n",
" \n"
]
},
{
"cell_type": "markdown",
"id": "cb046a2f-4a99-407e-8c02-d395c4710975",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"\n",
"\n",
"# Nipype on Neurodesk\n",
"#### An interactive RISE slideshow\n"
]
},
{
"cell_type": "markdown",
"id": "b9df93ec-b31b-48a1-8778-bcbc1f33a40e",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"
Author: Monika Doerig
\n" ] }, { "cell_type": "markdown", "id": "66cdf6cf-5cbf-4bb6-9036-1cc8a57aded1", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Press Space
to proceed through the slideshow.
Keep pressing Space
to advance to the next slide.
Objectives
\n", "Be aware ...
\n", "Cluster operation often needs a special setup.
\n" ] }, { "cell_type": "markdown", "id": "39add658-ec21-4a7b-bb93-a720d98d7838", "metadata": { "editable": true, "raw_mimetype": "", "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "All plugins can be executed with:\n", "```javascript\n", "workflow.run(plugin=PLUGIN_NAME, plugin_args=ARGS_DICT)\n", "```" ] }, { "cell_type": "markdown", "id": "ceaa1175-82c5-4023-ba0d-a0a2425c530c", "metadata": { "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "To run the workflow one node at a time:\n", "```javascript\n", "wf.run(plugin='Linear')\n", "```" ] }, { "cell_type": "markdown", "id": "f02e35de-e8e7-41a1-b7d1-5a311acbdda7", "metadata": { "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "To distribute processing on a multicore machine, number of processors/threads will be automatically detected:\n", "```javascript\n", "wf.run(plugin='MultiProc') \n", "```" ] }, { "cell_type": "markdown", "id": "ad212cb4-f5d9-41d0-a42f-fd73266fd74d", "metadata": { "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "Plugin arguments:\n", "```javascript\n", "arguments = {'n_procs' : num_threads,\n", " 'memory_gb' : num_gb} \n", "\n", "wf.run(plugin='MultiProc', plugin_args=arguments)\n", "```" ] }, { "cell_type": "markdown", "id": "6f7e4a12-9d62-4ea1-86eb-cbfe4449d2bb", "metadata": { "editable": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "In order to use Nipype with SLURM simply call:\n", "\n", "```javascript\n", "wf.run(plugin='SLURM')\n", "``` \n", "\n", "Optional arguments:
\n", "\n", "template
: If you want to use your own job submission template (the plugin generates a basic one by default).
sbatch_args
: Takes any arguments such as nodes/partitions/gres/etc that you would want to pass on to the sbatch command underneath.
jobid_re
: Regular expression for custom job submission id search.
\n", " 🥳 Final Example: Mini-Preprocessing-Workflow\n", "
\n", "\n", "\n", "- __Input Stream__: DataGrabber to grab the functional image (run-1) of sub-01\n", "- __FSL-Interfaces__: Motion correction and spatial smoothing (kernel of 4 mm) of the functional image\n", "- __Output Stream__: DataSink to grab the motion-corrected image, the motion parameters and the smoothed image" ] }, { "cell_type": "code", "execution_count": 33, "id": "749fa29a-9f06-4e45-9271-c1a7750b054a", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "# Initialise Workflow\n", "wf_preproc = Workflow(name='preproc', base_dir=wf_work_dir)\n", "wf_preproc.config[\"execution\"][\"crashfile_format\"] = \"txt\"\n", "\n", "# DataGrabber Node\n", "dg = Node(\n", " interface= DataGrabber(infields=[\"subject_id\", \"run_id\"], outfields=[\"func\"]),\n", " name=\"dg\")\n", "\n", "# Location of dataset folder\n", "dg.inputs.base_directory = data_dir\n", "# Necessary default parameters\n", "dg.inputs.sort_filelist = True #return a sorted filelist to ensure to match files to correct runs/tasks\n", "dg.inputs.template = \"*\"\n", "dg.inputs.run_id = 1\n", "dg.inputs.subject_id = '01'\n", "dg.inputs.template_args = dict(\n", " func=[[\"subject_id\", \"subject_id\", \"run_id\"]],\n", ")\n", "\n", "# Specify the template structure to find the specific data\n", "dg.inputs.field_template = dict(\n", " func=\"sub-%s/func/sub-%s_task-flanker_run-%d_bold.nii.gz\",\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "id": "1fc05a07-3e28-4f18-9ab8-689d90014ddb", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "# Create Motion Correction Node\n", "mcflirt = Node(fsl.MCFLIRT(save_plots=True), \n", " name='mcflirt')\n", "\n", "# Create Smoothing node\n", "smooth = Node(fsl.IsotropicSmooth(fwhm=4),\n", " name='smooth')\n", "\n", "# Connect the three nodes to each other\n", "wf_preproc.connect([(dg, mcflirt, [(\"func\", \"in_file\")]),\n", " (mcflirt, smooth, [(\"out_file\", \"in_file\")])])" ] }, { "cell_type": "code", "execution_count": 35, "id": "ccec6e62", "metadata": { "editable": true, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "# Create DataSink object\n", "sinker = Node(DataSink(), name='sinker')\n", "\n", "# Name of the output folder\n", "sinker.inputs.base_directory = opj(wf_work_dir, 'preproc/results')" ] }, { "cell_type": "code", "execution_count": 36, "id": "3f2b8921", "metadata": { "editable": true, "scrolled": true, "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "240613-06:56:06,73 nipype.workflow INFO:\n", "\t Generated workflow graph: /home/jovyan/neurodesktop-storage/output/working_dir/preproc/graph.png (graph2use=colored, simple_form=True).\n" ] }, { "data": { "image/png": "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", "text/plain": [ "Tip
\n", "Nipype in a Nutshell
\n", "\n", "\n", "Nipype offers easy to use building blocks for:\n", "\n", "- establishing neuroimaging data processing services\n", "- constructing tailored data processing pipelines" ] }, { "cell_type": "markdown", "id": "cf74fcfc", "metadata": { "editable": true, "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## 4. Pydra: A modern dataflow engine developed for the Nipype project\n", "\n", "\n", "Nipype-Pydra architectures
\n", "Nipype-Pydra architectures
\n", "Pydra-Nipype architectures
\n", "Take Home Message
\n", "Pydra and Nipype are both open-source Python projects and offer similar functionalities for building and executing computational pipelines, including caching. However, they differ in their :
\n", "