[{"data":1,"prerenderedAt":42},["ShallowReactive",2],{"analysis-playbook-maxi-rbm-timeseries":3},{"@context":4,"@type":5,"name":6,"description":7,"proficiencyLevel":8,"dependencies":9,"programmingLanguage":15,"keywords":16,"citation":25,"about":37,"articleBody":41},"https:\u002F\u002Fschema.org","TechArticle","MAXI\u002FRBM Time Series Visualization","Visualize MAXI Radiation Belt Monitor (RBM) 1-second cadence particle count rates from CDF files archived on DARTS. Covers listing daily files by year, loading CDF variables with cdflib, and plotting single-day or multi-day time series with matplotlib.","beginner",[10,11,12,13,14],"cdflib","astropy","matplotlib","numpy","requests","Python",[17,18,19,20,21,22,23,24],"MAXI","RBM","Radiation Belt Monitor","time series","charged particle","electron","proton","CDF",[26,30,34],{"@type":27,"url":28,"name":29},"WebPage","https:\u002F\u002Fdarts.isas.jaxa.jp\u002Fdatasets\u002Fdarts:maxi-rbm-timeseries\u002F","MAXI\u002FRBM timeseries dataset at DARTS",{"@type":31,"url":32,"name":33},"ScholarlyArticle","https:\u002F\u002Fdoi.org\u002F10.1093\u002Fpasj\u002F61.5.999","The MAXI Mission on the ISS: Science and Instruments for Monitoring All-Sky X-Ray Images",{"@type":35,"url":36,"name":10},"SoftwareApplication","https:\u002F\u002Fgithub.com\u002FMAVENSDC\u002Fcdflib",[38],{"@type":39,"name":40},"Dataset","darts:maxi-rbm-timeseries","## MAXI\u002FRBM Time Series Visualization\n\nThe Radiation Belt Monitor (RBM) counts charged particles at 1-second cadence in two perpendicular directions (horizontal: RATE_H, zenithal: RATE_Z), primarily to protect the GSC by triggering its automatic shutdown when MAXI enters high-flux regions such as the radiation belts.\nIt is also useful for studying relativistic electron precipitation (REP) events.\nThe dataset page is at [DARTS](https:\u002F\u002Fdarts.isas.jaxa.jp\u002Fdatasets\u002Fdarts:maxi-rbm-timeseries\u002F).\n\n---\n\n### Instrument Summary\n\nThe RBM is a PIN diode (5 mm × 5 mm, 200 μm thick) sensitive to electrons above ~150 keV and protons above ~3 MeV.\nThe standard operating threshold since launch is LD = 1 (50 keV), which responds to both electrons and protons.\n\n| LD | Threshold | Sensitive to |\n|----|-----------|--------------|\n| 0  | 30 keV    | Ground testing only |\n| 1  | 50 keV    | Electrons and protons (standard) |\n| 2  | 200 keV   | Protons only (2–100 MeV) |\n| 3  | 1 MeV     | Reserved for noisy conditions |\n\n---\n\n### Data Files\n\nFiles are organized by year under:\n\n```\nhttps:\u002F\u002Fdata.darts.isas.jaxa.jp\u002Fpub\u002Fmaxi\u002Frbm\u002F{YYYY}\u002F\n```\n\nEach daily CDF file is named `mx_rbm_{YYYYMMDD}.cdf` and contains the following variables:\n\n| Variable    | Type       | Description |\n|-------------|------------|-------------|\n| `Epoch`     | CDF_EPOCH  | Time (1-second cadence) |\n| `RATE_H`    | CDF_DOUBLE | Count rate, horizontal direction (cts\u002Fs) |\n| `RATE_Z`    | CDF_DOUBLE | Count rate, zenithal direction (cts\u002Fs) |\n| `Longitude` | CDF_DOUBLE | ISS geographic longitude (deg) |\n| `Latitude`  | CDF_DOUBLE | ISS geographic latitude (deg) |\n| `Radius`    | CDF_DOUBLE | ISS distance from Earth center (km) |\n\n---\n\n### Visualization with Python\n\n#### Requirements\n\n```\npip install cdflib astropy matplotlib numpy requests\n```\n\n#### Helper functions\n\n```python\nimport re\nimport requests\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib.dates as mdates\nimport cdflib\nfrom astropy.utils.data import download_file\n\ndef list_rbm_files(year):\n    url = f\"https:\u002F\u002Fdata.darts.isas.jaxa.jp\u002Fpub\u002Fmaxi\u002Frbm\u002F{year}\u002F\"\n    resp = requests.get(url, timeout=30)\n    if resp.status_code != 200:\n        return []\n    return [url + name for name in re.findall(r'href=\"(mx_rbm_\\d{8}\\.cdf)\"', resp.text)]\n\ndef load_rbm(url):\n    local = download_file(url, cache=True)\n    cdf = cdflib.CDF(local)\n    time = cdflib.cdfepoch.to_datetime(cdf.varget(\"Epoch\"))\n    return {\n        \"time\":      np.array(time),\n        \"rate_h\":    cdf.varget(\"RATE_H\"),\n        \"rate_z\":    cdf.varget(\"RATE_Z\"),\n        \"longitude\": cdf.varget(\"Longitude\"),\n        \"latitude\":  cdf.varget(\"Latitude\"),\n        \"radius\":    cdf.varget(\"Radius\"),\n    }\n```\n\n#### Example 1: Single-day time series\n\n```python\nurl = \"https:\u002F\u002Fdata.darts.isas.jaxa.jp\u002Fpub\u002Fmaxi\u002Frbm\u002F2015\u002Fmx_rbm_20150104.cdf\"\nd = load_rbm(url)\n\nfig, axes = plt.subplots(2, 1, figsize=(12, 6), sharex=True)\n\naxes[0].plot(d[\"time\"], d[\"rate_h\"], lw=0.5, color=\"steelblue\", label=\"RATE_H (horizontal)\")\naxes[0].set_ylabel(\"Count rate (cts\u002Fs)\")\naxes[0].legend(loc=\"upper right\")\n\naxes[1].plot(d[\"time\"], d[\"rate_z\"], lw=0.5, color=\"tomato\", label=\"RATE_Z (zenithal)\")\naxes[1].set_ylabel(\"Count rate (cts\u002Fs)\")\naxes[1].set_xlabel(\"Time (UTC)\")\naxes[1].legend(loc=\"upper right\")\n\nfor ax in axes:\n    ax.xaxis.set_major_formatter(mdates.DateFormatter(\"%H:%M\"))\n\nfig.suptitle(\"MAXI\u002FRBM 2015-01-04\")\nfig.autofmt_xdate()\nplt.tight_layout()\nplt.savefig(\"maxi_rbm_20150104.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n#### Example 2: Multi-day time series\n\n```python\nfrom astropy.time import Time\n\nt_start = Time(\"2015-01-01\")\nt_stop  = Time(\"2015-01-31\")\n\nkeys = [\"time\", \"rate_h\", \"rate_z\", \"longitude\", \"latitude\"]\nacc = {k: [] for k in keys}\n\nfor url in list_rbm_files(t_start.datetime.year):\n    try:\n        d = load_rbm(url)\n        mask = (d[\"time\"] >= t_start.datetime) & (d[\"time\"] \u003C= t_stop.datetime)\n        for k in keys:\n            acc[k].append(d[k][mask])\n    except Exception:\n        pass\n\nfor k in keys:\n    acc[k] = np.concatenate(acc[k])\n\nfig, ax = plt.subplots(figsize=(14, 4))\nax.plot(acc[\"time\"], acc[\"rate_h\"], lw=0.3, color=\"steelblue\", label=\"RATE_H\")\nax.plot(acc[\"time\"], acc[\"rate_z\"], lw=0.3, color=\"tomato\",    label=\"RATE_Z\")\nax.set_xlabel(\"Date (UTC)\")\nax.set_ylabel(\"Count rate (cts\u002Fs)\")\nax.set_title(\"MAXI\u002FRBM January 2015\")\nax.xaxis.set_major_formatter(mdates.DateFormatter(\"%m-%d\"))\nax.legend()\nfig.autofmt_xdate()\nplt.tight_layout()\nplt.savefig(\"maxi_rbm_2015-01.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n#### Example 3: Geographic map of count rate\n\n```python\nfig, ax = plt.subplots(figsize=(12, 5))\nsc = ax.scatter(acc[\"longitude\"], acc[\"latitude\"],\n                c=np.log1p(acc[\"rate_h\"]), s=0.5, cmap=\"hot\")\nfig.colorbar(sc, ax=ax, label=\"log(1 + RATE_H) [cts\u002Fs]\")\nax.set_xlim(0, 360)\nax.set_ylim(-90, 90)\nax.set_xlabel(\"Geographic Longitude (deg)\")\nax.set_ylabel(\"Geographic Latitude (deg)\")\nax.set_title(\"MAXI\u002FRBM RATE_H — Geographic Distribution (2015-01)\")\nplt.tight_layout()\nplt.savefig(\"maxi_rbm_2015-01_geo.png\", dpi=150, bbox_inches=\"tight\")\nplt.close()\n```\n\n---\n\n### Acknowledgement\n\nWhen using this data in publications, please include:\n\n> \"This research has made use of MAXI data provided by RIKEN, JAXA and the MAXI team.\"\n\nand cite:\n\n- Matsuoka, M. et al. (2009), PASJ, 61, 999. [doi:10.1093\u002Fpasj\u002F61.5.999](https:\u002F\u002Fdoi.org\u002F10.1093\u002Fpasj\u002F61.5.999)\n",1780296758282]