diff options
-rwxr-xr-x | bin/repro_acis.py | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/bin/repro_acis.py b/bin/repro_acis.py new file mode 100755 index 0000000..052414c --- /dev/null +++ b/bin/repro_acis.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2017 Weitian LI <liweitianux@live.com> +# MIT license +# +# 2017-02-27 + +""" +Reprocess Chandra ACIS raw "secondary" (level=1) data using the +CIAO contrib tool ``chandra_repro``, and build the ``manifest.yaml``. +""" + +import os +import argparse +import subprocess +import logging +from glob import glob + +from _context import acispy +from acispy.manifest import get_manifest +from acispy.pfiles import setup_pfiles + + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +def repro_acis(indir=".", outdir="repro", clobber=False): + """ + Reprocess Chandra ACIS raw level=1 data using ``chandra_repro``. + """ + logger.info("Reprocess Chandra ACIS raw level=1 data ...") + clobber = "yes" if clobber else "no" + subprocess.check_call(["punlearn", "ardlib"]) + subprocess.check_call(["punlearn", "chandra_repro"]) + subprocess.check_call([ + "chandra_repro", "indir=%s" % indir, "outdir=%s" % outdir, + "verbose=2", "clobber=%s" % clobber + ]) + logger.info("Fix asol.lis by striping the absolute directory ...") + asol_lis = glob("%s/acisf*_asol1.lis" % outdir)[0] + asol = [os.path.basename(fp) for fp in open(asol_lis).readlines()] + os.rename(asol_lis, asol_lis+".orig") + open(asol_lis, "w").writelines(asol) + + +def build_manifest(reprodir="repro", manifestfile="manifest.yaml"): + """ + Build the ``manifest.yaml`` with reprocessed products. + """ + logger.info("Build manifest with reprocessed products ...") + if os.path.exists(manifestfile): + logger.info("Use existing manifest file: %s" % manifestfile) + else: + logger.info("Create a new manifest file: %s" % manifestfile) + open(manifestfile, "w").close() + + manifest = get_manifest(manifestfile) + key = "directory" + manifest.set(key, os.path.basename(os.getcwd())) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "evt2" + manifest.setpath(key, glob("%s/acisf*_repro_evt2.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "bpix" + manifest.setpath(key, glob("%s/acisf*_repro_bpix1.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "asol" + manifest.setpath(key, glob("%s/pcadf*_asol1.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "asol_lis" + manifest.setpath(key, glob("%s/acisf*_asol1.lis" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "fov" + manifest.setpath(key, glob("%s/acisf*_repro_fov1.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "pbk" + manifest.setpath(key, glob("%s/acisf*_pbk0.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + key = "msk" + manifest.setpath(key, glob("%s/acisf*_msk1.fits" % reprodir)) + logger.info("Added '%s' to manifest: %s" % (key, manifest.get(key))) + + +def main(): + parser = argparse.ArgumentParser( + description="Extract surface brightness profile (SBP)") + parser.add_argument("-C", "--clobber", dest="clobber", action="store_true", + help="overwrite existing file") + args = parser.parse_args() + + setup_pfiles(["chandra_repro", "ardlib"]) + + repro_acis(clobber=args.clobber) + build_manifest() + + +if __name__ == "__main__": + main() |