num_subjs = int(sys.argv[6]) # the following line is an example to leaving a subject out #vs = VoxelSelector(labels[0:204], epochs_per_subj, num_subjs-1, raw_data[0:204]) # if using all subjects vs = VoxelSelector(labels, epochs_per_subj, num_subjs, raw_data) # if providing two masks, just append raw_data2 as the last input argument #vs = VoxelSelector(labels, epochs_per_subj, num_subjs, raw_data, raw_data2=raw_data2) # for cross validation, use SVM with precomputed kernel clf = svm.SVC(kernel='precomputed', shrinking=False, C=10) results = vs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank() == 0: logger.info('correlation-based voxel selection is done') #print(results[0:100]) mask_img = nib.load(mask_file) mask = mask_img.get_data().astype(np.bool) score_volume = np.zeros(mask.shape, dtype=np.float32) score = np.zeros(len(results), dtype=np.float32) seq_volume = np.zeros(mask.shape, dtype=np.int) seq = np.zeros(len(results), dtype=np.int) with open('result_list.txt', 'w') as fp: for idx, tuple in enumerate(results): fp.write(str(tuple[0]) + ' ' + str(tuple[1]) + '\n') score[tuple[0]] = tuple[1] seq[tuple[0]] = idx score_volume[mask] = score seq_volume[mask] = seq io.save_as_nifti_file(score_volume, mask_img.affine, 'result_score.nii.gz') io.save_as_nifti_file(seq_volume, mask_img.affine, 'result_seq.nii.gz')
def test_save_as_nifti_file(tmpdir) -> None: out_file = str(tmpdir / "nifti.nii") shape = (4, 4, 4) io.save_as_nifti_file(np.ones(shape), np.eye(4), out_file) assert nib.load(out_file).get_data().shape == shape
# RandomType.UNREPRODUCIBLE permutes the voxels differently across runs # example #from brainiak.fcma.preprocessing import RandomType #data, labels = prepare_searchlight_mvpa_data(images, conditions, # random=RandomType.UNREPRODUCIBLE) # the following line is an example to leaving a subject out #epoch_info = [x for x in epoch_info if x[1] != 0] num_subjs = int(sys.argv[5]) # create a Searchlight object sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(data, mask, labels, num_subjs, sl) clf = svm.SVC(kernel='linear', shrinking=False, C=1) # only rank 0 has meaningful return values score_volume, results = mvs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank()==0: score_volume = np.nan_to_num(score_volume.astype(np.float)) io.save_as_nifti_file(score_volume, mask_image.affine, 'result_score.nii.gz') seq_volume = np.zeros(mask.shape, dtype=np.int) seq = np.zeros(len(results), dtype=np.int) with open('result_list.txt', 'w') as fp: for idx, tuple in enumerate(results): fp.write(str(tuple[0]) + ' ' + str(tuple[1]) + '\n') seq[tuple[0]] = idx seq_volume[mask] = seq io.save_as_nifti_file(seq_volume, mask_image.affine, 'result_seq.nii.gz')