def make_realignst(funcs, TR, logger):
    """use spm to reaign and slicetime correct files"""
    stvars = utils.get_slicetime_vars(funcs, TR=TR)
    meanfunc, realigned, params = utils.spm_realign(funcs)
    if meanfunc is None:
        logger.error('{0}: spm realignment failed'%(funcs))
        return None, None
    st_realigned = utils.spm_slicetime(realigned, stdict = stvars)
    utils.zip_files(realigned[1:]) # first is original func
    utils.zip_files([meanfunc])
    if st_realigned is None:
        logger.error('{0}: slice timing failed'.format(realigned))
        return None, None

    movement_array = np.loadtxt(params)
    return st_realigned, movement_array
Example #2
0
def process_subject(subdir, despike=False):
    _, sid = os.path.split(subdir)
    rawdir = os.path.join(subdir, "raw")
    workdir = utils.defaults["realign_ants"]
    if despike:
        workdir = utils.defaults["despike"] + workdir
    workdir, exists = utils.make_dir(subdir, workdir)

    if exists:
        raise IOError("{0}: skipping {1} exists".format(subdir, workdir))

    funcs = split(rawdir, workdir, sid, despike)
    aligned, move_arr = make_realign(funcs)

    ## Make aligned_4d
    aligned4d = os.path.join(workdir, "align4d_{0}.nii.gz".format(sid))
    aligned4d = utils.fsl_make4d(aligned, aligned4d)
    print "aligned_4d:", aligned4d
    plot_write_movement(workdir, sid, move_arr)
    utils.zip_files(funcs)
    utils.zip_files(aligned[1:])
    print "{0} : finished".format(sid)
def process_subject(subdir, tr, logger, despike=False):
    """ process one subject despike (optional), realign and
    do slicetime correction via SPM tools"""
    globstr = 'B*func4d.nii*'
    workdirnme = utils.defaults['realign_spm']
    if despike:
        workdirnme = utils.defaults['despike'] + workdirnme
        globstr = 'ds' + globstr
    _, sid = os.path.split(subdir)
    rawdir = os.path.join(subdir, 'raw')

    workdir, exists = utils.make_dir(subdir, workdirnme)

    if exists:
        logger.error('{0}: skipping {1} exists'.format(subdir, workdir))
        return None

    funcs = split(rawdir, workdir, sid, logger, globstr)
    if funcs is None:
        logger.error('Raw dir missing data: {0}'.format(rawdir))
        return None

    staligned, move_arr = make_realignst(funcs, tr, logger)
    if staligned is None:
        return None

    ## Make aligned_4d
    aligned4d = os.path.join(workdir, 'align4d_{0}.nii.gz'.format(sid))
    aligned4d = utils.fsl_make4d(staligned, aligned4d)
    logger.info(aligned4d)
    ## spm only has 6 params, add empty 7th for plotting
    move_arr = np.hstack((move_arr,
                          np.zeros((move_arr.shape[0],1))))
    plot_write_movement(workdir, sid, move_arr, logger)
    ## zip files
    utils.zip_files(funcs)
    utils.zip_files(staligned)
    logger.info('{0} : finished'.format(sid))