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)
64KB
1.5K SLoC
FITRS
免责声明:此库为实验性和不稳定的。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。