mirror of
https://codeberg.org/Yael-II/Astrobs-Tools.git
synced 2026-03-15 03:16:27 +01:00
267 lines
10 KiB
Python
267 lines
10 KiB
Python
import os
|
|
import numpy as np
|
|
import data_reduction_tools as tools
|
|
import astroalign as aa
|
|
|
|
TYPE = ["image", "spectroscopy"][1]
|
|
IN_DIR = "./Input/"
|
|
OUT_DIR = "./Output/"
|
|
LIGHT_DIR = IN_DIR + "Light/"
|
|
DARK_DIR = IN_DIR + "Dark/"
|
|
FLAT_DIR = IN_DIR + "Flat/"
|
|
BIAS_DIR = IN_DIR + "Bias/"
|
|
THAR_DIR = IN_DIR + "ThAr/"
|
|
|
|
def spectro_reduction(target: str):
|
|
# BIAS
|
|
filelist = tools.list_fits(BIAS_DIR)
|
|
tools.stack(filelist, BIAS_DIR, "master_bias.fits")
|
|
|
|
# DARK
|
|
filelist = tools.list_fits(DARK_DIR)
|
|
has_dark = False
|
|
if len(filelist) > 0:
|
|
has_dark = True
|
|
tools.debias(filelist, DARK_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, DARK_DIR, "master_debiased_dark.fits")
|
|
|
|
# FLAT
|
|
filelist = tools.list_fits(FLAT_DIR)
|
|
tools.debias(filelist, FLAT_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.normalize_spectrum_flat(filelist)
|
|
filelist = ["normalized_" + fname for fname in filelist \
|
|
if not "normalized_" in fname]
|
|
tools.stack(filelist, FLAT_DIR, "master_normalized_debiased_flat.fits")
|
|
|
|
# LIGHT
|
|
filelist = tools.list_fits(LIGHT_DIR)
|
|
tools.debias(filelist, LIGHT_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, LIGHT_DIR, "master_debiased_light.fits")
|
|
if has_dark:
|
|
tools.reduction_individual(["master_debiased_light.fits"],
|
|
master_dark = "master_debiased_dark.fits",
|
|
master_flat = "master_normalized_debiased_flat.fits")
|
|
else:
|
|
tools.reduction_individual(["master_debiased_light.fits"],
|
|
master_flat = "master_normalized_debiased_flat.fits")
|
|
|
|
# MAIN
|
|
# tools.plot_spectrum("master_debiased_flat.fits", FLAT_DIR)
|
|
# tools.plot_spectrum("reduced_" + target + ".fits")
|
|
return 0
|
|
|
|
def spectro_calibration(target: str):
|
|
# BIAS
|
|
filelist = tools.list_fits(BIAS_DIR)
|
|
tools.stack(filelist, BIAS_DIR, "master_bias.fits")
|
|
|
|
# DARK
|
|
filelist = tools.list_fits(DARK_DIR)
|
|
has_dark = False
|
|
if len(filelist) > 0:
|
|
has_dark = True
|
|
tools.debias(filelist, DARK_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, DARK_DIR, "master_debiased_dark.fits")
|
|
|
|
# FLAT
|
|
filelist = tools.list_fits(FLAT_DIR)
|
|
tools.debias(filelist, FLAT_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.normalize_spectrum_flat(filelist)
|
|
filelist = ["normalized_" + fname for fname in filelist \
|
|
if not "normalized_" in fname]
|
|
tools.stack(filelist, FLAT_DIR, "master_normalized_debiased_flat.fits")
|
|
|
|
# ThAr
|
|
filelist = tools.list_fits(THAR_DIR)
|
|
tools.debias(filelist, THAR_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, THAR_DIR, "master_debiased_ThAr.fits")
|
|
if has_dark:
|
|
tools.reduction_individual(["master_debiased_ThAr.fits"],
|
|
light_directory = THAR_DIR,
|
|
master_dark = "master_debiased_dark.fits",
|
|
master_flat = "master_normalized_debiased_flat.fits")
|
|
else:
|
|
tools.reduction_individual(["master_debiased_ThAr.fits"],
|
|
light_directory = THAR_DIR,
|
|
master_flat = "master_normalized_debiased_flat.fits")
|
|
# MAIN
|
|
filename = "reduced_master_debiased_light.fits"
|
|
tools.wavelength_calibration(filename,
|
|
"calibrated_" + target + ".csv")
|
|
return 0
|
|
|
|
def image_reduction(target: str):
|
|
filter_list = [d for d in os.listdir(LIGHT_DIR) if not d[0] == "."]
|
|
# BIAS
|
|
filelist = tools.list_fits(BIAS_DIR)
|
|
tools.stack(filelist, BIAS_DIR, "master_bias.fits")
|
|
|
|
# DARK
|
|
dark_list = [d for d in os.listdir(DARK_DIR) if not d[0] == "."]
|
|
filelist = tools.list_fits(DARK_DIR)
|
|
has_dark = False
|
|
has_filter_dark = False
|
|
if np.array_equal(np.sort(dark_list), np.sort(filter_list)):
|
|
has_dark = True
|
|
has_filter_dark = True
|
|
for filter_ in filter_list:
|
|
filter_dir = filter_ + "/"
|
|
filelist = tools.list_fits(DARK_DIR + filter_dir)
|
|
tools.debias(filelist, DARK_DIR + filter_dir)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, DARK_DIR + filter_dir,
|
|
"master_debiased_dark_{}.fits".format(filter_))
|
|
|
|
elif len(filelist) > 0:
|
|
has_dark = True
|
|
tools.debias(filelist, DARK_DIR)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.stack(filelist, DARK_DIR, "master_debiased_dark.fits")
|
|
|
|
|
|
|
|
|
|
# FLAT
|
|
for filter_ in filter_list:
|
|
filter_dir = filter_ + "/"
|
|
filelist = tools.list_fits(FLAT_DIR + filter_dir)
|
|
tools.debias(filelist, FLAT_DIR + filter_dir)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
tools.normalize_image_flat(filelist, FLAT_DIR + filter_dir)
|
|
filelist = ["normalized_" + fname for fname in filelist \
|
|
if not "normalized_" in fname]
|
|
tools.stack(filelist, FLAT_DIR + filter_dir,
|
|
"master_normalized_debiased_flat_{}.fits".format(filter_))
|
|
|
|
# LIGHT
|
|
ref_dir = filter_list[0] + "/"
|
|
ref_file = tools.list_fits(LIGHT_DIR + ref_dir)[0]
|
|
ref_file = "reduced_debiased_" + ref_file
|
|
good = []
|
|
bad = []
|
|
for filter_ in filter_list:
|
|
filter_dir = filter_ + "/"
|
|
filelist = tools.list_fits(LIGHT_DIR + filter_dir)
|
|
tools.debias(filelist, LIGHT_DIR + filter_dir)
|
|
filelist = ["debiased_" + fname for fname in filelist \
|
|
if not "debiased_" in fname]
|
|
if has_dark:
|
|
if has_filter_dark:
|
|
tools.reduction_individual(filelist,
|
|
light_directory = LIGHT_DIR + filter_dir,
|
|
master_dark = "master_debiased_dark_{}.fits".format(filter_),
|
|
master_flat = "master_normalized_" \
|
|
+ "debiased_flat_{}.fits".format(filter_),
|
|
dark_directory = DARK_DIR + filter_dir,
|
|
flat_directory = FLAT_DIR + filter_dir)
|
|
else:
|
|
tools.reduction_individual(filelist,
|
|
light_directory = LIGHT_DIR + filter_dir,
|
|
master_dark = "master_debiased_dark.fits",
|
|
master_flat = "master_normalized_" \
|
|
+ "debiased_flat_{}.fits".format(filter_),
|
|
flat_directory = FLAT_DIR + filter_dir)
|
|
else:
|
|
tools.reduction_individual(filelist,
|
|
light_directory = LIGHT_DIR + filter_dir,
|
|
#master_dark = "master_debiased_dark.fits",
|
|
master_flat = "master_normalized_" \
|
|
+ "debiased_flat_{}.fits".format(filter_),
|
|
flat_directory = FLAT_DIR + filter_dir)
|
|
|
|
filelist = ["reduced_" + fname for fname in filelist \
|
|
if not "reduced_" in fname]
|
|
align = tools.align(filelist,
|
|
ref_file,
|
|
LIGHT_DIR + filter_dir,
|
|
LIGHT_DIR + ref_dir)
|
|
if len(align) > 1:
|
|
good.append(filter_)
|
|
filelist = ["aligned_" + fname for fname in align \
|
|
if not "aligned_" in fname]
|
|
tools.stack(filelist,
|
|
LIGHT_DIR + filter_dir,
|
|
"master_aligned_reduced_debiased_light_{}_{}.fits".format(
|
|
target, filter_), out_directory = OUT_DIR)
|
|
else:
|
|
bad.append(filter_)
|
|
tools.stack(filelist,
|
|
LIGHT_DIR + filter_dir,
|
|
"master_reduced_debiased_light_{}_{}.fits".format(
|
|
target, filter_), out_directory = OUT_DIR)
|
|
if len(good) > 0 and len(bad) > 0:
|
|
filter_ref = good[0]
|
|
filter_ref_file = [fname for fname in tools.list_fits(OUT_DIR)
|
|
if "aligned_" in fname][0]
|
|
print(filter_ref, filter_ref_file)
|
|
print(good)
|
|
print(bad)
|
|
for filter_ in bad:
|
|
tools.align(["master_reduced_debiased_light_{}_{}.fits".format(
|
|
target, filter_)],
|
|
filter_ref_file,
|
|
OUT_DIR,
|
|
OUT_DIR)
|
|
return 0
|
|
|
|
def main():
|
|
print("Select the type of reduction")
|
|
print("\t1. Images")
|
|
print("\t2. Spectra")
|
|
i = int(input("Choice [1 or 2]: "))
|
|
if i == 1:
|
|
print(("IMPORTANT: Please put raw files in the Input/ directory "
|
|
"(with any name)"))
|
|
print("Input/")
|
|
print(" ├ Bias/")
|
|
print(" │ └ bias_1.fits, ...")
|
|
print(" ├ Dark/")
|
|
print(" │ └ dark_1.fits, ...")
|
|
print(" ├ Flat/")
|
|
print(" │ ├ B/")
|
|
print(" │ │ └ flat_B_1.fits, ...")
|
|
print(" │ └ V/...")
|
|
print(" └ Light/")
|
|
print(" ├ B/")
|
|
print(" │ └ raw_B_1.fits")
|
|
print(" └ V/ ...")
|
|
if i == 2:
|
|
print(("IMPORTANT: Please put raw files in the Input/ directory "
|
|
"(with any name)"))
|
|
print("Input/")
|
|
print(" ├ Bias/")
|
|
print(" │ └ bias1.fits, ...")
|
|
print(" ├ Dark/ (optional)")
|
|
print(" │ └ dark_1.fits, ...")
|
|
print(" ├ Flat/")
|
|
print(" │ └ flat_1.fits")
|
|
print(" ├ Light/")
|
|
print(" │ └ raw_1.fits")
|
|
print(" └ ThAr/")
|
|
print(" └ thar_raw_1.fits")
|
|
name = input("Target name: ")
|
|
if i == 1:
|
|
image_reduction(name)
|
|
if i == 2:
|
|
spectro_reduction(name)
|
|
spectro_calibration(name)
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
main()
|