示例#1
0
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()
示例#2
0
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
示例#3
0
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)
示例#4
0
文件: paper.py 项目: gpiantoni/grvx
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