From 4d217b8eb8667ee8249762d101366b7c09087f53 Mon Sep 17 00:00:00 2001 From: Emir Karamehmetoglu Date: Wed, 6 Jul 2022 15:40:12 +0200 Subject: [PATCH 1/5] add J filter to astronircam --- flows/instruments/instruments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flows/instruments/instruments.py b/flows/instruments/instruments.py index db28055..50b2e86 100644 --- a/flows/instruments/instruments.py +++ b/flows/instruments/instruments.py @@ -367,7 +367,7 @@ def get_obstime(self): def get_photfilter(self): hdr = self.image.header - photfilter = {'H_Open': 'H', 'K_Open': 'K', }.get(hdr['FILTER'], hdr['FILTER']) + photfilter = {'H_Open': 'H', 'K_Open': 'K', 'J_Open': 'J'}.get(hdr['FILTER'], hdr['FILTER']) return photfilter From 7dce8739067a5d375cd6b21a72632554ceeb3568 Mon Sep 17 00:00:00 2001 From: Emir Karamehmetoglu Date: Wed, 6 Jul 2022 15:41:28 +0200 Subject: [PATCH 2/5] remove unnecessarily strict site checking in Schmidt instrument. --- flows/instruments/instruments.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/flows/instruments/instruments.py b/flows/instruments/instruments.py index 50b2e86..18ac962 100644 --- a/flows/instruments/instruments.py +++ b/flows/instruments/instruments.py @@ -488,12 +488,9 @@ def get_photfilter(self): class Schmidt(Instrument): siteid = 26 peakmax = 56_000 - telescope = '67/91 Schmidt Telescope' # Fits Header name of TELESCOP - instrument = 'Moravian G4-16000LC' # Fits Header name of Instrument (can be partial) - origin = '' # Fits Header value of ORIGIN (if relevant) - unique_headers = { - 'SITELAT': 45.8494444 - } # Unique key value pairs from header for identifying instrument. + telescope = '67/91 Schmidt Telescope' + instrument = 'Moravian G4-16000LC' + origin = '' def get_obstime(self): obstime = Time(self.image.header['DATE-OBS'], format='isot', scale='utc', From 457c075bfc33f410157343e3ae2bdd4ce98933b6 Mon Sep 17 00:00:00 2001 From: Emir Karamehmetoglu Date: Wed, 6 Jul 2022 15:53:58 +0200 Subject: [PATCH 3/5] update docstring for instruments.py with instructions --- flows/instruments/instruments.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/flows/instruments/instruments.py b/flows/instruments/instruments.py index 18ac962..85128cd 100644 --- a/flows/instruments/instruments.py +++ b/flows/instruments/instruments.py @@ -1,5 +1,32 @@ """ -Load image code. +Instrument classes that inherit from the base class. +Modify to add your own instrument. + +Identifying relevant image properties: + +`site` = required, add manually. +`peakmax` = optional, add manually or provide header. +The rest of `exptime`, `obstime`, `photfilter` use the +following (overrideable) base functions. Override +if the default one from the baseclass does not fit +your instrument. See: + ``` + self.image.peakmax = self.peakmax + self.image.site = self.get_site() + self.image.exptime = self.get_exptime() + self.image.obstime = self.get_obstime() + self.image.photfilter = self.get_photfilter() + ``` + +Identifying the instrument for an image: + +Each instrument can define (one or many) of `origin`, +`telescope`, `instrument` fields correspinding to the +standard fits headers to help uniquely identify itself. +More advanced logic is possible using `unique_headers` +field as a dict of key,value pairs in the header. Ex: +unique_headers = {'PRODCATG': 'SCIENCE.MEFIMAGE'}. +These are all optional, defaults are set in baseclass. """ # Standard lib from __future__ import annotations From 6e7c9b7b38d3766f93986a998317ace3207b5c77 Mon Sep 17 00:00:00 2001 From: Emir Karamehmetoglu Date: Wed, 6 Jul 2022 16:10:14 +0200 Subject: [PATCH 4/5] fix for Hawk-I images without multiextenstion fitsheaders. --- flows/instruments/instruments.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/flows/instruments/instruments.py b/flows/instruments/instruments.py index 85128cd..cb02a88 100644 --- a/flows/instruments/instruments.py +++ b/flows/instruments/instruments.py @@ -12,7 +12,7 @@ your instrument. See: ``` self.image.peakmax = self.peakmax - self.image.site = self.get_site() + self.image.site = self.get_site() self.image.exptime = self.get_exptime() self.image.obstime = self.get_obstime() self.image.photfilter = self.get_photfilter() @@ -99,7 +99,7 @@ class HAWKI(Instrument): telescope = 'ESO-VLT-U4' # Fits Header name of TELESCOP instrument = 'HAWKI' # Fits Header name of Instrument (can be partial) origin = 'ESO-PARANAL' # Fits Header value of ORIGIN (if relevant) - unique_headers = {'PRODCATG': 'SCIENCE.MEFIMAGE'} + #unique_headers = {'PRODCATG': 'SCIENCE.MEFIMAGE'} def __init__(self, image: FlowsImage = None): super().__init__(image) @@ -128,6 +128,10 @@ def get_ext(hdul: fits.HDUList, target_coords: coords.SkyCoord = None, if target_coord is None: raise ValueError("TARGET_COORD is needed for HAWKI images to find the correct extension") + # Incase this is not a multi-extension imageL + if len(hdul) == 1: + return 0 + # For HAWKI multi-extension images we search the extensions for which one contains # the target, Create Image from that extension. target_radec = [[target_coord.icrs.ra.deg, target_coord.icrs.dec.deg]] From f101531e01bce27fcf44b6796eb7553477cc475a Mon Sep 17 00:00:00 2001 From: Emir Karamehmetoglu Date: Wed, 6 Jul 2022 16:18:17 +0200 Subject: [PATCH 5/5] fix for manually given target coords that are given as floats make sure to verify target coords in load_image --- flows/instruments/__init__.py | 2 +- flows/load_image.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/flows/instruments/__init__.py b/flows/instruments/__init__.py index 0ff55da..dd2eb5b 100644 --- a/flows/instruments/__init__.py +++ b/flows/instruments/__init__.py @@ -1 +1 @@ -from .instruments import INSTRUMENTS, Instrument +from .instruments import INSTRUMENTS, Instrument, verify_coordinates diff --git a/flows/load_image.py b/flows/load_image.py index aff04f9..5151a1a 100644 --- a/flows/load_image.py +++ b/flows/load_image.py @@ -8,7 +8,7 @@ from astropy.io import fits from astropy.time import Time -from .instruments import INSTRUMENTS +from .instruments import INSTRUMENTS, verify_coordinates from .image import FlowsImage from .utilities import create_logger logger = create_logger() @@ -39,6 +39,7 @@ def load_image(filename: str, target_coord: Union[coords.SkyCoord, Tuple[float, for inst_name, inst_cls in INSTRUMENTS: if inst_cls.identifier(telescope, origin, instrument, hdr): logger.info(f"Image is using instrument {inst_name}") + target_coord = verify_coordinates(target_coord) ext = inst_cls.get_ext(hdul, target_coord) mask = inst_cls.get_mask(hdul) # Default = None is to only mask all non-finite values, override here is additive.