This commit is contained in:
Yael-II
2025-01-02 22:43:21 +01:00
parent c8ae670ea7
commit ca4274fc55
7 changed files with 569 additions and 92 deletions

View File

@@ -4,7 +4,6 @@ import data_reduction_tools as tools
import astroalign as aa
TYPE = ["image", "spectroscopy"][1]
target = "NGC_40"
IN_DIR = "./Input/"
OUT_DIR = "./Output/"
LIGHT_DIR = IN_DIR + "Light/"
@@ -13,17 +12,20 @@ FLAT_DIR = IN_DIR + "Flat/"
BIAS_DIR = IN_DIR + "Bias/"
THAR_DIR = IN_DIR + "ThAr/"
def spectro_reduction():
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)
#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")
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)
@@ -41,25 +43,33 @@ def spectro_reduction():
filelist = ["debiased_" + fname for fname in filelist \
if not "debiased_" in fname]
tools.stack(filelist, LIGHT_DIR, "master_debiased_light.fits")
tools.reduction_operation(target + ".fits",
master_light = "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():
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)
#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")
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)
@@ -77,28 +87,55 @@ def spectro_calibration():
filelist = ["debiased_" + fname for fname in filelist \
if not "debiased_" in fname]
tools.stack(filelist, THAR_DIR, "master_debiased_ThAr.fits")
tools.reduction_operation("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_light = "master_debiased_ThAr.fits",
master_flat = "master_normalized_debiased_flat.fits")
# MAIN
tools.plot_spectrum("reduced_ThAr.fits")
filename = "reduced_master_debiased_light.fits"
tools.wavelength_calibration(filename,
"calibrated_" + target + ".csv")
return 0
def image_reduction():
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)
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")
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
filter_list = [d for d in os.listdir(LIGHT_DIR) if not d[0] == "."]
for filter_ in filter_list:
filter_dir = filter_ + "/"
filelist = tools.list_fits(FLAT_DIR + filter_dir)
@@ -112,32 +149,117 @@ def image_reduction():
"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]
tools.stack(filelist,
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_debiased_light_{}.fits".format(filter_))
tools.reduction_operation(target + "_" + filter_ + ".fits",
master_light = "master_debiased_light_{}.fits".format(filter_),
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)
"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():
if TYPE == "image":
image_reduction()
if TYPE == "spectroscopy":
spectro_reduction()
spectro_calibration()
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__":