Exemplo n.º 1
0
def main(derivatives, subject, session):

    all_depth_zmap_l = op.join(
        derivatives, 'sampled_giis', f'sub-{subject}', f'ses-{session}',
        'func',
        f'sub-{subject}_ses-{session}_left_over_right_desc-zmap-depth-all_hemi-lh.gii'
    )
    all_depth_zmap_r = op.join(
        derivatives, 'sampled_giis', f'sub-{subject}', f'ses-{session}',
        'func',
        f'sub-{subject}_ses-{session}_left_over_right_desc-zmap-depth-all_hemi-rh.gii'
    )
    all_depth_zmap = np.hstack((surface.load_surf_data(all_depth_zmap_l),
                                surface.load_surf_data(all_depth_zmap_r)))

    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'
    )
    abs_zmap = np.hstack((surface.load_surf_data(abs_zmap_l),
                          surface.load_surf_data(abs_zmap_r)))

    images = {}
    images['all_depth_zmap'] = cortex.Vertex(all_depth_zmap, f'odc.{subject}')
    images['abs_zmap_smooth'] = cortex.Vertex(abs_zmap, f'odc.{subject}')

    ds = cortex.Dataset(**images)

    cortex.webshow(ds)
Exemplo n.º 2
0
def read_manual(segments, subject, hemi, style="inflated"):
    global obj
    global surface

    direc = subject + '-' + hemi
    v = create(direc)
    pts, polys = cortex.db.get_surf(subject, style, hemi)
    surface = cortex.polyutils.Surface(pts, polys)

    seams, walls = get_ends(direc, segments)

    return seams, walls, pts

    # visualize the cuts
    for j in range(segments):
        path = cortex.polyutils.Surface.geodesic_path(surface, seam[j],
                                                      seam[j + 1])
        obj[path] = 3 + i

    # visualize the walls
    for j in range(segments):
        path = cortex.polyutils.Surface.geodesic_path(surface, wall[j],
                                                      wall[j + 1])
        obj[path] = 3 + i + len(seams)

    cortex.webshow(v)
Exemplo n.º 3
0
def main(sourcedata,
         derivatives,
         subject,
         session):
    out_dir = op.join(derivatives, 
                          'pycortex',
                          'sub-{}'.format(subject)) 

    for version in ['light', 'full']:
        d = op.join(out_dir, version)
        if not op.exists(d):
            os.makedirs(d)
    
    if subject not in cortex.db.subjects:
        cortex.fmriprep.import_subj(subject, '/derivatives', None, dataset='odc')

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

    images = {}
    t1w = get_bids_file(derivatives, 'averaged_mp2rages', 'anat',
                         subject, 'T1w', session, 'average')
    images['t1w'] = cortex.Volume(t1w, pc_subject, 'identity', vmin=0, vmax=4095)

    t1map = get_bids_file(derivatives, 'averaged_mp2rages', 'anat',
                           subject, 'T1map', session, 'average')
    images['t1map'] = cortex.Volume(t1map, pc_subject, 'identity', vmin=1000, vmax=2200)

    t2starmap = get_bids_file(derivatives, 'qmri_memp2rages', 'anat',
                            subject, 't2starmap', session, 'average')
    images['t2starmap'] = cortex.Volume(t2starmap, pc_subject, 'identity', vmin=10, vmax=60)

    s0 = get_bids_file(derivatives, 'qmri_memp2rages', 'anat',
                            subject, 'S0', session, 'average')
    images['s0'] = cortex.Volume(s0, pc_subject, 'identity')


    for echo_ix in range(1,5):
        echo = get_bids_file(sourcedata, '', 'anat', subject, 'MPRAGE',
                              session='anat', acquisition='memp2rage', echo=echo_ix,
                              inversion=2, part='mag')
        if echo_ix == 1:
            transform = cortex.xfm.Transform(np.identity(4), echo)
            transform.save(subject, 'memp2rage')
            max_first_echo = np.percentile(image.load_img(echo).get_data(), 95)
        images['echo{}'.format(echo_ix)] = cortex.Volume(echo, 
                                                         pc_subject, 
                                                         'memp2rage',
                                                         vmin=0,
                                                         vmax=max_first_echo)
    ds = cortex.Dataset(t1map=images['t1map'],
                        s0=images['s0'],
                        t2starmap=images['t2starmap'])
                                     
    cortex.webgl.make_static(op.join(out_dir, 'light'), ds)
    cortex.webshow(ds)

    ds = cortex.Dataset(**images)
    cortex.webgl.make_static(op.join(out_dir, 'full'), ds)
    cortex.webshow(ds)
Exemplo n.º 4
0
def main(subject, session, sourcedata, standard_space=False, thr=thr, smoothed=False):
    left, right = cortex.db.get_surf(f'sub-{subject}', 'fiducial', merge=False)
    left, right = cortex.Surface(*left), cortex.Surface(*right)


    d = {}


    if standard_space:
        space = 'fsaverage'
        d['wang15_ips'] = get_wang15_ips('fsaverage', sourcedata)
        fs_subject = 'fsaverage'
    else:
        space = 'fsnative'
        d['wang15_ips'] = get_wang15_ips(subject, sourcedata)
        fs_subject = f'sub-{subject}'


    key = 'encoding_model.cv'

    if smoothed:
        key += '.smoothed'


    for session in ['3t2', '7t2']:

        r2_cv = []

        for run in range(1, 9):

            r2 = []

            for hemi in ['L', 'R']:
                r2.append(surface.load_surf_data(op.join(sourcedata, 'derivatives', f'{key}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_run-{run}_desc-cvr2.optim_space-{space}_hemi-{hemi}.func.gii')))
            
            r2_cv.append(np.concatenate(r2))
        
        r2_cv = np.mean(np.clip(r2_cv, 0.0, np.inf), 0)
        print(np.quantile(r2_cv, .95))
        alpha = np.clip(r2_cv-thr, 0., .1) /.1
        d[f'r2_cv.{session}'] = get_alpha_vertex(r2_cv, alpha, cmap='hot',
                subject=subject, vmin=0.0, vmax=.5, standard_space=standard_space)


        r2 = _load_parameters(subject, session, 'r2.optim', space, smoothed)
        alpha = np.clip(r2.data-thr, 0., .1) /.1

        d[f'r2.{session}'] = get_alpha_vertex(r2.data, alpha, cmap='hot',
                subject=subject, vmin=0.0, vmax=.5, standard_space=standard_space)

    ds = cortex.Dataset(**d)
    cortex.webshow(ds)

    x = np.linspace(0, 1, 101, True)
    y = np.linspace(np.log(5), np.log(vmax), len(x), True)
Exemplo n.º 5
0
def main(subject, derivatives, desc='test2', pc_subject=None):

    if pc_subject is None:
        pc_subject = 'odc.{}'.format(subject)

    pars_grid = np.load(
        op.join(derivatives, 'prf', 'vertices',
                'sub-{subject}_desc-{desc}_prf_grid.npz').format(**locals()))

    pars_optim = np.load(
        op.join(derivatives, 'prf', 'vertices',
                'sub-{subject}_desc-{desc}_prf_optim.npz').format(**locals()))

    images = {}
    r2_grid = pars_grid['r2']
    r2_optim = pars_optim['r2']

    angle_grid = pars_grid['angle']
    angle_optim = pars_optim['angle']

    ecc_grid = pars_grid['ecc']
    ecc_optim = pars_optim['ecc']

    size_grid = pars_grid['size']
    size_optim = pars_optim['size']

    images['r2_grid'] = cortex.Vertex(r2_grid, pc_subject, vmin=0, vmax=0.65)
    images['r2_optim'] = cortex.Vertex(r2_optim, pc_subject, vmin=0, vmax=0.65)

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

    images['ecc_grid'] = cortex.Vertex(ecc_grid, pc_subject, vmin=0, vmax=12)
    images['ecc_optim'] = cortex.Vertex(ecc_optim, pc_subject, vmin=0, vmax=12)

    images['size_grid'] = cortex.Vertex(size_grid, pc_subject, vmin=0, vmax=12)
    images['size_optim'] = cortex.Vertex(size_optim,
                                         pc_subject,
                                         vmin=0,
                                         vmax=12)

    ds = cortex.Dataset(**images)

    cortex.webshow(ds)
Exemplo n.º 6
0
    def show(self,nii=None,**kwargs):
        # get data from nii image
        data = self._get_nii_data(nii_name=nii)
        print(data)
        # create pycortex volume structure
        #####use vmin/vmax kwrags######
        self.vol = cortex.Volume(data,self.pycx_id,self.xfm_name,
                                    #           with_curvature=True,
                                    # curvature_contrast=0.65,
         #                            curvature_brightness=0.16,
         #                            curvature_threshold=True,
                                    **kwargs)
        
        # open in browser
        self.view = cortex.webshow(self.vol,autoclose=False,
                                    # with_curvature=True,
                                    # curvature_contrast=0.65,
         #                            curvature_brightness=0.16,
         #                            curvature_threshold=True,
                                    **kwargs)
        # view = cortex.webs`how(vol, port=port, autoclose=False, 
        #                     template=html_template, title='instabrain')
        self.view.animate([{'state':'surface.%s.specularity'%(self.subj.fsub),'idx':0,'value':0}])
        if self.subj.fsub == 'fsaverage':
            time.sleep(3)
            self.view.animate([{'state':'mix','idx':.5,'value':.5}])

        if nii is None or 'mask' in nii:
            self.view.setVminmax(-1,1)
Exemplo n.º 7
0
	def __init__(self, subject, xfm_name, mask_type='thick', vmin=-1., vmax=1., **kwargs):
		super(PyCortexViewer, self).__init__()
		npts = cortex.db.get_mask(subject, xfm_name, mask_type).sum()
		
		data = np.zeros(npts)
		vol = cortex.Volume(data, subject, xfm_name)

		self.subject = subject
		self.xfm_name = xfm_name
		self.mask_type = mask_type

		self.ctx_client = cortex.webshow(vol)
		self.vmin = vmin
		self.vmax = vmax
		self.active = True
Exemplo n.º 8
0
freq_log10 = np.log10(freq)

#freq[freq <1] = np.nan
#freq[freq > 60] = np.nan
#freq[r2 < .1] = np.nan

images = {}
images['frequency'] = cortex.Volume(freq,
                                    pc_subject,
                                    'identity.t1w.v2',
                                    vmin=0.1,
                                    vmax=60)
images['r2'] = cortex.Volume(r2,
                             pc_subject,
                             'identity.t1w.v2',
                             vmin=0,
                             vmax=0.7)
images['log_freq'] = cortex.Volume(log_freq.get_data().T,
                                   pc_subject,
                                   'identity.t1w.v2',
                                   vmin=-1,
                                   vmax=5)
images['log10'] = cortex.Volume(freq_log10, pc_subject, 'identity.t1w.v2')
images['amplitude'] = cortex.Volume(amplitude.get_data().T, pc_subject,
                                    'identity.t1w.v2')
images['log_sd'] = cortex.Volume(log_sd.get_data().T, pc_subject,
                                 'identity.t1w.v2')

ds = cortex.Dataset(**images)
cortex.webshow(images)
Exemplo n.º 9
0
    mu_log_v = cortex.Vertex(parss[:, 0], 'fsaverage', vmin=0, vmax=60)
    sd_v = cortex.Vertex(np.exp(parss[:, 1]),
                         'fsaverage', vmin=0, vmax=60)
    amplitude_v = cortex.Vertex(parss[:, 2], 'fsaverage')
    baseline_v = cortex.Vertex(parss[:, 3], 'fsaverage')

    ds = cortex.Dataset(
        r2=r2s_v,
        r2_triallise=r2s_trialwise_v,
        mu=mu_v,
        mu_log=mu_log_v,
        sd=sd_v,
        amplitude=amplitude_v,
        baseline=baseline_v)

    cortex.webshow(ds)

else:
    subject = '*'

    # r2s_cv_l = op.join(derivatives, 'modelfitsurf_cv_smoothed',
                       # f'sub-{subject}', 'func', f'sub-{subject}_space-fsaverage_desc-r2_hemi-L_cvrun-*.func.gii')
    # r2s_cv_r = r2s_cv_l.replace('hemi-L', 'hemi-R')
    # r2s_cv_l = np.clip([surface.load_surf_data(fn)
                        # for fn in glob.glob(r2s_cv_l)], 0, 1)
    # r2s_cv_r = np.clip([surface.load_surf_data(fn)
                        # for fn in glob.glob(r2s_cv_r)], 0, 1)
    # r2s_cv = np.hstack((np.nanmean(r2s_cv_l, 0), np.nanmean(r2s_cv_r, 0)))
    # r2s_cv_v = cortex.Vertex(r2s_cv, 'fsaverage')

    # r2s_trialwise_l = op.join(derivatives, 'modelfit_trialwise_surf_smoothed',
from bids import BIDSLayout
from nilearn import image

derivatives = '/data/odc/derivatives'
subject = '06'
pc_subject = 'odc.{}'.format(subject)
session = 'odc'

left, right = cortex.db.get_surf('odc.{}'.format(subject), 'fiducial')
left_surface = cortex.polyutils.Surface(left[0], left[1])
right_surface = cortex.polyutils.Surface(right[0], right[1])

example_gabors = op.join(
    derivatives, 'zmap_spatfreq', 'sub-{subject}', 'ses-{session}', 'func',
    'sub-{subject}_ses-{session}_dynamicbw_example_gabors.pkl').format(
        subject=subject, session=session)
example_gabors = pd.read_pickle(example_gabors)

mask = np.zeros(len(left_surface.pts))
mask[example_gabors.columns] = True
ss = left_surface.create_subsurface(mask.astype(bool))
example_gabors = ss.lift_subsurface_data(example_gabors.values)

v_example_gabors = cortex.Vertex(example_gabors,
                                 pc_subject,
                                 vmin=-0.1,
                                 vmax=0.1,
                                 cmap='BuBkRd')

cortex.webshow(v_example_gabors)
Exemplo n.º 11
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)
Exemplo n.º 12
0
def save_3d_views(
        volume,
        base_name="fig",
        list_angles=["lateral_pivot"],
        list_surfaces=["inflated"],
        viewer_params=dict(labels_visible=[], overlays_visible=["rois"]),
        interpolation="nearest",
        layers=1,
        size=(1024 * 4, 768 * 4),
        trim=True,
        sleep=10,
):
    """Saves 3D views of `volume` under multiple specifications.

    Needs to be run on a system with a display (will launch webgl viewer).
    The best way to get the expected results is to keep the webgl viewer
    visible during the process.

    Parameters
    ----------
    volume: pycortex.Volume
        Data to be displayed.

    base_name: str
        Base name for images.

    list_angles: list of (str or dict)
        Views to be used. Should be of length one, or of the same length as
        `list_surfaces`. Choices are:
            'left', 'right', 'front', 'back', 'top', 'bottom', 'flatmap',
            'medial_pivot', 'lateral_pivot', 'bottom_pivot',
            or a custom dictionary of parameters.

    list_surfaces: list of (str or dict)
        Surfaces to be used. Should be of length one, or of the same length as
        `list_angles`. Choices are:
            'inflated', 'flatmap', 'fiducial', 'inflated_cut',
            or a custom dictionary of parameters.

    viewer_params: dict
        Parameters passed to the viewer.

    interpolation: str
        Interpolation used to visualize the data. Possible choices are "nearest",
        "trilinear". (Default: "nearest").

    layers: int
        Number of layers between the white and pial surfaces to average prior to
        plotting the data. (Default: 1).

    size: tuple of int
        Size of produced image (before trimming).

    trim: bool
        Whether to trim the white borders of the image.

    sleep: float > 0
        Time in seconds, to let the viewer open.

    Returns
    -------
    file_names: list of str
        Image paths.
    """
    msg = "list_angles and list_surfaces should have the same length."
    assert len(list_angles) == len(list_surfaces), msg

    # Create viewer
    handle = cortex.webshow(volume, **viewer_params)
    # Wait for the viewer to be loaded
    time.sleep(sleep)

    # Add interpolation and layers params
    interpolation_params = {
        "surface.{subject}.sampler": interpolation,
        "surface.{subject}.layers": layers
    }

    file_names = []
    for view, surface in zip(list_angles, list_surfaces):
        if isinstance(view, str):
            if view == "flatmap" or surface == "flatmap":
                # force flatmap correspondence
                view = surface = "flatmap"
            view_params = angle_view_params[view]
        else:
            view_params = view
        if isinstance(surface, str):
            surface_params = unfold_view_params[surface]
        else:
            surface_params = surface

        # Combine view parameters
        this_view_params = default_view_params.copy()
        this_view_params.update(interpolation_params)
        this_view_params.update(view_params)
        this_view_params.update(surface_params)
        print(this_view_params)

        # apply params
        handle._set_view(**this_view_params)

        # wait for the view to have changed
        for _ in range(100):
            for k, v in this_view_params.items():
                k = k.format(subject=volume.subject) if "{subject}" in k else k
                if handle.ui.get(k)[0] != v:
                    print("waiting for", k, handle.ui.get(k)[0], "->", v)
                    time.sleep(0.1)
                    continue
            break
        time.sleep(0.1)

        # Save image, store file_name
        file_name = file_pattern.format(base=base_name,
                                        view=view,
                                        surface=surface)
        file_names.append(file_name)
        handle.getImage(file_name, size)

        # Wait for browser to dump file, before applying new view parameters
        while not os.path.exists(file_name):
            pass
        time.sleep(1)

        # Trim white edges
        if trim:
            try:
                import subprocess

                subprocess.call(["convert", "-trim", file_name, file_name])
            except Exception as e:
                print(str(e))
                pass

    # Try to close the window
    try:
        handle.close()
        handle.server.stop()
    except Exception as e:
        print(str(e))
        print("Could not close viewer.")

    return file_names
Exemplo n.º 13
0
This demo shows how to plot example retinotopy data onto a subject's brain
in a web viewer. In order for this demo to work, you need to download this
dataset_, but that can also be done automatically through the `urllib`
command that is included.

.. _dataset: http://gallantlab.org/pycortex/S1_retinotopy.hdf

S1 is the example subject that comes with pycortex, but if you want to plot
data onto a different subject, you will need to have them in your filestore.

This demo will not actually open the web viewer for you, but if you run it
yourself you will get a viewer showing something like the following.

.. image:: ../../webgl/angle_left.png

"""

import cortex
try:  #  python 2
    from urllib import urlretrieve
except ImportError:  # python 3
    from urllib.request import urlretrieve

# Download and load in retinotopy data
_ = urlretrieve("http://gallantlab.org/pycortex/S1_retinotopy.hdf",
                "S1_retinotopy.hdf")
ret_data = cortex.load("S1_retinotopy.hdf")

# Open the webviewer
cortex.webshow(ret_data)
Exemplo n.º 14
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))
Exemplo n.º 15
0
def main(subject,
         session,
         sourcedata,
         standard_space=False,
         thr=thr,
         smoothed=False):
    left, right = cortex.db.get_surf(f'sub-{subject}', 'fiducial', merge=False)
    left, right = cortex.Surface(*left), cortex.Surface(*right)

    d = {}

    if standard_space:
        space = 'fsaverage'
        d['wang15_ips'] = get_wang15_ips('fsaverage', sourcedata)
    else:
        space = 'fsnative'
        d['wang15_ips'] = get_wang15_ips(subject, sourcedata)

    concatenated = False

    for session in ['3t1', '7t1', '3t2', '7t2']:

        # for desc, split_certainty in zip(['', '.certain', '.uncertain'], [False, True, True]):
        for desc, split_certainty in zip([''], [False]):
            ext = ''
            # if pca_confounds:
            # ext += '.pca_confounds'
            if smoothed:
                ext += '.smoothed'

            print(desc)
            r2 = _load_parameters(subject,
                                  session,
                                  'r2.optim' + desc,
                                  space,
                                  smoothed,
                                  split_certainty=split_certainty,
                                  concatenated=concatenated,
                                  pca_confounds=False)

            if r2 is not None:
                alpha = np.clip(r2.data - thr, 0., .1) / .1

                d[f'r2.{session}{ext}{desc}'] = get_alpha_vertex(
                    r2.data,
                    alpha,
                    cmap='hot',
                    subject=subject,
                    vmin=0.0,
                    vmax=.5,
                    standard_space=standard_space)

                mu = _load_parameters(subject,
                                      session,
                                      'mu.optim' + desc,
                                      space,
                                      smoothed,
                                      split_certainty=split_certainty,
                                      concatenated=concatenated)

                d[f'mu.{session}{ext}{desc}'] = get_alpha_vertex(
                    mu.data,
                    alpha,
                    cmap='nipy_spectral',
                    subject=subject,
                    vmin=np.log(5),
                    vmax=np.log(28),
                    standard_space=standard_space)

    ds = cortex.Dataset(**d)
    cortex.webshow(ds)

    x = np.linspace(0, 1, 101, True)
    y = np.linspace(np.log(5), np.log(vmax), len(x), True)

    plt.imshow(plt.cm.nipy_spectral(x)[np.newaxis, ...],
               extent=[np.log(5),
                       np.log(vmax),
                       np.log(5),
                       np.log(vmax)],
               aspect=1. / 10.,
               origin='lower')

    ns = np.array([5, 7, 10, 14, 20, 28, 40, 56, 80])
    ns = ns[ns <= vmax]

    plt.xticks(np.log(ns), ns)
    # plt.xlim(np.olg(5, np.log(vmax))
    plt.show()
Exemplo n.º 16
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)
Exemplo n.º 17
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',
                                    freesurfer_subject_dir='/mnt/c/Users/ACH/Desktop',
        ).save(subject='MNI2009c',
               name='tal', # places into subj/transforms/xfm_name
               xfmtype='coord')
        alpha,
        cmap='hot',
        subject=subject,
        vmin=0.0,
        vmax=0.4,
        standard_space=True)

    d[f'mu_{subject}.{session}_volsurf'] = get_alpha_vertex(
        mu.data,
        alpha,
        cmap='nipy_spectral',
        subject=subject,
        vmin=np.log(5),
        vmax=np.log(28),
        standard_space=True)

    com = surface.load_surf_data(
        op.join(bids_folder, 'derivatives', 'npc_com',
                f'sub-{subject}_space-fsaverage_desc-npcr_com.gii'))

    com = np.concatenate((np.zeros_like(com), com))

    d[f'com_npcr_{subject}.{session}_volsurf'] = cortex.Vertex(com,
                                                               'fsaverage',
                                                               vmin=.5,
                                                               vmax=1.0)

ds = cortex.Dataset(**d)

cortex.webshow(ds)
Exemplo n.º 19
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', subject,
                                             'light'),
                             data=images['zmap'])
    cortex.webshow(ds, recache=cache)
Exemplo n.º 20
0
in a web viewer. In order for this demo to work, you need to download this
dataset_, but that can also be done automatically through the `urllib`
command that is included.

.. _dataset: http://gallantlab.org/pycortex/S1_retinotopy.hdf

S1 is the example subject that comes with pycortex, but if you want to plot
data onto a different subject, you will need to have them in your filestore.

This demo will not actually open the web viewer for you, but if you run it
yourself you will get a viewer showing something like the following.

.. image:: ../../webgl/angle_left.png

"""

import cortex
try: #  python 2
    from urllib import urlretrieve
except ImportError:  # python 3
    from urllib.request import urlretrieve


# Download and load in retinotopy data
_ = urlretrieve("http://gallantlab.org/pycortex/S1_retinotopy.hdf",
                "S1_retinotopy.hdf")
ret_data = cortex.load("S1_retinotopy.hdf")

# Open the webviewer
cortex.webshow(ret_data)
Exemplo n.º 21
0
def main(derivatives, subject, session):

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

    left, right = cortex.db.get_surf('odc.{}'.format(subject), 'fiducial')
    left_surface = cortex.polyutils.Surface(left[0], left[1])
    right_surface = cortex.polyutils.Surface(right[0], right[1])

    max_wavelengths = {}
    max_orientations = {}
    zmaps = {}

    for hemi, surf in zip(['lh', 'rh'], [left_surface, right_surface]):
        energies = op.join(
            derivatives, 'zmap_spatfreq', 'sub-{subject}', 'ses-{session}',
            'func',
            'sub-{subject}_ses-{session}_hemi-{hemi}_energies.pkl').format(
                subject=subject, session=session, hemi=hemi)
        xy = pd.read_pickle(
            op.join(derivatives, 'coordinate_patches', 'sub-{subject}', 'anat',
                    'sub-{subject}_hemi-{hemi}_coordinatepatch.pkl').format(
                        **locals()))

        energies = pd.read_pickle(energies)
        energies = energies.loc[:, ~energies.isnull().any(0)]

        max_frequency = energies.groupby(['depth', 'frequency']).sum().groupby(
            'depth', as_index=True).apply(
                lambda d: d.reset_index('depth', drop=True).idxmax())

        max_wavelengths[hemi] = 1. / max_frequency

        max_orientations[hemi] = []

        zmaps[hemi] = []

        for depth, d in energies.groupby('depth'):
            tmp = d.loc[(depth, max_frequency.loc[depth]), :].idxmax()
            tmp = tmp.apply(lambda x: x[2] if not x is np.nan else None)
            tmp = pd.DataFrame(tmp, columns=pd.Index([depth], name='depth')).T
            tmp.columns = energies.columns
            max_orientations[hemi].append(tmp)

            zmap = op.join(derivatives, 'sampled_giis', 'sub-{subject}', 'ses-{session}',
                           'func', 'sub-{subject}_ses-{session}_left_over_right_desc-zmap-depth-{depth}_hemi-{hemi}.gii'). \
                format(**locals())
            zmaps[hemi].append(surface.load_surf_data(zmap))

        zmaps[hemi] = np.array(zmaps[hemi])
        max_orientations[hemi] = pd.concat(max_orientations[hemi])

        ss = pd.DataFrame([], columns=np.arange(surf.pts.shape[0]))
        max_wavelengths[hemi] = pd.concat((ss, max_wavelengths[hemi])).values
        max_orientations[hemi] = pd.concat((ss, max_orientations[hemi])).values

    print(max_wavelengths['lh'].shape, max_wavelengths['rh'].shape)
    max_wavelengths = np.concatenate(
        [max_wavelengths['lh'], max_wavelengths['rh']], axis=-1)
    max_orientations = np.concatenate(
        [max_orientations['lh'], max_orientations['rh']], axis=-1)

    print(zmaps['lh'].shape, zmaps['rh'].shape)
    zmaps = np.concatenate([zmaps['lh'], zmaps['rh']], axis=-1)

    images = {}
    images['wavelength'] = cortex.Vertex(max_wavelengths,
                                         'odc.{}'.format(subject),
                                         vmin=0,
                                         vmax=10)
    images['orientation'] = cortex.Vertex(max_orientations,
                                          'odc.{}'.format(subject),
                                          vmin=0,
                                          vmax=np.pi,
                                          cmap='hsv')

    images['zmap'] = cortex.Vertex(zmaps,
                                   'odc.{}'.format(subject),
                                   vmin=-3,
                                   vmax=3)

    layout = BIDSLayout(op.join(derivatives, 'tsnr'), validate=False)
    veins = layout.get(subject=subject,
                       session=session,
                       suffix='invtsnr',
                       extension='nii.gz',
                       return_type='file')
    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)

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

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

    zmap = image.resample_to_img(zmap, t1w)

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

    if not np.in1d(subject, ['01', '06']):
        transform.save(pc_subject, 'identity.t1w', 'magnet')

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

    zmap = zmap.get_data().T
    zmap[zmap == 0] = np.nan
    mask = mask.get_data().T
    images['zmap'] = cortex.Volume2D(zmap,
                                     mask,
                                     pc_subject,
                                     'identity.t1w',
                                     vmin=-3,
                                     vmax=3,
                                     vmin2=0,
                                     vmax2=3,
                                     cmap='BuBkRd_alpha_2D')
    ds = cortex.Dataset(**images)

    cortex.webshow(ds)
Exemplo n.º 22
0
def save_3d_views(
        data,
        root,
        path_base,
        size=(1024, 768),
        trim=True,
        view_names=["lateral", "front", "back", "top", "bottom", "medial"]):
    """Saves 3D views of `data` in and around `root`.
    """
    # Create viewer
    handle = cortex.webshow(data)

    # Wait until it's up or something?
    # (this is f*****g stupid
    # there should be some way to see that it's open
    # but I don't know what it is)
    time.sleep(5.0)

    # Set up params
    basic = dict(projection=['orthographic'], radius=260)

    views = dict(lateral=dict(altitude=90.5, azimuth=181, pivot=180),
                 medial=dict(altitude=90.5, azimuth=0, pivot=180),
                 front=dict(altitude=90.5, azimuth=0, pivot=0),
                 back=dict(altitude=90.5, azimuth=181, pivot=0),
                 top=dict(altitude=0, azimuth=180, pivot=0),
                 bottom=dict(altitude=180, azimuth=0, pivot=0))
    views = dict([(s, views[s]) for s in view_names])

    surfaces = dict(inflated=dict(mix=0.5), fiducial=dict(mix=0.0))

    # Save views!
    filenames = dict([(key, {}) for key in surfaces.keys()])
    # filenames = []
    for view, vparams in views.items():
        for surf, sparams in surfaces.items():
            # Combine basic, view, and surface parameters
            params = _combine(_combine(basic, vparams), sparams)

            # Set the view
            handle._set_view(**_tolists(params))

            # Save image, store filename
            filename = file_pattern.format(base=path_base,
                                           view=view,
                                           surface=surf)
            filenames[surf][view] = filename
            # filenames.append(filename)

            output_path = os.path.join(root, filename)
            handle.saveIMG(output_path, size)

            # Trim edges?
            if trim:
                # Wait for browser to dump file
                while not os.path.exists(output_path):
                    pass

                time.sleep(0.5)

                try:
                    import subprocess
                    subprocess.call(
                        ["convert", "-trim", output_path, output_path])
                except:
                    pass

    # Close the window!
    try:
        handle.close()
        return filenames
    except:
        return filenames
Exemplo n.º 23
0


mask_previous = []
for a in ['V1','V2','V3','V4','Vhigher1','Vhigher2']:
	roi_mask = voxel_ROI_masks['lh'][a].copy();
	if len(shape(mask_previous)) == 3:
		print('here')
		nonzeros = np.where(mask_previous > 0)
		for x,y,z in zip(nonzeros[0],nonzeros[1],nonzeros[2]):
			roi_mask[x,y,z] = 0
	mask_previous = roi_mask
	m += f * roi_mask
	f += 0.5
display_slice(reference,surfaces,20,m,'multi-ROI')	
cortex.webshow((pycortex_transpose(m),subject,transform_name))
ori = ori_data.copy()
ori[np.isnan(ori)]=0
cortex.webshow((pycortex_transpose(ori),subject,transform_name))

# Freesurfer commands to prepare flat surfaces:
"""
tksurfer S12015 lh smoothwm
save patch as: lh.S12015_flat.patch.3d
cd freesurfer/subjects/S12015/surf/
mris_flatten lh.S12015_flat.patch.3d lh.S12015_flat.flat.patch.3d
mris_convert -p lh.S12015_flat.flat.patch.3d flat_lh.gii

tksurfer S12015 rh smoothwm
[file:load curvature]
save patch as: rh.S12015_flat.patch.3d