From 9c7782686fd607fd4e38038ed44f0307da0cd8c7 Mon Sep 17 00:00:00 2001 From: Aaron LI Date: Tue, 16 Jun 2015 16:46:23 +0800 Subject: Updated astro tools. * fit_betasbp_cut.py - fixed 'dof' calculation with 'n-p-1' - fixed 'par_eps' calculation/configuration - added 'fit_model_bounds' using 'scipy.optimize.minimize' to perform function minimization with bounds - split the data cut section to function 'cut_data' - added argument 'options' to 'fit_model_bounds' * marx_pntsrc.py Run MARX simulation on a given list of point sources, merge the output simulation results, and finally convert into FITS image. * blanksky_add_time.py Add a time column for the chandra blanksky event file. The time data are generated with a uniform distribution between TSTART and TSTOP. --- astro/chandra/blanksky_add_time.py | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 astro/chandra/blanksky_add_time.py (limited to 'astro/chandra') diff --git a/astro/chandra/blanksky_add_time.py b/astro/chandra/blanksky_add_time.py new file mode 100755 index 0000000..a4d0cb6 --- /dev/null +++ b/astro/chandra/blanksky_add_time.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Aaron LI +# 2015/06/16 + +""" +Add a time column for the chandra blanksky event file. +The time data are generated with a uniform distribution +between TSTART and TSTOP. +""" + +__version__ = "0.1.0" +__date__ = "2015/06/16" + +import sys +import argparse + +import numpy as np +try: + from astropy.io import fits +except ImportError: + try: + import pyfits as fits + except ImportError: + raise ImportError("cannot import 'astropy.io.fits' or 'pyfits'") + + +def add_time_column(fitsfile, blockname="EVENTS"): + """ + Add a time column to the specified block of the input fits file. + The time data are generated with a uniform distribution + between TSTART and TSTOP. + + Return: + A fits object with the new time column. + """ + if isinstance(fitsfile, str): + fitsfile = fits.open(fitsfile) + table = fitsfile[blockname] + tstart = table.header["TSTART"] + tstop = table.header["TSTOP"] + counts = len(table.data) + time_data = np.random.uniform(tstart, tstop, counts) + time_col = fits.Column(name="time", format="1D", unit="s", array=time_data) + newtable = fits.BinTableHDU.from_columns( + fits.ColDefs([time_col]) + table.columns) + fitsfile[blockname].data = newtable.data + return fitsfile + + +def main(): + parser = argparse.ArgumentParser( + description="Add a time column for Chandra blanksky event file.") + parser.add_argument("-V", "--version", action="version", + version="%(prog)s " + "%s (%s)" % (__version__, __date__)) + parser.add_argument("infile", help="input chandra blanksky file") + parser.add_argument("outfile", nargs="?", default=None, + help="modified blanksky file. IN-PLACE modification if omitted.") + parser.add_argument("-C", "--clobber", dest="clobber", + action="store_true", help="overwrite output file if exists") + args = parser.parse_args() + + newfits = add_time_column(args.infile) + if args.outfile: + newfits.writeto(args.outfile, clobber=args.clobber) + else: + newfits.writeto(args.infile, clobber=True) + + +if __name__ == "__main__": + main() + -- cgit v1.2.2