はじめに
Gaia の測光データは、星の色や光度を扱う研究で非常に広く使われています。星の色や性質の推定、カタログ間の整合性検証など、多くの解析では、各バンドがどの波長域をどれだけカバーしているかを理解しておく必要があります。
ただし、パスバンドは公式に公開されているものの、特定の波長域だけ拡大したい場合や、他の観測装置と比較したい場合には、毎回自分で加工し直す必要があり、意外と手間がかかります。また、解析フローに組み込んで測光誤差や色指数を議論したい場合には、フィルタ特性を可視化し、いつでも加工できる状態にしておくことが有用です。
そこで本記事では、Gaia EDR3 の公開データを用いて
$G$、$G_{\rm BP}$、$G_{\rm RP}$ 各バンドの透過率を Python で描画する方法と、
パスバンドの不確かさ(エラー)も含めて表示する方法を紹介します。
データ入手とファイル仕様
Gaia パスバンドは公式サイトで公開されています:
データダウンロードリンク(公式サイト内のDownload here the Gaia (E)DR3 passbands and zero points):
https://www.cosmos.esa.int/documents/29201/4226701/GaiaEDR3_passbands_zeropoints.zip/b03ab6ac-8b02-9850-7586-7dd7cdbc84c9?t=1603980987171
ダウンロードすると passband.dat というファイルがあり、そこには波長ごとに以下の 7 列が含まれます(2025年12月時点)。
| 列 | 内容 |
|---|---|
| 1 | Wavelength [nm] |
| 2–3 | $G$ バンドの透過率とその不確かさ |
| 4–5 | $G_{\rm BP}$ バンドの透過率とその不確かさ |
| 6–7 | $G_{\rm RP}$ バンドの透過率とその不確かさ |
99.99 などの未定義値について
透過率がゼロではなく、その波長域で値が定義されていないことを表します。
したがって、プロットする際には NaN へ置き換える処理が必要です。
ReadMe の確認を推奨
ファイル仕様は更新される可能性があるため、解析に使用する前に付属 ReadMe の確認を推奨します。
Python による可視化コード
以下は、不定値を NaN に置換し、誤差帯付きでパスバンドを描画するコードです。
バンドパスと不確かさを同時に描画する
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
# ---------- データ読み込み ----------
data = np.loadtxt("passband.dat")
# 波長
lambda_nm = data[:,0]
# 透過率
G = data[:,1]
BP = data[:,3]
RP = data[:,5]
# 誤差
G_err = data[:,2]
BP_err = data[:,4]
RP_err = data[:,6]
# ---------- 無効値(99以上)を NaN ----------
for arr in [G, BP, RP, G_err, BP_err, RP_err]:
arr[arr > 10] = np.nan
# ---------- 相対不確かさ ----------
rel_G = G_err / G
rel_BP = BP_err / BP
rel_RP = RP_err / RP
# ---------- 2段プロット(x共有) ----------
fig = plt.figure(figsize=(9.5,7))
gs = gridspec.GridSpec(2, 1, height_ratios=[2.3, 1], hspace=0.05)
# 上段
ax1 = fig.add_subplot(gs[0])
# 下段(ここで sharex を指定)
ax2 = fig.add_subplot(gs[1], sharex=ax1)
# ======== 上段:パスバンド + 誤差 ========
ax1.plot(lambda_nm, G, color="tab:green", label=r"$G$", alpha=0.7, linewidth=2.0)
ax1.fill_between(lambda_nm, G-G_err, G+G_err, color="tab:green", alpha=0.15, edgecolor="none")
ax1.plot(lambda_nm, BP, color="tab:blue", label=r"$G_{\mathrm{BP}}$", alpha=0.7, linewidth=2.0)
ax1.fill_between(lambda_nm, BP-BP_err, BP+BP_err, color="tab:blue", alpha=0.15, edgecolor="none")
ax1.plot(lambda_nm, RP, color="tab:red", label=r"$G_{\mathrm{RP}}$", alpha=0.7, linewidth=2.0)
ax1.fill_between(lambda_nm, RP-RP_err, RP+RP_err, color="tab:red", alpha=0.15, edgecolor="none")
ax1.set_ylabel("Transmission")
ax1.set_title("Gaia EDR3 Passbands and Relative Uncertainty")
ax1.legend()
ax1.minorticks_on()
ax1.tick_params(axis='both', which='major', direction='in')
ax1.tick_params(axis='both', which='minor', direction='in')
ax1.grid(which='major', linestyle='-', linewidth=0.4, alpha=0.5)
ax1.grid(which='minor', linestyle=':', linewidth=0.6, alpha=0.6)
ax1.set_ylim(0, None)
# ======== 下段:相対不確かさ ========
ax2.plot(lambda_nm, rel_G, color="tab:green", label=r"$G$", linewidth=1.8)
ax2.plot(lambda_nm, rel_BP, color="tab:blue", label=r"$G_{\mathrm{BP}}$", linewidth=1.8)
ax2.plot(lambda_nm, rel_RP, color="tab:red", label=r"$G_{\mathrm{RP}}$", linewidth=1.8)
ax2.set_ylabel("Relative Uncertainty\n(uncertainty / transmission)")
ax2.set_xlabel("Wavelength [nm]")
ax2.minorticks_on()
ax2.tick_params(axis='both', which='major', direction='in')
ax2.tick_params(axis='both', which='minor', direction='in')
ax2.grid(which='major', linestyle='-', linewidth=0.4, alpha=0.5)
ax2.grid(which='minor', linestyle=':', linewidth=0.6, alpha=0.6)
ax2.set_ylim(0, None)
# 不要な x tick の数値を上段から消す
plt.setp(ax1.get_xticklabels(), visible=False)
# ---------- 保存 ----------
plt.savefig("gaia_passbands_relative.png", dpi=200)
plt.show()
透過率と相対不確かさを分離して描画する
測光誤差を扱う解析では、透過率と測定不確かさを分けて確認したい場合があります。以下は相対不確かさ(誤差/透過率)を下段に分離した例です。
import numpy as np
import matplotlib.pyplot as plt
# ---------- データ読み込み ----------
data = np.loadtxt("passband.dat")
# 波長
lambda_nm = data[:,0]
# 透過率
G = data[:,1]
BP = data[:,3]
RP = data[:,5]
# 誤差
G_err = data[:,2]
BP_err = data[:,4]
RP_err = data[:,6]
# ---------- 無効値(99以上)を NaN ----------
for arr in [G, BP, RP, G_err, BP_err, RP_err]:
arr[arr > 10] = np.nan # 透過率は 1 以下のはずなので 10 以上は欠損とみなす
# ---------- プロット ----------
plt.figure(figsize=(9.5,5))
plt.plot(lambda_nm, G, color="tab:green", label=r"$G$", alpha=0.7, linewidth=2.0)
plt.fill_between(lambda_nm, G-G_err, G+G_err, color="tab:green", alpha=0.15, edgecolor="none")
plt.plot(lambda_nm, BP, color="tab:blue", label=r"$G_{\mathrm{BP}}$", alpha=0.7, linewidth=2.0)
plt.fill_between(lambda_nm, BP-BP_err, BP+BP_err, color="tab:blue", alpha=0.15, edgecolor="none")
plt.plot(lambda_nm, RP, color="tab:red", label=r"$G_{\mathrm{RP}}$", alpha=0.7, linewidth=2.0)
plt.fill_between(lambda_nm, RP-RP_err, RP+RP_err, color="tab:red", alpha=0.15, edgecolor="none")
plt.xlabel("Wavelength [nm]")
plt.ylabel("Transmission")
plt.title("Gaia EDR3 Passbands with Errors")
plt.legend()
plt.tight_layout()
ax = plt.gca()
ax.minorticks_on()
ax.tick_params(axis='both', which='major', direction='in')
ax.tick_params(axis='both', which='minor', direction='in')
ax.grid(which='major', linestyle='-', linewidth=0.4, alpha=0.5)
ax.grid(which='minor', linestyle=':', linewidth=0.6, alpha=0.6)
ax.set_ylim(0, None)
plt.savefig("gaia_passbands.png", dpi=200)
plt.show()
# ========== 相対不確かさ (uncertainty / transmission) のプロット ==========
rel_G = G_err / G
rel_BP = BP_err / BP
rel_RP = RP_err / RP
plt.figure(figsize=(9.5,4))
plt.plot(lambda_nm, rel_G, color="tab:green", label=r"$G$", linewidth=1.8)
plt.plot(lambda_nm, rel_BP, color="tab:blue", label=r"$G_{\mathrm{BP}}$", linewidth=1.8)
plt.plot(lambda_nm, rel_RP, color="tab:red", label=r"$G_{\mathrm{RP}}$", linewidth=1.8)
plt.ylabel("Relative Uncertainty\n(uncertainty / transmission)")
plt.xlabel("Wavelength [nm]")
plt.title("Relative Uncertainty of Gaia Passbands")
plt.ylim(0, None)
plt.tight_layout()
ax = plt.gca()
ax.minorticks_on()
ax.tick_params(axis='both', which='major', direction='in')
ax.tick_params(axis='both', which='minor', direction='in')
ax.grid(which='major', linestyle='-', linewidth=0.4, alpha=0.5)
ax.grid(which='minor', linestyle=':', linewidth=0.6, alpha=0.6)
plt.legend()
plt.savefig("gaia_relative_uncertainty.png", dpi=200)
plt.show()
おわりに
パスバンド形状と測光誤差の波長依存性を把握しておくことで、色指数の解釈や光度不確かさの比較・検証が行いやすくなります。ぜひご活用いただければ幸いです。
参考文献・Credits
本記事で使用したパスバンドデータは、以下のクレジットに基づきます:
Credits: ESA/Gaia/DPAC, P. Montegriffo, F. De Angeli, M. Bellazzini, E. Pancino, C. Cacciari, D. W. Evans, and the CU5/PhotPipe team.
パスバンド形状およびフォトメトリ検証の詳細は、Riello et al. (2021) の Fig. 24 を参照してください。
Riello, M. et al. (2021)
Gaia Early Data Release 3: Photometric content and validation. A&A, 649, A3.
DOI: https://doi.org/10.1051/0004-6361/202039587


