summaryrefslogtreecommitdiffstats
path: root/prepare_sbpfit.py
diff options
context:
space:
mode:
Diffstat (limited to 'prepare_sbpfit.py')
-rwxr-xr-xprepare_sbpfit.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/prepare_sbpfit.py b/prepare_sbpfit.py
new file mode 100755
index 0000000..4ec7cf4
--- /dev/null
+++ b/prepare_sbpfit.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# Prepare the configuration file for the `sbp_fit.py`.
+# And extract name, obsid, r500 information from the '*_INFO.json' file
+# to fill the config.
+#
+# Aaron LI
+# 2016-04-21
+#
+# ChangeLog:
+#
+
+import sys
+import glob
+import os
+import re
+import json
+import argparse
+from datetime import datetime
+
+
+def update_sbpfit_conf(sbpfit_conf, info):
+ """
+ Update the sbpfit configuration according to the INFO.
+
+ Arguments:
+ * sbpfit_conf: list of lines of the sample sbpfit config
+ * info: INFO dictionary
+
+ Return:
+ updated `sbpfit_conf`
+ """
+ name = info["Source Name"]
+ obsid = int(info["Obs. ID"])
+
+ if "R500 (kpc)" in info.keys():
+ # lwt's
+ r500_kpc = float(info["R500 (kpc)"])
+ elif "R500" in info.keys():
+ # zzh's
+ r500_kpc = float(info["R500"])
+ else:
+ raise ValueError("Cannot get R500 from INFO.json")
+ # Convert kpc to Chandra ACIS pixel
+ rmax_sbp_pix = float(info["Rmax_SBP (pixel)"])
+ rmax_sbp_kpc = float(info["Rmax_SBP (kpc)"])
+ r500_pix = r500_kpc / rmax_sbp_kpc * rmax_sbp_pix
+ print("R500: %.2f (kpc), %.2f (pixel)" % (r500_kpc, r500_pix))
+
+ sbpfit_conf_new = []
+ for line in sbpfit_conf:
+ line_new = re.sub(r"<DATE>", datetime.utcnow().isoformat(), line)
+ line_new = re.sub(r"<NAME>", name, line_new)
+ line_new = re.sub(r"<OBSID>", "%s" % obsid, line_new)
+ line_new = re.sub(r"<R500_PIX>", "%.2f" % r500_pix, line_new)
+ line_new = re.sub(r"<R500_KPC>", "%.2f" % r500_kpc, line_new)
+ sbpfit_conf_new.append(line_new)
+
+ return sbpfit_conf_new
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Prepare sbpfit config")
+ parser.add_argument("-j", "--json", dest="json", required=False,
+ help="the *_INFO.json file (default: find ../*_INFO.json)")
+ parser.add_argument("-c", "--config", dest="config", required=True,
+ help="sample sbpfit configuration")
+ parser.add_argument("outfile", nargs="?",
+ help="filename of the output sbpfit config " + \
+ "(default: same as the sample config)")
+ args = parser.parse_args()
+
+ # default "*_INFO.json"
+ info_json = glob.glob("../*_INFO.json")[0]
+ if args.json:
+ info_json = args.json
+
+ json_str = open(info_json).read().rstrip().rstrip(",")
+ info = json.loads(json_str)
+
+ # sample config file
+ sbpfit_conf = open(args.config).readlines()
+
+ # output config file
+ if args.outfile:
+ outfile = args.outfile
+ else:
+ outfile = os.path.basename(args.config)
+
+ sbpfit_conf_new = update_sbpfit_conf(sbpfit_conf, info)
+ with open(outfile, "w") as outf:
+ outf.write("".join(sbpfit_conf_new))
+
+
+if __name__ == "__main__":
+ main()
+