89 个版本
0.7.1 | 2024 年 4 月 25 日 |
---|---|
0.7.0 | 2024 年 2 月 26 日 |
0.6.0 | 2023 年 9 月 19 日 |
0.5.5 | 2023 年 3 月 30 日 |
0.1.8 | 2019 年 10 月 29 日 |
#44 in 科学
每月 144 次下载
2.5MB
12K SLoC
light-curve-feature
light-curve-feature
是 light-curve
家族的一部分,实现了在天文学中使用的许多光曲线特征的提取。
如果您在寻找此包的 Python 绑定,请参阅 https://github.com/light-curve/light-curve-python
所有功能都在 Feature 枚举中提供,一次提取多个功能的推荐方法是使用由 Vec<Feature>
构建而成的 FeatureExtractor 结构体。数据由由时间、光度(或通量)和权重数组组成的 TimeSeries 结构体表示,所有数组的长度都相同。请注意,多个特征将权重数组解释为逆平方观测误差。
use light_curve_feature::prelude::*;
// Let's find amplitude and reduced Chi-squared of the light curve
let fe = FeatureExtractor::from_features(vec![
Amplitude::new().into(),
ReducedChi2::new().into()
]);
// Define light curve
let time = [0.0, 1.0, 2.0, 3.0, 4.0];
let magn = [-1.0, 2.0, 1.0, 3.0, 4.5];
let weights = [5.0, 10.0, 2.0, 10.0, 5.0]; // inverse squared magnitude errors
let mut ts = TimeSeries::new(&time, &magn, &weights);
// Get results and print
let result = fe.eval(&mut ts)?;
let names = fe.get_names();
println!("{:?}", names.iter().zip(result.iter()).collect::<Vec<_>>());
# Ok::<(), EvaluatorError>(())
有几个元特征,在特征提取之前将光曲线进行转换。例如,Bins 特征将数据累积在时间窗口内,并从这个新的光曲线中提取特征。
use light_curve_feature::prelude::*;
use ndarray::Array1;
// Define features, "raw" MaximumSlope and binned with zero offset and 1-day window
let max_slope: Feature<_> = MaximumSlope::default().into();
let bins: Feature<_> = {
let mut bins = Bins::new(1.0, 0.0);
bins.add_feature(max_slope.clone());
bins.into()
};
let fe = FeatureExtractor::from_features(vec![max_slope, bins]);
// Define light curve
let time = [0.1, 0.2, 1.1, 2.1, 2.1];
let magn = [10.0, 10.1, 10.5, 11.0, 10.9];
// We don't need weight for MaximumSlope, this would assign unity weight
let mut ts = TimeSeries::new_without_weight(&time, &magn);
// Get results and print
let result = fe.eval(&mut ts)?;
println!("{:?}", result);
# Ok::<(), EvaluatorError>(())
Cargo 功能
该crate配置了以下Cargo功能
ceres-system
和ceres-source
- 启用对非线性拟合的 Ceres Solver 支持。前者使用Ceres的系统级安装,后者从源代码构建Ceres并静态链接。后者覆盖前者。有关详细信息,请参阅ceres-solver-rs
cratefftw-system
、fftw-source
(默认启用)和fftw-mkl
- 启用对 Fourier 变换的 FFTW 支持,这是Periodogram
所需要的。第一个使用 FFTW 的系统级安装,第二个从源代码构建 FFTW 并静态链接,最后一个下载并静态链接 Intel MKL 而不是 FFTW。gsl
- 启用对非线性拟合的 GNU 科学计算库 支持。default
- 仅启用fftw-source
功能,没有副作用。
开发
设置
安装 Rust 工具链,推荐使用 rustup。
安装所需的系统库。对于主要项目,您需要 Ceres Solver、FFTW 和 GSL,以及 C++ 编译器和 CMake。示例脚本需要绘图,因此需要 fontconfig。
# On macOS:
brew install ceres-solver cmake fftw gsl fontconfig
# On Debian-like:
apt install build-essential cmake libceres-dev libfftw3-dev libgsl-dev libfontconfig-dev
使用子模块克隆仓库并运行编译器检查
git clone --recursive https://github.com/light-curve/light-curve-feature
cd light-curve-feature
使用本地库运行测试。请注意,Ceres 在某些系统上可能需要手动指定 CPATH
,例如在 ARM macOS 上为 CPATH=/opt/homebrew/include
cargo test --no-default-features --features ceres-system,fftw-system,gsl
您还可以运行基准测试,但请耐心等待
cargo bench --no-default-features --features ceres-system,fftw-system,gsl
请参阅 examples
、.github/workflows
和测试,以获取代码用法的示例。
格式化和代码检查
我们使用标准 Rust 工具格式化和检查代码:cargo fmt
和 cargo clippy
。请尽可能精确地使用 clippy 的 #[allow]
,并在需要时添加代码注释。
我们使用 pre-commit 在提交前在本地运行一些代码检查器。请考虑安装它并在仓库中使用 pre-commit init
初始化。然而,pre-commit.ci 和 GitHub Actions 将验证 PR 的 cargo fmt
和 cargo clippy
。
通常,我们的目标是测试所有用户级代码,为您的非简单 PR 添加单元测试。目前,此仓库中没有 unsafe
代码,并且我们旨在未来避免它。
实现新的特征评估器
您的新的特征评估器代码至少应放在三个文件中
- 在
src/features
目录中创建新文件 - 在
src/features/mod.rs
中公开导入新的结构体 - 在
src/feature.rs
中将其添加为Feature
枚举的新变体
引用
如果您发现此项目对您的科研工作有帮助,请引用 Malanchev 等人,2021
@ARTICLE{2021MNRAS.502.5147M,
author = {{Malanchev}, K.~L. and {Pruzhinskaya}, M.~V. and {Korolev}, V.~S. and {Aleo}, P.~D. and {Kornilov}, M.~V. and {Ishida}, E.~E.~O. and {Krushinsky}, V.~V. and {Mondon}, F. and {Sreejith}, S. and {Volnova}, A.~A. and {Belinski}, A.~A. and {Dodin}, A.~V. and {Tatarnikov}, A.~M. and {Zheltoukhov}, S.~G. and {(The SNAD Team)}},
title = "{Anomaly detection in the Zwicky Transient Facility DR3}",
journal = {\mnras},
keywords = {methods: data analysis, astronomical data bases: miscellaneous, stars: variables: general, Astrophysics - Instrumentation and Methods for Astrophysics, Astrophysics - Solar and Stellar Astrophysics},
year = 2021,
month = apr,
volume = {502},
number = {4},
pages = {5147-5175},
doi = {10.1093/mnras/stab316},
archivePrefix = {arXiv},
eprint = {2012.01419},
primaryClass = {astro-ph.IM},
adsurl = {https://ui.adsabs.harvard.edu/abs/2021MNRAS.502.5147M},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
依赖关系
~7–14MB
~275K SLoC