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 科学

Download history 189/week @ 2024-04-24 153/week @ 2024-05-01 15/week @ 2024-05-08 37/week @ 2024-05-15 32/week @ 2024-05-22 207/week @ 2024-05-29 270/week @ 2024-06-05 148/week @ 2024-06-12 29/week @ 2024-06-19 181/week @ 2024-06-26 17/week @ 2024-07-03 4/week @ 2024-07-10 2/week @ 2024-07-17 21/week @ 2024-07-24 114/week @ 2024-07-31 7/week @ 2024-08-07

每月 144 次下载

GPL-3.0-or-later

2.5MB
12K SLoC

light-curve-feature

light-curve-featurelight-curve 家族的一部分,实现了在天文学中使用的许多光曲线特征的提取。

如果您在寻找此包的 Python 绑定,请参阅 https://github.com/light-curve/light-curve-python

docs.rs badge testing pre-commit.ci status

所有功能都在 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-systemceres-source - 启用对非线性拟合的 Ceres Solver 支持。前者使用Ceres的系统级安装,后者从源代码构建Ceres并静态链接。后者覆盖前者。有关详细信息,请参阅 ceres-solver-rs crate
  • fftw-systemfftw-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 fmtcargo clippy。请尽可能精确地使用 clippy 的 #[allow],并在需要时添加代码注释。

我们使用 pre-commit 在提交前在本地运行一些代码检查器。请考虑安装它并在仓库中使用 pre-commit init 初始化。然而,pre-commit.ci 和 GitHub Actions 将验证 PR 的 cargo fmtcargo clippy

通常,我们的目标是测试所有用户级代码,为您的非简单 PR 添加单元测试。目前,此仓库中没有 unsafe 代码,并且我们旨在未来避免它。

实现新的特征评估器

您的新的特征评估器代码至少应放在三个文件中

  1. src/features 目录中创建新文件
  2. src/features/mod.rs 中公开导入新的结构体
  3. 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