grdwindinversion 0.3.6__py3-none-any.whl → 0.3.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- grdwindinversion/config_prod_v3.yaml +70 -0
- grdwindinversion/inversion.py +202 -45
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info}/METADATA +4 -2
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info}/RECORD +9 -8
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info}/WHEEL +1 -1
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info}/entry_points.txt +0 -0
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info/licenses}/AUTHORS.rst +0 -0
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info/licenses}/LICENSE +0 -0
- {grdwindinversion-0.3.6.dist-info → grdwindinversion-0.3.8.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
no_subdir: True
|
|
2
|
+
winddir_convention: "meteorological"
|
|
3
|
+
add_gradientsfeatures: False
|
|
4
|
+
add_nrcs_model: False
|
|
5
|
+
S1A:
|
|
6
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
7
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
8
|
+
GMF_VH_NAME: "gmf_s1_v2"
|
|
9
|
+
dsig_VH_NAME: "gmf_s1_v2"
|
|
10
|
+
dsig_cr_step: "nrcs"
|
|
11
|
+
apply_flattening: True
|
|
12
|
+
S1_EW_calG>20190731:
|
|
13
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
14
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
15
|
+
GMF_VH_NAME: "gmf_s1_v3_ew_rec"
|
|
16
|
+
dsig_VH_NAME: "dsig_wspd_s1_ew_rec_v3"
|
|
17
|
+
dsig_cr_step: "wspd"
|
|
18
|
+
apply_flattening: True
|
|
19
|
+
recalibration: False
|
|
20
|
+
ancillary: "ecmwf"
|
|
21
|
+
inc_step: 0.1
|
|
22
|
+
wspd_step: 0.1
|
|
23
|
+
phi_step: 1.0
|
|
24
|
+
resolution: "high"
|
|
25
|
+
S1B:
|
|
26
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
27
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
28
|
+
GMF_VH_NAME: "gmf_s1_v2"
|
|
29
|
+
dsig_VH_NAME: "gmf_s1_v2"
|
|
30
|
+
dsig_cr_step: "nrcs"
|
|
31
|
+
apply_flattening: True
|
|
32
|
+
S1_EW_calG>20190731:
|
|
33
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
34
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
35
|
+
GMF_VH_NAME: "gmf_s1_v3_ew_rec"
|
|
36
|
+
dsig_VH_NAME: "dsig_wspd_s1_ew_rec_v3"
|
|
37
|
+
dsig_cr_step: "wspd"
|
|
38
|
+
apply_flattening: True
|
|
39
|
+
recalibration: False
|
|
40
|
+
ancillary: "ecmwf"
|
|
41
|
+
inc_step: 0.1
|
|
42
|
+
wspd_step: 0.1
|
|
43
|
+
phi_step: 1.0
|
|
44
|
+
resolution: "high"
|
|
45
|
+
RS2:
|
|
46
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
47
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
48
|
+
GMF_VH_NAME: "gmf_rs2_v3"
|
|
49
|
+
dsig_VH_NAME: "dsig_wspd_rs2_v3"
|
|
50
|
+
dsig_cr_step: "wspd"
|
|
51
|
+
apply_flattening: False
|
|
52
|
+
recalibration: False
|
|
53
|
+
ancillary: "ecmwf"
|
|
54
|
+
inc_step: 0.1
|
|
55
|
+
wspd_step: 0.1
|
|
56
|
+
phi_step: 1.0
|
|
57
|
+
resolution: "high"
|
|
58
|
+
RCM:
|
|
59
|
+
GMF_HH_NAME: "nc_lut_gmf_cmod5n_Rhigh_hh_mouche1"
|
|
60
|
+
GMF_VV_NAME: "gmf_cmod5n"
|
|
61
|
+
GMF_VH_NAME: "gmf_rcm_v3"
|
|
62
|
+
dsig_VH_NAME: "dsig_wspd_rcm_v3"
|
|
63
|
+
dsig_cr_step: "wspd"
|
|
64
|
+
apply_flattening: True
|
|
65
|
+
recalibration: False
|
|
66
|
+
ancillary: "ecmwf"
|
|
67
|
+
inc_step: 0.1
|
|
68
|
+
wspd_step: 0.1
|
|
69
|
+
phi_step: 1.0
|
|
70
|
+
resolution: "high"
|
grdwindinversion/inversion.py
CHANGED
|
@@ -189,7 +189,6 @@ def getAncillary(meta, ancillary_name="ecmwf"):
|
|
|
189
189
|
"""
|
|
190
190
|
|
|
191
191
|
if ancillary_name == "ecmwf":
|
|
192
|
-
|
|
193
192
|
logging.debug("conf: %s", getConf())
|
|
194
193
|
ec01 = getConf()["ecmwf_0100_1h"]
|
|
195
194
|
ec0125 = getConf()["ecmwf_0125_1h"]
|
|
@@ -282,6 +281,93 @@ def getAncillary(meta, ancillary_name="ecmwf"):
|
|
|
282
281
|
"ancillary_name must be ecmwf/era5, got %s" % ancillary_name)
|
|
283
282
|
|
|
284
283
|
|
|
284
|
+
@timing(logger=logger.debug)
|
|
285
|
+
def inverse_dsig_wspd(
|
|
286
|
+
dual_pol,
|
|
287
|
+
inc,
|
|
288
|
+
sigma0,
|
|
289
|
+
sigma0_dual,
|
|
290
|
+
ancillary_wind,
|
|
291
|
+
nesz_cr,
|
|
292
|
+
dsig_cr_name,
|
|
293
|
+
model_co,
|
|
294
|
+
model_cross,
|
|
295
|
+
**kwargs,
|
|
296
|
+
):
|
|
297
|
+
"""
|
|
298
|
+
Invert sigma0 to retrieve wind using model (lut or gmf).
|
|
299
|
+
|
|
300
|
+
Parameters
|
|
301
|
+
----------
|
|
302
|
+
dual_pol: bool
|
|
303
|
+
True if dualpol, False if singlepol
|
|
304
|
+
inc: xarray.DataArray
|
|
305
|
+
incidence angle
|
|
306
|
+
sigma0: xarray.DataArray
|
|
307
|
+
sigma0 to be inverted
|
|
308
|
+
sigma0_dual: xarray.DataArray
|
|
309
|
+
sigma0 to be inverted for dualpol
|
|
310
|
+
ancillary_wind=: xarray.DataArray (numpy.complex28)
|
|
311
|
+
ancillary wind
|
|
312
|
+
| (for example ecmwf winds), in **ANTENNA convention**,
|
|
313
|
+
nesz_cr: xarray.DataArray
|
|
314
|
+
noise equivalent sigma0 | flattened or not
|
|
315
|
+
dsig_cr_name: str
|
|
316
|
+
dsig_cr name
|
|
317
|
+
model_co: str
|
|
318
|
+
model to use for VV or HH polarization.
|
|
319
|
+
model_cross: str
|
|
320
|
+
model to use for VH or HV polarization.
|
|
321
|
+
|
|
322
|
+
Returns
|
|
323
|
+
-------
|
|
324
|
+
xarray.DataArray
|
|
325
|
+
inverted wind in copol in ** antenna convention** .
|
|
326
|
+
xarray.DataArray
|
|
327
|
+
inverted wind in dualpol in ** antenna convention** .
|
|
328
|
+
xarray.DataArray
|
|
329
|
+
inverted wind in crosspol in ** antenna convention** .
|
|
330
|
+
xarray.DataArray | array
|
|
331
|
+
alpha (ponderation between co and crosspol)
|
|
332
|
+
|
|
333
|
+
See Also
|
|
334
|
+
--------
|
|
335
|
+
xsarsea documentation
|
|
336
|
+
https://cerweb.ifremer.fr/datarmor/doc_sphinx/xsarsea/
|
|
337
|
+
"""
|
|
338
|
+
|
|
339
|
+
# dsig_cr_step == "wspd":
|
|
340
|
+
|
|
341
|
+
wind_co = xsarsea.windspeed.invert_from_model(
|
|
342
|
+
inc,
|
|
343
|
+
sigma0,
|
|
344
|
+
ancillary_wind=ancillary_wind,
|
|
345
|
+
model=model_co,
|
|
346
|
+
**kwargs
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
if dual_pol:
|
|
350
|
+
|
|
351
|
+
wind_cross = windspeed.invert_from_model(
|
|
352
|
+
inc.values,
|
|
353
|
+
sigma0_dual.values,
|
|
354
|
+
model=model_cross,
|
|
355
|
+
**kwargs,
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
wspd_co = np.abs(wind_co)
|
|
359
|
+
wspd_cross = np.abs(wind_cross)
|
|
360
|
+
SNR_cross = sigma0_dual.values/nesz_cr.values
|
|
361
|
+
alpha = windspeed.get_dsig_wspd(dsig_cr_name, wind_cross, SNR_cross)
|
|
362
|
+
|
|
363
|
+
wpsd_dual = alpha * wspd_co + (1 - alpha) * wspd_cross
|
|
364
|
+
wind_dual = wpsd_dual * np.exp(1j * np.angle(wind_co))
|
|
365
|
+
|
|
366
|
+
return wind_co, wind_dual, wind_cross, alpha
|
|
367
|
+
|
|
368
|
+
return wind_co, None, None, None
|
|
369
|
+
|
|
370
|
+
|
|
285
371
|
@timing(logger=logger.debug)
|
|
286
372
|
def inverse(
|
|
287
373
|
dual_pol,
|
|
@@ -321,8 +407,12 @@ def inverse(
|
|
|
321
407
|
|
|
322
408
|
Returns
|
|
323
409
|
-------
|
|
324
|
-
xarray.DataArray
|
|
325
|
-
inverted wind in ** antenna convention** .
|
|
410
|
+
xarray.DataArray
|
|
411
|
+
inverted wind in copol in ** antenna convention** .
|
|
412
|
+
xarray.DataArray
|
|
413
|
+
inverted wind in dualpol in ** antenna convention** .
|
|
414
|
+
xarray.DataArray
|
|
415
|
+
inverted wind in crosspol in ** antenna convention** .
|
|
326
416
|
|
|
327
417
|
See Also
|
|
328
418
|
--------
|
|
@@ -519,8 +609,15 @@ def makeL2asOwi(xr_dataset, config):
|
|
|
519
609
|
)
|
|
520
610
|
|
|
521
611
|
if config["l2_params"]["dual_pol"]:
|
|
612
|
+
if config["dsig_cr_step"] == "nrcs":
|
|
613
|
+
xr_dataset = xr_dataset.rename({
|
|
614
|
+
'dsig_cross': 'owiDsig_cross',
|
|
615
|
+
})
|
|
616
|
+
else:
|
|
617
|
+
xr_dataset = xr_dataset.rename({
|
|
618
|
+
'alpha': 'owiAlpha',
|
|
619
|
+
})
|
|
522
620
|
xr_dataset = xr_dataset.rename({
|
|
523
|
-
'dsig_cross': 'owiDsig_cross',
|
|
524
621
|
'winddir_cross': 'owiWindDirection_cross',
|
|
525
622
|
'winddir_dual': 'owiWindDirection',
|
|
526
623
|
'windspeed_cross': 'owiWindSpeed_cross',
|
|
@@ -784,6 +881,7 @@ def preprocess(
|
|
|
784
881
|
)
|
|
785
882
|
|
|
786
883
|
try:
|
|
884
|
+
logging.info(f"recalibration = {recalibration}")
|
|
787
885
|
if (recalibration) & ("SENTINEL" in sensor_longname):
|
|
788
886
|
logging.info(
|
|
789
887
|
f"recalibration is {recalibration} : Kersten formula is applied"
|
|
@@ -855,8 +953,23 @@ def preprocess(
|
|
|
855
953
|
copol_gmf = "HH"
|
|
856
954
|
crosspol_gmf = "VH"
|
|
857
955
|
|
|
858
|
-
|
|
859
|
-
|
|
956
|
+
cond_aux_cal = (sensor == "S1A" or sensor == "S1B") and (
|
|
957
|
+
xsar_dataset.dataset.attrs["aux_cal"].split("_")[-1][1:9] > '20190731')
|
|
958
|
+
if cond_aux_cal and xr_dataset.attrs["swath"] == "EW" and "S1_EW_calG>20190731" in config.keys():
|
|
959
|
+
model_co = config["S1_EW_calG>20190731"]["GMF_" + copol_gmf + "_NAME"]
|
|
960
|
+
model_cross = config["S1_EW_calG>20190731"]["GMF_" +
|
|
961
|
+
crosspol_gmf + "_NAME"]
|
|
962
|
+
dsig_cr_name = config["S1_EW_calG>20190731"]["dsig_" +
|
|
963
|
+
crosspol_gmf + "_NAME"]
|
|
964
|
+
apply_flattening = config["S1_EW_calG>20190731"]["apply_flattening"]
|
|
965
|
+
dsig_cr_step = config["S1_EW_calG>20190731"]["dsig_cr_step"]
|
|
966
|
+
|
|
967
|
+
else:
|
|
968
|
+
model_co = config["GMF_" + copol_gmf + "_NAME"]
|
|
969
|
+
model_cross = config["GMF_" + crosspol_gmf + "_NAME"]
|
|
970
|
+
dsig_cr_name = config["dsig_" + crosspol_gmf + "_NAME"]
|
|
971
|
+
apply_flattening = config["apply_flattening"]
|
|
972
|
+
dsig_cr_step = config["dsig_cr_step"]
|
|
860
973
|
|
|
861
974
|
# register paramaters in config
|
|
862
975
|
config["l2_params"]["dual_pol"] = dual_pol
|
|
@@ -868,6 +981,9 @@ def preprocess(
|
|
|
868
981
|
config["l2_params"]["model_cross"] = model_cross
|
|
869
982
|
config["sensor_longname"] = sensor_longname
|
|
870
983
|
config["sensor"] = sensor
|
|
984
|
+
config["dsig_cr_step"] = dsig_cr_step
|
|
985
|
+
config["dsig_cr_name"] = dsig_cr_name
|
|
986
|
+
config["apply_flattening"] = apply_flattening
|
|
871
987
|
|
|
872
988
|
# need to load LUTs before inversion
|
|
873
989
|
nc_luts = [x for x in [model_co, model_cross] if x.startswith("nc_lut")]
|
|
@@ -1048,35 +1164,35 @@ def preprocess(
|
|
|
1048
1164
|
xr_dataset['nesz_cross_flattened'].attrs[
|
|
1049
1165
|
"comment"] = 'nesz has been flattened using windspeed.nesz_flattening'
|
|
1050
1166
|
|
|
1051
|
-
if
|
|
1167
|
+
if dsig_cr_step == "nrcs":
|
|
1052
1168
|
# dsig
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1169
|
+
if apply_flattening:
|
|
1170
|
+
xr_dataset["dsig_cross"] = windspeed.get_dsig(
|
|
1171
|
+
dsig_cr_name,
|
|
1172
|
+
xr_dataset.incidence,
|
|
1173
|
+
xr_dataset["sigma0_ocean"].sel(pol=crosspol),
|
|
1174
|
+
xr_dataset.nesz_cross_flattened,
|
|
1175
|
+
)
|
|
1059
1176
|
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1177
|
+
xr_dataset.dsig_cross.attrs["formula_used"] = config[
|
|
1178
|
+
"dsig_" + crosspol_gmf + "_NAME"
|
|
1179
|
+
]
|
|
1063
1180
|
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
)
|
|
1181
|
+
else:
|
|
1182
|
+
xr_dataset["dsig_cross"] = windspeed.get_dsig(
|
|
1183
|
+
dsig_cr_name,
|
|
1184
|
+
xr_dataset.incidence,
|
|
1185
|
+
xr_dataset["sigma0_ocean"].sel(pol=crosspol),
|
|
1186
|
+
xr_dataset.nesz.sel(pol=crosspol),
|
|
1187
|
+
)
|
|
1072
1188
|
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1189
|
+
xr_dataset.dsig_cross.attrs["comment"] = (
|
|
1190
|
+
"variable used to ponderate copol and crosspol. this ponderation is done will combining cost functions during inversion process"
|
|
1191
|
+
)
|
|
1076
1192
|
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1193
|
+
xr_dataset.dsig_cross.attrs["apply_flattening"] = str(
|
|
1194
|
+
apply_flattening
|
|
1195
|
+
)
|
|
1080
1196
|
|
|
1081
1197
|
if (recalibration) & ("SENTINEL" in sensor_longname):
|
|
1082
1198
|
xr_dataset.attrs["aux_cal_recal"] = xsar_dataset.datatree["recalibration"].attrs["aux_cal_new"]
|
|
@@ -1254,6 +1370,7 @@ def makeL2(
|
|
|
1254
1370
|
input filename
|
|
1255
1371
|
outdir : str
|
|
1256
1372
|
output folder
|
|
1373
|
+
|
|
1257
1374
|
config_path : str
|
|
1258
1375
|
configuration file path
|
|
1259
1376
|
overwrite : bool, optional
|
|
@@ -1289,10 +1406,15 @@ def makeL2(
|
|
|
1289
1406
|
dual_pol = config["l2_params"]["dual_pol"]
|
|
1290
1407
|
ancillary_name = config["ancillary"]
|
|
1291
1408
|
sensor_longname = config["sensor_longname"]
|
|
1292
|
-
|
|
1409
|
+
dsig_cr_step = config["dsig_cr_step"]
|
|
1410
|
+
dsig_cr_name = config["dsig_cr_name"]
|
|
1411
|
+
apply_flattening = config["apply_flattening"]
|
|
1293
1412
|
if dual_pol:
|
|
1294
1413
|
sigma0_ocean_cross = xr_dataset["sigma0_ocean"].sel(pol=crosspol)
|
|
1295
|
-
|
|
1414
|
+
if dsig_cr_step == "nrcs":
|
|
1415
|
+
dsig_cross = xr_dataset["dsig_cross"]
|
|
1416
|
+
else:
|
|
1417
|
+
dsig_cross = 0.1
|
|
1296
1418
|
else:
|
|
1297
1419
|
sigma0_ocean_cross = None
|
|
1298
1420
|
dsig_cross = 0.1 # default value set in xsarsea
|
|
@@ -1312,18 +1434,50 @@ def makeL2(
|
|
|
1312
1434
|
inc_check_co, inc_check_cross = check_incidence_range(
|
|
1313
1435
|
xr_dataset["incidence"], [model_co, model_cross], **kwargs
|
|
1314
1436
|
)
|
|
1437
|
+
if dsig_cr_step == "nrcs":
|
|
1438
|
+
logging.info(
|
|
1439
|
+
"dsig_cr_step is nrcs : polarization are mixed at cost function step")
|
|
1440
|
+
wind_co, wind_dual, windspeed_cr = inverse(
|
|
1441
|
+
dual_pol,
|
|
1442
|
+
inc=xr_dataset["incidence"],
|
|
1443
|
+
sigma0=xr_dataset["sigma0_ocean"].sel(pol=copol),
|
|
1444
|
+
sigma0_dual=sigma0_ocean_cross,
|
|
1445
|
+
ancillary_wind=xr_dataset["ancillary_wind"],
|
|
1446
|
+
dsig_cr=dsig_cross,
|
|
1447
|
+
model_co=model_co,
|
|
1448
|
+
model_cross=model_cross,
|
|
1449
|
+
**kwargs,
|
|
1450
|
+
)
|
|
1451
|
+
elif dsig_cr_step == "wspd":
|
|
1452
|
+
logging.info(
|
|
1453
|
+
"dsig_cr_step is wspd : polarization are mixed at winds speed step")
|
|
1454
|
+
|
|
1455
|
+
if apply_flattening:
|
|
1456
|
+
nesz_cross = xr_dataset["nesz_cross_flattened"]
|
|
1457
|
+
else:
|
|
1458
|
+
nesz_cross = xr_dataset.nesz.sel(pol=crosspol)
|
|
1459
|
+
|
|
1460
|
+
wind_co, wind_dual, windspeed_cr, alpha = inverse_dsig_wspd(
|
|
1461
|
+
dual_pol,
|
|
1462
|
+
inc=xr_dataset["incidence"],
|
|
1463
|
+
sigma0=xr_dataset["sigma0_ocean"].sel(pol=copol),
|
|
1464
|
+
sigma0_dual=sigma0_ocean_cross,
|
|
1465
|
+
ancillary_wind=xr_dataset["ancillary_wind"],
|
|
1466
|
+
nesz_cr=nesz_cross,
|
|
1467
|
+
dsig_cr_name=dsig_cr_name,
|
|
1468
|
+
model_co=model_co,
|
|
1469
|
+
model_cross=model_cross,
|
|
1470
|
+
**kwargs
|
|
1471
|
+
)
|
|
1472
|
+
xr_dataset["alpha"] = xr.DataArray(
|
|
1473
|
+
data=alpha, dims=xr_dataset["incidence"].dims, coords=xr_dataset["incidence"].coords)
|
|
1474
|
+
xr_dataset["alpha"].attrs["apply_flattening"] = str(apply_flattening)
|
|
1475
|
+
xr_dataset["alpha"].attrs["comments"] = "alpha used to ponderate copol and crosspol. this ponderation is done will combining wind speeds."
|
|
1476
|
+
|
|
1477
|
+
else:
|
|
1478
|
+
raise ValueError(
|
|
1479
|
+
f"dsig_cr_step must be 'nrcs' or 'wspd', got {dsig_cr_step}")
|
|
1315
1480
|
|
|
1316
|
-
wind_co, wind_dual, windspeed_cr = inverse(
|
|
1317
|
-
dual_pol,
|
|
1318
|
-
inc=xr_dataset["incidence"],
|
|
1319
|
-
sigma0=xr_dataset["sigma0_ocean"].sel(pol=copol),
|
|
1320
|
-
sigma0_dual=sigma0_ocean_cross,
|
|
1321
|
-
ancillary_wind=xr_dataset["ancillary_wind"],
|
|
1322
|
-
dsig_cr=dsig_cross,
|
|
1323
|
-
model_co=model_co,
|
|
1324
|
-
model_cross=model_cross,
|
|
1325
|
-
**kwargs,
|
|
1326
|
-
)
|
|
1327
1481
|
# windspeed_co
|
|
1328
1482
|
xr_dataset["windspeed_co"] = np.abs(wind_co)
|
|
1329
1483
|
xr_dataset["windspeed_co"].attrs["units"] = "m.s⁻1"
|
|
@@ -1351,8 +1505,11 @@ def makeL2(
|
|
|
1351
1505
|
% (model_co, copol, model_cross, crosspol)
|
|
1352
1506
|
)
|
|
1353
1507
|
xr_dataset["windspeed_dual"].attrs["standart_name"] = "wind_speed"
|
|
1354
|
-
xr_dataset["windspeed_dual"].attrs["model"] =
|
|
1355
|
-
|
|
1508
|
+
xr_dataset["windspeed_dual"].attrs["model"] = (model_co, model_cross)
|
|
1509
|
+
xr_dataset["windspeed_dual"].attrs["combining_method"] = dsig_cr_step
|
|
1510
|
+
|
|
1511
|
+
if "comment" in xr_dataset["windspeed_dual"].attrs:
|
|
1512
|
+
del xr_dataset["windspeed_dual"].attrs["comment"]
|
|
1356
1513
|
|
|
1357
1514
|
xr_dataset["winddir_dual"] = transform_winddir(
|
|
1358
1515
|
wind_dual,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: grdwindinversion
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: Package to perform Wind inversion from GRD Level-1 SAR images
|
|
5
5
|
Author-email: Antoine Grouazel <antoine.grouazel@ifremer.fr>
|
|
6
6
|
License: MIT
|
|
@@ -27,6 +27,8 @@ Requires-Dist: numpy
|
|
|
27
27
|
Requires-Dist: scipy
|
|
28
28
|
Requires-Dist: fsspec
|
|
29
29
|
Requires-Dist: aiohttp
|
|
30
|
+
Requires-Dist: xmlschema==3.4.3
|
|
31
|
+
Dynamic: license-file
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
[](https://pypi.org/project/grdwindinversion/)
|
|
@@ -5,18 +5,19 @@ grdwindinversion/config_prod_recal.yaml,sha256=74n2J4tzSx1I5vaat3ydwig1jyfDgxGTG
|
|
|
5
5
|
grdwindinversion/config_prod_recal_streaks_nrcsmod.yaml,sha256=ob0YmzHrwkI4GLxaR9HzidYtXBrTOAlEYwPYdCK7AqA,1092
|
|
6
6
|
grdwindinversion/config_prod_streaks.yaml,sha256=lJMl4qH6XYqO8ich7yW0WDQsQDrjmWThlLyx1xZy1DA,1313
|
|
7
7
|
grdwindinversion/config_prod_streaks_nrcsmod.yaml,sha256=4yC4KcsC7rUumYHwhpKxM8_LDMe_Je-RIu4-9e1ayp8,1312
|
|
8
|
+
grdwindinversion/config_prod_v3.yaml,sha256=J6lb8swIa7M-P4DjnTqKP1Bzp3b2XWNZp_E1FCrPGXQ,1953
|
|
8
9
|
grdwindinversion/data_config.yaml,sha256=FnglUHbAtGwHWg8w86hwZt3-vo-dY8uIjxqyI1jZpv8,567
|
|
9
10
|
grdwindinversion/gradientFeatures.py,sha256=NIeAJzb1zrlJPBq1th7wjEZoNJMxwqDpNHLMWP6FQN0,18198
|
|
10
|
-
grdwindinversion/inversion.py,sha256=
|
|
11
|
+
grdwindinversion/inversion.py,sha256=4AM5CUyLexHW4yX7yMspfW2osA4DTGm8I0KTWZbPiUA,61752
|
|
11
12
|
grdwindinversion/load_config.py,sha256=ZPozOWt0rf2Pmyc6P2D75cE_9wKUfKfr7RUzlE3WoiY,833
|
|
12
13
|
grdwindinversion/main.py,sha256=Cwmxxz-PEt53JvpTL0Jx1WKLJpWvlIXZ9xtnyGKrGHY,3254
|
|
13
14
|
grdwindinversion/utils.py,sha256=2BRq_UEbKbP5yCy_0X-nV-SQFmmp4aKrFaRgrs5MqJo,4347
|
|
14
15
|
grdwindinversion/utils_memory.py,sha256=NA0bvkpCTkEiqCcJuldG1XsrP40-3AQUUt3HLeoRpbY,1432
|
|
15
16
|
grdwindinversion/.github/ISSUE_TEMPLATE.md,sha256=qiM_a7CCUz3fSrz3Q20Se1nwPNFS8QCc8tkwK_0DSCo,327
|
|
16
|
-
grdwindinversion-0.3.
|
|
17
|
-
grdwindinversion-0.3.
|
|
18
|
-
grdwindinversion-0.3.
|
|
19
|
-
grdwindinversion-0.3.
|
|
20
|
-
grdwindinversion-0.3.
|
|
21
|
-
grdwindinversion-0.3.
|
|
22
|
-
grdwindinversion-0.3.
|
|
17
|
+
grdwindinversion-0.3.8.dist-info/licenses/AUTHORS.rst,sha256=KmhW_5LBKGTIGwWEVkoTm1qx_bvdDR3yYL-1cwbDOFQ,218
|
|
18
|
+
grdwindinversion-0.3.8.dist-info/licenses/LICENSE,sha256=-B8mBiTeY3J7OLuayiV1myqmc7yeijBc7s34kc8RTmg,1075
|
|
19
|
+
grdwindinversion-0.3.8.dist-info/METADATA,sha256=Zhr0ANP7Ek5Kb5zzEBoh8cheWMmvI91EwfbclEOlens,2529
|
|
20
|
+
grdwindinversion-0.3.8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
21
|
+
grdwindinversion-0.3.8.dist-info/entry_points.txt,sha256=2rjvlVCy0iasRXjOz3kOIGuy2OCGQ-VTNuwuViQ6cMM,95
|
|
22
|
+
grdwindinversion-0.3.8.dist-info/top_level.txt,sha256=z6lPix3QPEYOo37qq8plA2hY7S3C8MQZY81agRlksMI,17
|
|
23
|
+
grdwindinversion-0.3.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|