diff --git a/sdi/combine.py b/sdi/combine.py index cff2e04..e343522 100644 --- a/sdi/combine.py +++ b/sdi/combine.py @@ -33,7 +33,7 @@ def combine(hduls, name="ALGN"): raise KeyError(str(f"Name {name} not found in HDUList! Try running again with `combine -n [name]` from above")) from None comb = np.median(data, axis=0) - hdu = fits.PrimaryHDU(comb) + hdu = fits.PrimaryHDU(data = comb, header = hduls_list[0][name].header) # We do not need to create a list of HDUL's here. We return a single median image. diff --git a/sdi/subtract.py b/sdi/subtract.py index 5912cc8..b50a3b5 100644 --- a/sdi/subtract.py +++ b/sdi/subtract.py @@ -4,13 +4,16 @@ from astropy.io.fits import CompImageHDU from . import _cli as cli from .combine import combine -import os #sfft specific -from sfft.EasyCrowdedPacket import Easy_CrowdedPacket #sfft specific +import os +#from .sfft.sfft.EasyCrowdedPacket import Easy_CrowdedPacket #sfft specific from sfft.CustomizedPacket import Customized_Packet #sfft specific from sfft.EasySparsePacket import Easy_SparsePacket #sfft specific import time import numpy as np #sfft specific import sys +import os.path as pa +from sfft.utils.SExSkySubtract import SEx_SkySubtract + def subtract(hduls, name="ALGN", method: ("sfft", "ois", "numpy")="sfft"): """ @@ -29,12 +32,12 @@ def subtract(hduls, name="ALGN", method: ("sfft", "ois", "numpy")="sfft"): temp_image_fits_filenames = [] venv_file_path = sys.prefix for i, hdu in enumerate(hduls): #Write the science hduls into temporary fits files - temp_filename = venv_file_path + "/sdi_pipeline/sdi/temp_image{}.fits".format(i) + temp_filename = venv_file_path + "/temp_image{}.fits".format(i) temp_data = hdu[name].data - primary = fits.PrimaryHDU(temp_data) + primary = fits.PrimaryHDU(data= temp_data, header = hduls[i][name].header) primary.writeto(temp_filename, overwrite = True) temp_image_fits_filenames.append(temp_filename) - temp_ref_path = venv_file_path + "/sdi_pipeline/temp_ref.fits" + temp_ref_path = venv_file_path + "/temp_ref.fits" template_fits = combine(hduls, name) # Create the reference image template_fits.writeto(temp_ref_path, overwrite = True) # Write the reference image into temporary fits file @@ -49,25 +52,48 @@ def subtract(hduls, name="ALGN", method: ("sfft", "ois", "numpy")="sfft"): size += os.path.getsize(temp_ref_path) print("Total size of temporary files is {} mb".format(size/1024**2)) outputs = [] + #Sky-Subtraction + print("Performing Sky-Subtraction") + skysub_fits = [] + for i, FITS_obj in enumerate(temp_image_fits_filenames): + FITS_skysub = venv_file_path + "/temp_skysub_image{}.fits".format(i) + skysub_fits.append(FITS_skysub) + SEx_SkySubtract.SSS(FITS_obj=FITS_obj, FITS_skysub=FITS_skysub, FITS_sky=None, FITS_skyrms=None, \ + SATUR_KEY='SATURATE', ESATUR_KEY='ESATUR', BACK_SIZE=64, BACK_FILTERSIZE=3, \ + DETECT_THRESH=1.5, DETECT_MINAREA=5, DETECT_MAXAREA=0) + REF_skysub = venv_file_path + "/temp_skysub_ref.fits".format(i) + SEx_SkySubtract.SSS(FITS_obj=temp_ref_path, FITS_skysub=REF_skysub, FITS_sky=None, FITS_skyrms=None, \ + SATUR_KEY='SATURATE', ESATUR_KEY='ESATUR', BACK_SIZE=64, BACK_FILTERSIZE=3, \ + DETECT_THRESH=1.5, DETECT_MINAREA=5, DETECT_MAXAREA=0) #Subtract start = time.perf_counter() print("Method = sfft") #TODO Incorperate input masks for when we take real data - for i, fits_name in enumerate(temp_image_fits_filenames): - sol, diff = Customized_Packet.CP(FITS_REF = temp_ref_path, FITS_SCI = fits_name, - FITS_mREF = temp_ref_path, FITS_mSCI = fits_name, - ForceConv = "REF", GKerHW = 4, BGPolyOrder = 2, KerPolyOrder = 2) + + + # for i, fits_name in enumerate(temp_image_fits_filenames): + # sol, diff = Customized_Packet.CP(FITS_REF = temp_ref_path, FITS_SCI = fits_name, + # FITS_mREF = temp_ref_path, FITS_mSCI = fits_name, + # ForceConv = "REF", GKerHW = 4, BGPolyOrder = 2, KerPolyOrder = 2) + + # if np.isnan(np.sum(diff)) == True: + # raise ValueError("Residual contains NaN") + # else: + # hduls[i].insert(1,CompImageHDU(data = diff, header = hduls[i][name].header, name = "SUB")) + # outputs.append(hduls[i]) + for i, fits_name in enumerate(skysub_fits): + dic, sol, diff = Easy_SparsePacket.ESP(FITS_REF = REF_skysub, FITS_SCI = fits_name) if np.isnan(np.sum(diff)) == True: raise ValueError("Residual contains NaN") else: hduls[i].insert(1,CompImageHDU(data = diff, header = hduls[i][name].header, name = "SUB")) - outputs.append(hduls[i]) + outputs.append(hduls[i]) stop = time.perf_counter() print("Subtraction Complete") print("Time Elapsed: {} sec".format(round(stop-start, 4))) print("Removing Temporary Fits Files") - for i, fits_name in enumerate(temp_image_fits_filenames): #Remove Temporary Fits files from disc + for i, fits_name in enumerate(skysub_fits): #Remove Temporary Fits files from disc if os.path.exists(fits_name): os.remove(fits_name) else: diff --git a/setup.py b/setup.py index df81da5..1243931 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,18 @@ +import os +import sys from setuptools import setup, find_packages + +DESCRIPTION = "Pipeline to Take a Stack of Images and Extract Residuals" +NAME = "sdi-pipeline" +AUTHOR = "Kyle Lam" +AUTHOR_EMAIL = "kylelam@ucsb.edu" +MAINTAINER = "Kyle Lama" +MAINTAINER_EMAIL = "kylelam@ucsb.edu" +DOWNLOAD_URL = "https://github.com/ucsbdeepspace/sdi_pipeline.git" + +LICENSE = 'MIT Licence' +VERSION = '0.99' +======= import subprocess import sys @@ -18,15 +32,38 @@ subprocess.run(sys.executable + " -m pip install --upgrade pip setuptools==56.0.0 setuptools_rust numpy", shell=True) -setup( - name="sdi-cli", - version="0.99", - py_modules=["sdi"], - # packages=find_packages(include=["openfits"]), - include_package_data=True, - install_requires=["click", "astropy", "photutils", "ois", "astroalign", "astroquery", "sklearn"], - entry_points=""" - [console_scripts] - sdi=sdi._cli:cli - """, -) +install_reqs = ["numpy", + "setuptools_rust", + "click", + "astropy", + "photutils", + "ois", + "astroalign", + "astroquery", + "sklearn", + ] +setup_reqs = ["numpy", + "setuptools_rust"] + +setup(name = NAME, + version = VERSION, + description = DESCRIPTION, + setup_requires = setup_reqs, + install_requires = install_reqs, + author = AUTHOR, + author_email = AUTHOR_EMAIL, + maintainer = MAINTAINER, + maintainer_email = MAINTAINER_EMAIL, + download_url = DOWNLOAD_URL, + license = LICENSE, + packages = find_packages(), + include_package_data = True, + # classifiers = [ + # 'Development Status :: 4 - Beta', + # 'Environment :: Console', + # 'Intended Audience :: Science/Research', + # 'Natural Language :: English', + # 'Programming Language :: Python :: 3.7', + # 'Programming Language :: Python :: 3 :: Only', + # 'Topic :: Scientific/Engineering :: Astronomy'], + ) \ No newline at end of file