@@ -2721,18 +2721,23 @@ def _list_outputs(self):
27212721
27222722
27232723class 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' )
27362741
27372742
27382743class BIDSDataGrabber (LibraryBaseInterface , IOBase ):
@@ -2758,10 +2763,10 @@ class BIDSDataGrabber(LibraryBaseInterface, IOBase):
27582763 are filtered on common entities, which can be explicitly defined as
27592764 infields.
27602765
2761- >>> bg = BIDSDataGrabber(infields = ['subject'], outfields = ['dwi'] )
2766+ >>> bg = BIDSDataGrabber(infields = ['subject'])
27622767 >>> bg.inputs.base_dir = 'ds005/'
27632768 >>> bg.inputs.subject = '01'
2764- >>> bg.inputs.output_query['dwi'] = dict(modality ='dwi')
2769+ >>> bg.inputs.output_query['dwi'] = dict(datatype ='dwi')
27652770 >>> results = bg.run() # doctest: +SKIP
27662771
27672772 """
@@ -2781,18 +2786,17 @@ def __init__(self, infields=None, **kwargs):
27812786
27822787 if not isdefined (self .inputs .output_query ):
27832788 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" ]},
27862793 }
27872794
27882795 # If infields is empty, use all BIDS entities
27892796 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' )
27962800 bids_config = json .load (open (bids_config , 'r' ))
27972801 infields = [i ['name' ] for i in bids_config ['entities' ]]
27982802
@@ -2807,15 +2811,12 @@ def __init__(self, infields=None, **kwargs):
28072811 self .inputs .trait_set (trait_change_notify = False , ** undefined_traits )
28082812
28092813 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 )
28192820
28202821 # If infield is not given nm input value, silently ignore
28212822 filters = {}
@@ -2828,7 +2829,7 @@ def _list_outputs(self):
28282829 for key , query in self .inputs .output_query .items ():
28292830 args = query .copy ()
28302831 args .update (filters )
2831- filelist = layout .get (return_type = self . inputs . return_type , ** args )
2832+ filelist = layout .get (return_type = 'file' , ** args )
28322833 if len (filelist ) == 0 :
28332834 msg = 'Output key: %s returned no files' % key
28342835 if self .inputs .raise_on_empty :
0 commit comments