Skip to content

Commit 5355efa

Browse files
authored
Merge pull request #29 from oesteban/test/add-pepolar-tests
ENH: Revise and add tests for the PEPOLAR correction
2 parents a605d7f + c476bc8 commit 5355efa

File tree

6 files changed

+518
-130
lines changed

6 files changed

+518
-130
lines changed

.circleci/config.yml

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ jobs:
7272
steps:
7373
- restore_cache:
7474
keys:
75-
- data-v0-{{ .Branch }}-
76-
- data-v0-master-
77-
- data-v0-
75+
- data-v1-{{ .Branch }}-
76+
- data-v1-master-
77+
- data-v1-
7878
- run:
7979
name: Setup git-annex
8080
command: |
@@ -101,9 +101,9 @@ jobs:
101101
- run:
102102
name: Install ds001600
103103
command: |
104-
datalad install -r https://github.com/OpenNeuroDatasets/ds001600.git
105-
datalad update ds001600/
106-
datalad get -r ds001600/sub-1/fmap/*
104+
datalad install https://github.com/OpenNeuroDatasets/ds001600.git
105+
datalad update --merge ds001600/
106+
datalad get -r ds001600/*
107107
- run:
108108
name: Get testdata
109109
command: |
@@ -113,12 +113,26 @@ jobs:
113113
unzip testdata.zip -d /tmp/data/testdata
114114
fi
115115
116+
- run:
117+
name: Store FreeSurfer license file
118+
command: |
119+
mkdir -p /tmp/data/
120+
echo "b2VzdGViYW5Ac3RhbmZvcmQuZWR1CjMwNzU2CiAqQ1MzYkJ5VXMxdTVNCiBGU2kvUGJsejJxR1V3Cg==" | base64 -d > /tmp/data/fslicense.txt
121+
122+
- run:
123+
name: Create Nipype config files
124+
command: |
125+
printf "[execution]\nstop_on_first_crash = true\n" > /tmp/data/nipype.cfg
126+
echo "poll_sleep_duration = 0.01" >> /tmp/data/nipype.cfg
127+
echo "hash_method = content" >> /tmp/data/nipype.cfg
128+
echo "crashfile_format = txt" >> /tmp/data/nipype.cfg
129+
116130
- save_cache:
117-
key: data-v0-{{ .Branch }}-{{ .BuildNum }}
131+
key: data-v1-{{ .Branch }}-{{ .BuildNum }}
118132
paths:
119133
- "/opt/circleci/.pyenv/versions/3.5.2"
120134
- /tmp/data
121-
- /tmp/cache
135+
- /tmp/cache/git-annex-standalone.tar.gz
122136

123137
- persist_to_workspace:
124138
root: /tmp
@@ -134,6 +148,11 @@ jobs:
134148
at: /tmp
135149
- checkout:
136150
path: /tmp/src/sdcflows
151+
- restore_cache:
152+
keys:
153+
- workdir-v1-{{ .Branch }}-
154+
- workdir-v1-master-
155+
- workdir-v1-
137156
- run:
138157
name: Load Docker image layer cache
139158
no_output_timeout: 30m
@@ -147,17 +166,27 @@ jobs:
147166
fi
148167
- run:
149168
name: Run tests
169+
no_output_timeout: 2h
150170
command: |
171+
mkdir -p /tmp/work
151172
docker run -it --rm=false -e TEST_DATA_HOME=/data/ -e TEST_OUTPUT_DIR=/out \
152-
-v /tmp/data:/data:ro -v /tmp/src:/src -v /tmp/tests:/out -w /src/sdcflows \
153-
poldracklab/sdcflows:latest \
154-
pytest -n auto --junit-xml=/out/pytest.xml sdcflows
173+
-v /tmp/data/fslicense.txt:/opt/freesurfer/license.txt:ro -e FS_LICENSE=/opt/freesurfer/license.txt \
174+
-v /tmp/work:/work -e TEST_WORK_DIR=/work \
175+
-v /tmp/data/nipype.cfg:/home/sdcflows/.nipype/nipype.cfg \
176+
-v /tmp/data:/data:ro -v /tmp/src:/src -v /tmp/tests:/out \
177+
-w /work poldracklab/sdcflows:latest \
178+
pytest -v --junit-xml=/out/pytest.xml /src/sdcflows/sdcflows
155179
156180
- store_artifacts:
157181
path: /tmp/tests
158-
182+
- store_artifacts:
183+
path: /tmp/work
159184
- store_test_results:
160185
path: /tmp/tests
186+
- save_cache:
187+
key: workdir-v1-{{ .Branch }}-{{ .BuildNum }}
188+
paths:
189+
- /tmp/work
161190

162191
deploy_docker:
163192
machine:

Dockerfile

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,44 @@ RUN apt-get update && \
1919
git && \
2020
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2121

22+
# Installing freesurfer
23+
RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/6.0.1/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.1.tar.gz | tar zxv --no-same-owner -C /opt \
24+
--exclude='freesurfer/diffusion' \
25+
--exclude='freesurfer/docs' \
26+
--exclude='freesurfer/fsfast' \
27+
--exclude='freesurfer/lib/cuda' \
28+
--exclude='freesurfer/lib/qt' \
29+
--exclude='freesurfer/matlab' \
30+
--exclude='freesurfer/mni/share/man' \
31+
--exclude='freesurfer/subjects/fsaverage_sym' \
32+
--exclude='freesurfer/subjects/fsaverage3' \
33+
--exclude='freesurfer/subjects/fsaverage4' \
34+
--exclude='freesurfer/subjects/cvs_avg35' \
35+
--exclude='freesurfer/subjects/cvs_avg35_inMNI152' \
36+
--exclude='freesurfer/subjects/bert' \
37+
--exclude='freesurfer/subjects/lh.EC_average' \
38+
--exclude='freesurfer/subjects/rh.EC_average' \
39+
--exclude='freesurfer/subjects/sample-*.mgz' \
40+
--exclude='freesurfer/subjects/V1_average' \
41+
--exclude='freesurfer/trctrain'
42+
43+
ENV FSL_DIR="/usr/share/fsl/5.0" \
44+
OS="Linux" \
45+
FS_OVERRIDE=0 \
46+
FIX_VERTEX_AREA="" \
47+
FSF_OUTPUT_FORMAT="nii.gz" \
48+
FREESURFER_HOME="/opt/freesurfer"
49+
ENV SUBJECTS_DIR="$FREESURFER_HOME/subjects" \
50+
FUNCTIONALS_DIR="$FREESURFER_HOME/sessions" \
51+
MNI_DIR="$FREESURFER_HOME/mni" \
52+
LOCAL_DIR="$FREESURFER_HOME/local" \
53+
MINC_BIN_DIR="$FREESURFER_HOME/mni/bin" \
54+
MINC_LIB_DIR="$FREESURFER_HOME/mni/lib" \
55+
MNI_DATAPATH="$FREESURFER_HOME/mni/data"
56+
ENV PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
57+
MNI_PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
58+
PATH="$FREESURFER_HOME/bin:$FSFAST_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH"
59+
2260
# Installing Neurodebian packages (FSL, AFNI, git)
2361
RUN curl -sSL "http://neuro.debian.net/lists/$( lsb_release -c | cut -f2 ).us-ca.full" >> /etc/apt/sources.list.d/neurodebian.sources.list && \
2462
apt-key add /usr/local/etc/neurodebian.gpg && \
@@ -32,8 +70,7 @@ RUN apt-get update && \
3270
git-annex-standalone && \
3371
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
3472

35-
ENV FSL_DIR="/usr/share/fsl/5.0" \
36-
FSLDIR="/usr/share/fsl/5.0" \
73+
ENV FSLDIR="/usr/share/fsl/5.0" \
3774
FSLOUTPUTTYPE="NIFTI_GZ" \
3875
FSLMULTIFILEQUIT="TRUE" \
3976
POSSUMDIR="/usr/share/fsl/5.0" \

sdcflows/conftest.py

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

88
test_data_env = os.getenv('TEST_DATA_HOME', str(Path.home() / 'sdcflows-tests'))
99
test_output_dir = os.getenv('TEST_OUTPUT_DIR')
10+
test_workdir = os.getenv('TEST_WORK_DIR')
1011

11-
layouts = {p.name: BIDSLayout(str(p), validate=False)
12+
layouts = {p.name: BIDSLayout(str(p), validate=False, derivatives=True)
1213
for p in Path(test_data_env).glob('*') if p.is_dir()}
1314

1415

@@ -28,6 +29,11 @@ def add_np(doctest_namespace):
2829
doctest_namespace[key] = Path(val.root)
2930

3031

32+
@pytest.fixture
33+
def workdir():
34+
return None if test_workdir is None else Path(test_workdir)
35+
36+
3137
@pytest.fixture
3238
def output_path():
3339
return None if test_output_dir is None else Path(test_output_dir)

0 commit comments

Comments
 (0)