数据集管理
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 支持以下类别的观测数据:
类别 |
全称 |
包含数据集 |
|---|---|---|
|
Baryon Acoustic Oscillations |
DESI 2024, BOSS DR12, SDSS DR12/16, 6dF |
|
Type Ia Supernovae |
Pantheon+, Pantheon+SH0ES |
|
Cosmic Microwave Background |
Planck 2018 距离先验 |
|
Direct H0 Measurements |
SH0ES |
|
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/
添加新数据集
添加新数据集非常简单 —— 只需将数据文件放入正确的目录:
BAO 数据:在
bao_data/下创建新目录SN 数据:放入
sne/目录其他:放入对应类别目录
示例:添加新的 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}")