From 22ddfdfc85f4dc70bb894822bd3e14f4cd80d790 Mon Sep 17 00:00:00 2001 From: Achaad Date: Mon, 8 Sep 2025 10:44:04 +0300 Subject: [PATCH 1/3] fix: fixed an error in calibration metadata extraction --- asar_xarray/envisat_direct.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/asar_xarray/envisat_direct.py b/asar_xarray/envisat_direct.py index 3986d89..8b1e89b 100644 --- a/asar_xarray/envisat_direct.py +++ b/asar_xarray/envisat_direct.py @@ -114,7 +114,6 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) -> # antenna gain n_samp = gdal_metadata["line_length"] spreading_loss: np.ndarray[Any] = np.array([]) - gain_arr: np.ndarray[Any] = np.array([]) if gdal_metadata["sample_type"] == "DETECTED": gain_arr = np.ones(n_samp) spreading_loss = np.ones(n_samp) @@ -130,7 +129,7 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) -> sat_x = osv[0]["x_pos_1"] * 1e-2 sat_y = osv[0]["y_pos_1"] * 1e-2 sat_z = osv[0]["z_pos_1"] * 1e-2 - + gain_list: list[float] = [] for n in range(n_samp): # https://github.com/senbox-org/microwave-toolbox/blob/master/sar-op-calibration/src/main/java/eu/esa/sar/calibration/gpf/calibrators/ASARCalibrator.java r = r_first + n * range_spacing @@ -158,13 +157,14 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) -> # dB -> linear gain = math.pow(10, antenna_gains[elev_idx] / 10) - np.append(gain_arr, 1 / gain) + gain_list.append(1 / gain) + gain_arr = np.array(gain_list) # calculate spreading loss compensation for n in range(n_samp): r = r_first + n * range_spacing factor = math.sqrt((range_ref / r) ** 3) - np.append(spreading_loss, 1 / factor) + spreading_loss = np.append(spreading_loss, 1 / factor) cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][0]["ext_cal_fact"] From 9a6e1453831d5ac35da524a8f0745a832f24174b Mon Sep 17 00:00:00 2001 From: Priit Pender Date: Mon, 8 Sep 2025 10:56:20 +0300 Subject: [PATCH 2/3] Fix APS scaling and missing AP mode scaling factor index usage. --- asar_xarray/envisat_direct.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/asar_xarray/envisat_direct.py b/asar_xarray/envisat_direct.py index 8b1e89b..07fa442 100644 --- a/asar_xarray/envisat_direct.py +++ b/asar_xarray/envisat_direct.py @@ -161,12 +161,17 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) -> gain_arr = np.array(gain_list) # calculate spreading loss compensation + + spread_loss_power = 3.0 + if "APS" in gdal_metadata["product"]: + spread_loss_power = 4.0 for n in range(n_samp): r = r_first + n * range_spacing - factor = math.sqrt((range_ref / r) ** 3) + factor = math.pow((range_ref / r), spread_loss_power) spreading_loss = np.append(spreading_loss, 1 / factor) - cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][0]["ext_cal_fact"] + factor_offset = gdal_metadata["polarization_idx"] + cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][factor_offset]["ext_cal_fact"] metadata["cal_factor"] = cal_factor metadata["cal_vector"] = np.array(spreading_loss) * np.array(gain_arr) From 0a257cc008c10bb7c8fd604ae768773ef34bfaa0 Mon Sep 17 00:00:00 2001 From: Achaad Date: Mon, 8 Sep 2025 11:09:57 +0300 Subject: [PATCH 3/3] style: fix too long line --- asar_xarray/envisat_direct.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/asar_xarray/envisat_direct.py b/asar_xarray/envisat_direct.py index 07fa442..8db8cf3 100644 --- a/asar_xarray/envisat_direct.py +++ b/asar_xarray/envisat_direct.py @@ -171,7 +171,8 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) -> spreading_loss = np.append(spreading_loss, 1 / factor) factor_offset = gdal_metadata["polarization_idx"] - cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][factor_offset]["ext_cal_fact"] + cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][factor_offset][ + "ext_cal_fact"] metadata["cal_factor"] = cal_factor metadata["cal_vector"] = np.array(spreading_loss) * np.array(gain_arr)