singularity build spm12.sif spm12.def
singularity run -B /path/to/data:/data spm12-mcr.sif <script> [script_inputs]
singularity build neurotools.sif neurotools.def
./neurotools.sif fslhd /path/to/bold.nii.gz
This repository hosts container definition files for containers used in MiND lab processing pipelines. Details on each container are available below.
Because some neuroimaging tools contain wrappers around others (e.g., mrtrix3 and ICA_AROMA), I decided to include each of these tools in one singularity container. This container has only been used in the context of the neuroimaging pipelines used in the MiND lab at the University of Michigan.
This container installs FSL, AFNI, ANTS, MRTRIX3, ICA_AROMA, and Tedana
I have not tested each package individually for full functionality and this container is a work in progress. When I have time I intend to work on decreasing the container size by removing unnecessary graphical functionality or template files, but as of now the container is largely each tool installed with minimal changes.
The container is set to run any command you offer it, whether it be accessing a single tool, such as
./neurotools.sif 3dclustsim [OPTIONS]
or to run a wrapper script:
./neurotools.sif my_fsl_preproc_wrapper.sh
With wrapper functions, be sure to pay attention to the paths needed by the scripts. The singularity container can only access relative paths available in your current $PWD
. You'd need to specify binding points in both the definition file and in your call to the container created from it. There is a generic /data mount point available for this purpose:
singularity run -B /path/to/data:/data eddy -imain /data/path/to/data ...
Users can specify their FSLOUTPUTTYPE
in the definition file, but you will run into errors with ICA_AROMA if it is not set to NIFTI_GZ
, as ICA_AROMA expects compressed output format in its various FSL wrapper functions. The mrtrix3 wrappers do not appear to have this same limitation. In the future it may be worth branching ICA_AROMA and having it read in FSLOUTPUTTYPE
, but it's not an issue that's been too inconvenient up to this point.
This container hosts a standalone version of spm12 along with the corresponding matlab runtime libraries.
The container entrypoint moves the user into the mounted /data
directory, and then tells the SPM container to run the input script along with any options provided afterwards. In most cases, one can use the scripts/spm_jobman_run.m
provided in this repository, but in cases where the user wants to access components outside of spm_jobman (such as using one of the many built-in toolboxes), they would need to write and specify another script. The file scripts/spm_fm2vdm.m
provides an example for how one could use the built-in fieldmap toolbox to produce a voxel displacement map using this toolbox.
This container uses an spm12 standalone container precompiled with CONN toolbox along with the corresponding matlab runtime libraries.
This container is incomplete, as I currently need to figure out how to use the conn_batch() tool in the standalone container. Hopefully this message won't be here long as I'll have the time to put this together and replace this with some better text 👍
Container for neuropointillist.
The container installs explicit dependencies of neuropointillist along with lnme
. If one wishes to use other R packages, they would need to update the neuropointillist.def
file to include those installations. There is a general use mount point /data
, and the runscript for the package just takes one's command line arguments after calling singularity
- compile standalone spm12 with CONN, the Generalized PPI toolbox myself so we ultimately use one spm based container.
- ICA_AROMA to handle the different options for FSLOUTPUTTYPE, suppress graphical elements from causing warnings/errors
- FSL/AFNI/ANTs cleaning to reduce size
- Look into AFNI's R scripts and make sure they work correctly (currently I just use tools like 3dclustsim, 3dUnifize, and 3dResample, and there's an error related to running
rPkgsInstall
when building the singularity container that I haven't gotten into yet)