DOI: 10.6084/m9.figshare.31271761.v1
title: Steinmetz Lab Neuropixels Opto

description: UW Neuropixels OptoOVERVIEWThis dataset contains multi-site optogenetic stimulation experiments combined with Neuropixels opto recordings from the mouse cortex. The data support analysis of spatially-resolved neural responses to optogenetic activation and inactivation across different power levels and emitter locations.Recordings: 8 sessions across 3 subjects (AL_0034, AL_0033, AL_0039)Probe type: Neuropixels opto (14 emission sites, 100 µm spacing)<br>DATASET STRUCTUREdata/├── laser_calibration.json # Calibration data (all lasers, mW units)├── laser_calibration.mat # Same data, MATLAB format└── sessions/ # Individual recording sessions └── {subject}_{date}_en{en}/ ├── session.json # Session metadata ├── spikes.*.npy # Spike data (times, clusters) ├── clusters.*.npy # Cluster properties (depths, QC, waveforms) └── stim.*.npy # Stimulation data (times, sites, power)<br>SESSION DATASession Metadata (session.json)Each session directory contains a metadata file with experimental parameters:<br>{ "session_id": "AL0034_2024-12-05_en1_p0", "subject": "AL_0034", "date": "2024-12-05", "en": 1, "probe_index": 0, "top_chan": 142, "calibration": "quantifi", "power_level_scaling": 1.0, "sampling_rate": 30000, "n_channels": 384}<br>Spike DataFile Shape Type Descriptionspikes.times.npy (N,) float64 Spike times in secondsspikes.clusters.npy (N,) int32 Cluster ID for each spikeN = total number of spikes across all units<br>Cluster PropertiesFile Shape Type Descriptionclusters.templateDepths.npy (K,) float64 Depth from brain surface (µm)clusters.channelPositions.npy (C, 2) float64 Channel positions (x, y) in µmclusters.templates.npy (K, T, C) float64 Mean waveform templatesclusters.qcPass.npy (K,) bool QC pass/fail (presence_ratio&gt;0.8, ISI&lt;0.5, amp_cutoff&lt;0.1)clusters.waveformType.npy (K,) str "RS" (regular-spiking) or "FS" (fast-spiking)clusters.troughToPeak.npy (K,) float64 Spike width in millisecondsK = number of clustersC = number of channels in templateT = number of time samples in template<br>Stimulation DataFile Shape Type Descriptionstim.times.npy (M,) float64 Stimulus onset times (seconds)stim.emissionSites.npy (M,) int32 Emitter ID (1-14)stim.powerMW.npy (M,) float64 Power at probe tip (mW)stim.durations.npy (M,) float64 Pulse duration (seconds)stim.lightCmds.npy (M,) float64 Raw command values (for reference)M = number of stimulation trials<br><br>LOADING DATAPython example:import numpy as npimport jsonfrom pathlib import Path<br>def load_session(session_dir): """Load a complete recording session.""" session_dir = Path(session_dir) # Load metadata with open(session_dir / 'session.json') as f: metadata = json.load(f) # Load spike data spike_times = np.load(session_dir / 'spikes.times.npy') spike_clusters = np.load(session_dir / 'spikes.clusters.npy')<br> # Load cluster properties cluster_depths = np.load(session_dir / 'clusters.templateDepths.npy') cluster_qc = np.load(session_dir / 'clusters.qcPass.npy') waveform_type = np.load(session_dir / 'clusters.waveformType.npy') trough_to_peak = np.load(session_dir / 'clusters.troughToPeak.npy') # Load stimulation data stim_times = np.load(session_dir / 'stim.times.npy') stim_sites = np.load(session_dir / 'stim.emissionSites.npy') stim_power = np.load(session_dir / 'stim.powerMW.npy') stim_durations = np.load(session_dir / 'stim.durations.npy') return { 'metadata': metadata, 'spikes': {'times': spike_times, 'clusters': spike_clusters}, 'clusters': { 'depths': cluster_depths, 'qc_pass': cluster_qc, 'waveform_type': waveform_type, 'trough_to_peak': trough_to_peak }, 'stim': { 'times': stim_times, 'sites': stim_sites, 'power_mW': stim_power, 'durations': stim_durations } }<br># Example usagesession = load_session('data/sessions/AL0034_2024-12-05_en1_p0')print(f"Session: {session['metadata']['session_id']}")print(f"Total spikes: {len(session['spikes']['times']):,}")<br><br>CONTACT<br>For questions about the dataset:aladd38@uw.edunsteinme@uw.edu