diff options
Diffstat (limited to 'bin/fg21sim-download-snr-data')
-rwxr-xr-x | bin/fg21sim-download-snr-data | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/bin/fg21sim-download-snr-data b/bin/fg21sim-download-snr-data new file mode 100755 index 0000000..b88ab10 --- /dev/null +++ b/bin/fg21sim-download-snr-data @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2016 Weitian LI <liweitianux@live.com> +# MIT license + +""" +Retrieve the Galactic SNRs catalog data by parsing the web by /D. A. Green/: + + http://www.mrao.cam.ac.uk/surveys/snrs/ + http://www.mrao.cam.ac.uk/surveys/snrs/snrs.data.html + +and save the data in CSV format. +""" + + +import os +import sys +import argparse +import logging +import csv + +from fg21sim.configs import configs +from fg21sim.utils import setup_logging +from fg21sim.data import retrieve_snr_data_green, SNRDataGreen + + +# Web page to the Galactic SNRs catalog summary +SNR_DATA_URL = "http://www.mrao.cam.ac.uk/surveys/snrs/snrs.data.html" + + +def main(): + outfile_default = "GalacticSNRs_Green2014.csv" + + parser = argparse.ArgumentParser( + description="Retrieve Galactic SNRs catalog data") + parser.add_argument("outfile", nargs="?", default=outfile_default, + help="output CSV file to save the catalog data " + + "(default: %s)" % outfile_default) + parser.add_argument("-U", "--url", default=SNR_DATA_URL, + help="URL to Green's SNRs catalog summary page " + + "or a local HTML file (default: %s)" % SNR_DATA_URL) + 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]) + + 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))) + + if os.path.exists(args.outfile) and (not args.clobber): + raise IOError("output file already exists: %s" % args.outfile) + + snrdata_str = retrieve_snr_data_green(args.url) + snrdata = SNRDataGreen(snrdata_str[0]) + header = list(snrdata.data_flat.keys()) + with open(args.outfile, "w") as csvfile: + csvwriter = csv.writer(csvfile) + csvwriter.writerow(header) + for i, dstr in enumerate(snrdata_str): + logger.info("Parse data string #{0:03d}: '{1}'".format(i+1, dstr)) + snrdata = SNRDataGreen(dstr) + values = list(snrdata.data_flat.values()) + csvwriter.writerow(values) + logger.info("Galactic SNRs catalog data write to: %s" % args.outfile) + + +if __name__ == "__main__": + main() |