123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- Bootstrap: docker
- From: debian:buster-slim
- %setup
- mkdir -p ${SINGULARITY_ROOTFS}/batch
- mkdir -p ${SINGULARITY_ROOTFS}/code
- mkdir -p ${SINGULARITY_ROOTFS}/downloads
- chmod -R 777 ${SINGULARITY_ROOTFS}/code
- %post
- apt-get update
- apt-get -y install wget unzip libxext6 libxt6 moreutils
- # download software & unzip
- MCRURL="https://ssd.mathworks.com/supportfiles/downloads/R2017b/deployment_files/R2017b/installers/glnxa64/MCR_R2017b_glnxa64_installer.zip"
- # SPMURL="http://www.neuro.uni-jena.de/cat12/CAT12.8.1_r2042_R2017b_MCR_Linux.zip"
- SPMURL="http://141.35.69.218/cat12/CAT12.8.1_r2042_R2017b_MCR_Linux.zip"
- cd /downloads
- wget "${MCRURL}" && unzip -d /downloads/MCR MCR_R2017b_glnxa64_installer.zip
- wget "${SPMURL}" && unzip -d /code/SPM CAT12.8.1_r2042_R2017b_MCR_Linux.zip
-
- # install MCR
- /downloads/MCR/install -mode silent -agreeToLicense yes
- # generalize CAT12 version
- mv /code/SPM/CAT12.8.1_r2042_R2017b_MCR_Linux/ /code/SPM/MCR_Linux/
- # install SPM
- /code/SPM/MCR_Linux/run_spm12.sh /usr/local/MATLAB/MATLAB_Runtime/v93 quit
- cd /code/SPM/MCR_Linux && chmod +rx run_spm12.sh spm12.sh spm12 spm12.ctf
- # install CAT standalone interface
- STANDALONE="/code/SPM/MCR_Linux/standalone"
- cd ${STANDALONE} && chmod +rx *.sh
- cd /code && ln -s ${STANDALONE}/*.sh .
- cd /batch && ln -s ${STANDALONE}/*.m .
-
- # set permissions
- find /code -type f -print0 | xargs -0 chmod +r
- find /code/SPM/MCR_Linux/spm12_mcr/ -name 'CAT.glnx86' -print0 | xargs -0 chmod +rx -R
- rm -f code/cat_standalone_segment_enigma.m
- wget https://raw.githubusercontent.com/juaml/CAT_stacking_container/refs/heads/bax24-patch-1/cat_standalone_segment_enigma.m?token=GHSAT0AAAAAACX63A3JYCV6T6VTYPTUXO5MZX2SXMQ -O /code/cat_standalone_segment_enigma.m
- chmod -R 777 /code*
- rm -fr /downloads
- apt-get clean
- apt-get autoremove
- %environment
- export SPMROOT=/code/SPM/MCR_Linux
- export MCRROOT=/usr/local/MATLAB/MATLAB_Runtime/v93
- export MCR_INHIBIT_CTF_LOCK=1
- %runscript
- NOW=$(date +%s)
- exec /code/cat_standalone.sh "$@" 2>&1 |tee cat_$NOW.log
- %labels
- Authors Malgorzata Wierzba (m.wierzba@fz-juelich.de)
- Felix Hoffstaedter (f.hoffstaedter@fz-juelich.de)
- Version 1.1
- %help
- This container allows to run the standalone, compiled version of the
- Computational Anatomy Toolbox (CAT), which is an extension to SPM
- software. Using the container does not require the availability of a
- MATLAB licence.
- The container includes:
- - MATLAB Compiler Runtime (R2017b, 9.3)
- - Standalone version of SPM software (SPM12, r7771)
- - Computational Anatomy Toolbox (CAT12.8 r2042)
- - CAT interface scripts (cat_standalone.sh, cat_parallelize.sh).
- For more details on the exact version of the software used in this
- container, please refer to the README file.
- HOW TO USE:
- In principle this container allows you to perform the very same types
- of analysis that are possible with the standalone version of CAT. It
- is assumed that the user is familiar with the content of the batch
- files dedicated for the use with the standalone version of CAT
- (cat_standalone_segment.m, cat_standalone_simple.m,
- cat_standalone_resample.m, cat_standalone_smooth.m) and can modify
- their content according to his/her needs. For more details, please
- refer to the CAT12 documentation and manual.
- -- Available batch files --
- The content of the batch files can be explored by using the 'view' and
- 'copy' subcommands:
- singularity run <container> <subcommand> <batch file> <arguments>
- To view a batch file, use the 'view' subcommand:
- singularity run container.simg view cat_standalone_smooth.m
- To copy a batch file to your computer, use the 'copy' subcommand and
- specify destination path as an additional argument:
- singularity run container.simg copy cat_standalone_smooth.m $HOME
- Make sure that the specified path is mounted to the container (more
- information on this can be found below) and that you have write access
- to this path!
- To copy all available batch files, use the 'all' argument:
- singularity run container.simg copy all $HOME
- -- Running CAT --
- Run the CAT analysis with the following command:
- singularity run --cleanenv <container> <batch file> <arguments>
- To use a default batch file, use one of the files included in the
- container ('/batch'):
- singularity run --cleanenv container.simg \
- -b /batch/cat_standalone_segment.m \
- T1.nii
- To use your own, customised batch file, simply specify its path:
- singularity run --cleanenv container.simg \
- -b $HOME/cat_standalone_segment.m \
- T1.nii
- -- Bind paths --
- Please note that most of the host files remain inaccessible from within
- the container. By default the following directories are mounted within
- the container: '$HOME', '/tmp', '/proc', '/sys', '/dev', and '$PWD'
- (see the Singularity documentation for more details).
- If you want the container to be able to access other locations,
- specify a bind path of your choice. For instance, to make the contents
- of the '/data' folder on your computer available in the '/mnt' folder
- inside the container, specify the mount point in the following way:
- singularity run --cleanenv --bind /data:/mnt container.simg \
- -b /batch/cat_standalone_segment.m \
- /mnt/T1.nii
- EXAMPLES:
- USAGE:
- cat_standalone.sh filename(s) [-s spm_standalone_folder] [-m mcr_folder] [-b batch_file]
- [-a1 additional_argument1] [-a2 additional_argument2]
- [-a add_to_batch]
- -s <DIR> | --spm <DIR> SPM12 folder of standalone version (can be also defined by SPMROOT)
- -m <DIR> | --mcr <DIR> Matlab Compiler Runtime (MCR) folder (can be also defined by MCRROOT)
- -b <FILE> | --batch <FILE> batch file to execute
- -a1 <STRING>| --arg1 <STRING> 1st additional argument (otherwise use defaults or batch)
- -a2 <STRING>| --arg2 <STRING> 2nd additional argument (otherwise use defaults or batch)
- -a <STRING> | --add <STRING> add option to batch file
- The first occurance of the parameter "<UNDEFINED>" in the batch file will be replaced by the
- list of input files. You can use the existing batch files in this folder or create your own batch
- file with the SPM12 batch editor and leave the data field undefined. Please note that for creating
- your own batch file CAT12 has to be called in expert mode because the CAT12 standalone installation
- will only run in expert mode to allow more options.
- See cat_standalone_segment.m for an example.
- You can also define one or two optional arguments to change other parameters that are indicated by
- "<UNDEFINED>" in the batch file. Please take care of the order of the "<UNDEFINED>" fields in the
- batch file! If no additional arguments are defined the default values are used.
- Also, you must use multiple quotes if the argument is a string (e.g. " 'your_string' ").
- If you use a computer cluster it is recommended to use the batch files to only process one data set
- and use a job or queue tool to call the (single) jobs on the cluster.
- PURPOSE:
- Command line call of (CAT12) batch files for SPM12 standalone installation
- EXAMPLES
- -----------------------------------------------------------------------------------------------
- Segmentation
- -a1 TPM
- -a2 Shooting template
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_segment.m sTRIO0001.nii
- Preprocess (segment) the single file sTRIO0001.nii using the default CAT12 preprocessing batch.
- SPM12 standalone version is located in $SPMROOT and Matlab Compiler Runtime in
- /Applications/MATLAB/MATLAB_Runtime/v93.
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_segment.m sTRIO000*.nii.gz \
- -a1 " '${cat12_dir}/templates_MNI152NLin2009cAsym/TPM_Age11.5.nii' " \
- -a2 " '${cat12_dir}/templates_MNI152NLin2009cAsym/Template_0_GS1mm.nii' "
- Unzip and preprocess (segment) the files sTRIO0001.nii.gz using the default CAT12 preprocessing
- batch, but use the children TPM provided with CAT12 and a 1mm Shooting template (not provided
- with CAT12). Please note that zipped file can only be handled with this standalone batch and also
- note the multiple quotes for parameter a1 and a2.
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_segment.m sTRIO0001.nii \
- -a "matlabbatch{1}.spm.tools.cat.estwrite.output.surface = 0;"
- Preprocess (segment) the single file sTRIO0001.nii using the default CAT12 preprocessing batch,
- but skip surface estimation.
- -----------------------------------------------------------------------------------------------
- Longitudinal Segmentation
- -a1 longitudinal model (0 - developmental; 1 - plasticity/learning; 2 - aging; 3 - save models 1 and 2)
- -a2 TPM
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_segment_long.m sTRIO000*.nii \
- -a1 "2"
- Preprocess (segment) the files sTRIO000*.nii with the longitudinal pipeline optimized for
- detecting aging/developmental effects. In order to choose the longitudinal model optimized for
- detecting small changes due to plasticity/learning change the a1 parameter to "1".
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_segment_long.m sTRIO000*.nii \
- -a1 "1" -a2 " '${cat12_dir}/templates_MNI152NLin2009cAsym/TPM_Age11.5.nii' "
- Preprocess (segment) the files sTRIO000*.nii with the longitudinal pipeline optimized for
- detecting plasticity/learning effects and use the children TPM provided with CAT12.
- Please note the multiple quotes for parameter a2.
- -----------------------------------------------------------------------------------------------
- Segmentation (Simple Mode)
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_simple.m sTRIO0001.nii
- Process the single file sTRIO0001.nii using the simple processing batch.
- -----------------------------------------------------------------------------------------------
- Resample & Smooth Surfaces
- -a1 smoothing filter size surface values
- -a2 use 32k mesh from HCP (or 164k mesh from Freesurfer)
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_resample.m lh.thickness.sTRIO0001 \
- -a1 "12" -a2 "1"
- Resample and smooth the single thickness file lh.thickness.sTRIO0001 with 12mm and save the
- resampled mesh as 32k mesh (HCP conform mesh). Only the left surface file has to be defined.
- The right hemisphere is processed automatically.
- -----------------------------------------------------------------------------------------------
- Smoothing
- -a1 smoothing filter size
- -a2 prepending string for smoothed file (e.g. 's6')
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_smooth.m sTRIO*nii \
- -a1 "[6 6 6]" -a2 " 's6' "
- Smooth the volume files sTRIO*nii with 6mm and prepend the string "s6" to the smoothed files.
- Please note the multiple quotes for parameter a2.
- -----------------------------------------------------------------------------------------------
- Dicom Import
- -a1 directory structure
- -a2 output directory
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_dicom2nii.m *.dcm \
- -a1 " 'patid_date' " -a2 "{'converted'}"
- Import DICOM files *.dcm and save converted nifti files in directory "converted" with structure
- ./<PatientID>/<StudyDate-StudyTime>/<ProtocollName>
- Other options for directory structure are:
- 'flat' No directory hierarchy
- 'series' ./<ProtocollName>
- 'patid_date' ./<PatientID>/<StudyDate-StudyTime>/<ProtocollName>
- 'patid' ./<PatientID>/<ProtocollName>
- 'date_time' ./<StudyDate-StudyTime>/<ProtocollName>
- Please note the multiple quotes for parameter a1.
- -----------------------------------------------------------------------------------------------
- De-Facing
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_deface.m sTRIO*.nii
- Apply de-facing to sTRIO*.nii and save the files prefixed by "anon_".
- -----------------------------------------------------------------------------------------------
- Estimate and Save Quality Measures for Volumes or Surfaces
- -a1 csv output filename
- -a2 enable global scaling with TIV (only for volumes meaningful)
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_get_quality.m mwp1sTRIO*nii \
- -a1 " 'Quality_measures.csv' " -a2 "1"
- Estimate mean z-scores using global scaling with TIV for the files mwp1sTRIO*nii and save quality
- measures in Quality_measures.csv for external analysis. Processing of surface meshes is also
- supported.
- Please note the multiple quotes for parameter a1.
- -----------------------------------------------------------------------------------------------
- Estimate mean/volume inside ROI
- -a1 output-file string
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_get_ROI_values.m catROI_*.xml \
- -a1 " 'ROI' "
- Save mean volume values in mL (e.g. GM volume) or the mean surface values (e.g. thickness) for
- all data catROI_*.xml in a csv-file. The csv-file is named "ROI_" followed by the atlas name
- and the name of the measure (e.g. Vgm).
- Please note the multiple quotes for parameter a1.
- -----------------------------------------------------------------------------------------------
- TFCE Statistical Estimation
- -a1 contrast number
- -a2 number of permutations
- -----------------------------------------------------------------------------------------------
- cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 \
- -b ${cwd}/cat_standalone_tfce.m SPM.mat \
- -a1 "2" -a2 "20000"
- Call estimation of TFCE statistics for the given SPM.mat file for contrast number 2 with 20000
- permutations.
- -----------------------------------------------------------------------------------------------
- Parallelization
- -----------------------------------------------------------------------------------------------
- cat_parallelize.sh -p 8 -l /tmp \
- -c "cat_standalone.sh -s $SPMROOT -m /Applications/MATLAB/MATLAB_Runtime/v93 -b ${cwd}/cat_standalone_segment.m" sTRIO*.nii
- Parallelize CAT12 preprocessing by splitting all sTRIO*.nii files into 8 jobs
- (processes) and save log file in /tmp folder.
- The parameters SPMROOT and MCRROOT have to be defined (exported) to skip the use of the flags -s -m.
- INPUT:
- nifti files or surface data
- OUTPUT:
- processed images and optionally surfaces according to settings in cat_standalone_*.m
- USED FUNCTIONS:
- cat_parallelize.sh
- SPM12 standalone version (compiled)
- CAT12 toolbox (compiled within SPM12 if installed)
- MATLAB Compiler Runtime R2017b (Version 9.3)
- This script was written by Christian Gaser (christian.gaser@uni-jena.de).
- This is ${version}.
- Known issues:
- - Parallelization with cat_parallelize.sh is not implemented yet.
- - Longitudinal segmentation with cat_standalone_segment_long.m
- is not tested yet.
- Contact information:
- Any problems or concerns regarding this container should be reported
- to Malgorzata Wierzba (m.wierzba@fz-juelich.de), Michael Hanke
- (m.hanke@fz-juelich.de) or Felix Hoffstaedter (f.hoffstaedter@fz-juelich.de)
- Acknowledgements:
- The CAT toolbox (http://www.neuro.uni-jena.de/cat) is developed by
- Christian Gaser and Robert Dahnke (Jena University Hospital,
- Departments of Psychiatry and Neurology) and is free but copyright
- software, distributed under the terms of the GNU General Public
- Licence.
- The SPM software (https://www.fil.ion.ucl.ac.uk/spm/) is developed by
- the Wellcome Trust Centre for Neuroimaging and is free but copyright
- software, distributed under the terms of the GNU General Public
- Licence.
- MATLAB Compiler Runtime
- (https://uk.mathworks.com/products/compiler/matlab-runtime.html) is
- developed by the The MathWorks, Inc. and is subject to the MATLAB
- Runtime licence.
|