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 0bcf0f0e5f8de0e4a1067da76e4414f91252bf54..147dc88f47a35be5a3131fd6c65ea8f611578462 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
@@ -3,8 +3,10 @@ from typing import List
 
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
-from experiment.paper_past_snow_loads.result_data_comparison_with_eurocode.crocus_study_comparison_with_eurocode import CrocusDifferenceSnowLoad, \
-    CrocusSnowDensityAtMaxofSwe, CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization
+from experiment.paper_past_snow_loads.result_data_comparison_with_eurocode.crocus_study_comparison_with_eurocode import \
+    CrocusDifferenceSnowLoad, \
+    CrocusSnowDensityAtMaxofSwe, CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization, \
+    CrocusSnowDepthDifference, CrocusSnowDepthAtMaxofSwe
 from experiment.trend_analysis.abstract_score import MannKendall
 from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
 from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, ExtendedCrocusDepth, \
@@ -32,13 +34,15 @@ SCM_STUDY_CLASS_TO_ABBREVIATION = {
     SafranSnowfall: 'SF3',
     CrocusSweTotal: 'SWE',
     CrocusSwe3Days: 'SWE3',
-    CrocusSnowLoadEurocode: 'SL_Eurocode',
+    CrocusSnowLoadEurocode: 'GSL_Eurocode',
     CrocusDepth: 'SD',
-    CrocusSnowLoadTotal: 'max SL',
-    CrocusSnowLoad3Days: 'SL3',
-    CrocusSnowDensityAtMaxofSwe: '{} when the max of SL \nis reached'.format(snow_density_str),
-    CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization: 'max SL rescaled - SL from max HS \nboth with {}'.format(eurocode_snow_density),
-    CrocusDifferenceSnowLoad: ('max SL - SL from max HS \n with {}'.format(eurocode_snow_density))
+    CrocusSnowLoadTotal: 'max GSL',
+    CrocusSnowLoad3Days: 'GSL3',
+    CrocusSnowDensityAtMaxofSwe: '{} when the max of GSL \nis reached'.format(snow_density_str),
+    CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization: 'max GSL rescaled - GSL from max HS \nboth with {}'.format(eurocode_snow_density),
+    CrocusDifferenceSnowLoad: ('max GSL - GSL from max HS \n with {}'.format(eurocode_snow_density)),
+    CrocusSnowDepthDifference: 'max HS - HS at max of GSL',
+    CrocusSnowDepthAtMaxofSwe: 'HS at max of GSL',
 }
 
 altitude_massif_name_and_study_class_for_poster = [
diff --git a/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/crocus_study_comparison_with_eurocode.py b/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/crocus_study_comparison_with_eurocode.py
index 5571c522382b78f8c293be7b8123cd06e5580ad1..ea28deb374a89febb0126f8378ebe6df7d20b61a 100644
--- a/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/crocus_study_comparison_with_eurocode.py
+++ b/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/crocus_study_comparison_with_eurocode.py
@@ -1,11 +1,45 @@
 from collections import OrderedDict
 
 import numpy as np
+from cached_property import cached_property
 
 from experiment.meteo_france_data.scm_models_data.crocus.crocus import Crocus, CrocusSweTotal, CrocusSnowLoadTotal, \
-    CrocusSnowLoadEurocode
+    CrocusSnowLoadEurocode, CrocusDepth
 from experiment.meteo_france_data.scm_models_data.crocus.crocus_variables import TotalSnowLoadVariable, \
-    CrocusDensityVariable
+    CrocusDensityVariable, CrocusDepthVariable
+
+
+class CrocusSnowDepthAtMaxofSwe(Crocus):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(CrocusDepthVariable, *args, **kwargs)
+        self.year_to_snow_depth_at_max_of_swe = OrderedDict()
+        study_swe = CrocusSweTotal(*args, **kwargs)
+        for year in study_swe.ordered_years:
+            argmax_swe = study_swe.year_to_annual_maxima_index[year]
+            snow_depth = self.year_to_daily_time_serie_array[year]
+            snow_depth_at_max = [snow_depth[argmax, i] for i, argmax in enumerate(argmax_swe)]
+            self.year_to_snow_depth_at_max_of_swe[year] = np.array(snow_depth_at_max)
+
+    @cached_property
+    def year_to_annual_maxima(self) -> OrderedDict:
+        return self.year_to_snow_depth_at_max_of_swe
+
+
+class CrocusSnowDepthDifference(Crocus):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(CrocusDepthVariable, *args, **kwargs)
+        snow_depth_at_max_swe = CrocusSnowDepthAtMaxofSwe(*args, **kwargs)
+        snow_depth_max = CrocusDepth(*args, **kwargs)
+        self.year_to_diff = OrderedDict()
+        for year in snow_depth_max.ordered_years:
+            self.year_to_diff[year] = snow_depth_max.year_to_annual_maxima[year] \
+                                      - snow_depth_at_max_swe.year_to_annual_maxima[year]
+
+    @property
+    def year_to_annual_maxima(self) -> OrderedDict:
+        return self.year_to_diff
 
 
 class CrocusSnowDensityAtMaxofSwe(Crocus):
@@ -18,7 +52,8 @@ class CrocusSnowDensityAtMaxofSwe(Crocus):
             max_swe = study_swe.year_to_annual_maxima[year]
             argmax_swe = study_swe.year_to_annual_maxima_index[year]
             snow_depth = self.year_to_daily_time_serie_array[year]
-            snow_depth_at_max = np.take(np.transpose(snow_depth), argmax_swe)
+            snow_depth_at_max = np.array([snow_depth[argmax, i] for i, argmax in enumerate(argmax_swe)])
+            # todo: should i take into acocunt the density of the water
             self.year_to_snow_density_at_max_of_swe[year] = max_swe / snow_depth_at_max
 
     @property
diff --git a/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/main_comparison_with_eurocode.py b/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/main_comparison_with_eurocode.py
index f694cc755cd7a8e8a163f3f5fd286a7eb184164e..f266e948b276f000809bc509e5f779d696f893af 100644
--- a/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/main_comparison_with_eurocode.py
+++ b/experiment/paper_past_snow_loads/result_data_comparison_with_eurocode/main_comparison_with_eurocode.py
@@ -1,11 +1,15 @@
+from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth
+from experiment.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusDepthVariable
 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
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
 import matplotlib.pyplot as plt
 
-from experiment.paper_past_snow_loads.result_data_comparison_with_eurocode.crocus_study_comparison_with_eurocode import CrocusDifferenceSnowLoad, \
-    CrocusSnowDensityAtMaxofSwe, CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization
+from experiment.paper_past_snow_loads.result_data_comparison_with_eurocode.crocus_study_comparison_with_eurocode import \
+    CrocusDifferenceSnowLoad, \
+    CrocusSnowDensityAtMaxofSwe, CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization, \
+    CrocusSnowDepthAtMaxofSwe, CrocusSnowDepthDifference
 
 
 def max_graph_annual_maxima_comparison():
@@ -15,14 +19,20 @@ def max_graph_annual_maxima_comparison():
     :return:
     """
     save_to_file = True
-    study_classes = [CrocusSnowDensityAtMaxofSwe, CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization, CrocusDifferenceSnowLoad][:]
+    study_classes = [CrocusSnowDensityAtMaxofSwe,
+                     # CrocusDifferenceSnowLoadRescaledAndEurocodeToSeeSynchronization,
+                     CrocusDifferenceSnowLoad,
+                     # CrocusDepth,
+                     # CrocusSnowDepthAtMaxofSwe,
+                     CrocusSnowDepthDifference,
+                     ][:]
     for study_class in study_classes:
 
         marker_altitude_massif_name = [
             ('magenta', 900, 'Ubaye'),
             ('darkmagenta', 1800, 'Vercors'),
             ('mediumpurple', 2700, 'Beaufortain'),
-        ]
+        ][:]
         ax = plt.gca()
         for color, altitude, massif_name in marker_altitude_massif_name:
             for study in study_iterator_global([study_class], altitudes=[altitude]):
@@ -36,7 +46,8 @@ def max_graph_annual_maxima_comparison():
                 last_plot = altitude == 2700
                 if last_plot:
                     constant = 150 if study_class == CrocusSnowDensityAtMaxofSwe else 0
-                    label = '{} Eurocode'.format(snow_density_str) if study_class == CrocusSnowDensityAtMaxofSwe else None
+                    label = '{} Eurocode'.format(
+                        snow_density_str) if study_class == CrocusSnowDensityAtMaxofSwe else None
                     snow_density_eurocode = [constant for _ in study.ordered_years]
                     ax.plot(study.ordered_years, snow_density_eurocode, color='k', label=label)
                     ax.legend()
@@ -45,9 +56,5 @@ def max_graph_annual_maxima_comparison():
                     ax.clear()
 
 
-
-
-
-
 if __name__ == '__main__':
-    max_graph_annual_maxima_comparison()
\ No newline at end of file
+    max_graph_annual_maxima_comparison()
diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
index 1a01f1dbf4b1a89d2a51584e7b45202b4874a67a..73921d0a9b80502295541f65f0014758a79a7319 100644
--- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
+++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
@@ -3,7 +3,7 @@ from typing import Dict, List, Tuple
 import matplotlib.pyplot as plt
 import numpy as np
 
-from experiment.eurocode_data.utils import EUROCODE_RETURN_LEVEL_STR
+from experiment.eurocode_data.utils import EUROCODE_RETURN_LEVEL_STR, EUROCODE_ALTITUDES
 from experiment.paper_past_snow_loads.result_trends_and_return_levels.study_visualizer_for_non_stationary_trends import \
     StudyVisualizerForNonStationaryTrends
 from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \
@@ -19,11 +19,12 @@ def plot_uncertainty_massifs(altitude_to_visualizer: Dict[int, StudyVisualizerFo
     """ Plot several uncertainty plots
     :return:
     """
+    altitude_to_visualizer = {a:v for a,v in altitude_to_visualizer.items() if a in EUROCODE_ALTITUDES}
     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) + 1
+    n = (len(uncertainty_massif_names) // m)
     print('total nb of massif', n)
     for i in list(range(n))[:]:
         massif_names = uncertainty_massif_names[m * i: m * (i + 1)]
diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
index 41301d5233ce5fd5a8be0bf714b4c8282fde92fd..b0bfdf88d5ac0ee18896052a8763ca006d26fabd 100644
--- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
+++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
@@ -9,7 +9,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     StudyVisualizer
 from experiment.paper_past_snow_loads.result_trends_and_return_levels.eurocode_visualizer import \
     plot_uncertainty_massifs
-from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal
+from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal, CrocusSnowLoadEurocode, \
+    CrocusSnowLoad3Days
 from experiment.paper_past_snow_loads.result_trends_and_return_levels.study_visualizer_for_non_stationary_trends import \
     StudyVisualizerForNonStationaryTrends
 from extreme_fit.model.result_from_model_fit.result_from_extremes.confidence_interval_method import \
@@ -57,17 +58,18 @@ def intermediate_result(altitudes, massif_names=None,
 
 
 def major_result():
-    altitudes = [[1500, 1800]][0]
+    altitudes = [300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700]
     uncertainty_methods = [ConfidenceIntervalMethodFromExtremes.my_bayes,
-                           ConfidenceIntervalMethodFromExtremes.ci_mle][1:]
-    massif_names = ['Chartreuse']
-    non_stationary_models_for_uncertainty = [False, True][:1]
-    #
-    # altitudes
-    # study_class
+                           ConfidenceIntervalMethodFromExtremes.ci_mle][:]
+    massif_names = None
+    non_stationary_uncertainty = [False, True][:]
+    study_classes = [CrocusSnowLoadTotal, CrocusSnowLoadEurocode, CrocusSnowLoad3Days]
+    for study_class in study_classes[2:]:
+        intermediate_result(altitudes, massif_names, non_stationary_uncertainty, uncertainty_methods, study_class)
 
 
 if __name__ == '__main__':
+    major_result()
     # minor_result(altitude=1800)
     # intermediate_result(altitudes=[1500, 1800], massif_names=['Chartreuse'],
     #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle,
@@ -79,10 +81,10 @@ if __name__ == '__main__':
     # intermediate_result(altitudes=[300, 600, 900, 1200, 1500, 1800], massif_names=None,
     #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
     #                     non_stationary_uncertainty=[False])
-    # intermediate_result(altitudes=[300, 600, 900, 1200, 1500, 1800], massif_names=None,
+    # intermediate_result(altitudes=[300, 600, 900, 1200, 1500, 1800, 2100, 2400, 2700], massif_names=None,
     #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle,
     #                                          ConfidenceIntervalMethodFromExtremes.ci_bayes],
     #                     non_stationary_uncertainty=[False, True])
-    intermediate_result(altitudes=[300, 600, 900], massif_names=None,
-                        uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
-                        non_stationary_uncertainty=[False, True])
+    # intermediate_result(altitudes=[300, 600, 900], massif_names=None,
+    #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
+    #                     non_stationary_uncertainty=[False, True])