Skip to content

Commit 6be1d79

Browse files
authored
Merge pull request #195 from effigies/enh/mri_coreg
[RTM] ENH: Add MRICoregRPT interface
2 parents bcfeaa5 + 050eee8 commit 6be1d79

File tree

7 files changed

+214
-47
lines changed

7 files changed

+214
-47
lines changed

.circle/pytests.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ set -x # Print command traces before executing command.
1111
code=0
1212

1313
if [ "${CIRCLE_NODE_TOTAL:-1}" == "1" ]; then
14-
docker run -ti -v /etc/localtime:/etc/localtime:ro --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py3:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py3 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml && \
15-
docker run -ti -v /etc/localtime:/etc/localtime:ro --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py2:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py2 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
14+
docker run -ti --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py3:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py3 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml && \
15+
docker run -ti --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py2:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py2 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
1616
code=$(( $code + $? ))
1717
else
1818
case ${CIRCLE_NODE_INDEX} in
1919
0)
20-
docker run -ti -v /etc/localtime:/etc/localtime:ro --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py3:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py3 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
20+
docker run -ti --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py3:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py3 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
2121
code=$(( $code + $? ))
2222
;;
2323
1)
24-
docker run -ti -v /etc/localtime:/etc/localtime:ro --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py2:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py2 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
24+
docker run -ti --env SAVE_CIRCLE_ARTIFACTS="/scratch" -v ${SCRATCH}/py2:/scratch -w /scratch --entrypoint=/usr/local/miniconda/bin/py.test niworkflows:py2 /root/niworkflows -n ${CIRCLE_NPROCS:-4} -v --junit-xml=/scratch/pytest.xml
2525
code=$(( $code + $? ))
2626
;;
2727
esac
@@ -31,4 +31,4 @@ fi
3131
cp $SCRATCH/py3/*.xml ${CIRCLE_TEST_REPORTS}/py3/ || true
3232
cp $SCRATCH/py2/*.xml ${CIRCLE_TEST_REPORTS}/py2/ || true
3333

34-
exit $code
34+
exit $code

Dockerfile

Lines changed: 85 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,93 @@
1-
# Copyright (c) 2016, The developers of the Stanford CRN
2-
# All rights reserved.
3-
#
4-
# Redistribution and use in source and binary forms, with or without
5-
# modification, are permitted provided that the following conditions are met:
6-
#
7-
# * Redistributions of source code must retain the above copyright notice, this
8-
# list of conditions and the following disclaimer.
9-
#
10-
# * Redistributions in binary form must reproduce the above copyright notice,
11-
# this list of conditions and the following disclaimer in the documentation
12-
# and/or other materials provided with the distribution.
13-
#
14-
# * Neither the name of crn_base nor the names of its
15-
# contributors may be used to endorse or promote products derived from
16-
# this software without specific prior written permission.
17-
#
18-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21-
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22-
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23-
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24-
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25-
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26-
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28-
#
29-
# This Dockerfile is to be built for testing purposes inside CircleCI,
30-
# not for distribution within Docker hub.
31-
# For that purpose, the Dockerfile is found in build/Dockerfile.
1+
# Use Ubuntu 16.04 LTS
2+
FROM ubuntu:xenial-20161213
323

33-
FROM poldracklab/neuroimaging-core:freesurfer-0.0.2
4+
# Pre-cache neurodebian key
5+
COPY docker/files/neurodebian.gpg /root/.neurodebian.gpg
346

35-
# Install cwebp
7+
# Prepare environment
8+
RUN apt-get update && \
9+
apt-get install -y --no-install-recommends \
10+
curl \
11+
bzip2 \
12+
ca-certificates \
13+
xvfb \
14+
cython3 \
15+
build-essential \
16+
autoconf \
17+
libtool \
18+
pkg-config && \
19+
curl -sSL http://neuro.debian.net/lists/xenial.us-ca.full >> /etc/apt/sources.list.d/neurodebian.sources.list && \
20+
apt-key add /root/.neurodebian.gpg && \
21+
(apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true) && \
22+
apt-get update
23+
24+
# Installing freesurfer
25+
RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/6.0.0/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.0.tar.gz | tar zxv -C /opt \
26+
--exclude='freesurfer/trctrain' \
27+
--exclude='freesurfer/subjects/fsaverage_sym' \
28+
--exclude='freesurfer/subjects/fsaverage3' \
29+
--exclude='freesurfer/subjects/fsaverage4' \
30+
--exclude='freesurfer/subjects/cvs_avg35' \
31+
--exclude='freesurfer/subjects/cvs_avg35_inMNI152' \
32+
--exclude='freesurfer/subjects/bert' \
33+
--exclude='freesurfer/subjects/V1_average' \
34+
--exclude='freesurfer/average/mult-comp-cor' \
35+
--exclude='freesurfer/lib/cuda' \
36+
--exclude='freesurfer/lib/qt'
37+
38+
ENV FSL_DIR=/usr/share/fsl/5.0 \
39+
OS=Linux \
40+
FS_OVERRIDE=0 \
41+
FIX_VERTEX_AREA= \
42+
FSF_OUTPUT_FORMAT=nii.gz \
43+
FREESURFER_HOME=/opt/freesurfer
44+
ENV SUBJECTS_DIR=$FREESURFER_HOME/subjects \
45+
FUNCTIONALS_DIR=$FREESURFER_HOME/sessions \
46+
MNI_DIR=$FREESURFER_HOME/mni \
47+
LOCAL_DIR=$FREESURFER_HOME/local \
48+
FSFAST_HOME=$FREESURFER_HOME/fsfast \
49+
MINC_BIN_DIR=$FREESURFER_HOME/mni/bin \
50+
MINC_LIB_DIR=$FREESURFER_HOME/mni/lib \
51+
MNI_DATAPATH=$FREESURFER_HOME/mni/data \
52+
FMRI_ANALYSIS_DIR=$FREESURFER_HOME/fsfast
53+
ENV PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
54+
MNI_PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
55+
PATH=$FREESURFER_HOME/bin:$FSFAST_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH
56+
RUN echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IC9vcHQvZnJlZXN1cmZlci9saWNlbnNlLnR4dAo=" | base64 -d | sh
57+
58+
# Installing Neurodebian packages (FSL, AFNI, git)
59+
RUN apt-get update && \
60+
apt-get install -y --no-install-recommends \
61+
fsl-core=5.0.9-4~nd16.04+1 \
62+
fsl-mni152-templates=5.0.7-2 \
63+
afni=16.2.07~dfsg.1-5~nd16.04+1
64+
65+
ENV FSLDIR=/usr/share/fsl/5.0 \
66+
FSLOUTPUTTYPE=NIFTI_GZ \
67+
FSLMULTIFILEQUIT=TRUE \
68+
POSSUMDIR=/usr/share/fsl/5.0 \
69+
LD_LIBRARY_PATH=/usr/lib/fsl/5.0:$LD_LIBRARY_PATH \
70+
FSLTCLSH=/usr/bin/tclsh \
71+
FSLWISH=/usr/bin/wish \
72+
AFNI_MODELPATH=/usr/lib/afni/models \
73+
AFNI_IMSAVE_WARNINGS=NO \
74+
AFNI_TTATLAS_DATASET=/usr/share/afni/atlases \
75+
AFNI_PLUGINPATH=/usr/lib/afni/plugins
76+
ENV PATH=/usr/lib/fsl/5.0:/usr/lib/afni/bin:$PATH
77+
78+
# Installing ANTs 2.2.0 (NeuroDocker build)
79+
ENV ANTSPATH=/usr/lib/ants
80+
RUN mkdir -p $ANTSPATH && \
81+
curl -sSL "https://dl.dropbox.com/s/2f4sui1z6lcgyek/ANTs-Linux-centos5_x86_64-v2.2.0-0740f91.tar.gz" \
82+
| tar -xzC $ANTSPATH --strip-components 1
83+
ENV PATH=$ANTSPATH:$PATH
84+
85+
# Installing WEBP tools
3686
RUN curl -sSLO "http://downloads.webmproject.org/releases/webp/libwebp-0.5.2-linux-x86-64.tar.gz" && \
3787
tar -xf libwebp-0.5.2-linux-x86-64.tar.gz && cd libwebp-0.5.2-linux-x86-64/bin && \
3888
mv cwebp /usr/local/bin/ && rm -rf libwebp-0.5.2-linux-x86-64
3989

40-
# Install nodejs -> svgo
90+
# Installing SVGO
4191
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash -
4292
RUN apt-get install -y nodejs
4393
RUN npm install -g svgo
@@ -73,4 +123,4 @@ RUN cd niworkflows && \
73123
python -c 'from niworkflows.data.getters import get_mni_template_ras; get_mni_template_ras()' && \
74124
python -c 'from niworkflows.data.getters import get_ds003_downsampled; get_ds003_downsampled()' && \
75125
python -c 'from niworkflows.data.getters import get_ants_oasis_template_ras; get_ants_oasis_template_ras()' && \
76-
python -c 'from niworkflows.data.getters import get_mni_icbm152_nlin_asym_09c; get_mni_icbm152_nlin_asym_09c()'
126+
python -c 'from niworkflows.data.getters import get_mni_icbm152_nlin_asym_09c; get_mni_icbm152_nlin_asym_09c()'

circle.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
machine:
2+
# Update docker to 1.9
3+
pre:
4+
- sudo curl -L -o /usr/bin/docker 'https://s3-external-1.amazonaws.com/circle-downloads/docker-1.9.1-circleci'
5+
- sudo chmod 0755 /usr/bin/docker
26
environment:
37
SCRATCH: "$HOME/scratch"
48
CIRCLE_NPROCS: 2
@@ -8,7 +12,6 @@ machine:
812

913
dependencies:
1014
cache_directories:
11-
- "~/docker"
1215
- "~/data"
1316

1417
pre:
@@ -18,12 +21,9 @@ dependencies:
1821
- git submodule init && (git submodule update || true)
1922
- git submodule sync && git -C nipype fetch origin && git submodule update
2023
override:
21-
- if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi :
22-
timeout: 6000
24+
- docker pull poldracklab/fmriprep:latest || true
2325
- docker build --rm=false -t niworkflows:py3 .
2426
- docker build --rm=false -t niworkflows:py2 --build-arg PYTHON_MAJOR=2 .
25-
- docker save poldracklab/neuroimaging-core:freesurfer-0.0.2 niworkflows:py3 niworkflows:py2 > ~/docker/image.tar :
26-
timeout: 6000
2727
test:
2828
override:
2929
- bash .circle/pytests.sh :

docker/files/neurodebian.gpg

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
Version: GnuPG v1
3+
4+
mQGiBEQ7TOgRBADvaRsIZ3VZ6Qy7PlDpdMm97m0OfvouOj/HhjOM4M3ECbGn4cYh
5+
vN1gK586s3sUsUcNQ8LuWvNsYhxYsVTZymCReJMEDxod0U6/z/oIbpWv5svF3kpl
6+
ogA66Ju/6cZx62RiCSOkskI6A3Waj6xHyEo8AGOPfzbMoOOQ1TS1u9s2FwCgxziL
7+
wADvKYlDZnWM03QtqIJVD8UEAOks9Q2OqFoqKarj6xTRdOYIBVEp2jhozZUZmLmz
8+
pKL9E4NKGfixqxdVimFcRUGM5h7R2w7ORqXjCzpiPmgdv3jJLWDnmHLmMYRYQc8p
9+
5nqo8mxuO3zJugxBemWoacBDd1MJaH7nK20Hsk9L/jvU/qLxPJotMStTnwO+EpsK
10+
HlihA/9ZpvzR1QWNUd9nSuNR3byJhaXvxqQltsM7tLqAT4qAOJIcMjxr+qESdEbx
11+
NHM5M1Y21ZynrsQw+Fb1WHXNbP79vzOxHoZR0+OXe8uUpkri2d9iOocre3NUdpOO
12+
JHtl6cGGTFILt8tSuOVxMT/+nlo038JQB2jARe4B85O0tkPIPbQybmV1cm8uZGVi
13+
aWFuLm5ldCBhcmNoaXZlIDxtaWNoYWVsLmhhbmtlQGdtYWlsLmNvbT6IRgQQEQgA
14+
BgUCTVHJKwAKCRCNEUVjdcAkyOvzAJ0abJz+f2a6VZG1c9T8NHMTYh1atwCgt0EE
15+
3ZZd/2in64jSzu0miqhXbOKISgQQEQIACgUCSotRlwMFAXgACgkQ93+NsjFEvg8n
16+
JgCfWcdJbILBtpLZCocvOzlLPqJ0Fn0AoI4EpJRxoUnrtzBGUC1MqecU7WsDiGAE
17+
ExECACAFAkqLUWcCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCl0y8BJkml
18+
qVklAJ4h2V6MdQkSAThF5c2Gkq6eSoIQYQCeM0DWyB9Bl+tTPSTYXwwZi2uoif20
19+
QmFwc3kuZ3NlLnVuaS1tYWdkZWJ1cmcuZGUgRGViaWFuIEFyY2hpdmUgPG1pY2hh
20+
ZWwuaGFua2VAZ21haWwuY29tPohGBBARAgAGBQJEO03FAAoJEPd/jbIxRL4PU18A
21+
n3tn7i4qdlMi8kHbYWFoabsKc9beAJ9sl/leZNCYNMGhz+u6BQgyeLKw94heBBMR
22+
AgAeBQJEO0zoAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEKXTLwEmSaWpVdoA
23+
n27DvtZizNEbhz3wRUPQMiQjtqdvAJ9rS9YdPe5h5o5gHx3mw3BSkOttdYheBBMR
24+
AgAeBQJEO0zoAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEKXTLwEmSaWpVdoA
25+
oLhwWL+E+2I9lrUf4Lf26quOK9vLAKC9ZpIF2tUirFFkBWnQvu13/TA0SokCHAQQ
26+
AQIABgUCTSNBgQAKCRDAc9Iof/uem4NpEACQ8jxmaCaS/qk/Y4GiwLA5bvKosG3B
27+
iARZ2v5UWqCZQ1tS56yKse/lCIzXQqU9BnYW6wOI2rvFf9meLfd8h96peG6oKscs
28+
fbclLDIf68bBvGBQaD0VYFi/Fk/rxmTQBOCQ3AJZs8O5rIM4gPGE0QGvSZ1h7VRw
29+
3Uyeg4jKXLIeJn2xEmOJgt3auAR2FyKbzHaX9JCoByJZ/eU23akNl9hgt7ePlpXo
30+
74KNYC58auuMUhCq3BQDB+II4ERYMcmFp1N5ZG05Cl6jcaRRHDXz+Ax6DWprRI1+
31+
RH/Yyae6LmKpeJNwd+vM14aawnNO9h8IAQ+aJ3oYZdRhGyybbin3giJ10hmWveg/
32+
Pey91Nh9vBCHdDkdPU0s9zE7z/PHT0c5ccZRukxfZfkrlWQ5iqu3V064ku5f4PBy
33+
8UPSkETcjYgDnrdnwqIAO+oVg/SFlfsOzftnwUrvwIcZlXAgtP6MEEAs/38e/JIN
34+
g4VrpdAy7HMGEUsh6Ah6lvGQr+zBnG44XwKfl7e0uCYkrAzUJRGM5vx9iXvFMcMu
35+
jv9EBNNBOU8/Y6MBDzGZhgaoeI27nrUvaveJXjAiDKAQWBLjtQjINZ8I9uaSGOul
36+
8kpbFavE4eS3+KhISrSHe4DuAa3dk9zI+FiPvXY1ZyfQBtNpR+gYFY6VxMbHhY1U
37+
lSLHO2eUIQLdYbRITmV1cm9EZWJpYW4gQXJjaGl2ZSBLZXkgPHBrZy1leHBwc3kt
38+
bWFpbnRhaW5lcnNAbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmc+iEYEEBEIAAYFAk1R
39+
yQYACgkQjRFFY3XAJMgEWwCggx4Gqlcrt76TSMlbU94cESo55AEAoJ3asQEMpe8t
40+
QUX+5aikw3z1AUoCiEoEEBECAAoFAkqf/3cDBQF4AAoJEPd/jbIxRL4PxyMAoKUI
41+
RPWlHCj/+HSFfwhos68wcSwmAKChuC00qutDro+AOo+uuq6YoHXj+ohgBBMRAgAg
42+
BQJKn/8bAhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQpdMvASZJpalDggCe
43+
KF9KOgOPdQbFnKXl8KtHory4EEwAnA7jxgorE6kk2QHEXFSF8LzOOH4GiGMEExEC
44+
ACMCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCSp//RgIZAQAKCRCl0y8BJkml
45+
qekFAKCRyt4+FoCzmBbRUUP3Cr8PzH++IgCgkno4vdjsWdyAey8e0KpITTXMFrmJ
46+
AhwEEAECAAYFAk0jQYEACgkQwHPSKH/7npsFfw/+P8B8hpM3+T1fgboBa4R32deu
47+
n8m6b8vZMXwuo/awQtMpzjem8JGXSUQm8iiX4hDtjq6ZoPrlN8T4jNmviBt/F5jI
48+
Jji/PYmhq+Zn9s++mfx+aF4IJrcHJWFkg/6kJzn4oSdl/YlvKf4VRCcQNtj4xV87
49+
GsdamnzU17XapLVMbSaVKh+6Af7ZLDerEH+iAq733HsYaTK+1xKmN7EFVXgS7bZ1
50+
9C4LTzc97bVHSywpT9yIrg9QQs/1kshfVIHDKyhjF6IwzSVbeGAIL3Oqo5zOMkWv
51+
7JlEIkkhTyl+FETxNMTMYjAk+Uei3kRodneq3YBF2uFYSEzrXQgHAyn37geiaMYj
52+
h8wu6a85nG1NS0SdxiZDIePmbvD9vWxFZUWYJ/h9ifsLivWcVXlvHoQ0emd+n2ai
53+
FhAck2xsuyHgnGIZMHww5IkQdu/TMqvbcR6d8Xulh+C4Tq7ppy+oTLADSBKII++p
54+
JQioYydRD529EUJgVlhyH27X6YAk3FuRD3zYZRYS2QECiKXvS665o3JRJ0ZSqNgv
55+
YOom8M0zz6bI9grnUoivMI4o7ISpE4ZwffEd37HVzmraaUHDXRhkulFSf1ImtXoj
56+
V9nNSM5p/+9eP7OioTZhSote6Vj6Ja1SZeRkXZK7BwqPbdO0VsYOb7G//ZiOlqs+
57+
paRr92G/pwBfj5Dq8EK5Ag0ERDtM9RAIAN0EJqBPvLN0tEin/y4Fe0R4n+E+zNXg
58+
bBsq4WidwyUFy3h/6u86FYvegXwUqVS2OsEs5MwPcCVJOfaEthF7I89QJnP9Nfx7
59+
V5I9yFB53o9ii38BN7X+9gSjpfwXOvf/wIDfggxX8/wRFel37GRB7TiiABRArBez
60+
s5x+zTXvT++WPhElySj0uY8bjVR6tso+d65K0UesvAa7PPWeRS+3nhqABSFLuTTT
61+
MMbnVXCGesBrYHlFVXClAYrSIOX8Ub/UnuEYs9+hIV7U4jKzRF9WJhIC1cXHPmOh
62+
vleAf/I9h/0KahD7HLYud40pNBo5tW8jSfp2/Q8TIE0xxshd51/xy4MAAwUH+wWn
63+
zsYVk981OKUEXul8JPyPxbw05fOd6gF4MJ3YodO+6dfoyIl3bewk+11KXZQALKaO
64+
1xmkAEO1RqizPeetoadBVkQBp5xPudsVElUTOX0pTYhkUd3iBilsCYKK1/KQ9KzD
65+
I+O/lRsm6L9lc6rV0IgPU00P4BAwR+x8Rw7TJFbuS0miR3lP1NSguz+/kpjxzmGP
66+
LyHJ+LVDYFkk6t0jPXhqFdUY6McUTBDEvavTGlVO062l9APTmmSMVFDsPN/rBes2
67+
rYhuuT+lDp+gcaS1UoaYCIm9kKOteQBnowX9V74Z+HKEYLtwILaSnNe6/fNSTvyj
68+
g0z+R+sPCY4nHewbVC+ISQQYEQIACQUCRDtM9QIbDAAKCRCl0y8BJkmlqbecAJ9B
69+
UdSKVg9H+fQNyP5sbOjj4RDtdACfXHrRHa2+XjJP0dhpvJ8IfvYnQsU=
70+
=fAJZ
71+
-----END PGP PUBLIC KEY BLOCK-----

nipype

Submodule nipype updated 45 files

niworkflows/interfaces/registration.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,44 @@ def _post_run_hook(self, runtime):
195195
self._fixed_image, self._moving_image)
196196

197197

198+
class MRICoregInputSpecRPT(nrc.RegistrationRCInputSpec,
199+
fs.registration.MRICoregInputSpec):
200+
pass
201+
202+
203+
class MRICoregOutputSpecRPT(nrc.ReportCapableOutputSpec,
204+
fs.registration.MRICoregOutputSpec):
205+
pass
206+
207+
208+
class MRICoregRPT(nrc.RegistrationRC, fs.MRICoreg):
209+
input_spec = MRICoregInputSpecRPT
210+
output_spec = MRICoregOutputSpecRPT
211+
212+
def _post_run_hook(self, runtime):
213+
outputs = self.aggregate_outputs(runtime=runtime)
214+
215+
if isdefined(self.inputs.reference_file):
216+
target_file = self.inputs.reference_file
217+
else:
218+
target_file = os.path.join(self.inputs.subjects_dir,
219+
self.inputs.subject_id, 'mri',
220+
'brainmask.mgz')
221+
222+
# Apply transform for simplicity
223+
mri_vol2vol = fs.ApplyVolTransform(
224+
source_file=self.inputs.source_file,
225+
target_file=target_file,
226+
lta_file=outputs.out_lta_file)
227+
res = mri_vol2vol.run()
228+
229+
self._fixed_image = target_file
230+
self._moving_image = res.outputs.transformed_file
231+
NIWORKFLOWS_LOG.info(
232+
'Report - setting fixed (%s) and moving (%s) images',
233+
self._fixed_image, self._moving_image)
234+
235+
198236
class SimpleBeforeAfterInputSpecRPT(nrc.RegistrationRCInputSpec):
199237
before = File(exists=True, mandatory=True, desc='file before')
200238
after = File(exists=True, mandatory=True, desc='file after')

niworkflows/tests/test_reports.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from niworkflows.interfaces.registration import (
2020
FLIRTRPT, RobustMNINormalizationRPT, ANTSRegistrationRPT, BBRegisterRPT,
21-
ApplyXFMRPT, SimpleBeforeAfterRPT)
21+
MRICoregRPT, ApplyXFMRPT, SimpleBeforeAfterRPT)
2222
from niworkflows.interfaces.segmentation import FASTRPT, ReconAllRPT
2323
from niworkflows.interfaces.masks import BETRPT, BrainExtractionRPT, \
2424
SimpleShowMaskRPT
@@ -59,6 +59,14 @@ def test_FLIRTRPT(self):
5959
_smoke_test_report(flirt_rpt, 'testFLIRT.svg')
6060

6161

62+
def test_MRICoregRPT(self):
63+
""" the FLIRT report capable test """
64+
mri_coreg_rpt = MRICoregRPT(generate_report=True,
65+
source_file=self.moving,
66+
reference_file=self.reference)
67+
_smoke_test_report(mri_coreg_rpt, 'testMRICoreg.svg')
68+
69+
6270
def test_ApplyXFMRPT(self):
6371
""" the ApplyXFM report capable test """
6472
flirt_rpt = FLIRTRPT(generate_report=False, in_file=self.moving,

0 commit comments

Comments
 (0)