def test_opt_params(): # adression issue #104 subject_data = SubjectData() for deleteorient in [True, False]: for niigz2nii in [True, False]: # this shouldn't crash subject_data.sanitize(deleteorient=deleteorient, niigz2nii=niigz2nii) subject_data.output_dir = "/tmp/toto" subject_data.sanitize() assert_true(os.path.isdir(subject_data.output_dir)) subject_data._delete_orientation()
def _spm_auditory_subject_data(): """ Fetching auditory example into SubjectData Structure """ subject_data = fetch_spm_auditory() subject_data['func'] = None base_dir = os.path.dirname(subject_data['anat']) subject_data.output_dir = os.path.join(base_dir, OUTPUT_DIR) return SubjectData(**subject_data)
def _make_sd(func_filenames=None, anat_filename=None, ext=".nii.gz", n_sessions=1, make_sess_dirs=False, func_ndim=4, unique_func_names=False, output_dir="/tmp/titi"): if not func_filenames is None: n_sessions = len(func_filenames) func = [create_random_image(ndim=func_ndim) for _ in range(n_sessions)] anat = create_random_image(ndim=3) if anat_filename is None: anat_filename = '%s/anat%s' % (DATA_DIR, ext) _save_img(anat, anat_filename) if not func_filenames is None: for sess_func, filename in zip(func, func_filenames): if isinstance(filename, str): _save_img(sess_func, filename) else: vols = nibabel.four_to_three(sess_func) for x, y in zip(vols, filename): assert isinstance(y, str), type(y) _save_img(x, y) else: func_filenames = [] for sess in range(n_sessions): sess_dir = DATA_DIR if not make_sess_dirs else os.path.join( DATA_DIR, "session%i" % sess) if not os.path.exists(sess_dir): os.makedirs(sess_dir) func_filename = '%s/func%s%s' % (sess_dir, "_sess_%i_" % sess if ( n_sessions > 1 and unique_func_names) else "", ext) _save_img(func[sess], func_filename) func_filenames.append(func_filename) sd = SubjectData(anat=anat_filename, func=func_filenames, output_dir=output_dir) return sd
def do_preproc(funcfile, anatfile, subject, decimate=False): """ Function that performs the preprocessing. Parameters ---------- funcfile: str the functional volume. anatfile: str the anatomical volume. subject: str the subject identifier. decimate: bool, default False if set reduce the input functional volume size (loose information). Returns ------- subject_data: object a structure that contains the output results. """ # Grab the data splitpath = anatfile.split(os.sep) outdir = os.path.join(BIDS_DATA_DIR, "derivatives", "spmpreproc_{0}".format(splitpath[-3]), subject) if not os.path.isdir(outdir): os.makedirs(outdir) local_funcfile = os.path.join(outdir, os.path.basename(funcfile)) if not os.path.isfile(local_funcfile): shutil.copy2(funcfile, local_funcfile) if decimate: im = nibabel.load(local_funcfile) dec_im = nibabel.Nifti1Image(im.get_data()[..., :3], im.affine) nibabel.save(dec_im, local_funcfile) local_anatfile = os.path.join(outdir, os.path.basename(anatfile)) if not os.path.isfile(local_anatfile): shutil.copy2(anatfile, local_anatfile) #cwd = os.getcwd() os.chdir(outdir) subject_data = SubjectData(subject_id=subject, func=local_funcfile, anat=local_anatfile, output_dir=outdir, caching=True) # Start processing print('Starting pre-processing...') subject_data = do_subject_preproc(subject_data, deleteorient=False, slice_timing=False, ref_slice=0, TR=2.5, TA=None, realign=True, realign_reslice=True, register_to_mean=True, realign_software="spm", coregister=True, coregister_reslice=True, coreg_anat_to_func=False, coregister_software="spm", segment=False, normalize=True, fwhm=0, anat_fwhm=0, func_write_voxel_sizes=[3, 3, 3], anat_write_voxel_sizes=[1, 1, 1], hardlink_output=True, report=False, tsdiffana=True, parent_results_gallery=None, last_stage=True, preproc_undergone=None, prepreproc_undergone="", caching=True) return subject_data
def test_init(): sd = SubjectData(anat='/tmp/anat.nii.gz', func='/tmp/func.nii.gz') assert_equal(sd.anat, "/tmp/anat.nii.gz") assert_equal(sd.func, "/tmp/func.nii.gz")
dataset_dir = sys.argv[1] else: dataset_dir = os.path.join(this_dir, "spm_multimodal_faces") # fetch spm multimodal_faces data subject_data = fetch_spm_multimodal_fmri() dataset_dir = os.path.dirname( os.path.dirname(os.path.dirname(subject_data.anat))) # preprocess the data subject_id = "sub001" subject_data = SubjectData(output_dir=os.path.join(dataset_dir, "pypreprocess_output", subject_id), subject_id=subject_id, func=[subject_data.func1, subject_data.func2], anat=subject_data.anat, trials_ses1=subject_data.trials_ses1, trials_ses2=subject_data.trials_ses2, session_ids=["Session1", "Session2"]) subject_data = do_subject_preproc(subject_data, realign=True, coregister=True, segment=True, normalize=True) # experimental paradigm meta-params stats_start_time = time.ctime() tr = 2. drift_model = 'Cosine' hrf_model = 'spm + derivative'