From 2704b134dd84a94b71488e32bc79b14ada97f96d Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 22 Jul 2020 12:09:52 +0200 Subject: [PATCH] [exceeding] final little modifications of code for the first review - v1 of the NHESS paper --- ...dy_visualizer_for_non_stationary_trends.py | 4 +- .../main_example_swe_total_plot.py | 4 +- .../main_result_trends_and_return_levels.py | 57 +++++++++++-------- .../section_results/plot_trend_curves.py | 2 + .../plot_uncertainty_curves.py | 6 +- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py b/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py index 1058570d..15ff9be2 100644 --- a/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py +++ b/extreme_trend/visualizers/study_visualizer_for_non_stationary_trends.py @@ -172,8 +172,6 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): return massif_name_to_trend_test_that_minimized_aic - - def get_trend_trend_test(self, massif_name, trend_test_classes): x, y = self.massif_name_to_years_and_maxima_for_model_fitting[massif_name] quantile_level = self.massif_name_to_eurocode_quantile_level_in_practice[massif_name] @@ -226,7 +224,7 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer): ax.get_xaxis().set_visible(True) ax.set_xticks([]) ax.set_xlabel('Altitude = {}m'.format(self.study.altitude), fontsize=15) - middle_word = 'o' if (not add_colorbar and self.study.altitude == 2700) else '' + middle_word = 'o' if (not add_colorbar and self.study.altitude in [1800, 2700]) else '' self.plot_name = 'tdlr_trends_w' + middle_word + '_colorbar' self.show_or_save_to_file(add_classic_title=False, tight_layout=True, no_title=True, dpi=500) diff --git a/projects/exceeding_snow_loads/section_data/main_example_swe_total_plot.py b/projects/exceeding_snow_loads/section_data/main_example_swe_total_plot.py index 9b6a86ed..4f9760fc 100644 --- a/projects/exceeding_snow_loads/section_data/main_example_swe_total_plot.py +++ b/projects/exceeding_snow_loads/section_data/main_example_swe_total_plot.py @@ -19,7 +19,7 @@ def tuples_for_examples_paper1(examples_for_the_paper=True): else: marker_altitude_massif_name_for_paper1 = [ ('magenta', 600, 'Parpaillon'), - ('darkmagenta', 300, 'Devoluy'), + # ('darkmagenta', 300, 'Devoluy'), ('mediumpurple', 300, 'Aravis'), ] return marker_altitude_massif_name_for_paper1 @@ -34,7 +34,7 @@ def max_graph_annual_maxima_poster(): save_to_file = True study_class = CrocusSnowLoadTotal - examples_for_the_paper = True + examples_for_the_paper = False ax = plt.gca() if examples_for_the_paper: diff --git a/projects/exceeding_snow_loads/section_results/main_result_trends_and_return_levels.py b/projects/exceeding_snow_loads/section_results/main_result_trends_and_return_levels.py index 6aba0ed6..9053d8ce 100644 --- a/projects/exceeding_snow_loads/section_results/main_result_trends_and_return_levels.py +++ b/projects/exceeding_snow_loads/section_results/main_result_trends_and_return_levels.py @@ -38,11 +38,11 @@ def compute_minimized_aic(visualizer): _ = visualizer.massif_name_to_trend_test_that_minimized_aic return True - def intermediate_result(altitudes, massif_names=None, model_subsets_for_uncertainty=None, uncertainty_methods=None, study_class=CrocusSnowLoadTotal, - multiprocessing=False): + multiprocessing=False, + only_histogram=False): """ Plot all the trends for all altitudes And enable to plot uncertainty plot for some specific massif_names, uncertainty methods to be fast @@ -56,29 +56,32 @@ def intermediate_result(altitudes, massif_names=None, # Load altitude to visualizer altitude_to_visualizer = load_altitude_to_visualizer(altitudes, massif_names, model_subsets_for_uncertainty, study_class, uncertainty_methods) - # Load variable object efficiently - for v in altitude_to_visualizer.values(): - _ = v.study.year_to_variable_object - # Compute minimized value efficiently - # visualizers = list() - if multiprocessing: - with Pool(NB_CORES) as p: - _ = p.imap(compute_minimized_aic, altitude_to_visualizer.values()) + if only_histogram: + plot_uncertainty_histogram(altitude_to_visualizer) else: - for visualizer in altitude_to_visualizer.values(): - _ = compute_minimized_aic(visualizer) + # Load variable object efficiently + for v in altitude_to_visualizer.values(): + _ = v.study.year_to_variable_object + # Compute minimized value efficiently + # visualizers = list() + if multiprocessing: + with Pool(NB_CORES) as p: + _ = p.imap(compute_minimized_aic, altitude_to_visualizer.values()) + else: + for visualizer in altitude_to_visualizer.values(): + _ = compute_minimized_aic(visualizer) - # Plots - plot_trend_map(altitude_to_visualizer) - plot_trend_curves(altitude_to_visualizer={a: v for a, v in altitude_to_visualizer.items() if a >= 900}) - plot_uncertainty_massifs(altitude_to_visualizer) - plot_uncertainty_histogram(altitude_to_visualizer) - plot_selection_curves(altitude_to_visualizer) - plot_intensity_against_gumbel_quantile_for_3_examples(altitude_to_visualizer) + # Plots + plot_trend_map(altitude_to_visualizer) + plot_trend_curves(altitude_to_visualizer={a: v for a, v in altitude_to_visualizer.items() if a >= 900}) + plot_uncertainty_massifs(altitude_to_visualizer) + plot_uncertainty_histogram(altitude_to_visualizer) + plot_selection_curves(altitude_to_visualizer) + plot_intensity_against_gumbel_quantile_for_3_examples(altitude_to_visualizer) - # Additional plots - # uncertainty_interval_size(altitude_to_visualizer) - # plot_full_diagnostic(altitude_to_visualizer) + # Additional plots + # uncertainty_interval_size(altitude_to_visualizer) + # plot_full_diagnostic(altitude_to_visualizer) def major_result(): @@ -86,20 +89,24 @@ def major_result(): ConfidenceIntervalMethodFromExtremes.ci_mle][1:] # massif_names = ['Beaufortain', 'Vercors'] massif_names = None - study_classes = paper_study_classes[:1] + study_classes = paper_study_classes[:] # study_classes = [CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][::-1] altitudes = [300, 600, 900, 1800, 2700][:2] altitudes = [300, 600, 900, 1200, 1500, 1800] altitudes = paper_altitudes # altitudes = [900, 1800, 270{{0][:1] for study_class in study_classes: - if study_class == CrocusSnowLoadEurocode: + print('new stuy class', study_class) + if study_class is CrocusSnowLoadEurocode: model_subsets_for_uncertainty = [ModelSubsetForUncertainty.stationary_gumbel] + only_histogram = True else: model_subsets_for_uncertainty = None + only_histogram = False intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty, uncertainty_methods, study_class, - multiprocessing=True) + multiprocessing=True, + only_histogram=only_histogram) if __name__ == '__main__': diff --git a/projects/exceeding_snow_loads/section_results/plot_trend_curves.py b/projects/exceeding_snow_loads/section_results/plot_trend_curves.py index a2516bda..01ec6441 100644 --- a/projects/exceeding_snow_loads/section_results/plot_trend_curves.py +++ b/projects/exceeding_snow_loads/section_results/plot_trend_curves.py @@ -22,6 +22,8 @@ def plot_trend_map(altitude_to_visualizer): # Plot 2700 also with a colorbar if altitude == 2700: visualizer.plot_trends(max_abs_tdrl_above_900, add_colorbar=True) + if altitude == 1800: + visualizer.plot_trends(max_abs_tdrl_above_900, add_colorbar=False) else: max_abs_tdrl_below_900 = max(altitude_to_visualizer[300].max_abs_change, altitude_to_visualizer[600].max_abs_change) diff --git a/projects/exceeding_snow_loads/section_results/plot_uncertainty_curves.py b/projects/exceeding_snow_loads/section_results/plot_uncertainty_curves.py index 78a3e7ba..cebdc81c 100644 --- a/projects/exceeding_snow_loads/section_results/plot_uncertainty_curves.py +++ b/projects/exceeding_snow_loads/section_results/plot_uncertainty_curves.py @@ -30,11 +30,11 @@ def plot_uncertainty_massifs(altitude_to_visualizer: Dict[int, StudyVisualizerFo visualizer = list(altitude_to_visualizer.values())[-1] # Subdivide massif names in group of 3 m = 1 - uncertainty_massif_names = visualizer.uncertainty_massif_names - n = (len(uncertainty_massif_names) // m) + massif_names_fitted = visualizer.intersection_of_massif_names_fitted + n = (len(massif_names_fitted) // m) print('total nb of massif', n) for i in list(range(n))[:]: - massif_names = uncertainty_massif_names[m * i: m * (i + 1)] + massif_names = massif_names_fitted[m * i: m * (i + 1)] print(massif_names) plot_subgroup_uncertainty_massifs(altitude_to_visualizer, massif_names) -- GitLab