17次发布

使用旧的Rust 2015

0.5.0 2019年10月31日
0.4.2 2018年12月2日
0.4.0 2018年11月18日
0.1.2 2018年7月2日

#1358 in 解析器实现

34 每月下载量
用于 2 个crate(通过 aflak_primitives

GPL-3.0 许可证

64KB
1.5K SLoC

FITRS

Build Status Documentation on docs.rs

免责声明:此库为实验性和不稳定的。API更改很可能会发生。

用于天文目的的读写FITS文件。不支持FITS标准的所有功能,但基本功能都有。

目标是创建一个用于管理FITS文件的库,在纯Rust中实现,尽可能减少依赖,并考虑多线程。

文档

您可以参考在线文档

请参阅存储库中的测试和基准,以获取更多使用示例。


lib.rs:

使用纯Rust编写的解析FITS文件的库。

仅使用一个依赖项 byteorder 来处理字节序。

使用智能缓存来解析大FITS文件。为多线程环境开发。

如何使用

读取FITS

extern crate fitrs;
use fitrs::{Fits, FitsData, FitsDataArray};

let fits = Fits::open("path/to/fits/file.fits").expect("Failed to open");
// Iterate over HDUs
for hdu in fits.iter() {
    println!("{:?}", hdu.value("EXTNAME"));
    println!("{:?}", hdu.read_data());
}

// Get HDU by ID
let hdu_2 = fits.get(2);
// Get HDU by EXTNAME
if let Some(hdu_flux) = fits.get_by_name("FLUX") {
    match hdu_flux.read_data() {
        FitsData::FloatingPoint32(FitsDataArray { shape, data }) => {
            println!("{:?}", shape);
            println!("{:?}", data);
        }
        _ => { /* ... */ }
    }
}

写入FITS

由fitrs编写的FITS文件由astropy.io.fits进行标准合规性验证。如果fitrs输出不合规的FITS文件,请提交一个错误。

extern crate fitrs;
use fitrs::{Fits, Hdu};

// Make example dummy data array
let shape = [20, 20];
let data = (0..shape[0])
    .map(|i| (0..shape[1]).map(move |j| i + j))
    .flatten()
    .collect();
let mut primary_hdu = Hdu::new(&[20, 20], data);
// Insert values in header
primary_hdu.insert("KEYSTR", "My string");
primary_hdu.insert("KEYSTR2", "Whatever value you want to save in this FITS files. Continued (long) strings are supported, if you happen to care.");
primary_hdu.insert("KEYFLOAT", 3.14);
primary_hdu.insert("KEYINT", 42);

// Save file
Fits::create("new_file.fits", primary_hdu).expect("Failed to create");

许多可能希望的功能仍然缺失。欢迎提交PR。

依赖项