Hi, new Rustacean here. How can I read Flexible Image Transport System (FITS) files in rust? I want to read the header, know keywords and extract lists of numerical data. I can open the .fits file like a text file in rust. But I couldn't do the above things. The following code reads fits file like text and gives a long vector.
let mut fits_data:Vec<u32>=Vec::new();
let mut file = std::fs::File::open("filename.fits").unwrap();
file.read_to_end(&mut fits_data);
println!("{:?}", fits_data);
I tried fitsio and fits-rs crate but that did not go well. The documentation link of fits-rs is not working and I did not get the documentation of fitsio.
What is the rust's get help syntax? Is there an equivalent of python's help(module_name) How can I know about the functions, arguments, methods, of the imported crates and know how to use them from the terminal? How can we use any external crate or std library to read fits files and work on its data? simple examples of syntax are most welcome.
Looking at the documentation, it seems that fitsio is the most well documented choice.
If you wish to view the documentation locally, another option is to call the command
cargo doc --open
which will build the documentation and open it in your browser. The sidebar has links to all of the crates in your dependency tree. You can also view the documentation for the standard library locally using the command rustup doc --std
I mentioned the fitsio version in the cargo.toml and use fitsio; in main.rs. Cargo run gives the following error, even though I have already installed cfitsio using homebrew install cfitsio. -
Compiling fitsio-sys v0.4.0
error: failed to run custom build command for `fitsio-sys v0.4.0`
Caused by:
process didn't exit successfully: `/home/mangesh/rust_practice/indices/target/debug/build/fitsio-sys-8b5ff3af4e1c4d4b/build-script-build` (exit status: 1)
--- stdout
cargo:rerun-if-env-changed=CFITSIO_NO_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG
cargo:rerun-if-env-changed=PKG_CONFIG
cargo:rerun-if-env-changed=CFITSIO_STATIC
cargo:rerun-if-env-changed=CFITSIO_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC
cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_PATH
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu
cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR
cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
--- stderr
Cannot find cfitsio on the pkg-config search path. Consider installing the library for your
system (e.g. through homebrew, apt-get etc.). Alternatively if it is installed, then add
the directory that contains `cfitsio.pc` on your PKG_CONFIG_PATH, e.g.:
PKG_CONFIG_PATH=<blah> cargo build
Do you have any suggestion?
I was able to build the fits_rs crate and import its modules in the main.rs. There were no simple examples in the doc you provided, that I could understand, to extract information from the .fits file. Can you please tell me the syntax of how can I print keywords and corresponding values in the header, and a list of f64 under column 'wavelength'?
My suggestion is to follow this part of the error message:
Cannot find cfitsio on the pkg-config search path. Consider installing the library for your system (e.g. through homebrew, apt-get etc.). Alternatively if it is installed, then add the directory that contains cfitsio.pc on your PKG_CONFIG_PATH, e.g.:
PKG_CONFIG_PATH=<blah> cargo build
I have no idea what FITS even is, and all I have access to is the same documentation as what you see.