Data format
Output columns, file formats, coordinate system and propagation targets. Vector quantities are stored in GSM (Geocentric Solar Magnetospheric) coordinates; GSE and SM are available through the coordinate-system selector on the download page (rotated in your browser) and via the Python client.
Columns
| Column | Units | Description |
|---|---|---|
| Bx | nT | IMF x-component (GSM native; GSE/SM via selector) |
| By | nT | IMF y-component (GSM native; GSE/SM via selector) |
| Bz | nT | IMF z-component (GSM native; GSE/SM via selector) |
| Ux | km/s | Solar wind bulk velocity, x-component (radial, negative = Earthward) |
| Uy | km/s | Solar wind bulk velocity, y-component (Earth orbital motion restored by default at download) |
| Uz | km/s | Solar wind bulk velocity, z-component (Earth orbital motion restored by default at download) |
| rho | cm−3 | Proton number density |
| T | K | Proton temperature |
Extra columns in L1 files
| Column | Description |
|---|---|
| X | XGSM distance of reference satellite in RE: propagation metadata, always GSM regardless of the selected coordinate system (never rotated) |
| B_source | Source satellite for Bx, By, Bz (coupled) |
| Ux_source | Source satellite for Ux |
| Uyz_source | Source satellite for Uy, Uz (coupled) |
| rho_source | Source satellite for ρ |
| T_source | Source satellite for T |
Source codes: 1 ACE, 2 DSCOVR, 3 WIND, 4 SOLAR-1. When multiple satellites contribute, codes are concatenated in sorted order: 14 = ACE + SOLAR-1, 134 = ACE + WIND + SOLAR-1, 1234 = all four.
Interpolation flags in L1 and ballistic files
Each variable group carries an integer provenance flag recording whether the value at that minute is a direct observation or was produced by gap interpolation. Flag columns are present in L1 and ballistic files (14 RE, 32 RE and custom distances); MHD files do not carry them.
| Column | Description |
|---|---|
| B_interp | Interpolation flag for Bx, By, Bz (coupled) |
| Ux_interp | Interpolation flag for Ux |
| Uyz_interp | Interpolation flag for Uy, Uz (coupled) |
| rho_interp | Interpolation flag for ρ |
| T_interp | Interpolation flag for T |
Flags 0 and 1 mark minutes where at least one contributing satellite value is a direct observation; flag 2 marks minutes whose value is entirely the product of interpolation. The flag is blank wherever the data value itself is missing.
File formats
TEXT
Space-delimited text file, directly compatible with SWMF input readers. Header includes a title line with date range and units, a #COORDINATES command naming the frame the file was exported in (GSM, or GSE/SM when selected) with the Earth orbital-motion state on the same line, a column-name line with five time columns, and a #START marker.
MIDL Ballistic 32Re, 2024-05-01 to 2024-05-31 (nT, km/s, cm^-3, K)
#COORDINATES
GSM Earth orbital motion EXCLUDED
year month day hour minute Bx By Bz Ux Uy Uz rho T B_interp Ux_interp Uyz_interp rho_interp T_interp
#START
2024 05 01 00 00 -7.10 1.19 -9.69 -407.90 -3.13 -20.15 13.0870 28235.0 0 1 1 1 1
2024 05 01 00 01 -7.08 1.23 -9.66 -406.90 1.00 -13.91 13.3750 30180.0 0 0 0 0 0
Merged data files at L1 include additional columns for satellite position and source attribution:
MIDL L1 (Merged at Closest Satellite Location) L1, 2024-05-01 to 2024-05-31 (nT, km/s, cm^-3, K, Re)
#COORDINATES
GSM Earth orbital motion EXCLUDED
year month day hour minute Bx By Bz Ux Uy Uz rho T X B_source Ux_source Uyz_source rho_source T_source B_interp Ux_interp Uyz_interp rho_interp T_interp
#START
2024 05 01 00 00 5.32 2.14 -8.91 -450.20 15.30 -8.50 2.3400 85142.0 235.41 2 13 13 13 13 0 0 1 0 0
CSV
Standard comma-separated values with a single header row. Timestamps in ISO 8601.
timestamp,Bx,By,Bz,Ux,Uy,Uz,rho,T,B_interp,Ux_interp,Uyz_interp,rho_interp,T_interp
2024-05-01T00:00:00,5.32,2.14,-8.91,-450.2,15.3,-8.5,2.34,85000.0,0,1,1,1,1
CSV files for L1 include the same additional columns:
timestamp,Bx,By,Bz,Ux,Uy,Uz,rho,T,X,B_source,Ux_source,Uyz_source,rho_source,T_source,B_interp,Ux_interp,Uyz_interp,rho_interp,T_interp
2024-05-01T00:00:00,5.32,2.14,-8.91,-450.2,15.3,-8.5,2.34,85000.0,235.41,2,13,13,13,13,0,0,1,0,0
Missing values
nan in TEXT format. Empty string (between commas) in CSV format.
Coordinate system
Vectors are stored in GSM. x points Earth → Sun, z is the projection of the magnetic dipole perpendicular to x, y completes the right-handed system. GSE (z perpendicular to the ecliptic) and SM (z along the dipole axis) are available through the download-page selector and the Python client.
GSE / SM rotation
GSM is the native frame of every published file. Selecting GSE or SM
rotates Bx, By, Bz, Ux,
Uy, Uz in your browser using per-minute angle
files published alongside the data
(data/{YYYY}/{MM}/{YYYYMM}_angles.csv with columns
gsm_gse_angle_deg ψ and dipole_tilt_deg
μ, IGRF-based). GSE and GSM share the sunward x axis;
GSM and SM share the y axis:
GSM → GSE (angle ψ): GSM → SM (angle μ):
Bx_gse = Bx_gsm By_sm = By_gsm
By_gse = cosψ·By_gsm − sinψ·Bz_gsm Bx_sm = cosμ·Bx_gsm − sinμ·Bz_gsm
Bz_gse = sinψ·By_gsm + cosψ·Bz_gsm Bz_sm = sinμ·Bx_gsm + cosμ·Bz_gsm
The same rotation is applied to U. Each 1-minute sample is rotated with
that minute's instantaneous frame orientation, so a time series in
GSE/SM reflects the slowly turning frame, not a single fixed rotation. Scalars (ρ, T), the source and
interpolation-flag columns, and the L1 X column (GSM
propagation metadata by definition) are never rotated. Directly fetched
monthly CSVs are always GSM.
Earth orbital motion
For most applications, including Earth-centered magnetosphere
models such as SWMF, the solar wind velocity as seen from
Earth is the physically correct input, so MIDL restores the
orbital motion by default on the download page and in the Python
client: Earth's tangential orbital velocity is 29.78 km/s on average, ranging seasonally from 29.29 km/s at aphelion (early July) to
30.29 km/s at perihelion (early January), and is added along
+yGSE. In GSM it lands in both Uy and
Uz through the per-minute ψ rotation:
ΔUy = cosψ·VE,
ΔUz = −sinψ·VE.
Ux is left as-is: the convention is only known to remove
the tangential component, so Earth's ±0.50 km/s radial speed
is not re-added. Untick the option (or pass
orbital_motion=False) for convention-frame velocities,
e.g. for direct comparison with OMNI or CDAWeb products.
The download page's “Include Earth’s orbital motion” checkbox applies the seasonally exact correction in your browser, and the Python client (v1.1.1+, on by default) does the same in any output frame:
midl.load("2024-05-10", "2024-05-11", "L1", coords="GSE") # orbital_motion=True is the default
The choice is stamped in ds.attrs["orbital_motion"] and
stated on every exported .dat header's
#COORDINATES line as
Earth orbital motion included or
Earth orbital motion EXCLUDED. The monthly archive CSVs
hosted on this site and the real-time tier keep the convention
(motion removed); the correction is applied at download/load time.
Propagation targets
| Target | Use case |
|---|---|
| L1 | Merged data at the satellite closest to Earth (smallest X) |
| 14 RE | Bow shock nose |
| 32 RE | Standard SWMF upstream boundary |
| Custom | User-specified location along the Sun–Earth line. Any integer in [−70, 70] RE. |
Real-Time tier (MIDL-RT)
The Real-Time page serves a preliminary tier built from NOAA/SWPC's real-time solar wind stream, refreshed every minute under realtime/. It differs from the monthly definitive dataset: sources are currently SOLAR-1, ACE and IMAP (no WIND, which has no real-time broadcast; IMAP appears here before it joins the archival product), telemetry is not cross-calibrated, and only SOLAR-1 provides vector plasma; ACE and IMAP contribute scalar speed, density and temperature. Real-time intervals are superseded by the definitive product as monthly processing catches up; the two tiers are never mixed silently.
| File | Contents | Refresh |
|---|---|---|
| realtime_manifest.json | Entry point: names the current generation-stamped payload files below, plus per-source data ages, coverage boundaries (settled_through, definitive_through) and feed status. Fetch this first, uncached. | 1 min |
| last_24h.<gen>.json | Columnar JSON for plotting: implicit 1-min time axis (start + step_s × n), arrays for Bx…T, per-group source provenance, missing values as null. | 1 min |
| sources_24h.<gen>.json | Per-spacecraft raw RTSW on the same implicit time axis (minute-binned, sentinel-cleaned only; no despike/interpolation/time shift). Drives the raw-source column of the Real-Time quicklook; the 7 d/35 d variants back the longer windows. | 1 min |
| sources_{7d,35d}.<gen>.json | 10–15 min | |
| last_7d.<gen>.csv | Merged product at the reference satellite, same columns as the monthly L1 CSVs (timestamp, Bx…T, X, source columns; no interpolation-flag columns in this tier). | 1 min |
| last_35d.<gen>.csv | 10–15 min | |
| IMF_32Re.<gen>.dat | SWMF #SOLARWINDFILE-ready rolling window, ballistically shifted to +32 RE. During vector-plasma outages, rows may carry an operational fill (Ux = −speed, Uy = Uz = 0), counted and flagged in the header. | 1 min |
Rows younger than 3 hours are live (look-ahead filtering still open; values may change), rows 3–27 hours old are settled but still preliminary, and older rows are sealed. Payload filenames change every generation; always resolve them through realtime_manifest.json rather than hard-coding.