Esempio n. 1
0
def find_make_workdir(subdir, despike, spm, logger=None):
    """ generates realign directory to query based on flags
    and if it exists and create new workdir
    """
    rlgn_dir = utils.defaults['realign_ants']
    if spm:
        rlgn_dir = utils.defaults['realign_spm']
    if despike:
        rlgn_dir = utils.defaults['despike'] + rlgn_dir
    rlgn_dir = os.path.join(subdir, rlgn_dir)
    if not os.path.isdir(rlgn_dir):
        if logger:
            logger.error('{0} doesnt exist skipping'.format(rlgn_dir))
        raise IOError('{0} doesnt exist skipping'.format(rlgn_dir))
    if logger:
        logger.info(rlgn_dir)
    workdirnme = utils.defaults['coreg']
    workdir, exists = utils.make_dir(rlgn_dir, workdirnme)
    if not exists:
        if logger:
            logger.error('{0}: skipping {1} doesnt exist'.format(subdir, workdir))
        raise IOError('{0}: MISSING, Skipping'.format(workdir))
    bpdirnme = utils.defaults['bandpass']
    bpdir, exists = utils.make_dir(workdir, bpdirnme)
    if exists:
        if logger:
            logger.error('{0}: skipping {1}  existS'.format(subdir, bpdir))
        raise IOError('{0}: EXISTS, Skipping'.format(bpdir))
    return rlgn_dir, workdir, bpdir
Esempio n. 2
0
def run_despike(datadir, globstr, taskid):
    gstr = os.path.join(datadir, 'B*')
    subjects = sorted(glob(gstr))
    subdir = subjects[taskid]
    _, sid = os.path.split(subdir)
    rawdir, exists = utils.make_dir(subdir, 'raw')
    if not exists:
        return None
    files, nfiles = utils.get_files(rawdir, 'ds*func*nii*')
    if nfiles > 0:
        print files, 'exists skipping'
        return None
    logger = logging.getLogger('despike')
    logger.setLevel(logging.DEBUG)
    ts = reg.timestr()
    fname = os.path.split(__file__)[-1].replace('.py', '')
    logfile = os.path.join(rawdir,
                           '{0}_{1}_{2}.log'.format(sid, fname, ts))
    fh = logging.FileHandler(logfile)
    fh.setLevel(logging.DEBUG)
    logger.addHandler(fh)
    logger.info(ts)
    logger.info(__file__)
    logger.info(os.getenv('USER'))
    in4d = get_raw(rawdir, globstr, logger)
    if in4d is None:
        logger.error('in4d is None')
        return
    returncode, result = utils.afni_despike(in4d)
    if returncode == 0:
        logger.info('Despike finished')
        logger.info(result.outputs.out_file)
        return
    logger.error(result.runtime.stderr)
Esempio n. 3
0
def find_make_workdir(subdir, despike, spm, gsr=False, logger=None):
    """ generates realign directory to query based on flags
    and if it exists and create new workdir
    """
    rlgn_dir = utils.defaults['realign_ants']
    if spm:
        rlgn_dir = utils.defaults['realign_spm']
    if despike:
        rlgn_dir = utils.defaults['despike'] + rlgn_dir
    rlgn_dir = os.path.join(subdir, rlgn_dir)
    if not os.path.isdir(rlgn_dir):
        if logger:
            logger.error('{0} doesnt exist skipping'.format(rlgn_dir))
        raise IOError('{0} doesnt exist skipping'.format(rlgn_dir))
    if logger:
        logger.info(rlgn_dir)
    workdirnme = utils.defaults['coreg']
    workdir, exists = utils.make_dir(rlgn_dir, workdirnme)
    if not exists:
        if logger:
            logger.error('{0}: skipping {1} doesnt exist'.format(subdir, workdir))
        raise IOError('{0}: MISSING, Skipping'.format(workdir))
    bpdirnme = utils.defaults['bandpass']
    bpdir, exists = utils.make_dir(workdir, bpdirnme)
    if not exists:
        if logger:
            logger.error('{0}: skipping {1}  exists'.format(subdir, bpdir))
        raise IOError('{0}: Missing, Skipping'.format(bpdir))
    modeldirnme = utils.defaults['model_fsl']
    if gsr: # global signal regression
        modeldirnme  = modeldirnme + '_gsr'
    modeldir, exists = utils.make_dir(bpdir, modeldirnme)
    if not exists:
        if logger:
            logger.error('{0}: skipping {1}  exists'.format(subdir, modeldir))

    adjmatdir, exists = utils.make_dir(modeldir, 'adjacency_matrix')
    if exists:
        if logger:
            logger.error('{0}: skipping {1}  exists'.format(subdir, adjmatdir))
        raise IOError('{0}: EXISTS, Skipping'.format(adjmatdir))
    return rlgn_dir, workdir, bpdir, modeldir, adjmatdir
Esempio n. 4
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)
Esempio n. 5
0
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))