def plot_surf(img_dir, freesurfer_dir, info, surface): fs = Freesurfer(freesurfer_dir / info['subject']) surf = getattr(fs.read_brain(surface), info['hemi']) surf_img = nload(str(info['surf'])) surf_val = surf_img.get_data()[:, 0, 0].astype('float64') v = Viz3() v.add_surf(surf, values=surf_val, limits_c=(-6, 6), colorbar=True) v.save(img_dir / (info['surf'].stem + '.png')) v.close()
def read_surf(filename, right_or_left): fs = Freesurfer(filename) ras_shift = fs.surface_ras_shift if right_or_left > 0.5: hemi = 'rh' else: hemi = 'lh' pial = getattr(fs.read_brain(), hemi) if 'som' not in filename.name: pial.vert[:, 0] += ras_shift[0] pial.vert[:, 1] += ras_shift[1] pial.vert[:, 2] += ras_shift[2] return pial
def plot_surface(parameters, frequency_band, subject, surf): elec_file = get_path(parameters, 'elec', subject=subject) ieeg_file = get_path(parameters, 'ieeg_tsv', frequency_band=frequency_band, subject=subject) fmri_file = get_path(parameters, 'fmri_nii', subject=subject) if elec_file is None or ieeg_file is None or fmri_file is None: return freesurfer_dir = parameters['paths'][ 'freesurfer_subjects_dir'] / f'sub-{subject}' compare_ieeg = read_tsv(ieeg_file) fs = Freesurfer(freesurfer_dir) electrodes = Electrodes(elec_file) elec = electrodes.electrodes.tsv all_elec = [] labels = [] for chan in compare_ieeg: i_chan = where(elec['name'] == chan['channel'])[0] all_elec.append(elec[i_chan]) labels.append(f"{chan['channel']} = {chan['measure']:0.3f}") elec = concatenate(all_elec) if mean(elec['x']) > 0: right_or_left = 1 hemi = 'rh' else: right_or_left = -1 hemi = 'lh' fs = Freesurfer(freesurfer_dir) pial = getattr(fs.read_brain(), hemi) vert = pial.vert + fs.surface_ras_shift if subject in surf: fmri_vals = surf[subject] else: print(f'Computing surf for {subject}') fmri_vals = project_mri_to_surf( fmri_file, vert, parameters['plot']['surface']['kernel']) surf[subject] = fmri_vals colorscale = 'balance' traces = [ go.Scatter3d( x=elec['x'], y=elec['y'], z=elec['z'], text=labels, mode='markers', hoverinfo='text', marker=dict( size=5, color=compare_ieeg['measure'], colorscale=colorscale, showscale=True, cmid=0, colorbar=dict( title='electrodes', titleside="top", ticks="outside", ticklabelposition="outside", x=0, ), ), ), go.Mesh3d( x=vert[:, 0], y=vert[:, 1], z=vert[:, 2], i=pial.tri[:, 0], j=pial.tri[:, 1], k=pial.tri[:, 2], intensity=fmri_vals, cmid=0, colorscale='Balance', hoverinfo='skip', flatshading=False, colorbar=dict( title='fmri', titleside="top", ticks="outside", ticklabelposition="outside", x=1, ), lighting=dict( ambient=0.18, diffuse=1, fresnel=0.1, specular=1, roughness=0.1, ), lightposition=dict( x=0, y=0, z=-1, ), ), ] fig = go.Figure( data=traces, layout=go.Layout(scene=dict( xaxis=AXIS, yaxis=AXIS, zaxis=AXIS, camera=dict( eye=dict( x=right_or_left, y=0, z=0, ), projection=dict(type='orthographic', ), ), ), ), ) return to_div(fig)
def paper_plot_surf_bold(parameters, subject): elec_file = get_path(parameters, 'elec', subject=subject) fmri_file = get_path(parameters, 'fmri_nii', subject=subject) freesurfer_dir = parameters['paths']['freesurfer_subjects_dir'] / f'sub-{subject}' fs = Freesurfer(freesurfer_dir) electrodes = Electrodes(elec_file) elec = electrodes.electrodes.tsv if mean(elec['x']) > 0: right_or_left = 1 hemi = 'rh' else: right_or_left = -1 hemi = 'lh' fs = Freesurfer(freesurfer_dir) pial = getattr(fs.read_brain(), hemi) vert = pial.vert + fs.surface_ras_shift fmri_vals = project_mri_to_surf(fmri_file, vert, parameters['plot']['surface']['kernel']) colorscale = 'balance' traces = [ go.Scatter3d( x=elec['x'] + right_or_left, y=elec['y'], z=elec['z'] + 1, mode='markers', hoverinfo='text', marker=dict( size=5, color='black', ), ), go.Mesh3d( x=vert[:, 0], y=vert[:, 1], z=vert[:, 2], i=pial.tri[:, 0], j=pial.tri[:, 1], k=pial.tri[:, 2], intensity=fmri_vals, cmax=4, cmin=-4, colorscale=colorscale, hoverinfo='skip', flatshading=False, showscale=False, lighting=dict( ambient=0.18, diffuse=1, fresnel=0.1, specular=1, roughness=0.1, ), lightposition=dict( x=0, y=0, z=-1, ), ), ] fig = go.Figure( data=traces, layout=go.Layout( scene=dict( xaxis=AXIS, yaxis=AXIS, zaxis=AXIS, camera=dict( eye=dict( x=right_or_left, y=0, z=1, ), projection=dict( type='orthographic', ), ), ), ), ) return fig