def get_fsaverage_label_operator(parc='aparc.a2009s', remove_bads=True, combine_medial=False, return_labels=False, subjects_dir=None, verbose=None): """Get a label operator matrix for fsaverage.""" subjects_dir = get_subjects_dir(subjects_dir, raise_error=True) src = read_source_spaces(op.join( subjects_dir, 'fsaverage', 'bem', 'fsaverage-5-src.fif'), verbose=False) fs_vertices = [np.arange(10242), np.arange(10242)] assert all(np.array_equal(a['vertno'], b) for a, b in zip(src, fs_vertices)) labels = read_labels_from_annot('fsaverage', parc) # Remove bad labels if remove_bads: bads = get_fsaverage_medial_vertices(False) bads = dict(lh=bads[0], rh=bads[1]) assert all(b.size > 1 for b in bads.values()) labels = [label for label in labels if np.in1d(label.vertices, bads[label.hemi]).mean() < 0.8] del bads if combine_medial: labels = combine_medial_labels(labels) offsets = dict(lh=0, rh=10242) rev_op = np.zeros((20484, len(labels))) for li, label in enumerate(labels): if isinstance(label, BiHemiLabel): use_labels = [label.lh, label.rh] else: use_labels = [label] for ll in use_labels: rev_op[ll.get_vertices_used() + offsets[ll.hemi], li:li + 1] = 1. # every src vertex is in exactly one label, except medial wall verts # assert (rev_op.sum(-1) == 1).sum() label_op = SourceEstimate(np.eye(20484), fs_vertices, 0, 1) label_op = label_op.extract_label_time_course(labels, src) out = (label_op, rev_op) if return_labels: out += (labels,) return out