From 9d787939963d4bb2f47fa39074b64e3a6128e7f4 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Thu, 27 Feb 2020 18:42:59 +0100
Subject: [PATCH] [paper 2] rename safran precipitation total to safran
 precipitation. add snowfall, precipitation, and rainfall study classes for 1,
 3, 5 and 7 days

---
 .../scm_models_data/safran/safran.py          | 107 +++++++++++++++---
 .../main_studies_visualizer.py                |   4 +-
 .../main_study_visualizer.py                  |   4 +-
 papers/contrasting_snow_loads/main_result.py  |  25 ++--
 ...tive_change_in_maxima_at_fixed_altitude.py |   4 +-
 .../plot_contrasting_trend_curves.py          |   4 +-
 .../qqplot/plot_qqplot.py                     |   4 +-
 test/test_experiment/test_SCM_study.py        |   4 +-
 test/test_utils.py                            |   4 +-
 9 files changed, 123 insertions(+), 37 deletions(-)

diff --git a/experiment/meteo_france_data/scm_models_data/safran/safran.py b/experiment/meteo_france_data/scm_models_data/safran/safran.py
index a45199aa..885ad453 100644
--- a/experiment/meteo_france_data/scm_models_data/safran/safran.py
+++ b/experiment/meteo_france_data/scm_models_data/safran/safran.py
@@ -27,6 +27,30 @@ class SafranSnowfall(Safran, CumulatedStudy):
         Safran.__init__(self, SafranSnowfallVariable, *args, **kwargs)
 
 
+class SafranSnowfall1Day(SafranSnowfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=1, *args, **kwargs)
+
+
+class SafranSnowfall3Days(SafranSnowfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=3, *args, **kwargs)
+
+
+class SafranSnowfall5Days(SafranSnowfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=5, *args, **kwargs)
+
+
+class SafranSnowfall7Days(SafranSnowfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=7, *args, **kwargs)
+
+
 class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall):
     pass
 
@@ -37,7 +61,31 @@ class SafranRainfall(CumulatedStudy, Safran):
         super().__init__(SafranRainfallVariable, *args, **kwargs)
 
 
-class SafranTotalPrecip(CumulatedStudy, Safran):
+class SafranRainfall1Day(SafranRainfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=1, *args, **kwargs)
+
+
+class SafranRainfall3Days(SafranRainfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=3, *args, **kwargs)
+
+
+class SafranRainfall5Days(SafranRainfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=5, *args, **kwargs)
+
+
+class SafranRainfall7Days(SafranRainfall):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=7, *args, **kwargs)
+
+
+class SafranPrecipitation(CumulatedStudy, Safran):
 
     def __init__(self, *args, **kwargs):
         super().__init__(SafranTotalPrecipVariable, *args, **kwargs)
@@ -50,7 +98,31 @@ class SafranTotalPrecip(CumulatedStudy, Safran):
         return self.variable_class(variable_array_snowfall, variable_array_rainfall, self.nb_consecutive_days)
 
 
-class ExtendedSafranTotalPrecip(AbstractExtendedStudy, SafranTotalPrecip):
+class SafranPrecipitation1Day(SafranPrecipitation):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=1, *args, **kwargs)
+
+
+class SafranPrecipitation3Days(SafranPrecipitation):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=3, *args, **kwargs)
+
+
+class SafranPrecipitation5Days(SafranPrecipitation):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=5, *args, **kwargs)
+
+
+class SafranPrecipitation7Days(SafranPrecipitation):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(nb_consecutive_days=7, *args, **kwargs)
+
+
+class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation):
     pass
 
 
@@ -64,23 +136,24 @@ class SafranTemperature(Safran):
 
 
 if __name__ == '__main__':
-    study = SafranSnowfall()
+    study = SafranRainfall1Day()
+    print(study.year_to_annual_maxima[1958])
     # d = study.year_to_dataset_ordered_dict[1958]
     # print(d.variables)
-    print(study.study_massif_names)
-    d = {
-        name: '' for name in study.study_massif_names
-    }
-    print(d)
-    for i in range(1958, 1959):
-        d = study.year_to_dataset_ordered_dict[i]
-        # variable = 'station'
-        # print(np.array(d.variables[variable]))
-        variable = 'Tair'
-        a = np.mean(np.array(d.variables[variable]), axis=1)
-        d = study.year_to_dataset_ordered_dict[i + 1]
-        b = np.mean(np.array(d.variables[variable]), axis=1)
-        # print(a[-1] - b[0])
+    # print(study.study_massif_names)
+    # d = {
+    #     name: '' for name in study.study_massif_names
+    # }
+    # print(d)
+    # for i in range(1958, 1959):
+    #     d = study.year_to_dataset_ordered_dict[i]
+    #     # variable = 'station'
+    #     # print(np.array(d.variables[variable]))
+    #     variable = 'Tair'
+    #     a = np.mean(np.array(d.variables[variable]), axis=1)
+    #     d = study.year_to_dataset_ordered_dict[i + 1]
+    #     b = np.mean(np.array(d.variables[variable]), axis=1)
+    # print(a[-1] - b[0])
     # print(d.variables['time'])
     # print(study.all_massif_names)
     # print(study.massif_name_to_altitudes)
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
index 3fbb7e9d..4b6eb7e4 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
@@ -3,7 +3,7 @@ from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore,
 from experiment.trend_analysis.univariate_test.extreme_trend_test.abstract_gev_trend_test import GevLocationChangePointTest, \
     GevScaleChangePointTest, GevShapeChangePointTest
 from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest
-from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranTotalPrecip
+from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranPrecipitation
 from experiment.meteo_france_data.scm_models_data.visualization import Studies
 from experiment.meteo_france_data.scm_models_data.visualization import StudiesVisualizer, \
     AltitudeVisualizer
@@ -15,7 +15,7 @@ from collections import OrderedDict
 
 
 def normal_visualization():
-    for study_type in [ExtendedSafranTotalPrecip]:
+    for study_type in [ExtendedSafranPrecipitation]:
         extended_studies = Studies(study_type)
         studies_visualizer = StudiesVisualizer(extended_studies)
         studies_visualizer.mean_as_a_function_of_altitude(region_only=True)
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
index e1843a71..f1e6d9fd 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
@@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDep
     CrocusSnowLoadEurocode, CrocusSnowLoad5Days, CrocusSnowLoad7Days
 from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \
     SafranRainfall, \
-    SafranTemperature, SafranTotalPrecip
+    SafranTemperature, SafranPrecipitation
 
 from collections import OrderedDict
 
@@ -142,7 +142,7 @@ def extended_visualization():
 
 def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, altitude=1800):
     if safran:
-        for study_class in [SafranTotalPrecip, SafranRainfall, SafranSnowfall, SafranTemperature][-1:]:
+        for study_class in [SafranPrecipitation, SafranRainfall, SafranSnowfall, SafranTemperature][-1:]:
             study = study_class(altitude=altitude, year_min=1958, year_max=2002)
             study_visualizer = StudyVisualizer(study)
             study_visualizer.visualize_annual_mean_values(take_mean_value=True)
diff --git a/papers/contrasting_snow_loads/main_result.py b/papers/contrasting_snow_loads/main_result.py
index d152057b..9c9719dd 100644
--- a/papers/contrasting_snow_loads/main_result.py
+++ b/papers/contrasting_snow_loads/main_result.py
@@ -5,6 +5,12 @@ mpl.use('Agg')
 mpl.rcParams['text.usetex'] = True
 mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
 
+from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
+from experiment.meteo_france_data.scm_models_data.safran.safran import SafranPrecipitation3Days, \
+    SafranPrecipitation1Day, SafranPrecipitation5Days, SafranPrecipitation7Days, SafranSnowfall1Day, \
+    SafranSnowfall5Days, SafranSnowfall3Days, SafranSnowfall7Days, SafranRainfall1Day, SafranRainfall3Days, \
+    SafranRainfall5Days, SafranRainfall7Days
+
 from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoad3Days, \
     CrocusSnowLoad5Days, CrocusSnowLoad7Days, CrocusSnowLoad1Day
 from extreme_fit.model.result_from_model_fit.result_from_extremes.confidence_interval_method import \
@@ -23,11 +29,9 @@ from papers.exceeding_snow_loads.result_trends_and_return_levels.plot_uncertaint
 from root_utils import NB_CORES
 
 
-
-
 def intermediate_result(altitudes, massif_names=None,
                         model_subsets_for_uncertainty=None, uncertainty_methods=None,
-                        study_class=CrocusSnowLoad3Days,
+                        study_class=AbstractStudy,
                         multiprocessing=False,
                         save_to_file=True):
     """
@@ -64,9 +68,16 @@ def major_result():
                            ConfidenceIntervalMethodFromExtremes.ci_mle][1:]
     massif_names = None
     model_subsets_for_uncertainty = None
-    altitudes = paper_altitudes
-    # altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300]
-    study_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][:]
+    # altitudes = paper_altitudes
+    # altitudes = paper_altitudes
+    altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000][:4]
+    snow_load_classes = [CrocusSnowLoad1Day, CrocusSnowLoad3Days, CrocusSnowLoad5Days, CrocusSnowLoad7Days][:]
+    precipitation_classes = [SafranPrecipitation1Day, SafranPrecipitation3Days, SafranPrecipitation5Days,
+                             SafranPrecipitation7Days][:]
+    snowfall_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days]
+    rainfall_classes = [SafranRainfall1Day, SafranRainfall3Days, SafranRainfall5Days, SafranRainfall7Days]
+    study_classes = precipitation_classes + snow_load_classes
+    study_classes = snowfall_classes + rainfall_classes
     for study_class in study_classes:
         intermediate_result(altitudes, massif_names, model_subsets_for_uncertainty,
                             uncertainty_methods, study_class)
@@ -78,4 +89,4 @@ if __name__ == '__main__':
     #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.my_bayes,
     #                                          ConfidenceIntervalMethodFromExtremes.ci_mle][1:],
     #                     multiprocessing=True,
-    #                     save_to_file=False)
\ No newline at end of file
+    #                     save_to_file=False)
diff --git a/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py b/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py
index fe763ba0..17d48f3f 100644
--- a/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py
+++ b/papers/contrasting_snow_loads/main_spatial_relative_change_in_maxima_at_fixed_altitude.py
@@ -1,7 +1,7 @@
 from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSnowLoad3Days, \
     CrocusSnowLoadTotal
 from experiment.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusDepthVariable
-from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranRainfall, SafranTotalPrecip
+from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranRainfall, SafranPrecipitation
 from experiment.meteo_france_data.scm_models_data.safran.safran_variable import SafranTotalPrecipVariable
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
     study_iterator_global, SCM_STUDY_CLASS_TO_ABBREVIATION, snow_density_str, ALL_ALTITUDES_WITHOUT_NAN
@@ -25,7 +25,7 @@ def test():
 
 def density_wrt_altitude():
     save_to_file = True
-    study_class = [SafranTotalPrecip, SafranRainfall, SafranSnowfall, CrocusSnowLoad3Days, CrocusSnowLoadTotal][-2]
+    study_class = [SafranPrecipitation, SafranRainfall, SafranSnowfall, CrocusSnowLoad3Days, CrocusSnowLoadTotal][-2]
     altitudes = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000][::-1]
 
     for altitude in altitudes:
diff --git a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py
index 8d4b154a..3a02570e 100644
--- a/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py
+++ b/papers/contrasting_snow_loads/plot_contrasting_trend_curves.py
@@ -74,7 +74,9 @@ def plot_contrasting_trend_curves(altitude_to_visualizer: Dict[int, StudyVisuali
         ax_twinx.plot(altitudes, mean_change, label=label, linewidth=linewidth, marker='o')
         ax_twinx.legend(loc='upper right', prop={'size': size})
 
+    ax.axhline(y=0, color='k')
+
     # Save plot
-    visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name.split('(')[0]
+    visualizer.plot_name = 'Trend curves for' + visualizer.study.variable_name
     visualizer.show_or_save_to_file(no_title=True, dpi=dpi_paper1_figure, folder_for_variable=False)
     plt.close()
diff --git a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py
index e9ec74bd..c1fdd744 100644
--- a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py
+++ b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/plot_qqplot.py
@@ -92,9 +92,9 @@ def plot_exceedance_psnow(altitude_to_visualizer: Dict[int, StudyVisualizerForNo
     ax.set_xlabel('Altitude (m)')
     ax.set_ylabel('Mean ratio, i.e. French standards divided by return levels (%)')
     size = 10
-    ax.legend(loc='upper left', prop={'size': size})
+    ax.legend(loc='upper right', prop={'size': size})
     ax.grid()
-    ax2.legend(loc='upper right', prop={'size': size})
+    ax2.legend(loc='upper left', prop={'size': size})
 
     plt.show()
 
diff --git a/test/test_experiment/test_SCM_study.py b/test/test_experiment/test_SCM_study.py
index 542cb35e..9ed69a54 100644
--- a/test/test_experiment/test_SCM_study.py
+++ b/test/test_experiment/test_SCM_study.py
@@ -7,7 +7,7 @@ import pandas as pd
 from experiment.meteo_france_data.scm_models_data.cumulated_study import NB_DAYS
 from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \
     SafranTemperature, \
-    SafranTotalPrecip
+    SafranPrecipitation
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
     study_iterator, study_iterator_global, SCM_STUDIES, ALL_ALTITUDES
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
@@ -72,7 +72,7 @@ class TestSCMPrecipitation(TestSCMStudy):
 
     def setUp(self) -> None:
         super().setUp()
-        self.study = SafranTotalPrecip(altitude=1800, year_min=1958, year_max=2002, nb_consecutive_days=1)
+        self.study = SafranPrecipitation(altitude=1800, year_min=1958, year_max=2002, nb_consecutive_days=1)
 
     def test_durand(self):
         # Test based on Durand paper
diff --git a/test/test_utils.py b/test/test_utils.py
index c9faaed7..d5fe754c 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -15,7 +15,7 @@ from extreme_fit.model.max_stable_model.abstract_max_stable_model import \
 from extreme_fit.model.max_stable_model.max_stable_models import Smith, BrownResnick, Schlather, \
     Geometric, ExtremalT, ISchlather
 from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, Safran, SafranRainfall, \
-    SafranTemperature, SafranTotalPrecip
+    SafranTemperature, SafranPrecipitation
 from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
     AbstractSpatialCoordinates
 from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import \
@@ -113,7 +113,7 @@ def load_safran_studies(altitudes) -> List[Safran]:
     nb_days_list = [1]
     safran_studies = [safran_class(altitude=safran_altitude, nb_consecutive_days=nb_days)
                       for safran_altitude in altitudes for nb_days in nb_days_list
-                      for safran_class in [SafranSnowfall, SafranRainfall, SafranTotalPrecip]]
+                      for safran_class in [SafranSnowfall, SafranRainfall, SafranPrecipitation]]
     safran_studies += [SafranTemperature(altitude) for altitude in altitudes]
     return safran_studies
 
-- 
GitLab