|
Project Information
Members
Links
|
Note: this project has moved to new site on GithubHEALPix 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. |