Data Preparation

This section describes how to prepare your data for use with the IBL Alignment GUI.

The GUI requires:

  • Spike-sorted electrophysiology data in the phylib format

  • Extracted raw electrophysiology features

  • Probe trajectory coordinates in the brain atlas

Preparing Electrophysiology Data

The IBL Alignment GUI requires spike-sorted data in the phylib format, along with extracted raw electrophysiology features computed from the AP and LFP data.

Using SpikeGLX and Kilosort

If you recorded data using SpikeGLX and spike-sorted using Kilosort or pykilosort, use the following code to convert your data and extract the necessary features:

from pathlib import Path
from ibl_alignment_gui.convertors import extract_ephys

# Path to Kilosort output
ks_path = Path('/path/to/kilosort/output')

# Path to raw ephys data
ephys_path = Path('/path/to/raw/ephys/data')

# Output path
out_path = Path('/path/to/output')

extract_ephys(ks_path, ephys_path, out_path)

Warning

Ensure the output path is not the same as the Kilosort path to avoid overwriting existing files.

Using Other Recording or Spike Sorting Software

If you recorded data using OpenEphys or spike-sorted using other software, we recommend using SpikeInterface to convert your data to the phylib format.

SpikeInterface provides a specific converter to export a SpikeSortingAnalyzer to the format required by the IBL Alignment GUI:

Preparing Trajectory Data

The IBL Alignment GUI requires the location of the probe trajectory in the brain atlas. This is typically obtained via probe track reconstruction from histology images.

Available Tools

There are several tools available for probe track reconstruction:

  • BrainRegister

  • Lasagna

  • SHARP-Track

  • Herbs

Probe Tracing Using brainreg-segment

brainreg and brainreg-segment are tools for registering histology image stacks and tracing probe locations in the brain.

Tutorial: See the brainreg-segment tutorial for detailed instructions.

Important notes:

Aspect

Details

Tracing space

Must be done in registered atlas space (not original sample space)

Spline points

Reduce to < 100 when fitting the track

Export

Click Export to brainrender to output the .npy coordinate file

Converting brainreg output to GUI format:

import numpy as np
from pathlib import Path
import json
from iblatlas.atlas import AllenAtlas

atlas = AllenAtlas(25)

# Path to brainreg track output
brainreg_path = Path('/path/to/brainreg/output/tracks/track_1.npy')

# Load coordinates in CCF space (order: apdvml, origin: top-left-front voxel)
xyz_apdvml = np.load(brainreg_path)

# Convert to IBL space (order: mlapdv, origin: bregma)
xyz_mlapdv = atlas.ccf2xyz(xyz_apdvml, ccf_order='apdvml') * 1e6

xyz_picks = {'xyz_picks': xyz_mlapdv.tolist()}

# Save to output directory
output_path = Path('/path/to/output')
with open(output_path / 'xyz_picks.json', 'w') as f:
    json.dump(xyz_picks, f, indent=2)

Probe Tracing Using Lasagna

Lasagna is another tool for tracing probe tracks in histology images registered to the Allen atlas.

Tutorial: See the Lasagna probe tracing guide for instructions.

Important notes:

Aspect

Details

Image transformations

Do not apply rotations, flips, or mirrors when tracing

Tracing space

Trace in histology already registered to Allen atlas, or apply registration transform if tracing in original space

Output line

Save the _pts line, not the _fit line

Converting Lasagna output to GUI format:

from ibllib.pipes.histology import load_track_csv
from pathlib import Path
import json

# Path to Lasagna tracing output
file_track = '/path/to/lasagna/tracing_pts.csv'

# Load and convert coordinates
xyz = load_track_csv(file_track) * 1e6
xyz_picks = {'xyz_picks': xyz.tolist()}

# Save to output directory
output_path = Path('/path/to/output')
with open(output_path / 'xyz_picks.json', 'w') as f:
    json.dump(xyz_picks, f, indent=2)

Coordinate Systems

The IBL Alignment GUI uses coordinates relative to bregma with the following convention:

Axis

Description

x

Medial-lateral (ML)

y

Anterior-posterior (AP)

z

Dorsal-ventral (DV)

Bregma is defined at:

  • ML = 5739 μm

  • AP = 5400 μm

  • DV = 332 μm

from the front-top-left corner (from the mouse’s point of view) of the Allen CCF data volume.

Coordinate Transformations

If you have probe tracks in the Allen CCF coordinate framework, use the following code to transform between coordinate systems:

CCF to Bregma (mlapdv order):

from iblatlas.atlas import AllenAtlas
import numpy as np

# Initialize atlas (25 μm resolution)
brain_atlas = AllenAtlas(25)

# Example coordinates in μm with CCF origin
ccf_mlapdv = np.array([[3000, 4000, 3000], [6000, 6000, 500]], dtype=float)

# Transform to Bregma origin
bregma_mlapdv = brain_atlas.ccf2xyz(ccf_mlapdv, ccf_order='mlapdv')

CCF to Bregma (apdvml order):

# Example coordinates in μm with CCF origin (apdvml order)
ccf_apdvml = np.array([[3000, 4000, 3000], [6000, 6000, 500]], dtype=float)

# Transform to Bregma origin (output in mlapdv order)
bregma_mlapdv = brain_atlas.ccf2xyz(ccf_apdvml, ccf_order='apdvml')

Bregma to CCF (mlapdv order):

# Example coordinates in m with Bregma origin
bregma_mlapdv = np.array([[2000, 4000, 0], [4000, -1000, -4000]]) / 1e6

# Transform to CCF origin
ccf_mlapdv = brain_atlas.xyz2ccf(bregma_mlapdv, ccf_order='mlapdv')

Bregma to CCF (apdvml order):

# Example coordinates in m with Bregma origin
bregma_mlapdv = np.array([[2000, 4000, 0], [4000, -1000, -4000]]) / 1e6

# Transform to CCF origin (apdvml order)
ccf_apdvml = brain_atlas.xyz2ccf(bregma_mlapdv, ccf_order='apdvml')