def create_bids_datasource(data_dir): bids_datasource = pe.Node(interface=nio.BIDSDataGrabber(), name='bids_datasource') bids_datasource.inputs.base_dir = data_dir bids_datasource.inputs.output_query = { 'T1': { "datatype": "anat", "suffix": "T1w", "extensions": ["nii", ".nii.gz"] } } layout = BIDSLayout(data_dir) print(layout) print(layout.get_subjects()) print(layout.get_sessions()) iterables = [] if len(layout.get_subjects()) == 1: bids_datasource.inputs.subject = layout.get_subjects()[0] else: iterables.append(('subject', layout.get_subjects()[:2])) if len(layout.get_sessions()) == 1: bids_datasource.inputs.session = layout.get_sessions()[0] else: iterables.append(('session', layout.get_sessions()[:2])) if len(iterables): bids_datasource.iterables = iterables return bids_datasource
def test_bids_fields(tmpdir): tmpdir.chdir() bg = nio.BIDSDataGrabber(infields=['subject'], outfields=['dwi']) bg.inputs.base_dir = os.path.join(datadir, 'ds005') bg.inputs.subject = '01' bg.inputs.output_query['dwi'] = dict(modality='dwi') results = bg.run() assert 'sub-01_dwi.nii.gz' in map(os.path.basename, results.outputs.dwi)
def test_bids_fields(tmpdir): tmpdir.chdir() bg = nio.BIDSDataGrabber(infields=["subject"], outfields=["dwi"]) bg.inputs.base_dir = os.path.join(datadir, "ds005") bg.inputs.subject = "01" bg.inputs.output_query["dwi"] = dict(datatype="dwi") results = bg.run() assert "sub-01_dwi.nii.gz" in map(os.path.basename, results.outputs.dwi)
def test_bids_grabber(tmpdir): tmpdir.chdir() bg = nio.BIDSDataGrabber() bg.inputs.base_dir = os.path.join(datadir, 'ds005') bg.inputs.subject = '01' results = bg.run() assert 'sub-01_T1w.nii.gz' in map(os.path.basename, results.outputs.anat) assert 'sub-01_task-mixedgamblestask_run-01_bold.nii.gz' in \ map(os.path.basename, results.outputs.func)
def test_bids_grabber(tmpdir): tmpdir.chdir() bg = nio.BIDSDataGrabber() bg.inputs.base_dir = os.path.join(datadir, "ds005") bg.inputs.subject = "01" results = bg.run() assert "sub-01_T1w.nii.gz" in map(os.path.basename, results.outputs.T1w) assert "sub-01_task-mixedgamblestask_run-01_bold.nii.gz" in map( os.path.basename, results.outputs.bold)
def test_bids_infields_outfields(tmpdir): tmpdir.chdir() infields = ['infield1', 'infield2'] outfields = ['outfield1', 'outfield2'] bg = nio.BIDSDataGrabber(infields=infields) for outfield in outfields: bg.inputs.output_query[outfield] = {'key': 'value'} for infield in infields: assert (infield in bg.inputs.traits()) assert (not (isdefined(bg.inputs.get()[infield]))) for outfield in outfields: assert (outfield in bg._outputs().traits()) # now try without defining outfields, we should get anat and func for free bg = nio.BIDSDataGrabber() for outfield in ['anat', 'func']: assert outfield in bg._outputs().traits()
def test_bids_infields_outfields(tmpdir): tmpdir.chdir() infields = ["infield1", "infield2"] outfields = ["outfield1", "outfield2"] bg = nio.BIDSDataGrabber(infields=infields) for outfield in outfields: bg.inputs.output_query[outfield] = {"key": "value"} for infield in infields: assert infield in bg.inputs.traits() assert not (isdefined(bg.inputs.get()[infield])) for outfield in outfields: assert outfield in bg._outputs().traits() # now try without defining outfields bg = nio.BIDSDataGrabber() for outfield in ["T1w", "bold"]: assert outfield in bg._outputs().traits()
def create_datasource(data_dir, subjects=None, sessions=None, acquisitions=None): """ Create a datasource node that have iterables following BIDS format """ bids_datasource = pe.Node(interface=nio.BIDSDataGrabber(), name='bids_datasource') bids_datasource.inputs.base_dir = data_dir bids_datasource.inputs.output_query = { 'T1': { "datatype": "anat", "suffix": "T1w", "extensions": ["nii", ".nii.gz"] }, 'T2': { "datatype": "anat", "suffix": "T2w", "extensions": ["nii", ".nii.gz"] } } layout = BIDSLayout(data_dir) # Verbose print("BIDS layout:", layout) print("\t", layout.get_subjects()) print("\t", layout.get_sessions()) if subjects is None: subjects = layout.get_subjects() if sessions is None: sessions = layout.get_sessions() iterables = [] iterables.append(('subject', subjects)) iterables.append(('session', sessions)) if acquisitions is not None: iterables.append(('acquisition', acquisitions)) bids_datasource.iterables = iterables return bids_datasource
def create_datasource(output_query, data_dir, subjects=None, sessions=None, acquisitions=None, reconstructions=None): """ Create a datasource node that have iterables following BIDS format """ bids_datasource = pe.Node(interface=nio.BIDSDataGrabber(), name='bids_datasource') bids_datasource.inputs.base_dir = data_dir bids_datasource.inputs.output_query = output_query layout = BIDSLayout(data_dir) # Verbose print("BIDS layout:", layout) print("\t", layout.get_subjects()) print("\t", layout.get_sessions()) if subjects is None: subjects = layout.get_subjects() if sessions is None: sessions = layout.get_sessions() iterables = [] iterables.append(('subject', subjects)) if sessions != []: iterables.append(('session', sessions)) if acquisitions is not None: iterables.append(('acquisition', acquisitions)) if reconstructions is not None: iterables.append(('reconstruction', reconstructions)) bids_datasource.iterables = iterables return bids_datasource
print("Starting RPN-signature...") print("Memory usage limit: " + str(opts.mem_gb) + "GB") print("Number of CPUs used: " + str(opts.nthreads)) totalWorkflow = nipype.Workflow('RPN') if opts.debug: totalWorkflow.base_dir = globals._SinkDir_ else: totalWorkflow.base_dir = opts.tempdir # preferably a fast temporary mount (working dir by default) ######################## # parse command line args bids_dir = opts.bids_dir # create BIDS data grabber datagrab = pe.Node(io.BIDSDataGrabber(), name='data_grabber') datagrab.inputs.base_dir = bids_dir # BIDS filtering if opts.task_id and opts.echo_idx: datagrab.inputs.output_query['bold'] = dict(datatype='func', task=opts.task_id, echo=opts.echo_idx) elif opts.task_id: datagrab.inputs.output_query['bold'] = dict(datatype='func', task=opts.task_id) elif opts.echo_idx: datagrab.inputs.output_query['bold'] = dict(datatype='func', echo=opts.echo_idx) print("Participants selected:") if (opts.participant_label): datagrab.inputs.subject = opts.participant_label print(opts.participant_label) else:
#Generic datagrabber module that wraps around glob in an io_S3DataGrabber = pe.Node(io.S3DataGrabber(outfields=["outfiles"]), name = 'io_S3DataGrabber') io_S3DataGrabber.inputs.bucket = 'openneuro' io_S3DataGrabber.inputs.sort_filelist = True io_S3DataGrabber.inputs.template = 'sub-01/anat/sub-01_T1w.nii.gz' io_S3DataGrabber.inputs.anon = True io_S3DataGrabber.inputs.bucket_path = 'ds000101/ds000101_R2.0.0/uncompressed/' io_S3DataGrabber.inputs.local_directory = '/tmp' #Wraps command **bet** fsl_BET = pe.Node(interface = fsl.BET(), name='fsl_BET', iterfield = ['']) #Generic datasink module to store structured outputs io_DataSink = pe.Node(interface = io.DataSink(), name='io_DataSink', iterfield = ['']) io_DataSink.inputs.base_directory = '/tmp' #BIDS datagrabber module that wraps around pybids to allow arbitrary io_BIDSDataGrabber = pe.Node(interface = io.BIDSDataGrabber(), name='io_BIDSDataGrabber', iterfield = ['']) #Create a workflow to connect all those nodes analysisflow = nipype.Workflow('MyWorkflow') analysisflow.connect(fsl_BET, "out_file", io_DataSink, "BET_results") analysisflow.connect(io_BIDSDataGrabber, "T1", fsl_BET, "in_file") #Run the workflow plugin = 'MultiProc' #adjust your desired plugin here plugin_args = {'n_procs': 1} #adjust to your number of cores analysisflow.write_graph(graph2use='flat', format='png', simple_form=False) analysisflow.run(plugin=plugin, plugin_args=plugin_args)
import nipype.interfaces.io as io import nipype.interfaces.spm as spm import nipype.interfaces.afni as afni import nipype.interfaces.dipy as dipy import nipype.interfaces.fsl as fsl import nipype.algorithms.confounds as confounds import nipype.interfaces.ants as ants import nipype.interfaces.camino as camino import nipype.interfaces.mrtrix as mrtrix #Generic datasink module to store structured outputs io_DataSink = pe.Node(interface=io.DataSink(), name='io_DataSink') #BIDS datagrabber module that wraps around pybids to allow arbitrary io_BIDSDataGrabber = pe.Node(interface=io.BIDSDataGrabber(), name='io_BIDSDataGrabber') #Flexibly collect data from disk to feed into workflows. io_SelectFiles = pe.Node(io.SelectFiles(templates={}), name='io_SelectFiles') #Use spm_realign for estimating within modality rigid body alignment spm_Realign = pe.Node(interface=spm.Realign(), name='spm_Realign') #Use spm_smooth for 3D Gaussian smoothing of image volumes. spm_Smooth = pe.Node(interface=spm.Smooth(), name='spm_Smooth') #Use spm_coreg for estimating cross-modality rigid body alignment spm_Coregister = pe.Node(interface=spm.Coregister(), name='spm_Coregister') #Wraps the executable command ``3dSkullStrip``.