aboutsummaryrefslogtreecommitdiffstats
path: root/bin/healpix2hpx
blob: fda96273b9284d88707768d447163e3fbc4aea51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python3
#
# Copyright (c) 2016 Weitian LI <liweitianux@live.com>
# MIT license

"""
Reorganize the sky map in HEALPix table format into image in HPX projection.
"""


import os
import sys
import argparse
import logging

from astropy.io import fits

import fg21sim
from fg21sim.configs import configs
from fg21sim.utils import setup_logging
from fg21sim.utils.healpix import healpix2hpx


def main():
    parser = argparse.ArgumentParser(
        description="Reorganize the HEALPix data to image in HPX projection")
    parser.add_argument("infile", help="input HEALPix data file")
    parser.add_argument("outfile", help="output FITS image in HPX projection")
    parser.add_argument("-C", "--clobber", action="store_true",
                        help="overwrite the existing output file")
    parser.add_argument("-l", "--log", dest="loglevel", default=None,
                        choices=["DEBUG", "INFO", "WARNING",
                                 "ERROR", "CRITICAL"],
                        help="set the log level")
    parser.add_argument("-L", "--logfile", default=None,
                        help="filename where to save the log messages")
    parser.add_argument("-Q", "--quiet", action="store_true",
                        help="be quiet so do not log messages to screen")
    args = parser.parse_args()

    if args.quiet:
        log_stream = ""
    else:
        log_stream = None

    tool = os.path.basename(sys.argv[0])
    pkgname = fg21sim.__pkgname__

    setup_logging(dict_config=configs.logging,
                  level=args.loglevel,
                  stream=log_stream,
                  logfile=args.logfile)
    logger = logging.getLogger(tool)
    logger.info("COMMAND: {0}".format(" ".join(sys.argv)))

    history = [
        "TOOL: {0}".format(tool),
        "PARAM: {0}".format(" ".join(sys.argv[1:])),
    ]
    comments = [
        'Tool "{0}" is part of the "{1}" package'.format(tool, pkgname),
        'distributed under {0} license.'.format(fg21sim.__license__),
        'See also {0}'.format(fg21sim.__url__)
    ]

    if os.path.exists(args.outfile):
        if args.clobber:
            logger.warning("Remove existing output file: %s" % args.outfile)
            os.remove(args.outfile)
        else:
            raise OSError("Output file already exists: %s" % args.outfile)

    hpx_data, hpx_header = healpix2hpx(args.infile,
                                       append_history=history,
                                       append_comment=comments)
    hdu = fits.PrimaryHDU(data=hpx_data, header=hpx_header)
    hdu.writeto(args.outfile, checksum=True)
    logger.info("HPX FITS images write to: %s" % args.outfile)


if __name__ == "__main__":
    main()