@@ -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