示例#1
0
def applywarp(infile, ref, regdir, outname):
    warp = os.path.join(regdir, 'highres2standard_warp.nii.gz')
    premat = os.path.join(regdir, 'example_func2highres.mat')
    if not os.path.isfile(warp):
        print 'no warp found: ', warp
        return None
    if not os.path.isfile(premat):
        print 'no premat found ', premat
        return None
    startdir = os.getcwd()
    pth, nme = os.path.split(infile)
    os.chdir(pth)
    mywarp = ApplyWarp()
    mywarp.inputs.in_file = infile
    mywarp.inputs.ref_file = ref
    mywarp.inputs.field_file = warp
    mywarp.inputs.premat = premat
    warpout = mywarp.run()
    os.chdir(startdir)
    if warpout.runtime.returncode == 0:
        #apply warp successful
        warped = warpout.outputs.out_file
        return warped
    else:
        print warpout.runtime.stderr
        return None
示例#2
0
def make_sub_cnxn_visitation_map(sub,dpy_file,parc_file,warp_file,ref_file,
                                 cnxn_inds_file,cnxn_name,vismap_fstr):
    
  overwrite=True
    
  import os,h5py,numpy as np,nibabel as nib
  from dipy.io import Dpy
  from dipy.tracking.utils import connectivity_matrix,length,density_map
  from nipype.interfaces.fsl import ApplyWarp    
       
  F = h5py.File(cnxn_inds_file, 'r')
  if cnxn_name in F.keys():
    stream_idxs = F[cnxn_name].value
    F.close()

    D = Dpy(dpy_file, 'r')
    streams = D.read_tracksi(stream_idxs)
    D.close()

    parc_img = nib.load(parc_file)

    affine = np.eye(4)


    outfile_nat = os.path.abspath('vismap_nat_%s.nii.gz' %cnxn_name)
    outfile_std =  os.path.abspath(vismap_fstr %cnxn_name)

    dm = density_map(streams,parc_img.shape,affine=affine)
    dm_img = nib.Nifti1Image(dm.astype("int16"), parc_img.affine)
    dm_img.to_filename(outfile_nat)

    print 'warping cnxn image to standard space'
    aw = ApplyWarp(in_file=outfile_nat,
                 out_file=outfile_std,
                 ref_file =ref_file,
                 field_file =warp_file)
    aw.run()

  else:
    outfile_std = 'cnxn not found'
    F.close()

  return outfile_std
def preproc(data_dir, sink_dir, subject, task, session, run, masks,
            motion_thresh, moco):
    from nipype.interfaces.fsl import MCFLIRT, FLIRT, FNIRT, ExtractROI, ApplyWarp, MotionOutliers, InvWarp, FAST
    #from nipype.interfaces.afni import AlignEpiAnatPy
    from nipype.interfaces.utility import Function
    from nilearn.plotting import plot_anat
    from nilearn import input_data

    #WRITE A DARA GRABBER
    def get_niftis(subject_id, data_dir, task, run, session):
        from os.path import join, exists
        t1 = join(data_dir, subject_id, 'session-{0}'.format(session),
                  'anatomical', 'anatomical-0', 'anatomical.nii.gz')
        #t1_brain_mask = join(data_dir, subject_id, 'session-1', 'anatomical', 'anatomical-0', 'fsl', 'anatomical-bet.nii.gz')
        epi = join(data_dir, subject_id, 'session-{0}'.format(session), task,
                   '{0}-{1}'.format(task, run), '{0}.nii.gz'.format(task))
        assert exists(t1), "t1 does not exist at {0}".format(t1)
        assert exists(epi), "epi does not exist at {0}".format(epi)
        standard = '/home/applications/fsl/5.0.8/data/standard/MNI152_T1_2mm.nii.gz'
        return t1, epi, standard

    data = Function(
        function=get_niftis,
        input_names=["subject_id", "data_dir", "task", "run", "session"],
        output_names=["t1", "epi", "standard"])
    data.inputs.data_dir = data_dir
    data.inputs.subject_id = subject
    data.inputs.run = run
    data.inputs.session = session
    data.inputs.task = task
    grabber = data.run()

    if session == 0:
        sesh = 'pre'
    if session == 1:
        sesh = 'post'

    #reg_dir = '/home/data/nbc/physics-learning/data/first-level/{0}/session-1/retr/retr-{1}/retr-5mm.feat/reg'.format(subject, run)
    #set output paths for quality assurance pngs
    qa1 = join(
        sink_dir, 'qa',
        '{0}-session-{1}_{2}-{3}_t1_flirt.png'.format(subject, session, task,
                                                      run))
    qa2 = join(
        sink_dir, 'qa',
        '{0}-session-{1}_{2}-{3}_mni_flirt.png'.format(subject, session, task,
                                                       run))
    qa3 = join(
        sink_dir, 'qa',
        '{0}-session-{1}_{2}-{3}_mni_fnirt.png'.format(subject, session, task,
                                                       run))
    confound_file = join(
        sink_dir, sesh, subject,
        '{0}-session-{1}_{2}-{3}_confounds.txt'.format(subject, session, task,
                                                       run))

    #run motion correction if indicated
    if moco == True:
        mcflirt = MCFLIRT(ref_vol=144, save_plots=True, output_type='NIFTI_GZ')
        mcflirt.inputs.in_file = grabber.outputs.epi
        #mcflirt.inputs.in_file = join(data_dir, subject, 'session-1', 'retr', 'retr-{0}'.format(run), 'retr.nii.gz')
        mcflirt.inputs.out_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_mcf.nii.gz'.format(
                subject, session, task, run))
        flirty = mcflirt.run()
        motion = np.genfromtxt(flirty.outputs.par_file)
    else:
        print "no moco needed"
        motion = 0

    #calculate motion outliers
    try:
        mout = MotionOutliers(metric='fd', threshold=motion_thresh)
        mout.inputs.in_file = grabber.outputs.epi
        mout.inputs.out_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_fd-gt-{3}mm'.format(
                subject, session, task, run, motion_thresh))
        mout.inputs.out_metric_plot = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_metrics.png'.format(
                subject, session, task, run))
        mout.inputs.out_metric_values = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_fd.txt'.format(subject, session, task,
                                                    run))
        moutliers = mout.run()
        outliers = np.genfromtxt(moutliers.outputs.out_file)
        e = 'no errors in motion outliers, yay'
    except Exception as e:
        print(e)
        outliers = np.genfromtxt(mout.inputs.out_metric_values)
        #set everything above the threshold to 1 and everything below to 0
        outliers[outliers > motion_thresh] = 1
        outliers[outliers < motion_thresh] = 0

    #concatenate motion parameters and motion outliers to form confounds file

    #outliers = outliers.reshape((outliers.shape[0],1))
    conf = outliers
    np.savetxt(confound_file, conf, delimiter=',')

    #extract an example volume for normalization
    ex_fun = ExtractROI(t_min=144, t_size=1)
    ex_fun.inputs.in_file = flirty.outputs.out_file
    ex_fun.inputs.roi_file = join(
        sink_dir, sesh, subject,
        '{0}-session-{1}_{2}-{3}-example_func.nii.gz'.format(
            subject, session, task, run))
    fun = ex_fun.run()

    warp = ApplyWarp(interp="nn", abswarp=True)

    if not exists(
            '/home/data/nbc/physics-learning/data/first-level/{0}/session-{1}/{2}/{2}-{3}/{2}-5mm.feat/reg/example_func2standard_warp.nii.gz'
            .format(subject, session, task, run)):
        #two-step normalization using flirt and fnirt, outputting qa pix
        flit = FLIRT(cost_func="corratio", dof=12)
        reg_func = flit.run(
            reference=fun.outputs.roi_file,
            in_file=grabber.outputs.t1,
            searchr_x=[-180, 180],
            searchr_y=[-180, 180],
            out_file=join(
                sink_dir, sesh, subject,
                '{0}-session-{1}_{2}-{3}_t1-flirt.nii.gz'.format(
                    subject, session, task, run)),
            out_matrix_file=join(
                sink_dir, sesh, subject,
                '{0}-session-{1}_{2}-{3}_t1-flirt.mat'.format(
                    subject, session, task, run)))
        reg_mni = flit.run(
            reference=grabber.outputs.t1,
            in_file=grabber.outputs.standard,
            searchr_y=[-180, 180],
            searchr_z=[-180, 180],
            out_file=join(
                sink_dir, sesh, subject,
                '{0}-session-{1}_{2}-{3}_mni-flirt-t1.nii.gz'.format(
                    subject, session, task, run)),
            out_matrix_file=join(
                sink_dir, sesh, subject,
                '{0}-session-{1}_{2}-{3}_mni-flirt-t1.mat'.format(
                    subject, session, task, run)))

        #plot_stat_map(aligner.outputs.out_file, bg_img=fun.outputs.roi_file, colorbar=True, draw_cross=False, threshold=1000, output_file=qa1a, dim=-2)
        display = plot_anat(fun.outputs.roi_file, dim=-1)
        display.add_edges(reg_func.outputs.out_file)
        display.savefig(qa1, dpi=300)
        display.close()

        display = plot_anat(grabber.outputs.t1, dim=-1)
        display.add_edges(reg_mni.outputs.out_file)
        display.savefig(qa2, dpi=300)
        display.close()

        perf = FNIRT(output_type='NIFTI_GZ')
        perf.inputs.warped_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_mni-fnirt-t1.nii.gz'.format(
                subject, session, task, run))
        perf.inputs.affine_file = reg_mni.outputs.out_matrix_file
        perf.inputs.in_file = grabber.outputs.standard
        perf.inputs.subsampling_scheme = [8, 4, 2, 2]
        perf.inputs.fieldcoeff_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_mni-fnirt-t1-warpcoeff.nii.gz'.format(
                subject, session, task, run))
        perf.inputs.field_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_mni-fnirt-t1-warp.nii.gz'.format(
                subject, session, task, run))
        perf.inputs.ref_file = grabber.outputs.t1
        reg2 = perf.run()
        warp.inputs.field_file = reg2.outputs.field_file
        #plot fnirted MNI overlaid on example func
        display = plot_anat(grabber.outputs.t1, dim=-1)
        display.add_edges(reg2.outputs.warped_file)
        display.savefig(qa3, dpi=300)
        display.close()
    else:
        warpspeed = InvWarp(output_type='NIFTI_GZ')
        warpspeed.inputs.warp = '/home/data/nbc/physics-learning/data/first-level/{0}/session-{1}/{2}/{2}-{3}/{2}-5mm.feat/reg/example_func2standard_warp.nii.gz'.format(
            subject, session, task, run)
        warpspeed.inputs.reference = fun.outputs.roi_file
        warpspeed.inputs.inverse_warp = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_mni-fnirt-t1-warp.nii.gz'.format(
                subject, session, task, run))
        mni2epiwarp = warpspeed.run()
        warp.inputs.field_file = mni2epiwarp.outputs.inverse_warp

    for key in masks.keys():
        #warp takes us from mni to epi
        warp.inputs.in_file = masks[key]
        warp.inputs.ref_file = fun.outputs.roi_file
        warp.inputs.out_file = join(
            sink_dir, sesh, subject,
            '{0}-session-{1}_{2}-{3}_{4}.nii.gz'.format(
                subject, session, task, run, key))
        net_warp = warp.run()

        qa_file = join(
            sink_dir, 'qa', '{0}-session-{1}_{2}-{3}_qa_{4}.png'.format(
                subject, session, task, run, key))

        display = plotting.plot_roi(net_warp.outputs.out_file,
                                    bg_img=fun.outputs.roi_file,
                                    colorbar=True,
                                    vmin=0,
                                    vmax=18,
                                    draw_cross=False)
        display.savefig(qa_file, dpi=300)
        display.close()

    return flirty.outputs.out_file, confound_file, e
示例#4
0
            #invert the epi-to-mni warpfield so you can run these analyses in native space
            invert.inputs.warp = join(data_dir, subject, 'session-{0}'.format(session), 'resting-state/resting-state-0/endor1.feat/reg/example_func2standard_warp.nii.gz')
            invert.inputs.inverse_warp = mni2epiwarp
            invert.inputs.reference = join(data_dir, subject, 'session-{0}'.format(session), 'resting-state/resting-state-0/endor1.feat/reg/example_func.nii.gz')
            inverted = invert.run()

            warpspeed.inputs.ref_file = join(data_dir, subject, 'session-{0}'.format(session), 'resting-state/resting-state-0/endor1.feat/reg/example_func.nii.gz')
            warpspeed.inputs.field_file = inverted.outputs.inverse_warp

            xfmd_masks = {}
            for mask in masks.keys():
                mask_nativespace = join(sink_dir, sesh[session], subject, '{0}-session-{1}_rest_{2}.nii.gz'.format(subject, session, mask))
                warpspeed.inputs.in_file = masks[mask]
                warpspeed.inputs.out_file = mask_nativespace
                warped = warpspeed.run()
                xfmd_masks[mask] = mask_nativespace

            shen_masker = NiftiLabelsMasker(xfmd_masks['shen2015'], background_label=0, standardize=True, detrend=True,t_r=3.)
            craddock_masker = NiftiLabelsMasker(xfmd_masks['craddock2012'], background_label=0, standardize=True, detrend=True,t_r=3.)

            confounds = '/home/data/nbc/physics-learning/anxiety-physics/output/{1}/{0}/{0}_confounds.txt'.format(subject, sesh[session])
            epi_data = join(data_dir, subject, 'session-{0}'.format(session), 'resting-state/resting-state-0/endor1.feat', 'filtered_func_data.nii.gz')

            shen_ts = shen_masker.fit_transform(epi_data, confounds)
            shen_corrmat = correlation_measure.fit_transform([shen_ts])[0]
            np.savetxt(join(sink_dir, sesh[session], subject, '{0}-session-{1}-rest_network_corrmat_shen2015.csv'.format(subject, session)), shen_corrmat, delimiter=",")
            #shen_corrmat = np.genfromtxt(join(sink_dir, session, 'resting-state', subject, '{0}_network_corrmat_shen2015.csv'.format(subject)), delimiter=",")

            craddock_ts = craddock_masker.fit_transform(epi_data, confounds)
            craddock_corrmat = correlation_measure.fit_transform([craddock_ts])[0]
                applywarp.inputs.field_file = join(
                    sink_dir,
                    session,
                    "resting-state",
                    subject,
                    "{0}-{1}_mni-fnirt-epi-warp.nii.gz".format(
                        subject, session),
                )
                applywarp.inputs.out_file = join(
                    sink_dir,
                    session,
                    "resting-state",
                    subject,
                    "{0}-{1}_{2}.nii.gz".format(subject, session, key),
                )
                res = applywarp.run()

                qa_file = join(
                    sink_dir,
                    "output",
                    "qa",
                    "{0}-{1}_qa-rest_{2}.png".format(subject, session, key),
                )

                display = plotting.plot_roi(
                    res.outputs.out_file,
                    bg_img=example_func,
                    colorbar=True,
                    vmin=0,
                    vmax=18,
                    draw_cross=False,
示例#6
0
def fnirt_again(data_dir, sink_dir, subject, run, masks, mask_names):
    import numpy as np

    def get_niftis(subject, data_dir, sink_dir, run, masks):
        from os.path import join, exists

        t1 = join(
            data_dir,
            subject,
            "session-1",
            "anatomical",
            "anatomical-0",
            "anatomical.nii.gz",
        )
        # t1_brain_mask = join(data_dir, subject, 'session-1', 'anatomical', 'anatomical-0', 'fsl', 'anatomical-bet.nii.gz')
        example_func = join(
            sink_dir, subject,
            "{0}-{1}_retr-example_func.nii.gz".format(subject, run))
        assert exists(t1), "t1 does not exist"
        assert exists(example_func), "example_func does not exist"
        standard = "/home/applications/fsl/5.0.8/data/standard/MNI152_T1_2mm.nii.gz"
        mni2t1 = join(sink_dir, subject,
                      "{0}-{1}_mni-flirt-t1.mat".format(subject, run))
        t12epi = join(sink_dir, subject,
                      "{0}-{1}_t1-flirt-retr.mat".format(subject, run))
        masks = masks
        return t1, example_func, standard, mni2t1, t12epi, masks

    data = Function(
        function=get_niftis,
        input_names=["subject", "data_dir", "sink_dir", "run", "masks"],
        output_names=[
            "t1", "example_func", "standard", "mni2t1", "t12epi", "masks"
        ],
    )
    data.inputs.data_dir = data_dir
    data.inputs.sink_dir = sink_dir
    data.inputs.subject = subject
    data.inputs.masks = masks
    data.inputs.run = run
    grabber = data.run()

    perf = FNIRT(output_type="NIFTI_GZ")
    perf.inputs.warped_file = join(
        sink_dir, subject, "{0}-{1}_mni-fnirt-t1.nii.gz".format(subject, run))
    perf.inputs.affine_file = grabber.outputs.mni2t1
    perf.inputs.in_file = grabber.outputs.standard
    perf.inputs.subsampling_scheme = [8, 4, 2, 2]
    perf.inputs.fieldcoeff_file = join(
        sink_dir, subject,
        "{0}-{1}_mni-fnirt-t1-warpcoef.nii.gz".format(subject, run))
    perf.inputs.field_file = join(
        sink_dir, subject,
        "{0}-{1}_mni-fnirt-t1-warp.nii.gz".format(subject, run))
    perf.inputs.ref_file = grabber.outputs.t1
    reg2 = perf.run()

    for i in np.arange(0, len(masks)):
        # warp takes us from mni to t1, postmat
        warp = ApplyWarp(interp="nn", abswarp=True)
        warp.inputs.in_file = grabber.outputs.masks[i]
        warp.inputs.ref_file = grabber.outputs.example_func
        warp.inputs.field_file = reg2.outputs.field_file
        warp.inputs.postmat = grabber.outputs.t12epi
        warp.inputs.out_file = join(
            sink_dir,
            subject,
            "{0}-{1}_{2}_retr.nii.gz".format(subject, run, mask_names[i]),
        )
        net_warp = warp.run()
    return "yay"