Пример #1
0
def test_int64_in_dataviewrgb():
    data = np.arange(np.product(volshape)).reshape(volshape, order='C')
    view = cortex.VolumeRGB(data,
                            data + 1,
                            data + 2,
                            subject=subj,
                            xfmname=xfmname)
    cortex.quickshow(view)

    data = np.arange(nverts)
    view = cortex.VertexRGB(data, data + 1, data + 2, subject=subj)
    cortex.quickshow(view)
Пример #2
0
    def get_thr_map(par, r2, par_min=1.5, par_max=2.5, r2_thr=0.09):


        par = (par - par_min) / (par_max - par_min)

        red, green, blue = cm.jet(par)[:, :3].T
        alpha = r2 > r2_thr

        red[~alpha] = np.nan
        green[~alpha] = np.nan
        blue[~alpha] = np.nan

        return cortex.VertexRGB(
            red=red, green=green, blue=blue, subject='fsaverage', alpha=alpha.astype(float) * 0.7)
Пример #3
0
def get_alpha_vertex(data,
                     alpha,
                     cmap='nipy_spectral',
                     vmin=np.log(5),
                     vmax=np.log(80),
                     standard_space=False,
                     subject='fsaverage'):

    data = np.clip((data - vmin) / (vmax - vmin), 0., .99)
    red, green, blue = getattr(cm, cmap)(data, )[:, :3].T

    if (subject == 'fsaverage') or standard_space:
        fs_subject = 'fsaverage'
    else:
        fs_subject = f'sub-{subject}'

    print(fs_subject)
    # Get curvature
    curv = cortex.db.get_surfinfo(fs_subject)
    # Adjust curvature contrast / color. Alternately, you could work
    # with curv.data, maybe threshold it, and apply a color map.
    curv.data = np.sign(curv.data.data) * .25
    curv.vmin = -1
    curv.vmax = 1
    curv.cmap = 'gray'
    curv_rgb = np.vstack(
        [curv.raw.red.data, curv.raw.green.data,
         curv.raw.blue.data]).astype(np.float32)

    vx_rgb = (np.vstack([red.data, green.data, blue.data]) * 255.).astype(
        np.float32)

    display_data = vx_rgb * alpha[np.newaxis, :] + curv_rgb * (
        1. - alpha[np.newaxis, :])

    return cortex.VertexRGB(*display_data.astype(np.uint8), fs_subject)
Пример #4
0
def test_vertex_rgb_movie():
    r = g = b = np.random.randn(nverts)
    rgb = cortex.VertexRGB(r, g, b, subj)
Пример #5
0
# hemisphere based on vertex number
test1 = np.hstack((np.arange(num_verts[0]), np.arange(num_verts[1])))

# Picking a different vertex in each hemisphere to create another fake
# gradient away from that vertex
second_verts = [n / 4 for n in num_verts]
test2 = np.hstack((np.abs(np.arange(num_verts[0]) - second_verts[0]),
                   np.abs(np.arange(num_verts[1]) - second_verts[1])))

# Creating a third dataset that is random stripes
third_verts = np.random.randint(num_verts[0] + num_verts[1], size=(20, ))
test3 = np.zeros(num_verts[0] + num_verts[1])
for v in third_verts:
    test3[v - 1000:v + 1000] = 1

# Scaling the three datasets to be between 0-255
test1_scaled = test1 / np.max(test1) * 255
test2_scaled = test2 / np.max(test2) * 255
test3_scaled = test3 / np.max(test3) * 255

# Creating three cortex.Volume objects with the test data as np.uint8
red = cortex.Vertex(test1_scaled, subject)
green = cortex.Vertex(test2_scaled, subject)
blue = cortex.Vertex(test3_scaled, subject)

# This creates a 2D Vertex object with both of our test datasets for the
# given subject
vertex_data = cortex.VertexRGB(red, green, blue, subject)
cortex.quickshow(vertex_data, with_colorbar=False)
plt.show()
Пример #6
0
def main(sourcedata, derivatives, subject='tk', dataset='odc'):

    pc_subject = '{}.{}'.format(dataset, subject)
    template = '{derivatives}/modelfitting/glm7/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_left_over_right_zmap.nii.gz'

    session = 'odc2'
    zmap1 = template.format(**locals())

    session = 'odc3'
    zmap2 = template.format(**locals())

    session = 'cas'
    zmap3 = template.format(**locals())

    t1w = get_bids_file(derivatives, 'averaged_mp2rages', 'anat', subject,
                        'T1w', 'anat', 'average')

    zmap1 = image.resample_to_img(zmap1, t1w, interpolation='nearest')
    zmap2 = image.resample_to_img(zmap2, t1w, interpolation='nearest')
    zmap3 = image.resample_to_img(zmap3, t1w, interpolation='nearest')

    transform = cortex.xfm.Transform(np.identity(4), t1w)
    #transform.save(pc_subject, 'identity.t1w', 'magnet')

    mask1 = image.math_img('np.abs(zmap)', zmap=zmap1).get_data().T
    mask2 = image.math_img('np.abs(zmap)', zmap=zmap2).get_data().T
    mask3 = image.math_img('np.abs(zmap) > 2', zmap=zmap3).get_data().T

    print(mask3.sum())

    mask3 = ndimage.binary_closing(mask3, iterations=2)
    print(mask3.sum())

    prf_pars = np.load(
        op.join(derivatives,
                'prf/vertices/sub-{subject}_desc-test2_prf_optim.npz').format(
                    **locals()))

    r2 = prf_pars['r2']
    mask = r2 < 0.1

    angle = prf_pars['angle']
    #angle[mask] = np.nan

    ecc = prf_pars['ecc']
    ecc[mask] = np.nan

    size = prf_pars['size']
    size[mask] = np.nan

    r2_max = np.max(r2)
    r2_max = 0.3
    r2_min = 0.15

    hsv_angle = np.ones((len(r2), 3))
    hsv_angle[:, 0] = angle
    hsv_angle[:, 1] = np.clip(r2 / r2_max * 2, 0, 1)
    hsv_angle[:, 2] = r2 > r2_min

    left_index = cortex.db.get_surfinfo(pc_subject).left.shape[0]
    angle_ = hsv_angle[:left_index, 0]
    hsv_angle[:left_index, 0] = np.clip(
        ((angle_ + np.pi) - 0.25 * np.pi) / (1.5 * np.pi), 0, 1)
    angle_ = -hsv_angle[left_index:, 0].copy()
    angle_[hsv_angle[left_index:, 0] > 0] += 2 * np.pi
    angle_ = np.clip((angle_ - 0.25 * np.pi) / 1.5 / np.pi, 0, 1)
    hsv_angle[left_index:, 0] = angle_

    rgb_angle = colors.hsv_to_rgb(hsv_angle)

    #alpha_angle = np.clip(r2 / r2_max * 2, r2_min/r2_max, 1)
    #alpha_angle[alpha_angle < r2_min/r2_max] = 0
    alpha_angle = hsv_angle[:, 2]

    images = {}
    zmap1 = zmap1.get_data().T
    zmap1[zmap1 == 0] = np.nan

    zmap2 = zmap2.get_data().T
    zmap2[zmap2 == 0] = np.nan

    zmap3 = zmap3.get_data().T
    zmap3[zmap3 == 0] = np.nan

    images['PRF polar angle'] = cortex.VertexRGB(rgb_angle[:, 0],
                                                 rgb_angle[:, 1],
                                                 rgb_angle[:, 2],
                                                 alpha=alpha_angle,
                                                 subject=pc_subject)

    #images['zmap_ses-odc2'] = cortex.Volume2D(zmap1,
    #mask,
    #pc_subject,
    #'identity.t1w', vmin=-3, vmax=3, vmin2=0, vmax2=3,
    #cmap='BuBkRd_alpha_2D')

    #images['zmap_ses-odc3'] = cortex.Volume2D(zmap2,
    #mask,
    #pc_subject,
    #'identity.t1w', vmin=-3, vmax=3, vmin2=0, vmax2=3,
    #cmap='BuBkRd_alpha_2D')

    images['ODCs Amsterdam 1'] = cortex.Volume2D(zmap1,
                                                 mask3,
                                                 pc_subject,
                                                 'identity.t1w',
                                                 vmin=-3,
                                                 vmax=3,
                                                 vmin2=0,
                                                 vmax2=3,
                                                 cmap='BuBkRd_alpha_2D')

    images['ODCs Amsterdam 2'] = cortex.Volume2D(zmap2,
                                                 mask3,
                                                 pc_subject,
                                                 'identity.t1w',
                                                 vmin=-3,
                                                 vmax=3,
                                                 vmin2=0,
                                                 vmax2=3,
                                                 cmap='BuBkRd_alpha_2D')

    images['ODCs Beijing'] = cortex.Volume2D(zmap3,
                                             mask3,
                                             pc_subject,
                                             'identity.t1w',
                                             vmin=-3,
                                             vmax=3,
                                             vmin2=0,
                                             vmax2=3,
                                             cmap='BuBkRd_alpha_2D')

    ds = cortex.Dataset(**images)

    cortex.webgl.make_static(outpath=op.join(derivatives, 'pycortex', subject),
                             data=ds)
    cortex.webshow(ds)
Пример #7
0
    for _, val in enumerate(masked_rsq)
]).T  #why transpose? because of orientation of pycortex volume?

# create alpha array weighted by rsq values
alpha = np.sqrt(masked_rsq.copy())  #np.ones(alpha_mask.shape)
alpha[alpha_mask] = np.nan

# create alpha array with nan = transparent = values with rsq below thresh and 1 = opaque = values above thresh
alpha_ones = np.ones(alpha_mask.shape)
alpha_ones[alpha_mask] = np.nan

images = {}

images['polar'] = cortex.VertexRGB(rgb[..., 0].T,
                                   rgb[..., 1].T,
                                   rgb[..., 2].T,
                                   subject='fsaverage_gross',
                                   alpha=alpha)
#cortex.quickshow(images['polar'],with_curvature=True,with_sulci=True,with_colorbar=False)
filename = os.path.join(
    figure_out,
    'flatmap_space-fsaverage_rsq-%0.2f_type-polar_angle.svg' % rsq_threshold)
print('saving %s' % filename)
_ = cortex.quickflat.make_png(filename,
                              images['polar'],
                              recache=True,
                              with_colorbar=False,
                              with_curvature=True,
                              with_sulci=True)

images['polar_noalpha'] = cortex.VertexRGB(rgb[..., 0].T,
Пример #8
0
weighted_sd = cortex.Vertex(weighted_pars[:, 1], 'fsaverage')
weighted_amplitude = cortex.Vertex(
    np.clip(weighted_pars[:, 2], 0, 100), 'fsaverage')
weighted_baseline = cortex.Vertex(weighted_pars[:, 3], 'fsaverage')

mu_min = 1.5
mu_max = 2.5
r2_thr = 0.09
mu_exp = np.exp(weighted_mu)
mu_exp = weighted_mu
mu_exp = (mu_exp - mu_min) / (mu_max - mu_min)

weighted_mu_hsv = np.zeros((3, len(weighted_mu)))
weighted_mu_hsv[0] = mu_exp
# weighted_mu_hsv[1] = r2s_mean_v.data / np.max(r2s_mean_v.data)
weighted_mu_hsv[1] = 1
weighted_mu_hsv[2] = 1.
alpha = r2s_mean_v.data > r2_thr

# red, green, blue = colors.hsv_to_rgb(weighted_mu_hsv.T).T# * 256
red, green, blue = cm.jet(mu_exp)[:, :3].T
red[~alpha] = np.nan
green[~alpha] = np.nan
blue[~alpha] = np.nan

weighted_mu_rgb_v = cortex.VertexRGB(
    red=red, green=green, blue=blue, subject='fsaverage', alpha=alpha.astype(float) * 0.7)

cortex.utils.add_roi(weighted_mu_rgb_v, 'weighted_mu', open_inkscape=False)
cortex.utils.add_roi(r2s_mean_v, 'R2', open_inkscape=False)
Пример #9
0
def main(sourcedata, derivatives, subject, session, cache=True, dataset='odc'):

    if subject in []:
        trans_str = '_trans'
    else:
        trans_str = ''

    pc_subject = '{}.{}'.format(dataset, subject)

    zmap = '{derivatives}/modelfitting/glm7/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_left_over_right_zmap{trans_str}.nii.gz'.format(
        **locals())

    #zmap2 = '{derivatives}/modelfitting/glm8/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_left_over_right_zmap{trans_str}.nii.gz'.format(**locals())

    #zmap_task = '{derivatives}/modelfitting/glm7/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_left_over_right_task_zmap.nii.gz'.format(**locals())

    if subject == '01':
        mean_epi = '{derivatives}/spynoza/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-checkerboard_acq-07_run-03_reference{trans_str}.nii.gz'.format(
            **locals())
    else:
        mean_epi = '{derivatives}/spynoza/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-fixation_acq-07_run-03_reference{trans_str}.nii.gz'.format(
            **locals())

    #psc = '{derivatives}/modelfitting/glm7/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_left_over_right_effect_size.nii.gz'.format(**locals())

    abs_zmap_l = op.join(
        derivatives, 'sampled_giis', f'sub-{subject}', f'ses-{session}',
        'func',
        f'sub-{subject}_ses-{session}_left_over_right_desc-abszmap-depth-all_hemi-lh_smoothed.gii'
    )
    abs_zmap_r = op.join(
        derivatives, 'sampled_giis', f'sub-{subject}', f'ses-{session}',
        'func',
        f'sub-{subject}_ses-{session}_left_over_right_desc-abszmap-depth-all_hemi-rh_smoothed.gii'
    )

    images = {}

    if op.exists(abs_zmap_l):
        abs_zmap = np.hstack((surface.load_surf_data(abs_zmap_l),
                              surface.load_surf_data(abs_zmap_r)))

        images['abs_zmap'] = cortex.Vertex(abs_zmap,
                                           pc_subject,
                                           vmin=.5,
                                           vmax=2.3)

    t1w = cortex.db.get_anat(pc_subject)

    zmap = image.resample_to_img(zmap, t1w)

    transform = cortex.xfm.Transform(np.identity(4), t1w)

    mask = image.math_img('np.abs(zmap)', zmap=zmap)

    zmap = zmap.get_data().T
    zmap[zmap == 0] = np.nan

    #zmap2 = zmap2.get_data().T
    #zmap2[zmap2 == 0] = np.nan

    mask = mask.get_data().T
    images['zmap'] = cortex.Volume2D(zmap,
                                     mask,
                                     pc_subject,
                                     'identity',
                                     vmin=-3.5,
                                     vmax=3.5,
                                     vmin2=0,
                                     vmax2=3,
                                     cmap='BuBkRd_alpha_2D')
    #images['zmap2'] = cortex.Volume2D(zmap2,
    #mask,
    #pc_subject,
    #'identity.t1w', vmin=-3, vmax=3, vmin2=0, vmax2=3,
    #cmap='BuBkRd_alpha_2D')
    #images['abs_zmap'] = cortex.Volume(np.abs(zmap),
    #pc_subject,
    #'identity.t1w', vmin=-3, vmax=3, vmin2=0, vmax2=3)
    ##cmap='BuBkRd_alpha_2D')
    #zmap_task = zmap_task.get_data().T
    #zmap_task[zmap_task == 0] = np.nan
    #images['zmap_task'] = cortex.Volume2D(zmap_task,
    #mask,
    #pc_subject,
    #'identity.t1w', vmin=-3, vmax=3, vmin2=0, vmax2=3,
    #cmap='BuBkRd_alpha_2D')

    #images['mean_epi'] = cortex.Volume(mean_epi.get_data().T,
    #pc_subject,
    #'identity.t1w')

    # PRFs
    prf_pars = np.load(
        op.join(derivatives,
                'prf/vertices/sub-{subject}_desc-test2_prf_optim.npz').format(
                    **locals()))

    r2 = prf_pars['r2']
    mask = r2 < 0.1

    angle = prf_pars['angle']
    #angle[mask] = np.nan

    ecc = prf_pars['ecc']
    ecc[mask] = np.nan

    size = prf_pars['size']
    size[mask] = np.nan

    r2_max = np.max(r2)
    r2_max = 0.3
    r2_min = 0.15

    hsv_angle = np.ones((len(r2), 3))
    hsv_angle[:, 0] = angle
    hsv_angle[:, 1] = np.clip(r2 / r2_max * 2, 0, 1)
    hsv_angle[:, 2] = r2 > r2_min

    left_index = cortex.db.get_surfinfo(pc_subject).left.shape[0]
    angle_ = hsv_angle[:left_index, 0]
    hsv_angle[:left_index, 0] = np.clip(
        ((angle_ + np.pi) - 0.25 * np.pi) / (1.5 * np.pi), 0, 1)
    angle_ = -hsv_angle[left_index:, 0].copy()
    angle_[hsv_angle[left_index:, 0] > 0] += 2 * np.pi
    angle_ = np.clip((angle_ - 0.25 * np.pi) / 1.5 / np.pi, 0, 1)
    hsv_angle[left_index:, 0] = angle_

    rgb_angle = colors.hsv_to_rgb(hsv_angle)

    #alpha_angle = np.clip(r2 / r2_max * 2, r2_min/r2_max, 1)
    #alpha_angle[alpha_angle < r2_min/r2_max] = 0
    alpha_angle = hsv_angle[:, 2]

    images['angle'] = cortex.VertexRGB(
        rgb_angle[:, 0],
        rgb_angle[:, 1],
        rgb_angle[:, 2],
        #alpha=np.ones(len(rgb_angle)),
        alpha=alpha_angle,
        subject=pc_subject)
    #images['r2'] = cortex.Vertex(prf_pars['r2'], pc_subject, cmap='inferno')
    images['ecc'] = cortex.Vertex(ecc,
                                  pc_subject,
                                  vmin=0,
                                  vmax=15,
                                  cmap='inferno')
    #images['angle_1d'] = cortex.Vertex(angle, pc_subject, vmin=-3.14, vmax=3.14, cmap='hsv')
    #images['size'] = cortex.Vertex(size, pc_subject, vmin=0, vmax=10)

    # VEIN MASK
    layout = BIDSLayout(op.join(derivatives, 'veins_mask'), validate=False)

    veins = layout.get(subject=subject,
                       session=session,
                       suffix='veins',
                       return_type='file')

    if len(veins) == 1:
        veins = veins[0]
        t1w = cortex.db.get_anat(pc_subject, 'raw')
        veins = image.resample_to_img(veins, t1w)
        veins = veins.get_data().T
        veins[veins == 0] = np.nan
        images['veins'] = cortex.Volume(veins,
                                        subject=pc_subject,
                                        xfmname='identity',
                                        vmin=0,
                                        vmax=2)

    veins_surf_l = op.join(
        derivatives, 'tsnr', f'sub-{subject}', f'ses-{session}', 'func',
        f'sub-{subject}_ses-{session}_desc-depth.all_hemi-lh_invtsnr.gii')
    veins_surf_r = op.join(
        derivatives, 'tsnr', f'sub-{subject}', f'ses-{session}', 'func',
        f'sub-{subject}_ses-{session}_desc-depth.all_hemi-rh_invtsnr.gii')
    veins_d = np.hstack((surface.load_surf_data(veins_surf_l),
                         surface.load_surf_data(veins_surf_r)))
    veins_d[np.isinf(veins_d)] = np.nan
    images['veins_surf'] = cortex.Vertex(veins_d, pc_subject)

    ds = cortex.Dataset(**images)

    # cortex.webgl.make_static(outpath=op.join(derivatives, 'pycortex', subject),
    # data=ds)
    cortex.webgl.make_static(outpath=op.join(derivatives, 'pycortex',
                                             f'{subject}.{session}', 'light'),
                             data={
                                 'ODCs': images['zmap'],
                                 'PRF polar angle': images['angle']
                             },
                             anonymize=False,
                             sampler='trilinear')
Пример #10
0
def main(pars,
         make_svg,
         derivatives,
         old=False,
         recache=False,
         pc_subject=None):

    if pc_subject is None:
        reg = re.compile('.*/sub-(?P<subject>[a-z0-9]+)_.*')

        subject = reg.match(pars).group(1)
        pc_subject = 'odc.{}'.format(subject)

        if old:
            pc_subject += '.old'

    #mean_epi = '{derivatives}/spynoza/ses-prffunc/sub-subject/.nii.gz'.format(**locals())

    prf_pars = np.load(pars)

    images = {}

    r2 = prf_pars['r2']
    mask = r2 < 0.05

    angle = prf_pars['angle']
    #angle[mask] = np.nan

    ecc = prf_pars['ecc']
    ecc[mask] = np.nan

    size = prf_pars['size']
    size[mask] = np.nan

    images['ecc'] = cortex.Vertex(ecc, pc_subject, vmin=0, vmax=15)

    r2_max = np.max(r2)
    r2_max = 0.3
    r2_min = 0.15

    hsv_angle = np.ones((len(r2), 3))
    hsv_angle[:, 0] = angle
    hsv_angle[:, 1] = np.clip(r2 / r2_max * 2, 0, 1)
    hsv_angle[:, 2] = r2 > r2_min

    left_index = cortex.db.get_surfinfo(pc_subject).left.shape[0]
    angle_ = hsv_angle[:left_index, 0]
    hsv_angle[:left_index, 0] = np.clip(
        ((angle_ + np.pi) - 0.25 * np.pi) / (1.5 * np.pi), 0, 1)
    angle_ = -hsv_angle[left_index:, 0].copy()
    angle_[hsv_angle[left_index:, 0] > 0] += 2 * np.pi
    angle_ = np.clip((angle_ - 0.25 * np.pi) / 1.5 / np.pi, 0, 1)
    hsv_angle[left_index:, 0] = angle_

    rgb_angle = colors.hsv_to_rgb(hsv_angle)

    #alpha_angle = np.clip(r2 / r2_max * 2, r2_min/r2_max, 1)
    #alpha_angle[alpha_angle < r2_min/r2_max] = 0
    alpha_angle = hsv_angle[:, 2]

    images['angle'] = cortex.VertexRGB(
        rgb_angle[:, 0],
        rgb_angle[:, 1],
        rgb_angle[:, 2],
        #alpha=np.ones(len(rgb_angle)),
        alpha=alpha_angle,
        subject=pc_subject)

    images['angle_1d'] = cortex.Vertex(angle,
                                       pc_subject,
                                       vmin=-3.14,
                                       vmax=3.14,
                                       cmap='hsv')

    images['r2'] = cortex.Vertex(r2, pc_subject, vmin=0, vmax=r2_max)
    #images['ecc'] = cortex.Vertex2D(ecc/15, r2/r2_max, cmap='BuBkRd_alpha_2D', subject=pc_subject, vmin=.15, vmax=1)

    v1_ix, v1_values = cortex.freesurfer.get_label(pc_subject,
                                                   'V1_exvivo',
                                                   'sub-{}'.format(subject),
                                                   fs_dir=op.join(
                                                       derivatives,
                                                       'freesurfer'))

    vt_v1 = np.zeros_like(r2)
    vt_v1[v1_ix] = v1_values
    images['fs_v1'] = cortex.Vertex(vt_v1, pc_subject)

    v2_ix, v2_values = cortex.freesurfer.get_label(pc_subject,
                                                   'V2_exvivo',
                                                   'sub-{}'.format(subject),
                                                   fs_dir=op.join(
                                                       derivatives,
                                                       'freesurfer'))
    vt_v2 = np.zeros_like(r2)
    vt_v2[v2_ix] = v2_values

    images['fs_v2'] = cortex.Vertex(vt_v2, pc_subject)

    layout = BIDSLayout(op.join(derivatives, 'tsnr'), validate=False)

    veins = layout.get(subject=subject,
                       session='prf',
                       suffix='invtsnr',
                       return_type='file')
    if len(veins) > 0:
        veins = image.mean_img(veins)

        t1w = cortex.db.get_anat(pc_subject, 'raw')
        veins = image.resample_to_img(veins, t1w)

        images['veins'] = cortex.Volume(veins.get_data().T,
                                        subject=pc_subject,
                                        xfmname='identity',
                                        vmin=0,
                                        vmax=2)

    if make_svg:
        cortex.utils.add_roi(data=images['angle'],
                             name='prf_angle',
                             open_inkscape=False)
        cortex.utils.add_roi(data=images['angle_1d'],
                             name='prf_angle_1d',
                             open_inkscape=False)
        cortex.utils.add_roi(data=images['ecc'],
                             name='prf_ecc',
                             open_inkscape=False)
        cortex.utils.add_roi(data=images['fs_v1'],
                             name='Freesurfer V1',
                             open_inkscape=False)
        cortex.utils.add_roi(data=images['fs_v2'],
                             name='Freesurfer V2',
                             open_inkscape=False)
    else:
        ds = cortex.Dataset(**images)
        cortex.webshow(ds, recache=recache)
Пример #11
0
B.set_bad(alpha=0)



data = {group:{phase:np.concatenate((np.array(image.get_data(f'ers_comps/surf/lh_{group}_{phase}.mgh').ravel()),np.array(image.get_data(f'ers_comps/surf/rh_{group}_{phase}.mgh').ravel()))) for phase in ['acquisition','extinction']} for group in ['healthy','ptsd']}

data['healthy']['acquisition'] = R(acq_norm(data['healthy']['acquisition']))
data['healthy']['extinction'] = B(ext_norm(data['healthy']['extinction']))

data['ptsd']['acquisition'] = R(acq_norm(data['ptsd']['acquisition']))
data['ptsd']['extinction'] = B(ext_norm(data['ptsd']['extinction']))

verts = []
for group in ['healthy','ptsd']:
    for phase in ['acquisition','extinction']:
        verts.append(cortex.VertexRGB(data[group][phase][:,0],data[group][phase][:,1],data[group][phase][:,2],subject='MNI2009c',alpha=data[group][phase][:,3],description=f'{group}_{phase}')        )

verts = {str(i):verts[i] for i in range(4)}

cortex.webshow(verts)






cortex.freesurfer.import_subj('MNI2009c',freesurfer_subject_dir='/mnt/c/Users/ACH/Desktop',)

cortex.xfm.Transform.from_freesurfer('/mnt/c/Users/ACH/Desktop/MNI2009c/mri/transforms/talairach.xfm',
                                    '/mnt/c/Users/ACH/Desktop/standard/MNI152NLin2009cAsym_T1_1mm_brain.nii.gz',
                                    'MNI2009c',
Пример #12
0
def main(derivatives, subject):

    pc_subject = 'odc.{}'.format(subject)

    coordinates = []
    for hemi in ['lh', 'rh']:
        coordinates.append(
            pd.read_pickle(
                op.join(
                    derivatives, 'coordinate_patches', 'sub-{subject}', 'anat',
                    'sub-{subject}_hemi-{hemi}_coordinatepatch.pkl').format(
                        **locals())))

    coordinates = pd.concat(coordinates, axis=0, ignore_index=True)
    print(coordinates.shape)
    print(coordinates.head())
    print(coordinates['x'].dtype)

    images = {}
    images['x'] = cortex.Vertex(coordinates['x'].values,
                                'odc.{}'.format(subject),
                                cmap='BROYG',
                                vmin=-35,
                                vmax=35)
    images['y'] = cortex.Vertex(coordinates['y'].values,
                                'odc.{}'.format(subject),
                                cmap='BROYG',
                                vmin=-35,
                                vmax=35)

    # PRFs
    prf_pars = np.load(
        op.join(derivatives,
                'prf/vertices/sub-{subject}_desc-test2_prf_optim.npz').format(
                    **locals()))

    r2 = prf_pars['r2']
    mask = r2 < 0.1

    angle = prf_pars['angle']
    angle[mask] = np.nan

    ecc = prf_pars['ecc']
    ecc[mask] = np.nan

    size = prf_pars['size']
    size[mask] = np.nan

    r2_max = np.max(r2)
    r2_max = 0.3
    r2_min = 0.05

    hsv_angle = np.ones((len(r2), 3))
    hsv_angle[:, 0] = angle.copy()
    hsv_angle[:, 1] = np.clip(r2 / r2_max * 2, 0, 1)
    hsv_angle[:, 2] = r2 > r2_min

    left_index = cortex.db.get_surfinfo(pc_subject).left.shape[0]
    angle_ = hsv_angle[:left_index, 0]
    hsv_angle[:left_index, 0] = np.clip(
        ((angle_ + np.pi) - 0.25 * np.pi) / (1.5 * np.pi), 0, 1)
    angle_ = -hsv_angle[left_index:, 0].copy()
    angle_[hsv_angle[left_index:, 0] > 0] += 2 * np.pi
    angle_ = np.clip((angle_ - 0.25 * np.pi) / 1.5 / np.pi, 0, 1)
    hsv_angle[left_index:, 0] = angle_

    rgb_angle = colors.hsv_to_rgb(hsv_angle)

    alpha_angle = np.clip(r2 / r2_max * 2, r2_min / r2_max, 1)
    alpha_angle[alpha_angle < r2_min / r2_max] = 0
    alpha_angle = hsv_angle[:, 2]

    images['angle'] = cortex.VertexRGB(
        rgb_angle[:, 0],
        rgb_angle[:, 1],
        rgb_angle[:, 2],
        #alpha=np.ones(len(rgb_angle)),
        alpha=alpha_angle,
        subject=pc_subject)
    #images['r2'] = cortex.Vertex(prf_pars['r2'], pc_subject, cmap='inferno')
    images['ecc'] = cortex.Vertex(ecc,
                                  pc_subject,
                                  vmin=0,
                                  vmax=15,
                                  cmap='inferno')
    #images['angle_1d'] = cortex.Vertex(angle, pc_subject, vmin=-3.14, vmax=3.14, cmap='hsv')
    #images['size'] = cortex.Vertex(size, pc_subject, vmin=0, vmax=10)
    cortex.webshow(cortex.Dataset(**images))
Пример #13
0
rgb = colors.hsv_to_rgb(hsv)

# define alpha channel - which specifies the opacity for a color
# 0 = transparent = values with rsq below thresh and 1 = opaque = values above thresh
alpha_mask = (rsq <= rsq_threshold
              ).T  #why transpose? because of orientation of pycortex volume?
alpha = np.ones(alpha_mask.shape)
alpha[alpha_mask] = 0

# define Vertex images

#contains RGBA colors for each voxel in a volumetric dataset
# vertex for polar angles
images['polar'] = cortex.VertexRGB(rgb[..., 0].T,
                                   rgb[..., 1].T,
                                   rgb[..., 2].T,
                                   subject='fsaverage',
                                   alpha=alpha)

# vertex for ecc
images['ecc'] = cortex.Vertex2D(eccentricity.T,
                                alpha * 10,
                                'fsaverage',
                                vmin=0,
                                vmax=10,
                                vmin2=0,
                                vmax2=1.0,
                                cmap='BROYG_2D')
#images['ecc'] = cortex.Vertex2D(eccentricity.T, rsq.T, 'fsaverage',
#                           vmin=0, vmax=10,
#                           vmin2=rsq_threshold, vmax2=1.0, cmap='BROYG_2D')