Skip to content

Commit c82cae4

Browse files
authored
Merge pull request #1247 from effigies/enh/dataset_description
ENH: Write derivatives dataset_description.json
2 parents c05d385 + 21d9311 commit c82cae4

File tree

6 files changed

+62
-1
lines changed

6 files changed

+62
-1
lines changed

.circleci/ds005_outputs.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fmriprep
2+
fmriprep/dataset_description.json
23
fmriprep/logs
34
fmriprep/logs/CITATION.html
45
fmriprep/logs/CITATION.md

.circleci/ds005_partial_outputs.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fmriprep
2+
fmriprep/dataset_description.json
23
fmriprep/logs
34
fmriprep/logs/CITATION.html
45
fmriprep/logs/CITATION.md

.circleci/ds054_outputs.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fmriprep
2+
fmriprep/dataset_description.json
23
fmriprep/logs
34
fmriprep/logs/CITATION.html
45
fmriprep/logs/CITATION.md

.circleci/ds210_outputs.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fmriprep
2+
fmriprep/dataset_description.json
23
fmriprep/logs
34
fmriprep/logs/CITATION.html
45
fmriprep/logs/CITATION.md

fmriprep/cli/run.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,9 @@ def main():
247247
"""Entry point"""
248248
from nipype import logging as nlogging
249249
from multiprocessing import set_start_method, Process, Manager
250+
from .. import __version__
250251
from ..viz.reports import generate_reports
251-
from ..__about__ import __version__
252+
from ..utils.bids import write_derivative_description
252253
set_start_method('forkserver')
253254

254255
warnings.showwarning = _warn_redirect
@@ -290,6 +291,7 @@ def main():
290291

291292
fmriprep_wf = retval['workflow']
292293
plugin_settings = retval['plugin_settings']
294+
bids_dir = retval['bids_dir']
293295
output_dir = retval['output_dir']
294296
work_dir = retval['work_dir']
295297
subject_list = retval['subject_list']
@@ -348,6 +350,7 @@ def main():
348350

349351
# Generate reports phase
350352
errno += generate_reports(subject_list, output_dir, work_dir, run_uuid)
353+
write_derivative_description(bids_dir, str(Path(output_dir) / 'fmriprep'))
351354
sys.exit(int(errno > 0))
352355

353356

@@ -479,6 +482,7 @@ def build_workflow(opts, retval):
479482

480483
retval['return_code'] = 0
481484
retval['plugin_settings'] = plugin_settings
485+
retval['bids_dir'] = bids_dir
482486
retval['output_dir'] = output_dir
483487
retval['work_dir'] = work_dir
484488
retval['subject_list'] = subject_list

fmriprep/utils/bids.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import os
1818
import re
1919
import os.path as op
20+
import json
2021
import warnings
2122
from itertools import groupby
2223
from bids.grabbids import BIDSLayout
@@ -193,3 +194,55 @@ def _grp_echos(x):
193194
subj_data.update({"bold": ses_uids})
194195

195196
return subj_data, layout
197+
198+
199+
def write_derivative_description(bids_dir, deriv_dir):
200+
from fmriprep import __version__
201+
from fmriprep.__about__ import DOWNLOAD_URL
202+
203+
desc = {
204+
'Name': 'fMRIPrep output',
205+
'BIDSVersion': '1.1.1',
206+
'PipelineDescription': {
207+
'Name': 'fMRIPrep',
208+
'Version': __version__,
209+
'CodeURL': DOWNLOAD_URL,
210+
},
211+
'CodeURL': 'https://github.com/poldracklab/fmriprep',
212+
'HowToAcknowledge':
213+
'Please cite our paper (https://doi.org/10.1101/306951), and '
214+
'include the generated citation boilerplate within the Methods '
215+
'section of the text.',
216+
}
217+
218+
# Keys that can only be set by environment
219+
if 'FMRIPREP_DOCKER_TAG' in os.environ:
220+
desc['DockerHubContainerTag'] = os.environ['FMRIPREP_DOCKER_TAG']
221+
if 'FMRIPREP_SINGULARITY_URL' in os.environ:
222+
singularity_url = os.environ['FMRIPREP_SINGULARITY_URL']
223+
desc['SingularityContainerURL'] = singularity_url
224+
try:
225+
desc['SingularityContainerMD5'] = _get_shub_version(singularity_url)
226+
except ValueError:
227+
pass
228+
229+
# Keys deriving from source dataset
230+
fname = os.path.join(bids_dir, 'dataset_description.json')
231+
if os.path.exists(fname):
232+
with open(fname) as fobj:
233+
orig_desc = json.load(fobj)
234+
else:
235+
orig_desc = {}
236+
237+
if 'DatasetDOI' in orig_desc:
238+
desc['SourceDatasetsURLs'] = ['https://doi.org/{}'.format(
239+
orig_desc['DatasetDOI'])]
240+
if 'License' in orig_desc:
241+
desc['License'] = orig_desc['License']
242+
243+
with open(os.path.join(deriv_dir, 'dataset_description.json'), 'w') as fobj:
244+
json.dump(desc, fobj, indent=4)
245+
246+
247+
def _get_shub_version(singularity_url):
248+
raise ValueError("Not yet implemented")

0 commit comments

Comments
 (0)