Skip to content

Commit 2c703b1

Browse files
AchaadAchaadpriit111
authored
fix: fix calibration metadata not being parsed correctly (#53)
* fix: fixed an error in calibration metadata extraction * Fix APS scaling and missing AP mode scaling factor index usage. --------- Co-authored-by: Achaad <achaad@achaad.eu> Co-authored-by: Priit Pender <priit@alloca.ee>
1 parent 044b1fb commit 2c703b1

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

asar_xarray/envisat_direct.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) ->
114114
# antenna gain
115115
n_samp = gdal_metadata["line_length"]
116116
spreading_loss: np.ndarray[Any] = np.array([])
117-
gain_arr: np.ndarray[Any] = np.array([])
118117
if gdal_metadata["sample_type"] == "DETECTED":
119118
gain_arr = np.ones(n_samp)
120119
spreading_loss = np.ones(n_samp)
@@ -130,7 +129,7 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) ->
130129
sat_x = osv[0]["x_pos_1"] * 1e-2
131130
sat_y = osv[0]["y_pos_1"] * 1e-2
132131
sat_z = osv[0]["z_pos_1"] * 1e-2
133-
132+
gain_list: list[float] = []
134133
for n in range(n_samp):
135134
# https://github.com/senbox-org/microwave-toolbox/blob/master/sar-op-calibration/src/main/java/eu/esa/sar/calibration/gpf/calibrators/ASARCalibrator.java
136135
r = r_first + n * range_spacing
@@ -158,15 +157,22 @@ def parse_direct(path: str, gdal_metadata: dict[str, Any], polarization: str) ->
158157
# dB -> linear
159158
gain = math.pow(10, antenna_gains[elev_idx] / 10)
160159

161-
np.append(gain_arr, 1 / gain)
160+
gain_list.append(1 / gain)
161+
gain_arr = np.array(gain_list)
162162

163163
# calculate spreading loss compensation
164+
165+
spread_loss_power = 3.0
166+
if "APS" in gdal_metadata["product"]:
167+
spread_loss_power = 4.0
164168
for n in range(n_samp):
165169
r = r_first + n * range_spacing
166-
factor = math.sqrt((range_ref / r) ** 3)
167-
np.append(spreading_loss, 1 / factor)
170+
factor = math.pow((range_ref / r), spread_loss_power)
171+
spreading_loss = np.append(spreading_loss, 1 / factor)
168172

169-
cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][0]["ext_cal_fact"]
173+
factor_offset = gdal_metadata["polarization_idx"]
174+
cal_factor = gdal_metadata["records"]["main_processing_params"]["calibration_factors"][factor_offset][
175+
"ext_cal_fact"]
170176

171177
metadata["cal_factor"] = cal_factor
172178
metadata["cal_vector"] = np.array(spreading_loss) * np.array(gain_arr)

0 commit comments

Comments
 (0)