mirror of
https://codeberg.org/Yael-II/MSc1-Internship-Stellar-Cluster.git
synced 2026-03-15 11:16:27 +01:00
153 lines
5.1 KiB
Python
153 lines
5.1 KiB
Python
"""
|
|
* JointSEx : Joint SExtractor files
|
|
* Version 2 - 2024-03-21
|
|
@ Yaël Moussouni
|
|
@ Unistra, P&E, MSc1-MoFP
|
|
@ Observatory of Strasbourg (Intern)
|
|
"""
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import os
|
|
from matplotlib.ticker import FuncFormatter, MaxNLocator
|
|
|
|
# * Parameters
|
|
|
|
if "YII_light" in plt.style.available: plt.style.use("YII_light")
|
|
|
|
# * Variables
|
|
in_directory = "./SEx_files/"
|
|
out_directory = "./Joint_files/"
|
|
fig_directory = "../Figs/JointSEx_figs/"
|
|
SEx_prefix = "S-ex "
|
|
B_suffix = "-B_cal.cat"
|
|
V_suffix = "-G_cal.cat"
|
|
R_suffix = "-R_cal.cat"
|
|
BVR_suffix = "_BVR.csv"
|
|
out_prefix = "Tab_"
|
|
precision = 1/3600 # °
|
|
|
|
YES = ["Y", "YES", "1", "OUI"]
|
|
|
|
i_ra = 13
|
|
i_de = 14
|
|
i_mag = 1
|
|
i_dmag = 2
|
|
# MAG_ISO: 1, 2
|
|
# MAG_BEST: 9, 10
|
|
# TODO APERTURE
|
|
|
|
# * Functions
|
|
def calibration_function(I,c): return I + c
|
|
|
|
# deg = FuncFormatter(lambda x, pos=None: f"{x:.0f}\N{DEGREE SIGN}{(x-np.floor(x))*60:02.0f}\'00\"")
|
|
# hrs = FuncFormatter(lambda x, pos=None: f"{x*24/360:.00f}:{(x*24/360-np.floor(x*24/360))*60:02.0f}:00")
|
|
|
|
def DMS_from_deg_format(x, pos=None):
|
|
D = int(np.floor(x))
|
|
M = int(np.floor((x-D)*60))
|
|
S = int(np.floor(((x-D)*60-M)*60))
|
|
return "{D:02d}°{M:02d}\'{S:02d}\"".format(D=D,M=M,S=S)
|
|
def HMS_from_deg_format(x, pos=None):
|
|
y = x/15
|
|
H = int(np.floor(y))
|
|
M = int(np.floor((y-H)*60))
|
|
S = int(np.floor(((y-H)*60-M)*60))
|
|
return "{H:02d}:{M:02d}:{S:02d}".format(H=H,M=M,S=S)
|
|
|
|
DMS_from_deg = FuncFormatter(DMS_from_deg_format)
|
|
HMS_from_deg = FuncFormatter(HMS_from_deg_format)
|
|
|
|
def openfile(in_dir, SEx_prefix, source, suffix):
|
|
tab = []
|
|
with open(in_dir+SEx_prefix+source+suffix) as file:
|
|
for i in range(20):
|
|
file.readline()
|
|
for line in file:
|
|
columns = line.strip().split()
|
|
tab.append([float(columns[i_ra]), float(columns[i_de]), float(columns[i_mag]), float(columns[i_dmag])])
|
|
file.close()
|
|
return np.array(tab)
|
|
|
|
# * Import
|
|
filelist = np.sort(os.listdir(in_directory))
|
|
filelist = [f for f in filelist if SEx_prefix in f]
|
|
sources = []
|
|
for i in range(len(filelist)):
|
|
k = filelist[i][5:].find("-")
|
|
source = filelist[i][5:k+5]
|
|
if source not in sources: sources.append(source)
|
|
|
|
print("\033[36m"+"Available source:"+"\033[0m")
|
|
for i in range(len(sources)):
|
|
print("\033[36m"+"\t{}: ".format(i+1) + "\033[0m" + "{}".format(sources[i]))
|
|
k = int(input("\033[32m"+"Select source number: "+"\033[0m"))-1
|
|
print("")
|
|
source = sources[k]
|
|
|
|
tab_B = openfile(in_directory, SEx_prefix, source, B_suffix)
|
|
tab_V = openfile(in_directory, SEx_prefix, source, V_suffix)
|
|
tab_R = openfile(in_directory, SEx_prefix, source, R_suffix)
|
|
|
|
w1 = np.where(tab_B[:,0] - tab_V[:,0] < precision)
|
|
w2 = np.where(tab_V[:,0] - tab_R[:,0] < precision)
|
|
w3 = np.where(tab_B[:,0] - tab_R[:,0] < precision)
|
|
|
|
|
|
if not (len(w1[0]) == len(w2[0]) == len(w3[0]) == len(tab_B) == len(tab_V) == len(tab_R)):
|
|
print("\033[33m"+"Warning: not all tables have the same size, or a star may have moved !"+ "\033[0m")
|
|
print("\033[33m"+"\tB table size:"+ "\033[0m"+"{:d}".format(len(tab_B)))
|
|
print("\033[33m"+"\tV table size:"+ "\033[0m"+"{:d}".format(len(tab_V)))
|
|
print("\033[33m"+"\tR table size:"+ "\033[0m"+"{:d}".format(len(tab_R)))
|
|
print("\033[33m"+"\tSame position in B-V:"+ "\033[0m"+"{:d}".format(len(w1[0])))
|
|
print("\033[33m"+"\tSame position in V-R:"+ "\033[0m"+"{:d}".format(len(w2[0])))
|
|
print("\033[33m"+"\tSame position in B-R:"+ "\033[0m"+"{:d}".format(len(w3[0])))
|
|
else:
|
|
N = len(tab_R)
|
|
tab_BVR = [] # ra, dec, B, V, R, dB, dV, dR
|
|
for i in range(N):
|
|
ra = np.mean([tab_B[i,0], tab_V[i,0], tab_R[i,0]])
|
|
de = np.mean([tab_B[i,1], tab_V[i,1], tab_R[i,1]])
|
|
B = tab_B[i,2]
|
|
V = tab_V[i,2]
|
|
R = tab_R[i,2]
|
|
dB = tab_B[i,3]
|
|
dV = tab_V[i,3]
|
|
dR = tab_R[i,3]
|
|
tab_BVR.append([ra, de, B, V, R, dB, dV, dR])
|
|
tab_BVR = np.array(tab_BVR)
|
|
|
|
# * Output choices
|
|
|
|
plot_map = input("\033[32m"+"Draw map (y/n): "+"\033[0m").upper() in YES
|
|
plot_save = input("\033[32m"+"Save figures (y/n): "+"\033[0m").upper() in YES
|
|
print("")
|
|
save_output = input("\033[32m"+"Save output file (y/n): "+"\033[0m").upper() in YES
|
|
print("")
|
|
|
|
# * Map
|
|
if plot_map:
|
|
fig, ax = plt.subplots(1)
|
|
ax.scatter(tab_BVR[:,0], tab_BVR[:,1], s=2, color='C3', alpha=1)
|
|
ax.xaxis.set_major_formatter(HMS_from_deg)
|
|
ax.xaxis.set_major_locator(MaxNLocator(5))
|
|
ax.yaxis.set_major_formatter(DMS_from_deg)
|
|
ax.set_aspect("equal")
|
|
ax.set_xlabel("Right ascension")
|
|
ax.set_ylabel("Declination")
|
|
if plot_save:
|
|
fig.savefig(fig_directory+source+"_map")
|
|
print("\033[94m"+"Info: Figure saved as " + "\033[0m" + source+"_map")
|
|
|
|
# * File output
|
|
if save_output:
|
|
file = open(out_directory+out_prefix+source+BVR_suffix, "w")
|
|
file.write("ra [deg],dec [deg],B_inst [mag],V_inst [mag],R_inst [mag],dB_inst [mag],dV_inst [mag],dR_inst [mag]\n")
|
|
for i in range(len(tab_BVR)):
|
|
ra, dec, B, V, R, dB, dV, dR = tab_BVR[i,:]
|
|
file.write("{ra:e},{dec:e},{B:e},{V:e},{R:e},{dB:e},{dV:e},{dR:e}\n".format(ra=ra, dec=dec, B=B, V=V, R=R, dB=dB, dV=dV, dR=dR))
|
|
print("\033[94m"+"Info: File saved as " + "\033[0m" + out_prefix+source+BVR_suffix)
|
|
file.close()
|
|
plt.show()
|
|
|
|
|