@@ -2721,18 +2721,23 @@ def _list_outputs(self):
|
2721 | 2721 |
|
2722 | 2722 |
|
2723 | 2723 | class BIDSDataGrabberInputSpec(DynamicTraitedSpec):
|
2724 |
| -base_dir = Directory(exists=True, |
2725 |
| -desc='Path to BIDS Directory.', |
2726 |
| -mandatory=True) |
2727 |
| -output_query = traits.Dict(key_trait=Str, |
2728 |
| -value_trait=traits.Dict, |
2729 |
| -desc='Queries for outfield outputs') |
2730 |
| -raise_on_empty = traits.Bool(True, usedefault=True, |
2731 |
| -desc='Generate exception if list is empty ' |
2732 |
| -'for a given field') |
2733 |
| -return_type = traits.Enum('file', 'namedtuple', usedefault=True) |
2734 |
| -strict = traits.Bool(desc='Return only BIDS "proper" files (e.g., ' |
2735 |
| -'ignore derivatives/, sourcedata/, etc.)') |
| 2724 | +base_dir = Directory( |
| 2725 | +exists=True, |
| 2726 | +desc='Path to BIDS Directory.', |
| 2727 | +mandatory=True) |
| 2728 | +output_query = traits.Dict( |
| 2729 | +key_trait=Str, |
| 2730 | +value_trait=traits.Dict, |
| 2731 | +desc='Queries for outfield outputs') |
| 2732 | +raise_on_empty = traits.Bool( |
| 2733 | +True, usedefault=True, |
| 2734 | +desc='Generate exception if list is empty for a given field') |
| 2735 | +index_derivatives = traits.Bool( |
| 2736 | +False, mandatory=True, usedefault=True, |
| 2737 | +desc='Index derivatives/ sub-directory') |
| 2738 | +extra_derivatives = traits.List( |
| 2739 | +Directory(exists=True), |
| 2740 | +desc='Additional derivative directories to index') |
2736 | 2741 |
|
2737 | 2742 |
|
2738 | 2743 | class BIDSDataGrabber(LibraryBaseInterface, IOBase):
|
@@ -2758,10 +2763,10 @@ class BIDSDataGrabber(LibraryBaseInterface, IOBase):
|
2758 | 2763 | are filtered on common entities, which can be explicitly defined as
|
2759 | 2764 | infields.
|
2760 | 2765 |
|
2761 |
| ->>> bg = BIDSDataGrabber(infields = ['subject'], outfields = ['dwi']) |
| 2766 | +>>> bg = BIDSDataGrabber(infields = ['subject']) |
2762 | 2767 | >>> bg.inputs.base_dir = 'ds005/'
|
2763 | 2768 | >>> bg.inputs.subject = '01'
|
2764 |
| ->>> bg.inputs.output_query['dwi'] = dict(modality='dwi') |
| 2769 | +>>> bg.inputs.output_query['dwi'] = dict(datatype='dwi') |
2765 | 2770 | >>> results = bg.run() # doctest: +SKIP
|
2766 | 2771 |
|
2767 | 2772 | """
|
@@ -2781,18 +2786,17 @@ def __init__(self, infields=None, **kwargs):
|
2781 | 2786 |
|
2782 | 2787 | if not isdefined(self.inputs.output_query):
|
2783 | 2788 | self.inputs.output_query = {
|
2784 |
| -"func": {"modality": "func", 'extensions': ['nii', '.nii.gz']}, |
2785 |
| -"anat": {"modality": "anat", 'extensions': ['nii', '.nii.gz']}, |
| 2789 | +"bold": {"datatype": "func", "suffix": "bold", |
| 2790 | +"extensions": ["nii", ".nii.gz"]}, |
| 2791 | +"T1w": {"datatype": "anat", "suffix": "T1w", |
| 2792 | +"extensions": ["nii", ".nii.gz"]}, |
2786 | 2793 | }
|
2787 | 2794 |
|
2788 | 2795 | # If infields is empty, use all BIDS entities
|
2789 | 2796 | if infields is None:
|
2790 |
| -# Version resilience |
2791 |
| -try: |
2792 |
| -from bids import layout as bidslayout |
2793 |
| -except ImportError: |
2794 |
| -from bids import grabbids as bidslayout |
2795 |
| -bids_config = join(dirname(bidslayout.__file__), 'config', 'bids.json') |
| 2797 | +from bids import layout as bidslayout |
| 2798 | +bids_config = join( |
| 2799 | +dirname(bidslayout.__file__), 'config', 'bids.json') |
2796 | 2800 | bids_config = json.load(open(bids_config, 'r'))
|
2797 | 2801 | infields = [i['name'] for i in bids_config['entities']]
|
2798 | 2802 |
|
@@ -2807,15 +2811,12 @@ def __init__(self, infields=None, **kwargs):
|
2807 | 2811 | self.inputs.trait_set(trait_change_notify=False, **undefined_traits)
|
2808 | 2812 |
|
2809 | 2813 | def _list_outputs(self):
|
2810 |
| -# Version resilience |
2811 |
| -try: |
2812 |
| -from bids import BIDSLayout |
2813 |
| -except ImportError: |
2814 |
| -from bids.grabbids import BIDSLayout |
2815 |
| -exclude = None |
2816 |
| -if self.inputs.strict: |
2817 |
| -exclude = ['derivatives/', 'code/', 'sourcedata/'] |
2818 |
| -layout = BIDSLayout(self.inputs.base_dir, exclude=exclude) |
| 2814 | +from bids import BIDSLayout |
| 2815 | +layout = BIDSLayout(self.inputs.base_dir, |
| 2816 | +derivatives=self.inputs.index_derivatives) |
| 2817 | + |
| 2818 | +if isdefined(self.inputs.extra_derivatives): |
| 2819 | +layout.add_derivatives(self.inputs.extra_derivatives) |
2819 | 2820 |
|
2820 | 2821 | # If infield is not given nm input value, silently ignore
|
2821 | 2822 | filters = {}
|
@@ -2828,7 +2829,7 @@ def _list_outputs(self):
|
2828 | 2829 | for key, query in self.inputs.output_query.items():
|
2829 | 2830 | args = query.copy()
|
2830 | 2831 | args.update(filters)
|
2831 |
| -filelist = layout.get(return_type=self.inputs.return_type, **args) |
| 2832 | +filelist = layout.get(return_type='file', **args) |
2832 | 2833 | if len(filelist) == 0:
|
2833 | 2834 | msg = 'Output key: %s returned no files' % key
|
2834 | 2835 | if self.inputs.raise_on_empty:
|
|
0 commit comments