Skip to main content

jnwb

PyPI Docs CI/CD License

jnwb

Dataset-agnostic Python library for Neurodata Without Borders (NWB 2.0+) electrophysiology: addressing, spikes, LFP, spectral analysis, statistics, population methods, decoding, connectivity, laminar CSD, filtering, QC, and visualization.

Documentation: https://jnwb.readthedocs.io/ | Source: https://github.com/HNXJ/jnwb

jnwb is a toolbox, not a pipeline. It supplies small operations over NWB files, arrays, and metadata tables. Task structure, condition codes, and experimental hypotheses stay in project code.

  • Dataset-agnostic. No experiment condition names or manuscript results live in the library.
  • Explicit nulls. Label permutation requires an exchangeability scheme (global or within_group).
  • Preserved signal semantics. Units, sampling rates, coordinate frames, and 0- vs 1-indexing do not change across a function boundary.

Capabilities

Area Representative API
NWB metadata & addressing get_all_units_metadata, electrode_inventory, map_peak_channel_to_area, classify_layer_from_depth
Spiking raster_psth, compute_response_metrics, causal_exp_smooth, fit_exponential_onset, pairwise_phase_consistency
LFP & spectral compute_psd, compute_multitaper_psd, band_power, complex_tfr, aggregate_to_db, current_source_density_1d
Filtering bandpass_filter, notch_filter
Statistics permute_labels, cluster_permutation_test, shuffle_pvalue_paired, paired_fire_prob_test
Population & decoding jrsa, nested_cv_linear_svm, compute_population_trajectory
Connectivity granger, phase_slope_index, transfer_entropy, directed_network
Quality control channel_correlation_matrix, repair_lfp_trials, audit_units, audit_electrodes
Visualization raster_psth, setup_vector_graphics, save_figure_suite

Installation

Requires Python 3.12 or newer. Tested in CI on 3.12 and 3.14.

pip install jnwb
pip install jnwb==0.1.3
pip install "jnwb[torch,gpu]"   # optional

Core dependencies: numpy, scipy, pandas, h5py, pynwb, hdmf, matplotlib, scikit-learn, statsmodels, joblib.

Quickstart

import numpy as np
import jnwb

rng = np.random.default_rng(42)
spikes = np.sort(rng.uniform(0.0, 10.0, 300))
events = np.array([1.0, 3.0, 5.0, 7.0])

time_bins, rate_hz, _ = jnwb.raster_psth(spikes, events, win_ms=(-100.0, 400.0), bin_ms=10.0)
smooth_hz = jnwb.causal_exp_smooth(rate_hz, bin_ms=10.0, tau_ms=25.0)
fit = jnwb.fit_exponential_onset(time_bins, smooth_hz, t0_bounds=(0.0, 200.0))
print(f"Onset t0: {fit['t0']:.1f} ms (R2={fit['r2']:.2f}, {fit['bound_status']})")

fs = 1000.0
lfp = rng.normal(size=1000)
tfr = jnwb.complex_tfr(lfp, fs=fs, freqs=np.linspace(10.0, 60.0, 10))
beta = jnwb.band_power(lfp, fs=fs, freq_range=jnwb.CANONICAL_BANDS["beta"], normalize=False)
print(f"TFR shape: {tfr.shape}, beta power: {beta:.4f}")

NWB session inventory:

import jnwb

units = jnwb.get_all_units_metadata("session.nwb")
electrodes = jnwb.electrode_inventory("session.nwb")
units = jnwb.enrich_units_dataframe(units, electrodes)
print(len(units), "units;", jnwb.audit_units(units))

Documentation

Guides, the public API (every symbol in jnwb.__all__), and common mistakes are on Read the Docs.

License

MIT. See LICENSE.

Release files for jnwb 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jnwb 0.1.3
File Size Uploaded
jnwb-0.1.3.tar.gz 245.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jnwb 0.1.3
File Interpreter ABI Platform
jnwb-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 418.5 kB

Release files / jnwb-0.1.3.tar.gz

Download URL jnwb-0.1.3.tar.gz
Size 245.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2b4d90c58fa1c168cc985b2b199b7331b5fd1368a3d235d57dea9dcb4be8e6e7
BLAKE2b-256 checksum
How to use checksums
4d5b45273c0b7a82b1f6d1dbcfcbf5148ecffdbfd75a0b5581b36486a905a309
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release files / jnwb-0.1.3-py3-none-any.whl

Download URL jnwb-0.1.3-py3-none-any.whl
Size 173.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ccc54b871b4f389a0027ef39b7c8e30c81c4beb81fcfdfc64336f09bfd5ed375
BLAKE2b-256 checksum
How to use checksums
599d2161e4ae9905b7ddcbb06ef1bf4874ac2ee5783c5aeace439f0b661bb421
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

This release

0.1.3 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page