0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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()

gaia_passbands_relative.png

透過率と相対不確かさを分離して描画する

測光誤差を扱う解析では、透過率と測定不確かさを分けて確認したい場合があります。以下は相対不確かさ(誤差/透過率)を下段に分離した例です。

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()

gaia_passbands.png
gaia_relative_uncertainty.png

おわりに

パスバンド形状と測光誤差の波長依存性を把握しておくことで、色指数の解釈や光度不確かさの比較・検証が行いやすくなります。ぜひご活用いただければ幸いです。

参考文献・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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?