CoolFace
Datasetpublic

Sakthigsjhy/MagBridge-Battery

MagBridge-Battery v1.0 The first open dataset pairing battery magnetic-field signatures with electrochemical degradation labels. Overview Battery health diagnostics rely almost entirely on terminal measurements — voltage, current, temperature. Magnetic sensing can see what terminals miss: internal hotspots, dendrites, inhomogeneous degradation. But no public dataset connected magnetic signatures to degradation labels. Until now. MagBridge-Battery v1.0 bridges… See the full description on the dataset page: https://huggingface.co/datasets/Sakthigsjhy/MagBridge-Battery.

sourceHugging Facecc-by-4.0updated 3mo agoView on Hugging Face
2likes64downloads
Dataset Card

MagBridge-Battery v1.0

The first open dataset pairing battery magnetic-field signatures with electrochemical degradation labels.

Overview

Battery health diagnostics rely almost entirely on terminal measurements — voltage, current, temperature. Magnetic sensing can see what terminals miss: internal hotspots, dendrites, inhomogeneous degradation.

But no public dataset connected magnetic signatures to degradation labels. Until now.

MagBridge-Battery v1.0 bridges the OSF magnetometry archive with PulseBat SOH labels to create the first open benchmark for magnetic battery diagnostics.

A synthetic magnetic-signature dataset for lithium iron phosphate (LFP) cells, bridging the Mohammadi–Jerschow OSF magnetometry archive with PulseBat electrochemical labels.

  • —6,760 samples at 100 time-steps per sample, 6 signal channels
  • —Cell-disjoint, leakage-free benchmark split (by_cell_primary)
  • —Anomaly subtypes: sensor dropout, calibration drift, temporal warp, periodic interference, low-voltage Regime-B extrapolation
  • —License: CC-BY-4.0 (data) / Apache-2.0 (code)
  • —Schema version: 1.0

Why This Matters

  • —Terminal-only datasets (NASA, CALCE, MATR) are blind to internal cell physics
  • —Magnetic sensing is becoming a first-class diagnostic modality (QuaLiProM, Nature Communications 2025)
  • —No cross-lab comparison was possible without a public benchmark — until now

Citation

Please cite the paper first and the dataset second when using this resource:

  1. 1.Paper: https://arxiv.org/abs/2605.20240 — DOI: 10.48550/arXiv.2605.20240
  2. 2.Dataset: https://zenodo.org/records/20260147 — DOI: 10.5281/zenodo.20260147

Paper (primary citation)

Gunasekar, S. P. and Rangarajan, P. K. "MagBridge-Battery: A Synthetic Bridge Dataset for Li-ion Magnetometry and State-of-Health Diagnostics." arXiv preprint arXiv:2605.20240, 2026.
bibtex
@article{magbridge2026,
  author        = {Gunasekar, Sakthi Prabhu and Rangarajan, Prasanna Kumar},
  title         = {{MagBridge-Battery}: A Synthetic Bridge Dataset for
                   {Li}-ion Magnetometry and State-of-Health Diagnostics},
  journal       = {arXiv preprint},
  eprint        = {2605.20240},
  archivePrefix = {arXiv},
  year          = {2026}
}

Dataset (secondary citation)

Gunasekar, S. P. and Rangarajan, P. K. MagBridge-Battery v1.0 [Data set]. Zenodo, 2026. https://doi.org/10.5281/zenodo.20260147
bibtex
@misc{magbridge_battery_v1_0,
  author    = {Gunasekar, Sakthi Prabhu and Rangarajan, Prasanna Kumar},
  title     = {{MagBridge-Battery v1.0}},
  year      = {2026},
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.20260147},
  note      = {Data set}
}

See CITING.md for full guidance (including upstream-source citations) and CITATION.cff for the machine-readable form.

Contents

data/
  shard_0000.parquet … shard_0004.parquet    # 5 shards × 1352 rows = 6760
  metadata.parquet                            # row-aligned metadata
splits/
  by_cell_primary.json                        # USE THIS for benchmark reporting
  by_record_optimistic_baseline.json          # Leaky baseline for contrast only
manifest.json                                 # provenance, hashes, config
checksums.sha256                              # integrity hashes for every file
load_example.py                               # minimal loader
dataset_card.md                               # full dataset card
CITATION.cff                                  # machine-readable citation
CITING.md                                     # how to cite (paper + dataset)
LICENSE                                       # CC-BY-4.0 dataset license + upstream notices
LICENSE-CODE                                  # Apache-2.0 code license
NOTICE-PULSEBAT                               # MIT notice from PulseBat upstream
README.md                                     # this file

Loading from Hugging Face

python
from datasets import load_dataset

ds = load_dataset("Sakthigsjhy/MagBridge-Battery", data_files="data/shard_*.parquet", split="train")
print(ds)

For the official leakage-safe benchmark split, use splits/by_cell_primary.json. The split file contains train_samples, val_samples, and test_samples sample IDs.

Quick Start

bash
pip install pandas pyarrow
python load_example.py
python
import pandas as pd, json
from pathlib import Path

base = Path(".")

# 1. Load all shards into one dataframe
shards = sorted((base / "data").glob("shard_*.parquet"))
df = pd.concat([pd.read_parquet(s) for s in shards], ignore_index=True)

# 2. Load the primary (cell-disjoint) split
split = json.loads((base / "splits" / "by_cell_primary.json").read_text())
train_ids = set(split["train_samples"])
val_ids   = set(split["val_samples"])
test_ids  = set(split["test_samples"])

train_df = df[df["sample_id"].isin(train_ids)].reset_index(drop=True)
val_df   = df[df["sample_id"].isin(val_ids)].reset_index(drop=True)
test_df  = df[df["sample_id"].isin(test_ids)].reset_index(drop=True)

print(f"train={len(train_df)}, val={len(val_df)}, test={len(test_df)}")
# Expect: train=4507, val=1074, test=1179

Which Split Do I Use?

Always `by_cell_primary` for any reported result. It guarantees:

  • —Zero physical cells overlap between train, val, and test
  • —Zero (clean parent → anomaly child) pairs are split across train/val/test
  • —Zero sample-ID overlap

by_record_optimistic_baseline is intentionally leaky (59 overlapping cells, 292 cross-split parent-child pairs) and is shipped only as a contrast — to demonstrate how much the leakage inflates apparent performance. Do not report its numbers without explicitly labelling them as the leaky baseline.

Signal Channels (per row, length 100)

ColumnDescriptionSign
B_s1YSensor 1, Y component of magnetic field (nT)signed
B_s1ZSensor 1, Z componentsigned
B_s2YSensor 2, Y componentsigned
B_s2ZSensor 2, Z componentsigned
B_s1C5Sensor 1 OSF channel-5 (originally labelled "Mag" in OSF source)signed
B_s2C6Sensor 2 OSF channel-6 (originally labelled "Mag" in OSF source)signed
time_normNormalized time index in [0, 1], 100 evenly-spaced pointsconstant grid
Important — `B_s1C5` and `B_s2C6` are NOT strict magnitudes. They are the signed channel-5 / channel-6 fields from the OSF source. The OSF archive labels them "Mag" but their values can legitimately be negative (123 rows with negatives in B_s1C5, 86 in B_s2C6). If you need a non-negative magnitude, compute sqrt(B_s1Y² + B_s1Z²) yourself.
`time_norm` is the same vector for every sample. It is included for loader convenience and can be dropped without information loss.

Metadata Columns

sample_id, parent_sample_id, cell_id, generation_seed, bridge_version, bridge_config_hash, schema_version, voltage, soc, soh, chemistry, regime, nearest_anchor, anomaly_flag, anomaly_subtype, anomaly_origin, anomaly_severity, second_life_class

See dataset_card.md for full semantics.

Anomaly Composition

SubtypeCountHas parentNotes
none (clean)5,600—Grounded PulseBat-conditioned
low_voltage_regime_B560noExtrapolation regime; soh, u_features, second_life_class are NaN by design
sensor_dropout150yesSynthetic; parent is a clean sample
calibration_drift150yesSynthetic
temporal_warp150yesSynthetic; parent-child max-diff median ≈ 13.4 nT
periodic_interference150yesSynthetic

Regime-B samples are for low-voltage / OOD / anomaly-style evaluation only — not for SOH regression, since SOH is intentionally missing.

Integrity Verification

bash
sha256sum -c checksums.sha256

All files should report OK.

Licenses

  • —Data (data/, splits/, manifest.json): CC-BY-4.0. See LICENSE.
  • —Code (load_example.py and other release scripts): Apache-2.0. See LICENSE-CODE.
  • —Upstream attribution: The LICENSE file contains a full upstream-notice section for the OSF magnetometry archive and the PulseBat dataset.

This bundle does not redistribute raw OSF or PulseBat data files.

Provenance

This bundle is derived from two upstream sources (hashes pinned in manifest.json):

  • —OSF magnetometry archive (Mohammadi, Jerschow et al.) — osf_data_hash in manifest
  • —PulseBat electrochemical dataset — pulsebat_data_hash in manifest

The bridging procedure, configuration, and code version are recorded in manifest.json (bridge_version, bridge_code_commit, bridge_config, config_hash). Generation date: 2026-05-16.