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.
|
|
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.
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
[add diagram of recording apparatus here]
For session 817335,
| Neural data | Stimulus data | Behavioural data |
|---|---|---|
nwb.units2403 units, one row per neuron, across 4 probes — ProbeA · ProbeB · ProbeC · ProbeE. Key columns spike_times · firing_rate · device_name (which probe)Electrodes nwb.electrodes1920 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.intervalsFour stimulus tables, one per block. One row per trial. Shared columns start_time · stop_time (seconds, session clock)stim_name · stim_type · stim_indexRF block ['receptive_field_block_presentations']4860 rows · 0.25 s per trial, back-to-back Position x_position · y_positionGrating orientation · spatial_frequency · temporal_frequency · contrastTuning block ['drifting_gratings_field_block_presentations']1500 rows · 1.00 s per trial, 1.25 s apart Grating orientation · spatial_frequency · temporal_frequency · contrastNo 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 |
Locomotionnwb.processing['running']320,687 samples · ~60 Hz TimeSeries — timestamps on .timestamps['running_speed'] · cm/s, negative = backwards['running_wheel_rotation'] · radiansEye 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 .timestampsAll three tables have these columns data_x · data_y · area · area_raw · width · height · angle · timestampsreference_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.
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.
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 eventsSegmentation ['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.intervalsTwo stimulus tables, one per block. One row per trial. Shared columns start_time · stop_time (seconds, session clock)stim_name · stim_type · stim_indexRF block ['receptive_field_block_presentations']N rows · 0.25 s per trial, back-to-back Position x_position · y_positionGrating orientation · spatial_frequency · temporal_frequency · contrastTuning block ['drifting_gratings_field_block_presentations']N rows · 1.0 s per trial, 1.25 s apart Grating orientation · spatial_frequency · temporal_frequency · contrastNo 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'] · radiansEye tracking nwb.processing['eye_tracking']N rows · ~60 Hz · one row per camera frame ['pupil'] · ['corneal_reflection'] · ['ellipse']DynamicTables — timestamps are a column, not .timestampsAll three tables have these columns data_x · data_y · width · height · anglearea · area_raw · timestampsreference_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.
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 h5pyOne 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 subjectShow 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}")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.
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()-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

