# --- # jupyter: # jupytext: # formats: ipynb,py:percent # text_representation: # extension: .py # format_name: percent # format_version: '1.3' # jupytext_version: 1.16.2 # kernelspec: # display_name: temps # language: python # name: temps # --- # %% [markdown] # # FIGURE METRICS # %% [markdown] # ## METRICS FOR THE DIFFERENT METHODS ON THE WIDE FIELD SAMPLE # %% [markdown] # ### LOAD PYTHON MODULES # %% # %load_ext autoreload # %autoreload 2 # %% import pandas as pd import numpy as np import os from astropy.io import fits from astropy.table import Table import torch from pathlib import Path # %% # matplotlib settings from matplotlib import rcParams import matplotlib.pyplot as plt rcParams["mathtext.fontset"] = "stix" rcParams["font.family"] = "STIXGeneral" # %% import temps # %% from temps.archive import Archive from temps.utils import nmad from temps.temps_arch import EncoderPhotometry, MeasureZ from temps.temps import TempsModule from temps.plots import plot_photoz # %% eval_methods = True # %% [markdown] # ### LOAD DATA # %% # define here the directory containing the photometric catalogues parent_dir = Path( "/data/astro/scratch/lcabayol/insight/data/Euclid_EXT_MER_PHZ_DC2_v1.5" ) modules_dir = Path("../data/models/") filename_calib = "euclid_cosmos_DC2_S1_v2.1_calib_clean.fits" filename_valid = "euclid_cosmos_DC2_S1_v2.1_valid_matched.fits" # %% path_file = parent_dir / filename_valid # Creating the path to the file hdu_list = fits.open(path_file) cat = Table(hdu_list[1].data).to_pandas() cat = cat[cat["FLAG_PHOT"] == 0] cat = cat[cat["mu_class_L07"] == 1] cat = cat[(cat["z_spec_S15"] > 0) | (cat["photo_z_L15"] > 0)] cat = cat[cat["MAG_VIS"] < 25] # %% ztarget = [ cat["z_spec_S15"].values[ii] if cat["z_spec_S15"].values[ii] > 0 else cat["photo_z_L15"].values[ii] for ii in range(len(cat)) ] specz_or_photo = [ 0 if cat["z_spec_S15"].values[ii] > 0 else 1 for ii in range(len(cat)) ] ID = cat["ID"] VISmag = cat["MAG_VIS"] zsflag = cat["reliable_S15"] # %% photoz_archive = Archive( path_calib=parent_dir / filename_calib, path_valid=parent_dir / filename_valid, only_zspec=False, ) f = photoz_archive._extract_fluxes(catalogue=cat) col = photoz_archive._to_colors(f) # %% [markdown] # ### EVALUATE USING TRAINED MODELS # %% if eval_methods: dfs = {} for il, lab in enumerate(["z", "L15", "DA"]): nn_features = EncoderPhotometry() nn_features.load_state_dict( torch.load( modules_dir / f"modelF_{lab}.pt", map_location=torch.device("cpu") ) ) nn_z = MeasureZ(num_gauss=6) nn_z.load_state_dict( torch.load( modules_dir / f"modelZ_{lab}.pt", map_location=torch.device("cpu") ) ) temps_module = TempsModule(nn_features, nn_z) z, pz, odds = temps_module.get_pz( input_data=torch.Tensor(col), return_pz=True, return_flag=True ) # Create a DataFrame with the desired columns df = pd.DataFrame( np.c_[ID, VISmag, z, odds, ztarget, zsflag, specz_or_photo], columns=["ID", "VISmag", "z", "odds", "ztarget", "zsflag", "S15_L15_flag"], ) # Calculate additional columns or operations if needed df["zwerr"] = (df.z - df.ztarget) / (1 + df.ztarget) # Drop any rows with NaN values df = df.dropna() # Assign the DataFrame to a key in the dictionary dfs[lab] = df # %% dfs["z"]["zwerr"] = (dfs["z"].z - dfs["z"].ztarget) / (1 + dfs["z"].ztarget) dfs["L15"]["zwerr"] = (dfs["L15"].z - dfs["L15"].ztarget) / (1 + dfs["L15"].ztarget) dfs["DA"]["zwerr"] = (dfs["DA"].z - dfs["DA"].ztarget) / (1 + dfs["DA"].ztarget) # %% [markdown] # ### LOAD CATALOGUES FROM PREVIOUS TRAINING # %% if not eval_methods: dfs = {} dfs["z"] = pd.read_csv(parent_dir / "predictions_specztraining.csv", header=0) dfs["L15"] = pd.read_csv(parent_dir / "predictions_speczL15training.csv", header=0) dfs["DA"] = pd.read_csv(parent_dir / "predictions_speczDAtraining.csv", header=0) # %% [markdown] # ### MAKE PLOT # %% df_list = [dfs["z"], dfs["L15"], dfs["DA"]] # %% plot_photoz( df_list, nbins=8, xvariable="VISmag", metric="nmad", type_bin="bin", label_list=["zs", "zs+L15", r"TEMPS"], save=False, samp="L15", ) # %%