Commit 6746454b authored by Francesco Amadori's avatar Francesco Amadori
Browse files

criresp adjustment

parent 8ce72dac
Loading
Loading
Loading
Loading
+27 −29
Original line number Diff line number Diff line
import re
import tkinter as tk
import traceback
from pathlib import Path
from tkinter import ttk

@@ -1329,30 +1330,22 @@ class Frame_Gofio:
        listB = list()
        if instrument == "criresp":
            folder = Path(dirr)
            mjd_key = yaml_file['MJD']
            if obs_mode == "Nodding":
                # Trova file A e B
                dictA = {int(f.stem.split("_")[-1]): f
                          for f in folder.glob("cr2res_obs_nodding_extractedA_*.fits")}
                dictB = {int(f.stem.split("_")[-1]): f
                          for f in folder.glob("cr2res_obs_nodding_extractedB_*.fits")}
                # Collect A and B nodding files
                filesA = list(folder.glob("cr2res_obs_nodding_extractedA_*.fits"))
                filesB = list(folder.glob("cr2res_obs_nodding_extractedB_*.fits"))
                if separate_A_B:
                    all_indices = sorted(set(dictA.keys()) | set(dictB.keys()))
                    for i in all_indices:
                        if i in dictA:
                            listA.append(dictA[i])
                        if i in dictB:
                            listB.append(dictB[i])
                    # Sort A and B separately by MJD
                    listA = sorted(filesA, key=lambda f: fits.getheader(f)[mjd_key])
                    listB = sorted(filesB, key=lambda f: fits.getheader(f)[mjd_key])
                else:
                    # Tutti gli indici trovati
                    all_indices = sorted(set(dictA.keys()) | set(dictB.keys()))
                    listAB = []
                    for i in all_indices:
                        if i in dictA:
                            listAB.append(dictA[i])
                        if i in dictB:
                            listAB.append(dictB[i])
                    # Sort all A+B files together by MJD
                    listAB = sorted(filesA + filesB, key=lambda f: fits.getheader(f)[mjd_key])
            else:
                listAB = list(folder.glob("cr2res_obs_staring_extracted_*.fits"))
                # Staring mode: sort by MJD
                staring_files = list(folder.glob("cr2res_obs_staring_extracted*.fits"))
                listAB = sorted(staring_files, key=lambda f: fits.getheader(f)[mjd_key])
        else:
            #
            for file in os.listdir(dirr):
@@ -1367,6 +1360,7 @@ class Frame_Gofio:
                        listAB.append(os.path.join(dirr, file))
        #
        self.run_from_gofio.configure(state="disabled")
        try:
            if separate_A_B and instrument in ["gianob", "criresp"] and obs_mode == "Nodding":
                if len(listA) == len(listB):
                    self.procedure_fromgofio(listA, "A_", night, dirn, threshold_SNR_f, target, yaml_file, instrument)
@@ -1375,6 +1369,9 @@ class Frame_Gofio:
                    print("The amount of files A is not equal to the amount of file B")
            else: # for nodding/stare mode of gianob/criresp and for espresso or harpsn
                self.procedure_fromgofio(listAB, "", night, dirn, threshold_SNR_f, target, yaml_file, instrument)
        except Exception as e:
            print(str(e), traceback.format_exc())
            tk.messagebox.showerror("Error", "An error occurred during the reduction/separation process. Please check the log file for details.")
        self.run_from_gofio.configure(state="normal")

    def procedure_fromgofio(
@@ -1392,14 +1389,15 @@ class Frame_Gofio:
                        m = re.match(r"(\d+)_01_SPEC", name)
                        if m:
                            order = m.group(1)  # es. '07'
                            print(f"Chip: {chip_idx}; Order: {order} ")
                            if order not in channels_per_order:
                                channels_per_order[order] = len(chip.data[name])
                            struct_crires.append((chip_idx, order))
        else:
            struct_crires = None
            list_file.sort()
        orders_str = ""
        SNR_mean_str = ""
        list_file.sort()
        nimages = len(list_file)
        curr_image = ImageAnalysis(list_file[0], target_f, yaml_file, struct_crires)
        norder = curr_image.norder
+2 −0
Original line number Diff line number Diff line
@@ -98,6 +98,8 @@ class ImageAnalysis:
        self.npix = yaml_file['npix']
        # Total number of spectral orders in the echelle spectrum
        self.norder = yaml_file['norder']
        if self.norder == "xx":
            self.norder = len(struct_crires)

        # ======================== OPEN AND READ FITS FILE ========================
        # Open the FITS file containing the spectroscopic data
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ index_header : 0
data_in_columns : "None"
files_type : RAW
npix : 2048
norder : 24
norder : xx # 24
ra_dec_deg : 1
corr_zero : 0
NEED_SUM_EXPOSURE_TO_MJD : 1