Source code for hendrics.rebin
# Licensed under a 3-clause BSD style license - see LICENSE.rst
"""Functions to rebin light curves and frequency spectra."""
from astropy import log
from .base import get_file_extension
from .io import HEN_FILE_EXTENSION, get_file_type, save_lcurve, save_pds
[docs]
def rebin_file(filename, rebin):
"""Rebin the contents of a file, be it a light curve or a spectrum."""
ftype, contents = get_file_type(filename)
if ftype not in ["lc", "pds", "cpds"]:
raise ValueError("This format does not support rebin (yet):", ftype)
if rebin == int(rebin):
contents = contents.rebin(f=rebin)
else:
contents = contents.rebin_log(f=rebin)
options = {}
if ftype == "lc":
func = save_lcurve
elif ftype in ["pds", "cpds"]:
func = save_pds
options = {"save_all": True}
outfile = filename.replace(
get_file_extension(filename), f"_rebin{rebin:g}" + HEN_FILE_EXTENSION
)
log.info(f"Saving {ftype} to {outfile}")
func(contents, outfile, **options)
[docs]
def main(args=None):
"""Main function called by the `HENrebin` command line script."""
import argparse
from .base import _add_default_args, check_negative_numbers_in_args
description = "Rebin light curves and frequency spectra. "
parser = argparse.ArgumentParser(description=description)
parser.add_argument("files", help="List of light curve files", nargs="+")
parser.add_argument(
"-r",
"--rebin",
type=float,
default=1,
help=(
"Rebinning to apply. Only if the quantity to"
" rebin is a (C)PDS, it is possible to specify a"
" non-integer rebin factor, in which case it is"
" interpreted as a geometrical binning factor"
),
)
_add_default_args(parser, ["loglevel", "debug"])
args = check_negative_numbers_in_args(args)
args = parser.parse_args(args)
files = args.files
if args.debug:
args.loglevel = "DEBUG"
log.setLevel(args.loglevel)
with log.log_to_file("HENrebin.log"):
rebin = args.rebin
for f in files:
rebin_file(f, rebin)