From 075c628a8c3c429b246744996781e5e58218a76c Mon Sep 17 00:00:00 2001
From: Aaron LI <aly@aaronly.me>
Date: Fri, 3 Nov 2017 10:34:33 +0800
Subject: astro/calc_psd.py: Support image pixel size

---
 astro/calc_psd.py | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

(limited to 'astro')

diff --git a/astro/calc_psd.py b/astro/calc_psd.py
index 018c52a..a18e755 100755
--- a/astro/calc_psd.py
+++ b/astro/calc_psd.py
@@ -249,6 +249,9 @@ def main():
                         "at every frequency point will be calculated, " +
                         "i.e., using a even grid, which may be very slow " +
                         "for very large images!")
+    parser.add_argument("-p", "--pixelsize", dest="pixelsize", type=float,
+                        help="image spatial pixel size [arcsec] " +
+                        "(will try to obtain from FITS header)")
     parser.add_argument("-P", "--plot", dest="plot", action="store_true",
                         help="plot the PSD and save as a PNG image")
     parser.add_argument("-i", "--infile", dest="infile", nargs="+",
@@ -271,8 +274,21 @@ def main():
     header, image = open_image(args.infile[0])
     bunit = header.get("BUNIT", "???")
     print("Read image from: %s" % args.infile[0])
+    print("Image size: %dx%d" % tuple(reversed(image.shape)))
     print("Data unit: %s" % bunit)
 
+    if args.pixelsize:
+        pixel = (args.pixelsize/60, "arcmin")  # [arcsec]->[arcmin]
+    else:
+        try:
+            pixel = (header["PixSize"]/60, "arcmin")  # [arcsec]->[arcmin]
+        except KeyError:
+            try:
+                pixel = (abs(header["CDELT1"])*60, "arcmin")  # [deg]->[arcmin]
+            except KeyError:
+                pixel = (1.0, "pixel")
+    print("Image pixel size: %.2f [%s]" % pixel)
+
     for fn in args.infile[1:]:
         print("Adding additional image: %s" % fn)
         header2, image2 = open_image(fn)
@@ -282,7 +298,7 @@ def main():
         else:
             raise ValueError("image has different unit: %s" % bunit2)
 
-    psdobj = PSD(image=image, step=args.step)
+    psdobj = PSD(image=image, pixel=pixel, step=args.step)
     freqs, psd, psd_err = psdobj.calc_psd()
 
     # Write out PSD results
-- 
cgit v1.2.2