MSWEP / MSWX — products and catalog#
The bundled mswep_data_catalog.yaml carries everything needed to build a Drive path. Inspect it with no
network and no credentials:
from earthlens.mswep import Catalog
cat = Catalog()
cat.products() # ['mswep', 'mswx']
cat.get_product("mswep").variants["Past"].end # datetime.date(2024, 12, 31)
cat.get_product("mswx").path_template # includes {variable}
MSWEP#
| Variable | precipitation (1800 × 3600, 0.1° global) |
| Units | mm/hour, mm/3-hour, mm/day, mm/month by resolution |
| Resolutions | Hourly, 3hourly, Daily, Monthly |
| Variants | Past (gauge-corrected), Past_nogauge (satellite-reanalysis baseline), NRT |
| Versions | 2.80 → MSWEP_V280 (no Hourly), 3.16 → MSWEP_V316_test |
Hourly NRT granules carry an extra model_id field (1800 × 3600, values 1–18) identifying which predictor
stack produced each grid cell. At low and mid latitudes model_id == 1 means the estimate is final and
consistent with the historical record; at high latitudes that is model_id == 5.
MSWX#
Ten meteorological variables at 0.1° / 3-hourly (3hourly, Daily, Monthly — no Hourly). All ten folder
spellings are confirmed against the share:
| Variable | Folder |
|---|---|
| 2-m air temperature | Temp |
| Precipitation | P |
| 2-m daily maximum air temperature | Tmax |
| 2-m daily minimum air temperature | Tmin |
| Surface pressure | Pres |
| 2-m relative humidity | RelHum |
| 2-m specific humidity | SpecHum |
| 10-m wind speed | Wind |
| Downward shortwave radiation | SWd |
| Downward longwave radiation | LWd |
MSWX forecast streams#
MSWX publishes two ensemble forecast streams alongside Past and NRT, as the folders Mid and Long:
| Stream | Folder | Base model | Members | Horizon | Re-initialised |
|---|---|---|---|---|---|
| Medium-range | Mid |
NOAA GEFS | 30 | 10 days | daily |
| Seasonal (MSWX-Long) | Long |
ECMWF SEAS5 | 51 | 7 months | monthly |
A forecast granule adds an initialisation-time and an ensemble-member level:
<variant>/<variable>/<YYYYMMDD_HH init>/<member NN>/<temporal>/<valid-time>.nc. Request one with variant=,
init= (the initialisation date — GloH2O runs at 00Z) and members=; start / end select which valid
(lead) times to keep:
from earthlens.core import EarthLens
paths = EarthLens(
"mswx",
variant="Mid",
init="2026-08-01", # the run to fetch
members=[1, 2, 3], # ensemble members (omit for all 30)
variables=["Temp"],
start="2026-08-01", # valid-time window (10-day horizon)
end="2026-08-10",
temporal_resolution="daily",
path="out",
).download()
# -> out/MSWX_V100/Mid/Temp/20260801_00/01/Daily/2026213.nc, ...
The seasonal (Long) archive is empty
Long held no data when the share was surveyed, so a Long request currently returns an empty list. Mid
is populated (recent inits carry all 30 members; historical inits are sparse).
Where the folders live#
folder_id is the version root. GloH2O shares one folder per product and per version — the id you are given
is the MSWEP_V280 / MSWX_V100 / MSWEP_V316_test folder itself, whose children are the variants. There is no
parent to search, so which version you get is decided by which share you point folder_id at; the version=
argument selects catalog metadata (units, the trend caveat), not the data.
Earlier releases of this backend marked unverified values provisional and refused them at request time; with
the share walked, every provisional flag has been dropped — the catalog now reflects the real layout.
Gauge metadata#
The share carries a Gauge_metadata/ folder of auxiliary CSVs describing the rain gauges behind MSWEP's
gauge-correction step. Fetch them with fetch_gauge_metadata() — a separate method, because they are static
reference data rather than a time series, so pushing them through download()'s date window would be
meaningless:
from earthlens.mswep import MSWEP
src = MSWEP(start="2020-04-25", end="2020-04-25", temporal_resolution="daily", path="out")
paths = src.fetch_gauge_metadata() # all five
paths = src.fetch_gauge_metadata(["daily_station_locations.csv"]) # or a subset
They land under out/Gauge_metadata/ and are shipped raw — read them with pandas.
| File | Contents |
|---|---|
daily_station_locations.csv |
Lat/lon per daily gauge that passed QC and deduplication. Ids are source station codes (GHCND_GME00010350). |
monthly_station_locations.csv |
Lat/lon per monthly gauge. Ids (gridcell_00042230) are 0.25° GPCC cells; the suffix is the flattened index in a 720×1440 grid, row-major from top-left. |
daily_station_date_ranges.csv |
First/last valid observation per daily gauge. |
monthly_station_date_ranges.csv |
Same, for monthly gauges. |
daily_station_reporting_times.csv |
Inferred reporting time as an hour offset from 00:00 UTC. -5 means totals likely end 19:00 UTC; 0 aligns with the UTC day; +3 means 03:00 UTC next day. |
A date range is not continuous coverage
The range files bound the temporal span only. Many gauges have gaps — missing days, months or whole years.
Where the folder lives
The documentation names the folder and every file but not its parent. The v3.16 share carries it directly
under the version root (the shared folder_id), alongside Past / NRT, so the backend looks for it there in
a single lookup and raises if it is absent (older versions such as v2.80 ship none).