def test_gifti_dataset_with_anatomical_surface(fn, format_, include_nodes): ds = _get_test_dataset(include_nodes) nsamples, nfeatures = ds.shape vertices = np.random.normal(size=(nfeatures, 3)) faces = np.asarray([i + np.arange(3) for i in range(2 * nfeatures)]) % nfeatures surf = Surface(vertices, faces) img = map2gifti(ds, surface=surf) arr_index = 0 if include_nodes: # check node indices node_arr = img.darrays[arr_index] assert_equal(node_arr.intent, intent_codes.code['NIFTI_INTENT_NODE_INDEX']) assert_equal(node_arr.coordsys, None) assert_equal(node_arr.data.dtype, np.int32) assert_equal(node_arr.datatype, data_type_codes['int32']) arr_index += 1 for sample in ds.samples: # check sample content arr = img.darrays[arr_index] data = arr.data assert_almost_equal(data, sample) assert_equal(arr.coordsys, None) assert_equal(arr.data.dtype, np.float32) assert_equal(arr.datatype, data_type_codes['float32']) arr_index += 1 # check vertices vertex_arr = img.darrays[arr_index] assert_almost_equal(vertex_arr.data, vertices) assert_equal(vertex_arr.data.dtype, np.float32) assert_equal(vertex_arr.datatype, data_type_codes['float32']) # check faces arr_index += 1 face_arr = img.darrays[arr_index] assert_almost_equal(face_arr.data, faces) assert_equal(face_arr.data.dtype, np.int32) assert_equal(face_arr.datatype, data_type_codes['int32']) # getting the functional data should ignore faces and vertices ds_again = gifti_dataset(img) assert_datasets_almost_equal(ds, ds_again)
def test_gifti_dataset_with_anatomical_surface(fn, format_, include_nodes): ds = _get_test_dataset(include_nodes) nsamples, nfeatures = ds.shape vertices = np.random.normal(size=(nfeatures, 3)) faces = np.asarray([i + np.arange(3) for i in xrange(2 * nfeatures)]) % nfeatures surf = Surface(vertices, faces) img = map2gifti(ds, surface=surf) arr_index = 0 if include_nodes: # check node indices node_arr = img.darrays[arr_index] assert_equal(node_arr.intent, intent_codes.code['NIFTI_INTENT_NODE_INDEX']) assert_equal(node_arr.coordsys, None) assert_equal(node_arr.data.dtype, np.int32) assert_equal(node_arr.datatype, data_type_codes['int32']) arr_index += 1 for sample in ds.samples: # check sample content arr = img.darrays[arr_index] data = arr.data assert_almost_equal(data, sample) assert_equal(arr.coordsys, None) assert_equal(arr.data.dtype, np.float32) assert_equal(arr.datatype, data_type_codes['float32']) arr_index += 1 # check vertices vertex_arr = img.darrays[arr_index] assert_almost_equal(vertex_arr.data, vertices) assert_equal(vertex_arr.data.dtype, np.float32) assert_equal(vertex_arr.datatype, data_type_codes['float32']) # check faces arr_index += 1 face_arr = img.darrays[arr_index] assert_almost_equal(face_arr.data, faces) assert_equal(face_arr.data.dtype, np.int32) assert_equal(face_arr.datatype, data_type_codes['int32']) # getting the functional data should ignore faces and vertices ds_again = gifti_dataset(img) assert_datasets_almost_equal(ds, ds_again)
def test_gifti_dataset(fn, format_, include_nodes): expected_ds = _get_test_dataset(include_nodes) expected_ds_sa = expected_ds.copy(deep=True) expected_ds_sa.sa['chunks'] = [4, 3, 2, 1, 3, 2] expected_ds_sa.sa['targets'] = ['t%d' % i for i in xrange(6)] # build GIFTI file from scratch gifti_string = _build_gifti_string(format_, include_nodes) with open(fn, 'w') as f: f.write(gifti_string) # reading GIFTI file ds = gifti_dataset(fn) assert_datasets_almost_equal(ds, expected_ds) # test GiftiImage input img = nb_giftiio.read(fn) ds2 = gifti_dataset(img) assert_datasets_almost_equal(ds2, expected_ds) # test using Nibabel's output from write nb_giftiio.write(img, fn) ds3 = gifti_dataset(fn) assert_datasets_almost_equal(ds3, expected_ds) # test targets and chunks arguments ds3_sa = gifti_dataset(fn, targets=expected_ds_sa.targets, chunks=expected_ds_sa.chunks) assert_datasets_almost_equal(ds3_sa, expected_ds_sa) # test map2gifti img2 = map2gifti(ds) ds4 = gifti_dataset(img2) assert_datasets_almost_equal(ds4, expected_ds) map2gifti(ds, fn, encoding=format_) ds5 = gifti_dataset(fn) assert_datasets_almost_equal(ds5, expected_ds) # test map2gifti with array input; nodes are not stored map2gifti(ds.samples, fn) ds6 = gifti_dataset(fn) if include_nodes: assert_raises(AssertionError, assert_datasets_almost_equal, ds6, expected_ds) else: assert_datasets_almost_equal(ds6, expected_ds) assert_raises(TypeError, gifti_dataset, ds3_sa) assert_raises(TypeError, map2gifti, img, fn)
def test_gifti_dataset(fn, format_, include_nodes): expected_ds = _get_test_dataset(include_nodes) expected_ds_sa = expected_ds.copy(deep=True) expected_ds_sa.sa['chunks'] = [4, 3, 2, 1, 3, 2] expected_ds_sa.sa['targets'] = ['t%d' % i for i in xrange(6)] # build GIFTI file from scratch gifti_string = _build_gifti_string(format_, include_nodes) with open(fn, 'w') as f: f.write(gifti_string) # reading GIFTI file ds = gifti_dataset(fn) assert_datasets_almost_equal(ds, expected_ds) # test GiftiImage input img = nb_giftiio.read(fn) ds2 = gifti_dataset(img) assert_datasets_almost_equal(ds2, expected_ds) # test using Nibabel's output from write nb_giftiio.write(img, fn) ds3 = gifti_dataset(fn) assert_datasets_almost_equal(ds3, expected_ds) # test targets and chunks arguments ds3_sa = gifti_dataset(fn, targets=expected_ds_sa.targets, chunks=expected_ds_sa.chunks) assert_datasets_almost_equal(ds3_sa, expected_ds_sa) # test map2gifti img2 = map2gifti(ds) ds4 = gifti_dataset(img2) assert_datasets_almost_equal(ds4, expected_ds) # test float64 and int64, which must be converted to float32 and int32 fa = dict() if include_nodes: fa['node_indices'] = ds.fa.node_indices.astype(np.int64) ds_float64 = Dataset(samples=ds.samples.astype(np.float64), fa=fa) ds_float64_again = gifti_dataset(map2gifti(ds_float64)) assert_equal(ds_float64_again.samples.dtype, np.float32) if include_nodes: assert_equal(ds_float64_again.fa.node_indices.dtype, np.int32) # test contents of GIFTI image assert (isinstance(img2, nb_gifti.GiftiImage)) nsamples = ds.samples.shape[0] if include_nodes: node_arr = img2.darrays[0] assert_equal(node_arr.intent, intent_codes.code['NIFTI_INTENT_NODE_INDEX']) assert_equal(node_arr.coordsys, None) assert_equal(node_arr.data.dtype, np.int32) assert_equal(node_arr.datatype, data_type_codes['int32']) first_data_array_pos = 1 narrays = nsamples + 1 else: first_data_array_pos = 0 narrays = nsamples assert_equal(len(img.darrays), narrays) for i in xrange(nsamples): arr = img2.darrays[i + first_data_array_pos] # check intent code illegal_intents = ['NIFTI_INTENT_NODE_INDEX', 'NIFTI_INTENT_GENMATRIX', 'NIFTI_INTENT_POINTSET', 'NIFTI_INTENT_TRIANGLE'] assert (arr.intent not in [intent_codes.code[s] for s in illegal_intents]) # although the GIFTI standard is not very clear about whether # arrays with other intent than NODE_INDEX can have a # GiftiCoordSystem, FreeSurfer's mris_convert # does not seem to like its presence. Thus we make sure that # it's not there. assert_equal(arr.coordsys, None) assert_equal(arr.data.dtype, np.float32) assert_equal(arr.datatype, data_type_codes['float32']) # another test for map2gifti, setting the encoding explicitly map2gifti(ds, fn, encoding=format_) ds5 = gifti_dataset(fn) assert_datasets_almost_equal(ds5, expected_ds) # test map2gifti with array input; nodes are not stored map2gifti(ds.samples, fn) ds6 = gifti_dataset(fn) if include_nodes: assert_raises(AssertionError, assert_datasets_almost_equal, ds6, expected_ds) else: assert_datasets_almost_equal(ds6, expected_ds) assert_raises(TypeError, gifti_dataset, ds3_sa) assert_raises(TypeError, map2gifti, img, fn)
maskimg = {} targets = {} subimg = {} subds = [] zdss = [] ind = {} for ses in ['LR','RL']: cname = '%s/%s/rfMRI_REST1_%s/rfMRI_REST1_%s_10k_Atlas_MSMAll_clean_24nuisance.reg_lin.trend_filt_sm6.dtseries.nii' % (tempdir,sub,ses,ses) tmpimg =cifti.read(cname) zds = tmpimg[0] zscore(zds,chunks_attr=None) nverts = zds.shape[1] zdss.append(zds) for hemi in ['L', 'R']: # Mask: tmpmask = gifti_dataset( '%s/outgoing/%s.HCP_10k_mask.func.gii' % (tempdir,hemi)) maskimg[hemi] = np.where(tmpmask.samples != 0)[1] # Connectivity Targets: tmptargs = gifti_dataset( '%s/resources/700_data/%s.700_to_10k_conn_targs.func.gii' % (tempdir, hemi)) tmptargs = tmptargs[:, maskimg[hemi]] targimg[hemi] = np.where(tmptargs.samples != 0)[1] # Extract hemi data: ind[hemi] = [index for index in range(nverts) if tmpimg[1][1][index][2] == '%s' % brainstruct[hemi]] subimg[hemi] = zds[:,ind[hemi]] # Mask data and get connectivity target timeseries tmp = subimg[hemi][:, maskimg[hemi]] targets[hemi] = tmp[:, targimg[hemi]] # Combine left and right target timeseries targts.append(np.c_[targets['L'], targets['R']]) subds.append(np.c_[subimg['L'], subimg['R']])