数据集管理

HIcosmo 提供自动发现数据集的功能,用户可以轻松查看所有可用的观测数据。 无需硬编码 —— 当您添加新数据集到数据目录时,系统会自动识别。

查看可用数据集

快速查看

最简单的方式是调用 show_available_datasets()

from hicosmo.likelihoods import show_available_datasets

# 显示所有可用数据集
show_available_datasets()

输出示例:

======================================================================
                    HIcosmo Available Datasets
======================================================================

  BAO (Baryon Acoustic Oscillations)
  --------------------------------------------------
    • desi_2024        : DESI 2024 DR1 BAO measurements (z=0.3-2.3)
    • boss_dr12        : BOSS DR12 Luminous Red Galaxy BAO
    • sdss_dr12        : SDSS DR12 consensus BAO
    • sdss_dr16        : SDSS DR16 LRG and QSO BAO
    • sixdf            : 6dF Galaxy Survey BAO (z=0.1)

  SN (Type Ia Supernovae)
  --------------------------------------------------
    • pantheon+shoes   : Pantheon+ with SH0ES Cepheid calibration

  CMB (Cosmic Microwave Background)
  --------------------------------------------------
    • planck2018_distance : Planck 2018 distance priors (built-in)

  Lensing (Strong Gravitational Lensing)
  --------------------------------------------------
    • h0licow          : H0LiCOW strong lensing time delays (6 lenses)
    • tdcosmo          : TDCOSMO hierarchical strong lensing (7 lenses)
    • tdcosmo2025      : TDCOSMO 2025 updated analysis

======================================================================

程序化获取

如果需要在代码中使用数据集列表:

from hicosmo.likelihoods import list_all_datasets

# 获取所有数据集(字典形式)
datasets = list_all_datasets()

# 查看 BAO 数据集
print(datasets['bao'])
# ['desi_2024', 'boss_dr12', 'sdss_dr12', 'sdss_dr16', 'sixdf']

# 查看 SN 数据集
print(datasets['sn'])
# ['pantheon+shoes']

# 动态选择数据集
for bao_name in datasets['bao']:
    print(f"可用 BAO 数据集: {bao_name}")

按类别查看

只查看特定类别的数据集:

# 只显示 BAO 数据集
show_available_datasets('bao')

# 只显示强透镜数据集
show_available_datasets('lensing')

类方法查询

每个 Likelihood 类也提供 available_datasets() 方法:

from hicosmo.likelihoods.bao import DESI2024BAO
from hicosmo.likelihoods.sn import PantheonPlusLikelihood

# BAO 类的可用数据集
print(DESI2024BAO.available_datasets())
# ['desi_2024', 'boss_dr12', 'sdss_dr12', 'sdss_dr16', 'sixdf']

# SN 类的可用数据集
print(PantheonPlusLikelihood.available_datasets())
# ['pantheon+shoes']

数据集分类

HIcosmo 支持以下类别的观测数据:

数据集分类

类别

全称

包含数据集

bao

Baryon Acoustic Oscillations

DESI 2024, BOSS DR12, SDSS DR12/16, 6dF

sn

Type Ia Supernovae

Pantheon+, Pantheon+SH0ES

cmb

Cosmic Microwave Background

Planck 2018 距离先验

h0

Direct H0 Measurements

SH0ES

lensing

Strong Gravitational Lensing

H0LiCOW, TDCOSMO, TDCOSMO 2025

使用发现的数据集

将发现的数据集用于 MCMC 分析:

from hicosmo.likelihoods import (
    BAO_likelihood, SN_likelihood,
    list_all_datasets
)
from hicosmo.models import LCDM

# 1. 查看可用数据集
datasets = list_all_datasets()
print("BAO 数据集:", datasets['bao'])

# 2. 选择数据集创建 likelihood
bao = BAO_likelihood(LCDM, 'desi_2024')
sn = SN_likelihood(LCDM, 'pantheon+shoes')

# 3. 联合分析
joint = bao + sn

# 4. 运行 MCMC
from hicosmo.samplers import MCMC
params = {
    'H0': (70.0, 60.0, 80.0),
    'Omega_m': (0.3, 0.1, 0.5),
}
mcmc = MCMC(params, joint, chain_name='joint_analysis')
mcmc.run(num_samples=2000)

默认数据目录

数据文件存储位置:

  • 默认路径hicosmo/data/

  • 环境变量:可通过 HICOSMO_DATA 指定自定义路径

目录结构

hicosmo/data/
├── bao_data/
│   ├── desi_2024/
│   │   ├── desi_2024_gaussian_bao_ALL_GCcomb_mean.txt
│   │   └── desi_2024_gaussian_bao_ALL_GCcomb_cov.txt
│   ├── boss_dr12/
│   ├── sdss_dr12/
│   ├── sdss_dr16/
│   └── sixdf/
├── sne/
│   ├── Pantheon+SH0ES.dat
│   └── Pantheon+SH0ES_STAT+SYS.cov
├── h0licow/
└── tdcosmo/

添加新数据集

添加新数据集非常简单 —— 只需将数据文件放入正确的目录:

  1. BAO 数据:在 bao_data/ 下创建新目录

  2. SN 数据:放入 sne/ 目录

  3. 其他:放入对应类别目录

示例:添加新的 BAO 数据集

# 创建新数据集目录
mkdir hicosmo/data/bao_data/my_new_survey

# 复制数据文件
cp my_data.txt hicosmo/data/bao_data/my_new_survey/

然后刷新数据注册表:

from hicosmo.likelihoods import list_all_datasets

# 强制刷新,发现新数据集
datasets = list_all_datasets(refresh=True)
print(datasets['bao'])
# [..., 'my_new_survey']  # 新数据集已自动发现!

DataRegistry 高级用法

对于更复杂的需求,可以直接使用 DataRegistry 类:

from hicosmo.data_registry import DataRegistry

# 创建注册表实例
registry = DataRegistry()

# 获取详细信息
info = registry.get_info('bao', 'desi_2024')
print(f"名称: {info.name}")
print(f"描述: {info.description}")
print(f"文件数: {len(info.files)}")
print(f"路径: {info.path}")

# 导出为字典(可序列化为 JSON)
data = registry.to_dict()

完整示例

"""数据集发现与使用完整示例"""
from hicosmo.likelihoods import (
    show_available_datasets,
    list_all_datasets,
    BAO_likelihood,
    SN_likelihood,
)
from hicosmo.models import LCDM

# 1. 查看所有可用数据集
print("=" * 50)
print("Step 1: 查看可用数据集")
print("=" * 50)
show_available_datasets()

# 2. 程序化获取
print("\nStep 2: 获取数据集列表")
datasets = list_all_datasets()
for category, names in datasets.items():
    if names:
        print(f"  {category}: {names}")

# 3. 创建 likelihood
print("\nStep 3: 创建 Likelihood")
bao = BAO_likelihood(LCDM, datasets['bao'][0])  # 使用第一个 BAO 数据集
print(f"  已创建: {bao}")

# 4. 测试 likelihood
print("\nStep 4: 测试 Likelihood")
log_L = bao(H0=70.0, Omega_m=0.3)
print(f"  log(L) = {log_L:.2f}")