cdshealpix-rust
CDS implementation of the HEALPix tesselation in Rust and modules to generate libraries in WebAssemnly, Python, ...
About
For informations on HEALPix in general, see:
- The official web site
- The Wikipedia page
- The two main related papers: Gorsky (2005) and Calabretta (2007)
See also the official page containing GPL v2 codes in Fortran, C++, Java, IDL, Python, ...
(Help me to add links to other HEALPix resources and codes).
This library is mainly a port of a part of the CDS Java library available here.
Features
- Supports the HEALix Nested scheme
- Supports approximated
cone
andpolygon
queries - Supports
BMOC
(MOC with a flag telling if a cell is fully or partially covered by a surface) as a result ofcone
andpolygon
queries
Missing Features
- Not supported
- RING scheme
- Spherical Harmonics computations
- (Help me fill this)
- Not yet implemented
- Exact cone and polygon solution
- Logical operations on MOC/BMOC
- MOC creation from arbritrary input
Examples
Compute the cell number of a given position on the unit-sphere at a given HEALPix depth.
use ;
use ;
let depth = 12_u8;
let lon = 12.5_f64.to_radians;
let lat = 89.99999_f64.to_radians;
let nested_d12 = get_or_create;
let nside = nside as u_64;
let expected_cell_number = nside * nside - 1
assert_eq!;
Get the spherical coorinates of the 4 vertices of a given cell at a given depth:
use ;
let depth = 12_u8;
let celll_number= 10_u64;
let nested_d12 = get_or_create;
let = nested_d12.vertices;
Get a hierarchical view (a MOC) on the cells overlapped by a given cone:
use ;
let depth = 6_u8;
let nested_d6 = get_or_create;
let lon = 13.158329_f64.to_radians;
let lat = -72.80028_f64.to_radians;
let radius = 5.64323_f64.to_radians;
let moc = nested3.cone_overlap_approx;
Standalone
The code source of the very beginning of a standalone exec can be found in src/bin.rs
.
WebAssembly
To build and use the WebAssembly (and Javascript) files, the libwasmbingen
directory.
We rely on wasm-bingen.
Python
See the libpython
directory containing so far a very basic python script showing how to use the library from python.
We are currently working on making a clean Python wrapper and generating Python Wheels for a simple install through pip
.
License
Like most projects in Rust, this project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Disclaimer
This is my very first project in Rust so please be indulgent and find better examples if you want to learn Rust.