From b4dcdfedda26b5e79e746cac2bc80bca0e4c11fd Mon Sep 17 00:00:00 2001 From: adehecq <3285905+adehecq@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:47:34 +0200 Subject: [PATCH 1/5] Rm redundant line --- ragmac_xdem/dem_postprocessing.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/ragmac_xdem/dem_postprocessing.py b/ragmac_xdem/dem_postprocessing.py index 9e3c124..ae3e240 100644 --- a/ragmac_xdem/dem_postprocessing.py +++ b/ragmac_xdem/dem_postprocessing.py @@ -766,9 +766,7 @@ def fname_func(pair_id): pair_id = pair_ids[count] print(f"\nProcessing pair {pair_id}") - dems_list = groups[count] dem_dates = utils.get_dems_date(dems_list) - time_stamps = np.array(matplotlib.dates.date2num(dem_dates)) # time_stamps = np.array([utils.date_time_to_decyear(i) for i in dem_dates]) From 93b6e3283141528fb7b5e90012973f737ccec95e Mon Sep 17 00:00:00 2001 From: adehecq <3285905+adehecq@users.noreply.github.com> Date: Thu, 31 Mar 2022 10:47:55 +0200 Subject: [PATCH 2/5] Rename TimeSeries4 into TimeSeries_full --- ragmac_xdem/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ragmac_xdem/main.py b/ragmac_xdem/main.py index 82216e8..0f9946c 100644 --- a/ragmac_xdem/main.py +++ b/ragmac_xdem/main.py @@ -86,7 +86,7 @@ def main(case: dict, mode: str, run_name: str, sat_type: str = "ASTER", nproc: i selection_opts = {"mode": "subperiod", "dt": 365} downsampling = 1 merge_opts = {"mode": "TimeSeries3"} - elif mode == "TimeSeries4": + elif mode == "TimeSeries_full": selection_opts = {"mode": "subperiod", "dt": 10958} #~30 years downsampling = 1 merge_opts = {"mode": "TimeSeries3"} From 79dfb1611cee4d466eb12e3af9c8f519dcd49c2c Mon Sep 17 00:00:00 2001 From: Amaury Dehecq <3285905+adehecq@users.noreply.github.com> Date: Thu, 31 Mar 2022 02:44:37 -0700 Subject: [PATCH 3/5] Make sure TimeSeries_full is handled properly everywhere --- ragmac_xdem/main.py | 2 +- scripts/main_experiment1.py | 2 +- scripts/main_experiment2.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ragmac_xdem/main.py b/ragmac_xdem/main.py index 0f9946c..566d052 100644 --- a/ragmac_xdem/main.py +++ b/ragmac_xdem/main.py @@ -91,7 +91,7 @@ def main(case: dict, mode: str, run_name: str, sat_type: str = "ASTER", nproc: i downsampling = 1 merge_opts = {"mode": "TimeSeries3"} else: - raise ValueError("`mode` must be either of 'DEMdiff_autoselect', 'DEMdiff_median', 'TimeSeries', 'TimeSeries2' or 'TimeSeries3'") + raise ValueError("`mode` must be either of 'DEMdiff_autoselect', 'DEMdiff_median', 'TimeSeries', 'TimeSeries2', 'TimeSeries3' or TimeSeries_full") # Get run parameters run = runs[run_name] diff --git a/scripts/main_experiment1.py b/scripts/main_experiment1.py index ce23851..485c97b 100644 --- a/scripts/main_experiment1.py +++ b/scripts/main_experiment1.py @@ -70,7 +70,7 @@ if args.mode is not None: all_modes = [args.mode] - if args.qc or args.mode == "TimeSeries3": + if args.qc or args.mode == "TimeSeries3" or args.mode == "TimeSeries_full": # Launch dask cluster for computation on larger than memory arrays. client = io.dask_start_cluster(args.nproc) diff --git a/scripts/main_experiment2.py b/scripts/main_experiment2.py index a0226d0..d55492b 100755 --- a/scripts/main_experiment2.py +++ b/scripts/main_experiment2.py @@ -73,7 +73,7 @@ if args.run is not None: all_runs = [args.run] - if args.qc or args.mode == "TimeSeries3": + if args.qc or args.mode == "TimeSeries3" or args.mode == "TimeSeries_full": # Launch dask cluster for computation on larger than memory arrays. client = io.dask_start_cluster(args.nproc) From 69a554a84654a64a2ac01ce368c976db31511329 Mon Sep 17 00:00:00 2001 From: Amaury Dehecq <3285905+adehecq@users.noreply.github.com> Date: Thu, 31 Mar 2022 03:18:17 -0700 Subject: [PATCH 4/5] Increase min dt threshold --- ragmac_xdem/dem_postprocessing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ragmac_xdem/dem_postprocessing.py b/ragmac_xdem/dem_postprocessing.py index ae3e240..5021791 100644 --- a/ragmac_xdem/dem_postprocessing.py +++ b/ragmac_xdem/dem_postprocessing.py @@ -840,7 +840,7 @@ def fname_func(pair_id): min_date = np.percentile(ds.time, 2) max_date = np.percentile(ds.time, 98) time_delta_max = int((max_date - min_date).astype('timedelta64[D]') / np.timedelta64(1, 'D')) - time_delta_min = int(time_delta_max * 0.1) + time_delta_min = min(4*365, int(time_delta_max * 0.5)) print("Min 2 percentile date:",np.datetime_as_string(min_date, unit='D')) print("Max 98 percentile date:",np.datetime_as_string(max_date, unit='D')) print("Time delta between dates:",time_delta_max, 'days') From c8c85665f9625cab7c7e9897b4d438cd73f626e7 Mon Sep 17 00:00:00 2001 From: adehecq <3285905+adehecq@users.noreply.github.com> Date: Thu, 31 Mar 2022 18:38:58 +0200 Subject: [PATCH 5/5] Filter pixels with slope>45, disable nmad filter and use bins of 100 m --- ragmac_xdem/mass_balance.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ragmac_xdem/mass_balance.py b/ragmac_xdem/mass_balance.py index cdc8492..5eaa769 100644 --- a/ragmac_xdem/mass_balance.py +++ b/ragmac_xdem/mass_balance.py @@ -106,13 +106,21 @@ def fill_ddem_local_hypso(ddem, ref_dem, roi_mask, roi_outlines, filtering=True) `interp_residuals` the difference between input and interpolated ddem, `frac_obs` the fraction of observation for each feature in roi_outlines """ + # Filter large outliers - as in Dussaillant et al. 2019 (DOI: 10.1038/s41561-019-0432-5) + if filtering: + slope = xdem.terrain.slope(ref_dem) + ddem_filt = ddem.copy() + ddem_filt.data.mask[slope.data > 45] = True + else: + ddem_filt = ddem + # Calculate mean elevation change within elevation bins # TODO: filter pixels within each bins that are outliers - ddem_bins = xdem.volume.hypsometric_binning(ddem.data[roi_mask], ref_dem.data[roi_mask]) + ddem_bins = xdem.volume.hypsometric_binning(ddem_filt.data[roi_mask], ref_dem.data[roi_mask], bins=100) # Filter outliers in bins if filtering: - ddem_bins_filtered = ddem_bins_filtering(ddem_bins, verbose=True) + ddem_bins_filtered = ddem_bins_filtering(ddem_bins, verbose=True, nmad_fact=-1) else: ddem_bins_filtered = ddem_bins.copy()