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
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)
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
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))