数据分析层(新增 services/{spectrum,timeseries,analysis}):
- 光谱参数提取 parameters.rs:LAMOST/SDSS/APOGEE/DESI FITS header 跨源归一化读取
Teff/logg/[Fe/H]/RV 及 ASPCAP 20+ 元素丰度,rayon 并发批量提取
- 谱线测量 lines.rs:内置真空/空气波长谱线表,窗口内极值搜索 + 梯形法积分 EW + FWHM,支持自定义谱线
- 交叉相关测速 cross_correlate.rs:对数波长重采样对齐,内置 Pickles 模板按光谱型插值,
CCF 峰值位置提取 RV 及不确定度
- 周期搜索 periodicity.rs:Lomb-Scargle 周期图(含 FAP 误报概率)+ BLS 凌星检测 + 相位折叠
- 变星分类 classification.rs:振幅/偏度/峰度/过零率/eta 等统计特征 + 规则分类(RR Lyrae/Cepheid/食双星/AGN 等)
- SED 拟合 sed.rs:多波段测光黑体模型拟合,输出 T_eff/半径/消光 A_V/光度及不确定度
- 运动学 kinematics.rs:视差+自行+RV → 银河系 UVW 空间速度,含移动星群成员概率(Banyan Σ 简化版)
- 化学丰度 chemistry.rs:[α/Fe] vs [Fe/H] 计算,厚盘/薄盘/晕星族判别
- 观测规划 observability.rs:目标升落时间/airmass/月相影响/曝光时间估算
- 赫罗图 hr_diagram.rs:Gaia TAP CMD 查询,新增 GET /api/analysis/hr-diagram 端点
数据获取层:
- JWST:clients/mast/jwst.rs 封装 MAST Portal 锥形检索 + JwstSpectrumFetcher(NIRSpec/MIRI 光谱)
- X 射线:clients/heasarc 封装 HEASARC TAP(ADQL)+ XMM-Newton/Chandra 光谱 fetcher
- 图像 cutout:SDSS SkyServer/STScI DSS/Pan-STARRS 三源 cutout + 发现图(Finding Chart)生成
- Source 枚举新增 Jwst/Xmm/Chandra 并注册 ObservationRegistry,前端 SOURCE_THEME 与筛选器同步三源
Agent 工具集(24→35):
- 新增 9 个分析工具:get_spectrum_parameters / measure_spectral_lines / measure_radial_velocity /
find_period / classify_variable_star / fit_sed / analyze_kinematics / analyze_abundance_pattern / plan_observation
- batch_process:批量样本"查询→下载→分析→报告"流水线,并发控制防数据源速率限制
- literature_monitor:按 ADS 查询式/时间窗/最低引用数检查最新文献
定时文献同步:
- sync_queries 表新增 is_scheduled 列(migration 20260713)
- 新增 POST /sync/queries/:id/schedule 端点
- 服务启动时拉起每小时调度器,对 is_scheduled=1 的检索配置静默执行 ADS(entdate 增量)/arXiv 增量同步
- search_history 工具收敛至 services/search::search_agent_history,消除 FTS 查询逻辑重复
其他:
- plotting skill 由占位填充为完整科研绘图规范:光谱/光变/折叠曲线/CMD/SED/[α/Fe]/周期图/Mollweide/发现图 9 类 matplotlib 模板
- 删除死代码 streaming_executor.rs(929 行,仅剩 mod 声明引用,无调用方)
- 新增 docs/roadmap-research-features.md 科研功能路线图及实现状态
81 lines
2.6 KiB
TOML
81 lines
2.6 KiB
TOML
[package]
|
||
name = "astroresearch"
|
||
version = "0.1.0"
|
||
edition = "2021"
|
||
default-run = "astroresearch"
|
||
|
||
[lib]
|
||
path = "src/lib.rs"
|
||
|
||
[[bin]]
|
||
name = "astroresearch"
|
||
path = "src/main.rs"
|
||
|
||
[[bin]]
|
||
name = "health_check"
|
||
path = "src/bin/health_check.rs"
|
||
|
||
[[bin]]
|
||
name = "astroresearch_cli"
|
||
path = "src/bin/cli.rs"
|
||
[dependencies]
|
||
tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros", "signal", "time", "fs", "net", "sync", "process"] }
|
||
axum = { version = "0.7", features = ["macros", "multipart"] }
|
||
tower-http = { version = "0.5", features = ["cors", "fs", "trace", "set-header", "catch-panic"] }
|
||
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "sqlite", "chrono", "json"] }
|
||
serde = { version = "1.0", features = ["derive"] }
|
||
serde_json = "1.0"
|
||
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "multipart", "cookies", "rustls-tls"] }
|
||
dotenvy = "0.15"
|
||
quick-xml = { version = "0.31", features = ["serialize"] }
|
||
anyhow = "1.0"
|
||
thiserror = "1.0"
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
||
futures-util = { version = "0.3", features = ["io"] }
|
||
rand = "0.8"
|
||
regex = "1.10"
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
sha1 = "0.10"
|
||
sha2 = "0.10"
|
||
hmac = "0.12"
|
||
subtle = "2" # 恒定时间密码比较,防时序侧信道攻击
|
||
base64 = "0.22"
|
||
urlencoding = "2.1"
|
||
url = "2.5"
|
||
html2md = "0.2"
|
||
flate2 = "1.1.9"
|
||
zip = "8.6.0"
|
||
uuid = { version = "1.23.2", features = ["v4"] }
|
||
tracing-appender = "0.2.5"
|
||
obscura-browser = { path = "libs/obscura/crates/obscura-browser", optional = true }
|
||
obscura-net = { path = "libs/obscura/crates/obscura-net", optional = true }
|
||
libsqlite3-sys = { version = "0.27.0", features = ["bundled"] }
|
||
sqlite-vec = "0.1.9"
|
||
clap = { version = "4", features = ["derive"] }
|
||
async-trait = "0.1"
|
||
async-stream = "0.3"
|
||
serde_yaml = "0.9"
|
||
notify = { version = "6", default-features = false, features = ["macos_kqueue"] }
|
||
tempfile = "3"
|
||
glob = "0.3"
|
||
walkdir = "2"
|
||
lru = "0.12"
|
||
git2 = { version = "0.18", default-features = false, features = ["vendored-libgit2"] }
|
||
dashmap = "6"
|
||
rayon = "1.10"
|
||
fitsio = { version = "0.21", features = ["fitsio-src"] } # FITS 解析;fitsio-src 自带 CFITSIO 源码编译,无需系统装 cfitsio
|
||
fitsio-sys = { version = "0.5", features = ["fitsio-src"] } # 直接访问 CFITSIO C API(读 Gaia XP 变长数组列 PD(55),fitsio crate 不支持)
|
||
|
||
[features]
|
||
default = []
|
||
obscura-inprocess = ["dep:obscura-browser", "dep:obscura-net", "obscura-browser/stealth", "obscura-net/stealth"]
|
||
|
||
[profile.release-min]
|
||
inherits = "release"
|
||
opt-level = "s"
|
||
lto = true
|
||
codegen-units = 1
|
||
strip = true
|
||
|