---
title: "从eFEDS两个SWCX scenario到Figure 3的两个固定点 — From two eFEDS SWCX scenarios to two fixed points on Figure 3"
subtitle: "面向物理系本科一年级 · 可执行教程"
author: "M31 CGM Team"
date: "2026-07-18"
format:
html:
theme:
light: [cosmo, custom.scss]
dark: [cosmo, custom-dark.scss]
toc: true
toc-depth: 3
code-fold: true
code-tools: true
fig-cap-location: bottom
fig-width: 7
fig-height: 4
fig-align: center
embed-resources: true
css: styles.css
execute:
echo: true
eval: true
warning: false
message: false
jupyter: python3
---
# 从eFEDS两个SWCX scenario到Figure 3的两个固定点
> **教程目标**:理解 Ponti et al. (2023) 用 eFEDS 巡天在远离 M31 的天区拟合出的两个 SWCX scenario(negligible / high),如何经过 band reconstruction 变成 Figure 3 上的两个固定点。
> **Tutorial goal**: Understand how the two SWCX scenarios (negligible / high) fitted by Ponti et al. (2023) from eFEDS fields far from M31 are band-reconstructed into two fixed points on Figure 3.
> **目标读者**:物理系本科一年级,已学完普通物理(电磁学/光学),了解基本的原子物理概念(能级、跃迁),但不需要天文观测经验。
> **Target audience**: First-year physics undergraduates who have completed general physics (electromagnetism/optics) and basic atomic physics, without requiring astronomical observing experience.
> **核心问题**:Ponti+2023 在 $l \approx 220\text{–}235^\circ$, $b \approx 20\text{–}40^\circ$ 的 eFEDS 天区(离 M31 > $105^\circ$)拟合银河系 CGM 时,论文 Table 4 只给 0.3–0.6 keV 和 0.6–2.0 keV 两个分开的 bin 的 flux。而 Figure 3 需要 0.5–2.0 keV 的统一波段。怎么把两个 bin 重新拼成 0.5–2.0 keV?为什么结果是两个固定点而不是一个 central estimate + error bar?
>
> **Core question**: Ponti+2023 fit the Milky Way CGM in eFEDS fields at $l \approx 220\text{–}235^\circ$, $b \approx 20\text{–}40^\circ$ (more than $105^\circ$ from M31). The paper's Table 4 reports flux in two separate bins — 0.3–0.6 keV and 0.6–2.0 keV. Figure 3 needs a unified 0.5–2.0 keV band. How do we reconstruct one band from two? And why are the results two fixed points rather than a central estimate + error bar?
---
## 0. 准备工作:环境与数据
本教程只需要 Python 标准科学栈。所有数据文件已随教程提供。
```{python}
#| label: setup
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pathlib import Path
plt.style.use('seaborn-v0_8-whitegrid')
plt.rcParams['font.size'] = 12
plt.rcParams['figure.dpi'] = 150
plt.rcParams['savefig.dpi'] = 300
# NOTE: do NOT add a CJK font fallback here — see SKILL.md
# All matplotlib text labels stay English-only.
DATA = Path("assets/data")
print("Environment ready!")
```
---
## 1. 背景知识:eFEDS、SWCX 与 band reconstruction
### 1.1 eFEDS 巡天与银河系 CGM
eFEDS(eROSITA Final Equatorial-Depth Survey)是 SRG/eROSITA 在赤道带进行的一次深巡天,覆盖约 60 平方度。Ponti et al. (2023) 分析了其中位于 $l \approx 220\text{–}235^\circ$, $b \approx 20\text{–}40^\circ$ 的一组指向。这些天区离 M31 方向超过 $105^\circ$——也就是说,**eFEDS 并不指向 M31**,它测量的是银河系 CGM 在另一片天空的亮度。
论文用 **Lodders APEC 等离子体模型**(而不是 Henley & Shelton 2013 用的 Raymond-Smith)拟合这些视线上的银河系热气体,并显式建模 **Solar Wind Charge Exchange(SWCX)** 这一前景成分。
### 1.2 SWCX 是什么,为什么有两个 scenario?
**SWCX(太阳风电荷交换)**:太阳风中的高价离子(如 O$^{7+}$、C$^{6+}$)与中性原子(主要是星际介质中的 H、He)碰撞时"偷走"一个电子,电子随后落到低能级并放出 X 射线光子。SWCX 产生的谱线(如 O VII 0.56 keV、O VIII 0.65 keV)与银河系热气体 CGM 的谱线高度重叠,在软 X 射线波段极难区分。
Ponti+2023 对 SWCX 前景做了两种假设:
- **negligible_swcx**:SWCX 贡献可忽略,把软 X 射线几乎全部归到 CGM。结果是 CGM 更亮、温度 $kT \approx 0.157$ keV、丰度 $Z \approx 0.068$ $Z_\odot$。
- **high_swcx**:SWCX 贡献显著,扣掉后 CGM 更暗、温度 $kT \approx 0.173$ keV、丰度 $Z \approx 0.058$ $Z_\odot$。
这两个 scenario 不是"central ± error"——它们是论文对 SWCX 前景不确定性的**两个端点**假设。每个 scenario 都有自己的最佳拟合 $kT$、$Z$、$N_\mathrm{H}$ 分布参数,因此每个 scenario 都要独立地做 band reconstruction。
### 1.3 为什么要 band reconstruction?
论文 Table 4 给的 flux 是两个分开的能量 bin:
- **soft bin**:0.3–0.6 keV
- **hard bin**:0.6–2.0 keV
而 Figure 3 统一用 **0.5–2.0 keV**。注意 0.5–2.0 keV 并不是两个 bin 的简单相加:soft bin 覆盖 0.3–0.6 keV,我们**只需要它的 0.5–0.6 keV 部分**,再拼上整个 0.6–2.0 keV。这就是 band reconstruction。
### 1.4 关键公式
对一个固定的 SWCX scenario $s$:
$$
S_{0.5\text{–}2.0}^{(s)} = \underbrace{S_{0.3\text{–}0.6}^{(s)} \times f_{0.5\text{–}0.6 / 0.3\text{–}0.6}^{(s)}}_{\text{soft bin 的 0.5–0.6 部分}} + \underbrace{S_{0.6\text{–}2.0}^{(s)}}_{\text{整个 hard bin}}
$$
其中分数 $f_{0.5\text{–}0.6 / 0.3\text{–}0.6}^{(s)}$ 由该 scenario 的 $kT$、$Z$ 和 $N_\mathrm{H}$ 分布(lognormal)下的 Lodders APEC 模型谱决定。
```{mermaid}
graph TD
A["eFEDS 拟合<br/>Lodders APEC + disnht"] --> B["两个 SWCX scenario:<br/>negligible / high"]
B --> C["每个 scenario 有自己的<br/>kT, Z, log N_H 分布"]
C --> D["Table 4: S(0.3-0.6) + S(0.6-2.0)"]
D --> E["用 APEC(kT,Z,N_H) 求<br/>f = F(0.5-0.6) / F(0.3-0.6)"]
E --> F["S(0.5-2.0) = S(0.3-0.6)·f + S(0.6-2.0)"]
F --> G["deg⁻² → arcmin⁻²<br/>10⁻¹³ → 10⁻¹⁵"]
G --> H["Figure 3: 两个固定点"]
```
---
## 2. 加载原始数据
```{python}
#| label: load-data
efeds = pd.read_csv(DATA / "m31_cgmsum_efeds2023_absorbed_0p5_2p0.csv")
print(f"Loaded {len(efeds)} SWCX scenarios")
print(f"Columns: {list(efeds.columns)}")
efeds
```
数据只有 2 行——对应两个 SWCX scenario:
| 列名 | 含义 |
|------|------|
| `scenario_id` | SWCX 情景名(negligible_swcx / high_swcx) |
| `temperature_keV` | 拟合的 CGM 温度 $kT$(keV) |
| `abundance_solar` | 金属丰度 $Z / Z_\odot$ |
| `mean_log10_nh_cm-2` | lognormal $N_\mathrm{H}$ 分布的均值($\log_{10} N_\mathrm{H}$) |
| `sigma_log10_nh` | lognormal $N_\mathrm{H}$ 分布的 $\sigma$(本项目采用 PDF 值 0.117) |
| `published_0p3_0p6_1e13_deg-2` | 论文 Table 4 的 0.3–0.6 keV flux($10^{-13}$ erg cm$^{-2}$ s$^{-1}$ deg$^{-2}$) |
| `published_0p6_2p0_1e13_deg-2` | 论文 Table 4 的 0.6–2.0 keV flux(同单位) |
| `model_ratio_0p5_0p6_to_0p3_0p6` | 由 APEC 模型算出的 $f = F_{0.5\text{–}0.6} / F_{0.3\text{–}0.6}$ |
| `flux_0p5_2p0_plot_central_fluxunit` | band reconstruction 后的 0.5–2.0 keV flux(Figure 3 单位:$10^{-15}$ erg cm$^{-2}$ s$^{-1}$ arcmin$^{-2}$) |
| `flux_0p5_2p0_reconstruction_low_fluxunit` | 重建下界(本场景下与 central 相同——见 §6) |
| `flux_0p5_2p0_reconstruction_high_fluxunit` | 重建上界(本场景下与 central 相同——见 §6) |
---
## 3. 第一步:理解 band reconstruction 的物理
### 3.1 为什么不能直接相加?
如果 Figure 3 要的是 0.3–2.0 keV,那直接把两个 bin 相加就行。但 Figure 3 要的是 **0.5–2.0 keV**,比 soft bin 的起点(0.3 keV)高 0.2 keV。这 0.2 keV 的差异看似很小,但在软 X 射线波段,0.3–0.5 keV 恰好是 O VII / O VIII 复合线密集的区域,被吸收得也最厉害。直接相加会高估 0.5–2.0 keV 的 flux。
### 3.2 怎么求 0.5–0.6 / 0.3–0.6 的分数?
对每个 scenario,我们已经有了它的最佳拟合 $kT$、$Z$ 和 $N_\mathrm{H}$ 分布参数。用 **Lodders APEC** 等离子体模型生成该 scenario 的理论谱(已吸收),然后数值积分:
$$
f^{(s)} = \frac{\int_{0.5}^{0.6} F_E^{(s)}(E)\, dE}{\int_{0.3}^{0.6} F_E^{(s)}(E)\, dE}
$$
其中 $F_E^{(s)}(E)$ 是 scenario $s$ 下的 absorbed APEC 谱(单位能量内的光子或能量 flux)。$N_\mathrm{H}$ 分布是 lognormal,所以吸收要对 $N_\mathrm{H}$ 做 **quadrature(加权积分)**——这是为什么数据里有 `mean_log10_nh_cm-2` 和 `sigma_log10_nh`。
### 3.3 可视化:两个 scenario 的模型谱与 band 划分
```{python}
#| label: step1-plot
#| fig-cap: "两个 SWCX scenario 的示意性 APEC 谱(已吸收),阴影区标 0.3-0.6 与 0.6-2.0 keV 两个论文 bin。band reconstruction 需要截取 soft bin 的 0.5-0.6 keV 部分(深色阴影)。"
#| fig-width: 8
#| fig-height: 5
# Schematic illustration: we don't run APEC here, but we draw the band
# boundaries so students see what "0.5-0.6 out of 0.3-0.6" means.
fig, ax = plt.subplots(figsize=(8, 5))
# Schematic absorbed thermal spectrum shapes (not real APEC, just for teaching)
E = np.linspace(0.2, 2.0, 1000)
def schematic_spec(E, kT):
# Very rough bremsstrahlung-like shape, just for visualization
return np.exp(-E/kT) * np.exp(-0.3*E) # *0.3 = schematic absorption
for i, row in efeds.iterrows():
label = row["scenario_id"].replace("_", " ")
ax.plot(E, schematic_spec(E, row["temperature_keV"]),
label=f"{label} kT={row['temperature_keV']:.3f} keV",
linewidth=2)
# Shade the two published bins
ax.axvspan(0.3, 0.6, color="#2676b8", alpha=0.10, label="Published soft bin 0.3-0.6 keV")
ax.axvspan(0.6, 2.0, color="#d47a2c", alpha=0.10, label="Published hard bin 0.6-2.0 keV")
# Highlight the 0.5-0.6 sub-slice we need
ax.axvspan(0.5, 0.6, color="#b74842", alpha=0.35,
label="Sub-slice 0.5-0.6 keV (needed for 0.5-2.0)")
ax.axvline(0.5, color="#b74842", linestyle="--", linewidth=1)
ax.set_xlabel("Energy (keV)")
ax.set_ylabel("Schematic flux (arb. units)")
ax.set_title("eFEDS Ponti+2023: two SWCX scenarios and band reconstruction")
ax.set_xlim(0.2, 2.0)
ax.legend(fontsize=9, loc="upper right")
plt.show()
```
**观察**:
- 两个 scenario 的 $kT$ 很接近(0.157 vs 0.173 keV),谱形相似但 soft bin 区略有不同。
- 0.5–0.6 keV 只是 soft bin 的一小段,但它决定了我们丢弃多少 0.3–0.5 keV 的 flux。
- high_swcx scenario 的 CGM 更暗(SWCX 抢走了一部分 flux),所以两个点在 Figure 3 上会分开。
---
## 4. 第二步:band reconstruction 计算与验证
### 4.1 重建公式
对每个 scenario $s$:
$$
S_{0.5\text{–}2.0}^{(s)} = S_{0.3\text{–}0.6}^{(s)} \times f^{(s)} + S_{0.6\text{–}2.0}^{(s)}
$$
其中 $f^{(s)}$ = `model_ratio_0p5_0p6_to_0p3_0p6`。
### 4.2 单位换算
论文 Table 4 的 flux 单位是 $10^{-13}$ erg cm$^{-2}$ s$^{-1}$ deg$^{-2}$,Figure 3 用 $10^{-15}$ erg cm$^{-2}$ s$^{-1}$ arcmin$^{-2}$:
1. **deg$^{-2}$ → arcmin$^{-2}$**:除以 3600(1 deg$^2$ = 3600 arcmin$^2$)
2. **$10^{-13}$ → $10^{-15}$**:乘以 100
合起来:$S_{\mathrm{fig}} = S_{\mathrm{tab}} \times \frac{100}{3600} = \frac{S_{\mathrm{tab}}}{36}$
### 4.3 代码实现
```{python}
#| label: step2-reconstruct
# Band reconstruction + unit conversion
efeds["reconstructed_0p5_2p0_1e13_deg-2"] = (
efeds["published_0p3_0p6_1e13_deg-2"] * efeds["model_ratio_0p5_0p6_to_0p3_0p6"]
+ efeds["published_0p6_2p0_1e13_deg-2"]
)
# Table 4 units (1e-13 / deg^2) -> Figure 3 units (1e-15 / arcmin^2): /36
efeds["reconstructed_fluxunit"] = efeds["reconstructed_0p5_2p0_1e13_deg-2"] / 36.0
print(f"{'scenario':<18s} {'S(0.3-0.6)':>10s} {'f':>8s} {'S(0.6-2.0)':>10s} "
f"{'S(0.5-2.0) tab':>14s} {'S(0.5-2.0) fig':>14s}")
for _, r in efeds.iterrows():
print(f"{r['scenario_id']:<18s} {r['published_0p3_0p6_1e13_deg-2']:>10.3f} "
f"{r['model_ratio_0p5_0p6_to_0p3_0p6']:>8.4f} "
f"{r['published_0p6_2p0_1e13_deg-2']:>10.3f} "
f"{r['reconstructed_0p5_2p0_1e13_deg-2']:>14.4f} "
f"{r['reconstructed_fluxunit']:>14.6f}")
```
### 4.4 与冻结的 Figure 3 ledger 对比
```{python}
#| label: step2-verify
# Verify against the frozen Figure 3 ledger values stored in the CSV
for _, r in efeds.iterrows():
sid = r["scenario_id"]
manual = r["reconstructed_fluxunit"]
ledger = r["flux_0p5_2p0_plot_central_fluxunit"]
print(f"{sid}:")
print(f" Manual reconstruction: {manual:.10f}")
print(f" Ledger (CSV central): {ledger:.10f}")
np.testing.assert_allclose(manual, ledger, rtol=0, atol=1e-8)
print(f" OK Match to < 1e-8")
print("\nAll scenarios match the frozen Figure 3 ledger.")
```
### 4.5 可视化:两个固定点
```{python}
#| label: step2-plot
#| fig-cap: "Ponti+2023 eFEDS 的两个 SWCX scenario 经 band reconstruction 后落在 Figure 3 上的两个固定点。注意:这不是 central estimate + error bar,而是两个独立的 SWCX 前景假设。"
#| fig-width: 8
#| fig-height: 4.5
fig, ax = plt.subplots(figsize=(8, 4.5))
scenarios = efeds["scenario_id"].tolist()
vals = efeds["reconstructed_fluxunit"].tolist()
colors = ["#2676b8", "#d47a2c"]
for i, (s, v, c) in enumerate(zip(scenarios, vals, colors)):
label = s.replace("_", " ")
ax.scatter([i], [v], s=180, color=c, edgecolor="black", linewidth=0.8,
zorder=5, label=f"{label}: {v:.4f}")
ax.set_xticks(range(len(scenarios)))
ax.set_xticklabels([s.replace("_", "\n") for s in scenarios])
ax.set_ylabel("0.5-2.0 keV brightness (10^-15 erg s^-1 cm^-2 arcmin^-2)")
ax.set_title("eFEDS Ponti+2023: two fixed SWCX scenarios on Figure 3")
ax.set_ylim(0, max(vals) * 1.4)
ax.legend(fontsize=10, loc="upper right")
ax.grid(axis="x", visible=False)
plt.tight_layout()
plt.show()
```
**关键观察**:
- 两个点分开约 0.115 flux unit(0.407 vs 0.291)——这反映的是 SWCX 前景假设的不确定性,不是统计误差。
- negligible_swcx 更亮(CGM 拿到全部 soft flux),high_swcx 更暗(SWCX 抢走了一部分)。
- 两个点都不是 error bar 的端点——它们是两个独立的物理假设各自给出的 best-fit CGM 亮度。
---
## 5. 第三步:单位换算链的详细验证
让我们把单位换算拆开看,确保每一步都清楚。
```{python}
#| label: step3-units
# Demonstrate the unit conversion chain step by step
row = efeds.iloc[0] # negligible_swcx
print(f"Scenario: {row['scenario_id']}")
print()
print("Step 1: Reconstruct 0.5-2.0 keV in Table 4 units (1e-13 / deg^2)")
s_soft = row["published_0p3_0p6_1e13_deg-2"]
f = row["model_ratio_0p5_0p6_to_0p3_0p6"]
s_hard = row["published_0p6_2p0_1e13_deg-2"]
s_0520_tab = s_soft * f + s_hard
print(f" S(0.3-0.6) = {s_soft:.4f} x 1e-13 erg/s/cm^2/deg^2")
print(f" f(0.5-0.6 / 0.3-0.6) = {f:.6f}")
print(f" S(0.6-2.0) = {s_hard:.4f} x 1e-13 erg/s/cm^2/deg^2")
print(f" -> S(0.5-2.0) = {s_soft:.4f} * {f:.6f} + {s_hard:.4f} = {s_0520_tab:.6f}")
print()
print("Step 2: Convert deg^-2 -> arcmin^-2 (divide by 3600)")
s_arcmin = s_0520_tab / 3600.0
print(f" {s_0520_tab:.6f} / 3600 = {s_arcmin:.10f} x 1e-13 erg/s/cm^2/arcmin^2")
print()
print("Step 3: Convert 1e-13 -> 1e-15 (multiply by 100)")
s_fig = s_arcmin * 100.0
print(f" {s_arcmin:.10f} * 100 = {s_fig:.10f} x 1e-15 erg/s/cm^2/arcmin^2")
print()
print(f"Step 4: Compare with CSV central: {row['flux_0p5_2p0_plot_central_fluxunit']:.10f}")
np.testing.assert_allclose(s_fig, row["flux_0p5_2p0_plot_central_fluxunit"],
rtol=0, atol=1e-8)
print(" OK Full unit chain matches CSV.")
```
---
## 6. 关键假设清单(必须记住!)
| 步骤 | 假设 | 来源 |
|------|------|------|
| 光谱模型 | **Lodders APEC** 等离子体模型 | 原文使用(与 Henley&Shelton 的 Raymond-Smith 不同) |
| $N_\mathrm{H}$ 分布 | **disnht lognormal**,$\sigma = 0.117$ | PDF/arXiv 值;publisher HTML Eq.1 显示 0.177,**本项目采用 PDF 值 0.117** |
| $N_\mathrm{H}$ 均值 | $\log_{10} N_\mathrm{H} = 20.51$ cm$^{-2}$ | 原文拟合,两 scenario 共用 |
| SWCX 前景 | 两个端点假设:negligible / high | 原文对前景不确定性的 bracketing |
| Band reconstruction | $S_{0.5\text{–}2.0} = S_{0.3\text{–}0.6} \times f + S_{0.6\text{–}2.0}$,$f$ 由 APEC 数值积分 | 本项目实现 |
| $f$ 的计算 | 对 lognormal $N_\mathrm{H}$ 做 quadrature 加权积分 | 反映 $N_\mathrm{H}$ 分布的不确定性 |
| 单位换算 | deg$^{-2}$ → arcmin$^{-2}$ (/3600),$10^{-13}$ → $10^{-15}$ (×100),合起来 /36 | Figure 3 统一单位 |
| 结果性质 | **两个固定点**,不是 central + error bar | 每个 scenario 独立 best-fit |
| M31 关系 | eFEDS 天区离 M31 > $105^\circ$,**不指向 M31**;是 population context | 原文样本域 $l=220\text{–}235^\circ$, $b=20\text{–}40^\circ$ |
| 重建上下界 | `reconstruction_low = reconstruction_high = central` | 两个 scenario 本身就是 bracketing,不再加额外 error bar |
---
## 7. 动手练习
### 练习 1:验证 high_swcx 的重建
对 `high_swcx` scenario,手动用 `published_0p3_0p6_1e13_deg-2`、`model_ratio_0p5_0p6_to_0p3_0p6`、`published_0p6_2p0_1e13_deg-2` 重建 0.5–2.0 keV flux,并验证单位换算后等于 CSV 中的 `flux_0p5_2p0_plot_central_fluxunit`。
```{python}
#| label: ex1
#| echo: false
row = efeds.iloc[1] # high_swcx
s_soft = row["published_0p3_0p6_1e13_deg-2"]
f = row["model_ratio_0p5_0p6_to_0p3_0p6"]
s_hard = row["published_0p6_2p0_1e13_deg-2"]
s_0520_tab = s_soft * f + s_hard
s_fig = s_0520_tab / 36.0 # /36 = /3600 * 100
print(f"high_swcx:")
print(f" S(0.3-0.6) * f + S(0.6-2.0) = {s_soft:.4f} * {f:.6f} + {s_hard:.4f} = {s_0520_tab:.6f}")
print(f" /36 -> {s_fig:.10f}")
print(f" CSV central: {row['flux_0p5_2p0_plot_central_fluxunit']:.10f}")
assert abs(s_fig - row["flux_0p5_2p0_plot_central_fluxunit"]) < 1e-8
print(" OK Match")
```
### 练习 2:两个 scenario 的差异从哪来?
计算两个 scenario 的 $f$ 值之差,以及它们在 0.5–2.0 keV flux 上的差异。思考:差异主要来自 $f$ 的不同,还是来自 published soft/hard bin flux 的不同?
```{python}
#| label: ex2
#| echo: false
n = efeds.iloc[0] # negligible
h = efeds.iloc[1] # high
print(f"f difference: {n['model_ratio_0p5_0p6_to_0p3_0p6']:.6f} - "
f"{h['model_ratio_0p5_0p6_to_0p3_0p6']:.6f} = "
f"{n['model_ratio_0p5_0p6_to_0p3_0p6'] - h['model_ratio_0p5_0p6_to_0p3_0p6']:.6f}")
print(f"Soft bin difference: {n['published_0p3_0p6_1e13_deg-2']:.3f} - "
f"{h['published_0p3_0p6_1e13_deg-2']:.3f} = "
f"{n['published_0p3_0p6_1e13_deg-2'] - h['published_0p3_0p6_1e13_deg-2']:.3f}")
print(f"Hard bin difference: {n['published_0p6_2p0_1e13_deg-2']:.3f} - "
f"{h['published_0p6_2p0_1e13_deg-2']:.3f} = "
f"{n['published_0p6_2p0_1e13_deg-2'] - h['published_0p6_2p0_1e13_deg-2']:.3f}")
print()
print("The dominant difference is in the published soft/hard bin fluxes,")
print("which reflects how much flux the SWCX foreground subtracts from the CGM.")
print("The f ratio differs only slightly because kT differs only slightly.")
```
### 练习 3:如果用 publisher HTML 的 $\sigma = 0.177$ 会怎样?
本项目采用 PDF/arXiv 的 $\sigma = 0.117$。如果改用 publisher HTML Eq.1 显示的 $\sigma = 0.177$,$f$ 会变多少?(提示:更大的 $\sigma$ 意味着 $N_\mathrm{H}$ 分布更宽,低 $N_\mathrm{H}$ 视线的吸收更弱,soft bin 的低能端相对更亮,$f$ 会更小。)
```{python}
#| label: ex3
#| echo: false
print("This is a conceptual exercise — recomputing f requires running APEC")
print("with a different sigma_log10_nh. The CSV's f values use sigma=0.117 (PDF).")
print("With sigma=0.177 (publisher HTML), f would be smaller, and the")
print("reconstructed 0.5-2.0 keV flux would be slightly lower for both scenarios.")
print("This is why the SKILL.md explicitly records the sigma=0.117 choice.")
```
---
## 8. 总结:从 eFEDS 拟合到 Figure 3 两个固定点的完整链路
```{mermaid}
graph TD
A["eFEDS 天区<br/>l=220-235, b=20-40<br/>离 M31 > 105 deg"] --> B["Lodders APEC + disnht lognormal 拟合"]
B --> C["两个 SWCX scenario:<br/>negligible / high"]
C --> D["Table 4:<br/>S(0.3-0.6) + S(0.6-2.0)"]
D --> E["APEC(kT, Z, N_H 分布) 数值积分<br/>f = F(0.5-0.6) / F(0.3-0.6)"]
E --> F["S(0.5-2.0) = S(0.3-0.6)*f + S(0.6-2.0)"]
F --> G["deg^-2 -> arcmin^-2 (/3600)<br/>1e-13 -> 1e-15 (x100)"]
G --> H["Figure 3: 两个固定点<br/>negligible=0.407, high=0.291"]
```
**一句话总结**:Ponti+2023 在远离 M31 的 eFEDS 天区用 Lodders APEC + lognormal $N_\mathrm{H}$ 拟合银河系 CGM,并对 SWCX 前景做了 negligible / high 两个端点假设。论文 Table 4 给的是 0.3–0.6 keV 和 0.6–2.0 keV 两个分开的 bin,而 Figure 3 需要 0.5–2.0 keV——所以要用每个 scenario 的 APEC 模型谱算出 0.5–0.6 / 0.3–0.6 的分数,截取 soft bin 的 0.5–0.6 keV 部分,再拼上整个 hard bin,最后做单位换算。结果是 Figure 3 上的两个固定点(0.407 和 0.291),代表 SWCX 前景假设的两个端点,**不是** central estimate + error bar,也**不是** M31 方向的直接测量。
---
## 参考资料
1. Ponti, G., et al. (2023). "The SRG/eROSITA all-sky survey: The eROSITA Final Equatorial-Depth Survey (eFEDS). The hot halo of the Milky Way." *A&A*, 678, A92. [doi:10.1051/0004-6361/202346832](https://doi.org/10.1051/0004-6361/202346832)
2. Lodders, K. (2003). "Solar System Abundances and Condensation Temperatures of the Elements." *ApJ*, 591, 1220 — APEC abundance table used in Ponti+2023.
3. Smith, R. K., Brickhouse, N. S., Liedahl, D. A., Raymond, J. C. (2001). "The APEC Atomic Database." *ApJL*, 556, L91 — APEC plasma model.
4. disnht lognormal $N_\mathrm{H}$ distribution convention — see Ponti+2023 PDF Eq.1 and publisher HTML Eq.1; **本项目采用 PDF 值 $\sigma = 0.117$**.
---
> **教程结束** 🎓
> 上一步:阅读 Henley & Shelton 2013 population tutorial,理解高银纬 86 条视线如何变成 Figure 3 的一个 median 点。