def test_high_level_glm_one_session(): # New API shapes, rk = [(7, 8, 9, 15)], 3 mask, fmri_data, design_matrices = generate_fake_fmri_data(shapes, rk) single_session_model = FirstLevelGLM(mask=None).fit( fmri_data[0], design_matrices[0]) assert_true(isinstance(single_session_model.masker_.mask_img_, Nifti1Image)) single_session_model = FirstLevelGLM(mask=mask).fit( fmri_data[0], design_matrices[0]) z1, = single_session_model.transform(np.eye(rk)[:1]) assert_true(isinstance(z1, Nifti1Image))
def test_high_level_glm_null_contrasts(): # test that contrast computation is resilient to 0 values. # new API shapes, rk = ((7, 8, 7, 15), (7, 8, 7, 19)), 3 mask, fmri_data, design_matrices = generate_fake_fmri_data(shapes, rk) multi_session_model = FirstLevelGLM(mask=None).fit(fmri_data, design_matrices) single_session_model = FirstLevelGLM(mask=None).fit( fmri_data[0], design_matrices[0]) z1, = multi_session_model.transform( [np.eye(rk)[:1], np.zeros((1, rk))], output_z=False, output_stat=True) z2, = single_session_model.transform([np.eye(rk)[:1]], output_z=False, output_stat=True) np.testing.assert_almost_equal(z1.get_data(), z2.get_data())
def test_high_level_glm_with_data(): # New API shapes, rk = ((7, 8, 7, 15), (7, 8, 7, 16)), 3 mask, fmri_data, design_matrices = write_fake_fmri_data(shapes, rk) multi_session_model = FirstLevelGLM(mask=None).fit(fmri_data, design_matrices) n_voxels = multi_session_model.masker_.mask_img_.get_data().sum() z_image, = multi_session_model.transform([np.eye(rk)[1]] * 2) assert_equal(np.sum(z_image.get_data() != 0), n_voxels) assert_true(z_image.get_data().std() < 3.) # with mask multi_session_model = FirstLevelGLM(mask=mask).fit(fmri_data, design_matrices) z_image, effect_image, variance_image = multi_session_model.transform( [np.eye(rk)[:2]] * 2, output_effects=True, output_variance=True) assert_array_equal(z_image.get_data() == 0., load(mask).get_data() == 0.) assert_true( (variance_image.get_data()[load(mask).get_data() > 0, 0] > .001).all())
def test_high_level_glm_with_paths(): # New API shapes, rk = ((7, 8, 7, 15), (7, 8, 7, 14)), 3 with InTemporaryDirectory(): mask_file, fmri_files, design_files = write_fake_fmri_data(shapes, rk) multi_session_model = FirstLevelGLM(mask=None).fit( fmri_files, design_files) z_image, = multi_session_model.transform([np.eye(rk)[1]] * 2) assert_array_equal(z_image.get_affine(), load(mask_file).get_affine()) assert_true(z_image.get_data().std() < 3.) # Delete objects attached to files to avoid WindowsError when deleting # temporary directory del z_image, fmri_files, multi_session_model
def test_fmri_inputs(): # Test processing of FMRI inputs with InTemporaryDirectory(): shapes = ((7, 8, 9, 10), ) mask, FUNCFILE, _ = write_fake_fmri_data(shapes) FUNCFILE = FUNCFILE[0] func_img = load(FUNCFILE) T = func_img.shape[-1] des = pd.DataFrame(np.ones((T, 1)), columns=['']) des_fname = 'design.csv' des.to_csv(des_fname) for fi in func_img, FUNCFILE: for d in des, des_fname: FirstLevelGLM().fit(fi, d) FirstLevelGLM(mask=None).fit([fi], d) FirstLevelGLM(mask=mask).fit(fi, [d]) FirstLevelGLM(mask=mask).fit([fi], [d]) FirstLevelGLM(mask=mask).fit([fi, fi], [d, d]) FirstLevelGLM(mask=None).fit((fi, fi), (d, d)) assert_raises(ValueError, FirstLevelGLM(mask=None).fit, [fi, fi], d) assert_raises(ValueError, FirstLevelGLM(mask=None).fit, fi, [d, d])
# specify contrasts contrast_matrix = np.eye(design_matrix.shape[1]) contrasts = dict([(column, contrast_matrix[i]) for i, column in enumerate(design_matrix.columns)]) # more interesting contrasts contrasts = { 'faces-scrambled': contrasts['faces'] - contrasts['scrambled'], 'scrambled-faces': -contrasts['faces'] + contrasts['scrambled'], 'effects_of_interest': np.vstack((contrasts['faces'], contrasts['scrambled'])) } # fit GLM print('Fitting a GLM') fmri_glm = FirstLevelGLM(standardize=False).fit(fmri_img, design_matrices) # compute contrast maps print('Computing contrasts') from nilearn import plotting for contrast_id, contrast_val in contrasts.items(): print("\tcontrast id: %s" % contrast_id) z_map, = fmri_glm.transform( [contrast_val] * 2, contrast_name=contrast_id, output_z=True) plotting.plot_stat_map( z_map, bg_img=mean_image, threshold=3.0, display_mode='z', cut_coords=3, black_bg=True, title=contrast_id) plotting.show()
paradigm_file = data.paradigm fmri_img = data.epi_img ### Design matrix ######################################## paradigm = pd.read_csv(paradigm_file, sep=' ', header=None, index_col=None) paradigm.columns = ['session', 'name', 'onset'] design_matrix = make_design_matrix(frame_times, paradigm, hrf_model='canonical with derivative', drift_model="cosine", period_cut=128) ### Perform a GLM analysis ######################################## fmri_glm = FirstLevelGLM().fit(fmri_img, design_matrix) ### Estimate contrasts ######################################### # Specify the contrasts contrast_matrix = np.eye(design_matrix.shape[1]) contrasts = dict([(column, contrast_matrix[i]) for i, column in enumerate(design_matrix.columns)]) contrasts["audio"] = contrasts["clicDaudio"] + contrasts["clicGaudio"] +\ contrasts["calculaudio"] + contrasts["phraseaudio"] contrasts["video"] = contrasts["clicDvideo"] + contrasts["clicGvideo"] + \ contrasts["calculvideo"] + contrasts["phrasevideo"] contrasts["computation"] = contrasts["calculaudio"] + contrasts["calculvideo"] contrasts["sentences"] = contrasts["phraseaudio"] + contrasts["phrasevideo"]
paradigm, hrf_model=hrf_model, drift_model=drift_model, period_cut=period_cut) # specify contrasts contrast_matrix = np.eye(design_matrix.shape[1]) contrasts = dict([(column, contrast_matrix[i]) for i, column in enumerate(design_matrix.columns)]) # Specify one interesting contrast contrasts = {'active-rest': contrasts['active'] - contrasts['rest']} # fit GLM print('\r\nFitting a GLM (this takes time) ..') fmri_glm = FirstLevelGLM(noise_model='ar1', standardize=False).fit([fmri_img], design_matrix) print("Computing contrasts ..") output_dir = 'results' if not os.path.exists(output_dir): os.mkdir(output_dir) for contrast_id, contrast_val in contrasts.items(): print("\tcontrast id: %s" % contrast_id) z_map, t_map, eff_map, var_map = fmri_glm.transform( contrasts[contrast_id], contrast_name=contrast_id, output_z=True, output_stat=True, output_effects=True, output_variance=True)
from nistats import datasets # write directory write_dir = path.join(getcwd(), 'results') if not path.exists(write_dir): mkdir(write_dir) # Data and analysis parameters data = datasets.fetch_fiac_first_level() fmri_img = [data['func1'], data['func2']] mean_img_ = mean_img(fmri_img[0]) design_files = [data['design_matrix1'], data['design_matrix2']] design_matrices = [pd.DataFrame(np.load(df)['X']) for df in design_files] # GLM specification fmri_glm = FirstLevelGLM(data['mask'], standardize=False, noise_model='ar1') # GLM fitting fmri_glm.fit(fmri_img, design_matrices) # compute fixed effects of the two runs and compute related images n_columns = design_matrices[0].shape[1] def pad_vector(contrast_, n_columns): return np.hstack((contrast_, np.zeros(n_columns - len(contrast_)))) contrasts = { 'SStSSp_minus_DStDSp': pad_vector([1, 0, 0, -1], n_columns), 'DStDSp_minus_SStSSp': pad_vector([-1, 0, 0, 1], n_columns),