My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Links

Note: this project has moved to new site on Github

HEALPix is an algorithm to split celestial sphere to pixel with equal size.

This project optimizes original Healpix to use compressed RangeSet. It breaks limitations of original version on high resolutions and improves performance and memory consumption by several magnitudes. It allows processing sets at highest resulution (0.2 arcsec, NSIDE=1048576) with 1E11 pixels in real time! See HighResolution example

This project is based on Java version of PixTools by Nikolay Kuropatkin, which is Java port of original K.M. Gorski Fortran code.

Core change is replacement of ArrayList of Long objects with optimized LongRangeSet. Also some code cleanup was made and monolithic singleton PixTools class refactored to more classes. Result was carefully profiled to remove any performance bottleneck.

LongRangeSet stores pixels compressed in ranges. It uses primitive long array to reduce memory consumption. It have general contains() operations. It also provides fast union(), intersect() and disjunct() operation. It process huge data sets fast and with very little memory. See Collections example.

This code is written in Java, but can be easily ported to C++ or Fortran.

Performance benchmark (query_disc with ring scheme). More at Performance example

 0.5 degrees at NSIDE=   4096 have         4001 pixels and took   0 ms
10   degrees at NSIDE=   4096 have      1532628 pixels and took  16 ms
 0.5 degrees at NSIDE= 262144 have     15710527 pixels and took  16 ms
10   degrees at NSIDE= 262144 have   6264233956 pixels and took 265 ms
 0.5 degrees at NSIDE=1048576 have    251239338 pixels and took  63 ms
10   degrees at NSIDE=1048576 have 100225171468 pixels and took 969 ms

catch: Range optimization works best on RING scheme. But NESTED scheme is still way faster then original Healpix implementation.

Powered by Google Project Hosting