3D rendering single subjectΒΆ

Generates 3D rendering of all probe trajectories for a single subject.

The trajectory plotted are (pair): - Channel locations based on the user picks (from histology) - Linear Interpolation based on the picks One color per pair.

# Author: Olivier
# environment installation guide https://github.com/int-brain-lab/iblenv
# run "%qui qt" magic command from Ipython prompt for interactive mode
import numpy as np
from mayavi import mlab

import ibllib.plots
from atlaselectrophysiology import rendering
import ibllib.atlas as atlas
from oneibl.one import ONE
from brainbox.core import Bunch

one = ONE(base_url="https://alyx.internationalbrainlab.org")
subject = 'KS003'

ba = atlas.AllenAtlas(25)
channels_rest = one.alyx.rest('channels', 'list', subject=subject)
channels = Bunch({
    'atlas_id': np.array([ch['brain_region'] for ch in channels_rest]),
    'xyz': np.c_[np.array([ch['x'] for ch in channels_rest]),
                 np.array([ch['y'] for ch in channels_rest]),
                 np.array([ch['z'] for ch in channels_rest])] / 1e6,
    'axial_um': np.array([ch['axial'] for ch in channels_rest]),
    'lateral_um': np.array([ch['lateral'] for ch in channels_rest]),
    'trajectory_id': np.array([ch['trajectory_estimate'] for ch in channels_rest])

fig = rendering.figure()
for m, probe_id in enumerate(np.unique(channels['trajectory_id'])):
    traj_dict = one.alyx.rest('trajectories', 'read', id=probe_id)
    ses = traj_dict['session']
    label = (f"{ses['subject']}/{ses['start_time'][:10]}/"

    color = ibllib.plots.color_cycle(m)
    it = np.where(channels['trajectory_id'] == probe_id)[0]
    xyz = channels['xyz'][it]
    ins = atlas.Insertion.from_track(xyz, brain_atlas=ba)

    mlapdv = ba.xyz2ccf(ins.xyz)
    # display the interpolated tracks
    mlab.plot3d(mlapdv[:, 1], mlapdv[:, 2], mlapdv[:, 0],
                line_width=3, color=color, tube_radius=20)
    # display the channels locations
    mlapdv_channels = ba.xyz2ccf(xyz)
    mlab.points3d(mlapdv_channels[:, 1], mlapdv_channels[:, 2], mlapdv_channels[:, 0],
                  color=color, scale_factor=50)
    # setup the labels at the top of the trajectories
    mlab.text3d(mlapdv[0, 1], mlapdv[0, 2], mlapdv[0, 0] - 500, label,
                line_width=4, color=tuple(color), figure=fig, scale=150)
Notebook initialized with ipy backend.
Connected to https://alyx.internationalbrainlab.org as mayo