How session YAML paths are resolved
A session YAML can give every dataset path in full, but most of the time the datasets of a session share a common folder, and the probes of a project share a folder layout. The YAML has two mechanisms to avoid repeating those parts: base paths and defaults. This page explains how they combine. The keys themselves are listed in Session YAML.
Base paths
A path can be given at three levels: the top of the file, each configuration, and each probe.
These are base folders. A dataset path that is relative is joined onto them, starting with the
closest:
the probe’s
paththe configuration’s
paththe top-level
path
Joining stops as soon as the result is absolute. So a relative probe path is itself joined onto
the configuration and top-level paths, and an absolute path at any level cuts off the levels above
it. If the path is still relative after all three, loading fails.
Defaults
The defaults section gives a path for a dataset that probes can leave out. A probe that does not
give a dataset, or gives it as {}, uses the path from defaults instead, and that path is then
resolved against the base paths like any other.
Defaults supply the dataset path, not a base folder. A probe that gives its own relative path for a dataset does not have the default prepended; the default is simply not used.
This makes defaults suited to two things:
folders shared by every probe, such as the histology, given as an absolute path
folder names that are the same in every probe, such as
kilosort, given as a relative path and resolved against each probe’s own base path
Examples
Each example shows the YAML and the folder the spike_sorting dataset resolves to.
Top-level base path
path: /mnt/data
probes:
probe00:
datasets:
spike_sorting:
path: probe00/kilosort
/mnt/data/probe00/kilosort
Configuration base path
path: /mnt/data
configurations:
dense:
path: dense_session
probes:
probe00:
datasets:
spike_sorting:
path: kilosort
/mnt/data/dense_session/kilosort
Probe base path
path: /mnt/data
probes:
probe00:
path: probe00
datasets:
spike_sorting:
path: kilosort
/mnt/data/probe00/kilosort
Absolute dataset path
path: /mnt/data
probes:
probe00:
path: probe00
datasets:
spike_sorting:
path: /custom/location/kilosort
/custom/location/kilosort: the base paths are ignored.
Default with an empty dataset
path: /mnt/data
defaults:
spike_sorting:
path: pykilosort
probes:
probe00:
path: probe00
datasets: {}
/mnt/data/probe00/pykilosort: the default is resolved against the probe’s base path.
A complete example
path: /mnt/s0/Data
defaults:
histology:
path: /common/histology/subject_001
spike_sorting:
path: pykilosort
raw_ephys:
path: spikeglx
configurations:
dense:
path: dense_session
probes:
probe00:
path: probe00
datasets:
processed_ephys:
path: pykilosort
picks:
path: /custom/path/to/picks
output:
path: alignment_outputs
sparse:
path: sparse_session
probes:
probe00:
path: probe00
datasets:
spike_sorting:
path: kilosort
processed_ephys:
path: raw_ephys_data
raw_ephys: {}
picks:
path: kilosort
output:
path: alignment_outputs
Configuration |
Dataset |
Resolved path |
Why |
|---|---|---|---|
dense |
|
|
Default, resolved against the base paths |
dense |
|
|
Own path |
dense |
|
|
Default |
dense |
|
|
Absolute |
dense |
|
|
Absolute default |
dense |
|
|
Own path |
sparse |
|
|
Own path, so the default is not used |
sparse |
|
|
Own path |
sparse |
|
|
|
sparse |
|
|
Own path |
sparse |
|
|
Absolute default |
sparse |
|
|
Own path |
Datasets that are not given
After the paths are resolved, a dataset that is still missing is looked for where it is usually saved, but only if it is read and never written:
without
picks, the trajectory is read from thespike_sortingfolderwithout
processed_ephys, the RMS and power spectra are read from theraw_ephysfolder, or from thespike_sortingfolder if there is noraw_ephys
The raw data is never looked for, and output, the only dataset the GUI writes to, must always be
given, so the results are never written to a folder you did not choose. Which datasets are
required is listed in Session YAML.