Skip to content

Latest commit

 

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Overview

This dataset was collected by the Allen Institute as part of OpenScope to test the unified mouse V2 hypothesis presented in (Rowley & Sedigh-Sarvestani, 2025). By releasing the dataset, we hope to allow others to independently test this hypothesis and other hypotheses surrounding mouse visual cortex organization.

The dataset includes electrophysiological recordings (Ephys) using four Neuropixels probes within V1 and two-photon measurements (Ophys) from 12 V1 locations, together with stimuli for receptive-field mapping and characterization of orientation (Ori), spatial-frequency (SF), and temporal-frequency (TF) tuning.

Generic probe placement (left) and two-photon imaging planes locations (right) are shown below. For two-photon imaging, 4 planes were imaged at 2 depths in a single session (i.e., all orange planes in the first session, all blue planes in the second session, etc.). This means there are 8 imaging planes per file for the ophys dataset.

Asset 4 Asset 2

Visual area boundaries for V1 were obtained using intrinsic signal imaging (ISI). For a more detailed description of ISI, please see page 3 of the Visual Coding Overview here.

Stimuli

The stimuli for the electrophysiological recordings includes gabor patches (fixed TF and SF with varying Ori: 0, 45,90), full-field drifting gratings (TF: 1.0, 2.0, 4.0, 8.0, 15.0; SF: 0.02, 0.04, 0.08, 0.16, 0.32; Ori: 0, 45, 90, 135), and full-field flashes.

The stimuli for the two-photon measurements includes gabor patches (fixed TF and SF with varying Ori: 0, 45,90) and full-field drifting gratings (TF: 1.0, 2.0, 4.0, 8.0, 15.0; SF: 0.02, 0.04, 0.08, 0.16, 0.32; Ori: 0, 45, 90, 135).

An example truncated ephys session is shown below.

stimulus_video_20260914_123812.mp4

Recording methods and data structure

Ephys

Data recording methods

[add diagram of recording apparatus here]

Data structure

For session 817335,

Neural data Stimulus data Behavioural data
nwb.units
2403 units, one row per neuron, across 4 probes — ProbeA · ProbeB · ProbeC · ProbeE.
Key columns spike_times · firing_rate · device_name (which probe)

Electrodes
nwb.electrodes
1920 rows, one per recording channel (480/probe)
location · group_name · channel_name · gain_to_physical_unit (~0.195 µV/bit) · rel_x · rel_y
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
nwb.intervals
Four stimulus tables, one per block.
One row per trial.
Shared columns
start_time · stop_time (seconds, session clock)
stim_name · stim_type · stim_index

RF block
['receptive_field_block_presentations']
4860 rows · 0.25 s per trial, back-to-back
Position x_position · y_position
Grating orientation · spatial_frequency · temporal_frequency · contrast

Tuning block
['drifting_gratings_field_block_presentations']
1500 rows · 1.00 s per trial, 1.25 s apart
Grating orientation · spatial_frequency · temporal_frequency · contrast
No position columns — full field

Flash block
['flash_field_block_presentations']
300 rows · 0.25 s per trial, 2.00 s apart
Grating columns present but unused — full-field flash, no position

Spontaneous block
['spontaneous_presentations']
2 rows · gray screen, no stimulus parameters
Locomotion
nwb.processing['running']
320,687 samples · ~60 Hz
TimeSeries — timestamps on .timestamps
['running_speed'] · cm/s, negative = backwards
['running_wheel_rotation'] · radians

Eye tracking
nwb.processing['eye_tracking']
324,466 rows · ~60 Hz · one row per camera frame
['corneal_reflection'] · ['ellipse'] · ['pupil']
DynamicTables — timestamps are a column, not .timestamps
All three tables have these columns
data_x · data_y · area · area_raw · width · height · angle · timestamps
reference_frame = 'nose'
⚠️ -1 marks a failed fit, not a value. Nothing is NaN.
['likely_blink_times']
TimeSeries, bool — timestamps on .timestamps
 
 
 
 
 
 
 
 

An example breakdown of trials and times for one of the ephys sessions is shown below.

817335_ephys_plot

Ophys

Data recording methods

Animal preparation and behavioral apparatus were as described in the Allen Brain Observatory Visual Coding: Overview technical whitepaper. Six female transgenic mice (96 to 145 days old, Cux2-CreERT2/wt;Camk2a-tTA/wt;Ai93(TITL-GCaMP6f)/wt), expressing GCaMP6f in excitatory neurons of layers 2/3 and 4, were used. They were prepared with a cranial window and headbar, then habituated to the behavioral apparatus. Mice were head-fixed on a treadmill on which they could run freely, and viewed visual stimuli presented on a monitor to the right eye. Sessions were passive: no reward was delivered and mice were not restricted. Running speed and pupil position were recorded throughout.

[add diagram of recording apparatus here]

Imaging was performed on two Thorlabs mesoscopes at 920 nm through a XX objective. Eight planes (4 locations × 2 depths) were imaged simultaneously: four at 130–170 µm and four at 226–270 µm below the pia, within VISp. Planes were 512 × 512 pixels at 0.78 µm/pixel (399 µm field of view), acquired at 10.63 Hz on MESO.2 (809092, 810268, 826616, 826619) or 9.48 Hz on MESO.1 (815059, 823093). Each mouse was recorded in three sessions of ~67 min, sampling 12 locations tiling V1.

Data pre-processing was performed in accordance with the AIND multiplane-ophys pipeline. Frames were first de-interleaved into their constituent planes, which were motion-corrected in Suite2p. Regions of interest were detected and fluorescence extracted using a combination of Cellpose and Suite2p, neuropil contamination was subtracted, ΔF/F traces were computed, and spiking events were inferred for each ROI with the OASIS deconvolution library. Processed data are distributed in Neurodata Without Borders format, with each imaging plane stored as a separate processing module containing raw, neuropil-corrected, ΔF/F and event traces, segmentation masks and summary images.

Data structure

One NWB file = one session.
One clock per session. Every array carries its own timestamps, in seconds. Streams start at different times and run at different rates, so align on timestamps, not by index.

Neural data Stimulus data Behavioural data
nwb.processing['VISp_0'] … ['VISp_7']
Eight modules, one per imaging plane — identical structure.
N frames × N ROIs.
9.5 or 10.6 Hz, by microscope.

Traces — all the same shape, each with its own timestamps.One row per frame · one column per ROI.
['raw_timeseries']['ROI_fluorescence_timeseries'] · a.u.
['neuropil_fluorescence_timeseries'] · a.u.
['neuropil_corrected_timeseries'] · a.u.
['dff_timeseries']['dff_timeseries'] · %
['event_timeseries'] · AP-related events

Segmentation
['image_segmentation']['roi_table']
N rows, one per ROI
is_soma · soma_probability · is_dendrite · dendrite_probability · image_mask (512 × 512, use > 0 for the footprint)

Whole plane images
['images']
['average_projection'] · ['max_projection'] · ['segmentation_mask_image'] — 512 × 512 each
['segmentation_mask_image'] labels every ROI in one array
nwb.intervals
Two stimulus tables, one per block.
One row per trial.
Shared columns
start_time · stop_time (seconds, session clock)
stim_name · stim_type · stim_index

RF block
['receptive_field_block_presentations']
N rows · 0.25 s per trial, back-to-back
Position x_position · y_position
Grating orientation · spatial_frequency · temporal_frequency · contrast
Tuning block
['drifting_gratings_field_block_presentations']
N rows · 1.0 s per trial, 1.25 s apart
Grating orientation · spatial_frequency · temporal_frequency · contrast
No position columns — full field
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Locomotion
nwb.processing['running']
N samples · ~60 Hz
TimeSeries — timestamps on .timestamps
['running_speed'] · cm/s, negative = backwards
['running_wheel_rotation'] · radians

Eye tracking
nwb.processing['eye_tracking']
N rows · ~60 Hz · one row per camera frame
['pupil'] · ['corneal_reflection'] · ['ellipse']
 DynamicTables — timestamps are a column, not .timestamps
All three tables have these columns
data_x · data_y · width · height · angle
area · area_raw · timestamps
reference_frame = 'nose'
⚠️ −1 marks a failed fit, not a value. Nothing is NaN.
['likely_blink_times']
TimeSeries, bool — timestamps on .timestamps
 
 
 
 
 
 
 

An example breakdown of trials and times for one of the ophys sessions is shown below.

809092_ophys_plot

Data access with DANDI CLI

Dandiset 001709 (Ophys) holds 18 sessions from 6 mice, one NWB file per session, about 2.2 GB each and 34 GB in total. You can either download a file with the DANDI command-line tool or stream it, reading only the bytes you actually touch.

For the DANDI CLI tool itself, see the archive's guides on downloading and streaming.

pip install dandi pynwb remfile h5py

File paths

One file per session, named from the subject and the session start time:

sub-<subject>/sub-<subject>_ses-multiplane-ophys-<subject>-<YYYY-MM-DD>-<HH-MM-SS>_ophys.nwb

Show all the paths and sizes for on subject in bash

dandi ls "dandi://DANDI/001709/sub-809092/"     # paths and sizes for one subject

Show all the paths and sizes for the entire dataset

from dandi.dandiapi import DandiAPIClient

with DandiAPIClient() as client:
    for asset in client.get_dandiset("001709").get_assets():
        print(f"{asset.size / 1e9:5.2f} GB  {asset.path}")

Stream one file

import h5py, pynwb, remfile
from dandi.dandiapi import DandiAPIClient
#example file path
PATH = ("sub-809092/"
        "sub-809092_ses-multiplane-ophys-809092-2025-10-01-12-34-23_ophys.nwb")
#find the file (asset) and its URL 
asset = DandiAPIClient().get_dandiset("001709").get_asset_by_path(PATH)
url = asset.get_content_url(follow_redirects=1, strip_query=False)
#stream the file
handle = h5py.File(remfile.File(url), "r")
io = pynwb.NWBHDF5IO(file=handle, mode="r")
nwbfile = io.read()

follow_redirects=1 resolves the archive's redirect to storage; strip_query=False keeps the signature that makes the resulting URL readable. Call io.close() and handle.close() when done.

Download one file

Command line

dandi download "dandi://DANDI/001709/sub-809092/sub-809092_ses-multiplane-ophys-809092-2025-10-01-12-34-23_ophys.nwb"

Script

nwbfile = pynwb.NWBHDF5IO(PATH, mode="r").read()

Questions for the Allen Institute

-There's no mention of tam induction procedure in the white book - should we describe it in the readme? -Is there a document detailing the microscope apparatus beyond the metadata in the files? This is very light https://allenneuraldynamics.github.io/openscope-community-predictive-processing/hardware/allen_institute_mesoscope_hardware/ -I think the plane coordinates for the FOVs need to be in the dataset for it to be used at the best of its potential

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages