From 4907f8cf46dbdd43524f988759a5ee9b43739023 Mon Sep 17 00:00:00 2001
From: David McKenna <mckenna@astron.nl>
Date: Thu, 6 Feb 2025 16:38:33 +0100
Subject: [PATCH] MISC: Scrap work for A&O plenary

---
 scraps/scrap_vis.py | 60 +++++++++++++++++++++++++++++++++++++++------
 1 file changed, 53 insertions(+), 7 deletions(-)

diff --git a/scraps/scrap_vis.py b/scraps/scrap_vis.py
index 22d66f4..c9fca56 100644
--- a/scraps/scrap_vis.py
+++ b/scraps/scrap_vis.py
@@ -130,7 +130,7 @@ def plot_antenna(antenna_idx, input_hdf5_files, outdir: str = "./", fade=0.8, de
 					solt = sol
 
 				if i == count:
-					src = SkyCoord.from_name(sol.attrs["observation_source"])
+					src = SkyCoord.from_name(sol.attrs["observation_source"].split(',')[0])
 					obstime = Time(sol.attrs["observation_date"])
 					alt = src.transform_to(AltAz(obstime=obstime, location=el)).alt.deg
 					alts.append(alt)
@@ -179,7 +179,7 @@ def plot_antenna(antenna_idx, input_hdf5_files, outdir: str = "./", fade=0.8, de
 				if i != 0:
 					solt.close()
 
-			src = SkyCoord.from_name(sol.attrs["observation_source"])
+			src = SkyCoord.from_name(sol.attrs["observation_source"].split(',')[0])
 			obstime = Time(sol.attrs["observation_date"])
 			alt = src.transform_to(AltAz(obstime=obstime, location=el)).alt.deg
 			fig.suptitle(
@@ -198,7 +198,19 @@ def plot_antenna(antenna_idx, input_hdf5_files, outdir: str = "./", fade=0.8, de
 			res.append((phases, offsets))
 	return res, alts
 
-def plot_single_int_antenna(antenna_idx, input_hdf5_file, outdir: str = "./", freq = None, pols = None):
+
+def build_jones_arr(dataset):
+	output = np.zeros((512, 2,2), dtype = np.complex128)
+	output[:, 0, 0] = dataset["x"]
+	output[:, 1, 1] = dataset["y"]
+	output[:, 0, 1] = dataset["xy"]
+	output[:, 1, 0] = dataset["yx"]
+
+	return output
+
+def plot_single_int_antenna(antenna_idx, input_hdf5_file, outdir: str = "./", freq = None, pols = None, reference_antenna: None | int = None):
+	if not os.path.exists(outdir):
+		os.mkdir(outdir)
 	plot_dims = int(np.sqrt(len(antenna_idx)))
 	print(plot_dims)
 
@@ -241,14 +253,36 @@ def plot_single_int_antenna(antenna_idx, input_hdf5_file, outdir: str = "./", fr
 		obstime = Time(sol.attrs["observation_date"])
 		alt = src.transform_to(AltAz(obstime=obstime, location=el)).alt.deg
 
+		if reference_antenna is not None:
+			ref_ant_component = np.zeros((512, 2, 2), dtype = np.complex128)
+			ref_ant_component[:, ...] =  np.exp(-1.0j * np.angle(np.linalg.det(build_jones_arr(solt["antennas"][f"{prefix}{reference_antenna:02d}"]))))[:, np.newaxis, np.newaxis]
+			# ref_data = build_jones_arr(solt["antennas"][f"{prefix}{reference_antenna:02d}"])
+			# ref_data[ref_data[:, 0, 0] == 0.0, 0, 0] = 1.0
+			# ref_data[ref_data[:, 1, 1] == 0.0, 1, 1] = 1.0
+			# ref_ant_component = np.exp(-1.0j * np.angle(ref_data))
+
 		for x in range(plot_dims):
 			for y in range(plot_dims):
 				antenna = antenna_idx[x * plot_dims + y]
 				data = solt["antennas"][f"{prefix}{antenna:02d}"]
 
+
+				if reference_antenna is not None:
+					expanded_data = build_jones_arr(data)
+					for i in range(512):
+						expanded_data[i] = expanded_data[i] @ ref_ant_component[i]
+					data = {
+						'x': expanded_data[:, 0, 0],
+						'y': expanded_data[:, 1, 1],
+						'xy': expanded_data[:, 0, 1],
+						'yx': expanded_data[:, 1, 1],
+					}
+
 				axs[x, y].set_title(f"Antenna {antenna}")
 				for pol in pols or ["x", "y"]:
 					datum = np.angle(np.array(data[f"{pol}"]))
+					# datum = np.angle(np.conj(np.array(data[f"{pol}"])))
+
 					axs[x, y].plot(
 						freq,
 						datum,
@@ -317,7 +351,7 @@ if __name__ == "__main__":
 	# 						'/Users/mckenna/l2_data/CS001/2024-12-06T16:27:59.604236/LBA/tmp/gains_nomask/CalTable-CS001-LBA_50MHz_2024-12-06T16:28:01_Merged Sky Model_NONE.h5',
 							# outdir='cs1_noblmask', freq=np.arange(512) * 100 / 512)
 
-# plot_single_int_antenna([0, 4, 6, 12, 29, 45, 52, 64, 78],
+	# plot_single_int_antenna([0, 4, 6, 12, 29, 45, 52, 64, 78],
 	# 					'/Users/mckenna/l2_data/CS001/2024-12-06T16:27:59.604236/LBA/tmp/gains/CalTable-CS001-LBA_50MHz_2024-12-06T16:29:41_Merged Sky Model_NONE.h5',
 	# 					outdir="./32_3x3/", freq=np.arange(512) * 100 / 512)
 	# for file in os.listdir("/Users/mckenna/l2_data/LBA_2024-12-06_60hr_run_gains_6step/"):
@@ -331,12 +365,24 @@ if __name__ == "__main__":
 	# 							os.path.join("/Users/mckenna/l2_data/LBA_2024-12-06_60hr_run_gains_6step", file),
 	# 							outdir="./ani_lba_cross/", freq=np.arange(512) * 100 / 512, pols = ['xy', 'yx'])
 
-# lba_dir =  "./folder_save_solutions_lba"
+	basepath = "/Users/mckenna/cal_pres/sb30_480_src_fix/gains/"
+	for file in os.listdir(basepath):
+		if not os.path.isfile(os.path.join(basepath, file)) or not file.endswith("5"):
+			continue
+
+		plot_single_int_antenna([0, 4, 6, 12, 29, 45, 52, 64, 78],
+								os.path.join(basepath, file),
+								outdir=os.path.join(basepath, "./ani_lba_ref/"), freq=np.arange(512) * 100 / 512, reference_antenna = 45)
+		plot_single_int_antenna([0, 4, 6, 12, 29, 45, 52, 64, 78],
+								os.path.join(basepath, file),
+								outdir=os.path.join(basepath, "./ani_lba_cross_ref/"), freq=np.arange(512) * 100 / 512, pols = ['xy', 'yx'], reference_antenna = 45)
+
+	# lba_dir =  os.path.join(basepath, "folder_save_solutions")
 	# lba_cal_ref_files = [os.path.join(lba_dir, file) for file in os.listdir(lba_dir) if "SolTable" in file and "old" not in file]
 	# lba_cal_ref_files.sort()
 	# # visualise_baseline_flagging("CS001LBA", 10.0)
-	# # plot_antenna([0, 47, 3, 83], lba_cal_ref_files)
-	# # plot_antenna([0, 5, 6, 42, 60, 80, 46, 47, 94], lba_cal_ref_files, lba_dir, fade = 0.5)
+	# plot_antenna([0, 47, 3, 83], lba_cal_ref_files)
+	# plot_antenna([0, 5, 6, 42, 60, 80, 46, 47, 94], lba_cal_ref_files, lba_dir, fade = 0.5)
 	#
 	# hba_dir = "./folder_save_solutions"
 	# hba_cal_ref_files = [os.path.join(hba_dir, file) for file in os.listdir(hba_dir) if
-- 
GitLab