From 562fcf0f3df2570cf42ec1ad16856e5d339aa511 Mon Sep 17 00:00:00 2001 From: Cees Bassa Date: Sun, 28 Jul 2019 13:39:21 +0200 Subject: [PATCH] Basic implementation of automatic astrometry with solve-field --- process.py | 15 ++++++++++++++- stvid/astrometry.py | 30 ++++++++++++++++++++++++++++++ stvid/stars.py | 1 - 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/process.py b/process.py index 8da9670..17be163 100755 --- a/process.py +++ b/process.py @@ -6,6 +6,7 @@ from stvid.stio import fourframe from stvid.stars import generate_star_catalog from stvid.astrometry import calibrate_from_reference from stvid.astrometry import is_calibrated +from stvid.astrometry import generate_reference_with_anet from stvid.satellite import generate_satellite_predictions from stvid.satellite import find_hough3d_lines from stvid.extract import extract_tracks @@ -103,9 +104,21 @@ if __name__ == "__main__": # Generate star catalog pix_catalog = generate_star_catalog(fname) + # Create reference calibration file + if not os.path.exists("test.fits"): + solved = generate_reference_with_anet(fname, "") + # Calibrate astrometry calibrate_from_reference(fname, "test.fits", pix_catalog) + # Redo refence if astrometry failed + if not is_calibrated(fourframe(fname)) and pix_catalog.nstars>10: + print(colored("Recomputing astrometric calibration for %s" % fname, "yellow")) + solved = generate_reference_with_anet(fname, "") + + # Calibrate astrometry + calibrate_from_reference(fname, "test.fits", pix_catalog) + # Generate satellite predictions generate_satellite_predictions(fname) @@ -114,7 +127,7 @@ if __name__ == "__main__": # Get properties ff = fourframe(fname) - + # Extract tracks if is_calibrated(ff): extract_tracks(fname, trkrmin, drdtmin, trksig, ntrkmin, root_dir, results_dir) diff --git a/stvid/astrometry.py b/stvid/astrometry.py index 85b3734..1caad4d 100644 --- a/stvid/astrometry.py +++ b/stvid/astrometry.py @@ -1,7 +1,10 @@ #!/usr/bin/env python3 from __future__ import print_function import os +import glob import numpy as np +import subprocess +import shutil import astropy.units as u from astropy.io import fits from astropy import wcs @@ -216,3 +219,30 @@ def is_calibrated(ff): return False else: return True + +def generate_reference_with_anet(fname, cmd_args, reffname="test.fits", tempfroot="cal"): + # Copy file to generic name + shutil.copy2(fname, tempfroot + ".fits") + + # Generate command + command = "solve-field %s -O -T -N %s %s.fits" % (cmd_args, reffname, tempfroot) + + # Run command + try: + subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT) + + # Did the astrometry succeed? + solved = os.path.exists("%s.solved" % tempfroot) + except: + solved = False + + # Remove temporary files + for fname in glob.glob("%s*" % tempfroot): + try: + os.remove(fname) + except: + pass + + return solved + + diff --git a/stvid/stars.py b/stvid/stars.py index 66b4040..4f05ffe 100644 --- a/stvid/stars.py +++ b/stvid/stars.py @@ -29,7 +29,6 @@ class pixel_catalog: self.flag = None self.nstars = 0 - def generate_star_catalog(fname): # Skip if file already exists if not os.path.exists(os.path.join(fname, ".cat")):