From 2056395a78652df3ef05c86a48196fea89ea2e73 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Tue, 16 Feb 2021 15:29:12 +0100
Subject: [PATCH] [projections] in an adamont_studies.py study can have
 different year_min and year max. Refactor adamont_gcm_rcm_couples.py. Add
 rcp_extended 2.6 et 4.5. Fix erroneous data for some couple for the scenario
 8.5. Add main_data.py.

---
 .../adamont_data/abstract_adamont_study.py    |  9 +-
 .../adamont_data/adamont/adamont_snowfall.py  |  5 +-
 .../adamont_data/adamont_gcm_rcm_couples.py   | 24 ++---
 .../adamont_data/adamont_scenario.py          | 61 +++++++------
 .../adamont_data/adamont_studies.py           | 64 +++++++------
 .../cmip5/climate_explorer_cimp5.py           |  4 +-
 .../adamont_data/cmip5/plot_temperatures.py   |  4 +-
 .../preliminary_analysis.py                   | 10 +-
 .../main_comparison_on_rcp_85_extended.py     | 91 -------------------
 .../{comparison_with_scm => data}/__init__.py |  0
 projects/projected_snowfall/data/main_data.py | 44 +++++++++
 .../__init__.py                               |  0
 .../comparison_historical_visualizer.py       |  0
 .../comparison_plot.py                        |  2 +-
 .../main_comparison_on_quantile_period.py     | 14 +--
 .../main_comparison_reanalysis.py             |  0
 .../projected_data/main_projection.py         | 61 -------------
 .../test_adamont_study.py                     | 19 ++--
 18 files changed, 158 insertions(+), 254 deletions(-)
 delete mode 100644 projects/projected_snowfall/comparison_with_scm/main_comparison_on_rcp_85_extended.py
 rename projects/projected_snowfall/{comparison_with_scm => data}/__init__.py (100%)
 create mode 100644 projects/projected_snowfall/data/main_data.py
 rename projects/projected_snowfall/{projected_data => evaluation}/__init__.py (100%)
 rename projects/projected_snowfall/{comparison_with_scm => evaluation}/comparison_historical_visualizer.py (100%)
 rename projects/projected_snowfall/{comparison_with_scm => evaluation}/comparison_plot.py (98%)
 rename projects/projected_snowfall/{comparison_with_scm => evaluation}/main_comparison_on_quantile_period.py (95%)
 rename projects/projected_snowfall/{comparison_with_scm => evaluation}/main_comparison_reanalysis.py (100%)
 delete mode 100644 projects/projected_snowfall/projected_data/main_projection.py

diff --git a/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py b/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py
index 95763959..12a6b059 100644
--- a/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py
+++ b/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py
@@ -49,17 +49,18 @@ class AbstractAdamontStudy(AbstractStudy):
         if year_min is None:
             year_min = year_min_scenario
         else:
-            if year_min < year_min_scenario:
-                raise WrongYearMinOrYearMax(
-                    'year min is {} and should be larger than {} for {}'.format(year_min, year_min_scenario, gcm_rcm_couple))
+            year_min = max(year_min_scenario, year_min)
 
         if year_max is None:
             year_max = year_max_scenario
+        else:
+            year_max = min(year_max, year_max_scenario)
+
         super().__init__(variable_class=variable_class, altitude=altitude, year_min=year_min, year_max=year_max,
                          multiprocessing=multiprocessing, season=season, french_region=french_region)
         self.adamont_version = adamont_version
         self.gcm_rcm_couple = gcm_rcm_couple
-        self.gcm_rcm_full_name = get_gcm_rcm_couple_adamont_to_full_name(version=self.adamont_version)[gcm_rcm_couple]
+        self.gcm_rcm_full_name = get_gcm_rcm_couple_adamont_to_full_name(adamont_version=self.adamont_version)[gcm_rcm_couple]
         self.scenario = scenario
         assert issubclass(self.variable_class, AbstractAdamontVariable)
         # Assert the massif_name are in the same order
diff --git a/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py
index e36570cc..33f7aab9 100644
--- a/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py
+++ b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py
@@ -25,5 +25,8 @@ class AdamontSnowfall(AbstractAdamontStudy):
 
 
 if __name__ == '__main__':
-    study = AdamontSnowfall(altitude=1800, adamont_version=2)
+    study = AdamontSnowfall(altitude=1800, adamont_version=2, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'),
+                            scenario=AdamontScenario.rcp85)
+    pass
+    print(study.year_to_annual_maxima)
     print(study.year_to_annual_maxima)
diff --git a/extreme_data/meteo_france_data/adamont_data/adamont_gcm_rcm_couples.py b/extreme_data/meteo_france_data/adamont_data/adamont_gcm_rcm_couples.py
index 4da9dab4..24019a1b 100644
--- a/extreme_data/meteo_france_data/adamont_data/adamont_gcm_rcm_couples.py
+++ b/extreme_data/meteo_france_data/adamont_data/adamont_gcm_rcm_couples.py
@@ -1,4 +1,3 @@
-
 def get_year_min_and_year_max_used_to_compute_quantile(gcm):
     if gcm == 'HadGEM2-ES':
         reanalysis_years = (1988, 2011)
@@ -9,17 +8,15 @@ def get_year_min_and_year_max_used_to_compute_quantile(gcm):
     return reanalysis_years, model_year
 
 
-def get_gcm_rcm_couple_adamont_to_full_name(version):
-    if version == 1:
-        return gcm_rcm_couple_adamont_v1_to_full_name
-    else:
-        return gcm_rcm_couple_adamont_v2_to_full_name
-
+def get_rcm_gcm_couple_full_name(gcm_rcm_couple, adamont_version):
+    return get_gcm_rcm_couple_adamont_to_full_name(adamont_version)[gcm_rcm_couple]
 
-def get_gcm_list(adamont_version):
-    s = set([gcm for gcm, _ in get_gcm_rcm_couple_adamont_to_full_name(adamont_version).keys()])
-    return list(s)
 
+def get_gcm_rcm_couple_adamont_to_full_name(adamont_version):
+    if adamont_version == 1:
+        return _gcm_rcm_couple_adamont_v1_to_full_name
+    else:
+        return _gcm_rcm_couple_adamont_v2_to_full_name
 
 gcm_to_rnumber = \
     {
@@ -31,7 +28,7 @@ gcm_to_rnumber = \
         'NorESM1-M': 1
     }
 
-gcm_rcm_couple_adamont_v1_to_full_name = {
+_gcm_rcm_couple_adamont_v1_to_full_name = {
     ('CNRM-CM5', 'ALADIN53'): 'CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5',
     ('CNRM-CM5', 'RCA4'): 'SMHI-RCA4_CNRM-CERFACS-CNRM-CM5',
     ('CNRM-CM5', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5',
@@ -53,7 +50,7 @@ gcm_rcm_couple_adamont_v1_to_full_name = {
     ('IPSL-CM5A-MR', 'RCA4'): 'SMHI-RCA4_IPSL-IPSL-CM5A-MR',
 }
 
-gcm_rcm_couple_adamont_v2_to_full_name = {
+_gcm_rcm_couple_adamont_v2_to_full_name = {
     ('CNRM-CM5', 'RACMO22E'): 'KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5',
     ('CNRM-CM5', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5',
     ('CNRM-CM5', 'RCA4'): 'SMHI-RCA4_CNRM-CERFACS-CNRM-CM5',
@@ -135,6 +132,3 @@ gcm_to_color = {
     'NorESM1-M': 'yellow',
 }
 
-
-if __name__ == '__main__':
-    print(get_gcm_list(adamont_version=2))
diff --git a/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py b/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py
index f9dbfe6e..26e87aee 100644
--- a/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py
+++ b/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py
@@ -8,11 +8,14 @@ class AdamontScenario(Enum):
     rcp26 = 1
     rcp45 = 2
     rcp85 = 3
-    rcp85_extended = 4
+    rcp26_extended = 4
+    rcp45_extended = 5
+    rcp85_extended = 6
 
 
 adamont_scenarios_real = [AdamontScenario.histo, AdamontScenario.rcp26, AdamontScenario.rcp45, AdamontScenario.rcp85]
 rcp_scenarios = [AdamontScenario.rcp26, AdamontScenario.rcp45, AdamontScenario.rcp85]
+rcm_scenarios_extended = [AdamontScenario.rcp26_extended, AdamontScenario.rcp45_extended, AdamontScenario.rcp85_extended]
 
 
 def get_linestyle_from_scenario(adamont_scenario):
@@ -65,35 +68,32 @@ def get_year_min(adamont_scenario, gcm_rcm_couple):
     return year_min
 
 
-def get_gcm_rcm_couple_adamont_version_2(scenario):
-    s = set(list(get_gcm_rcm_couple_adamont_to_full_name(version=2).keys()))
-    scenario_to_list_to_remove = {
-        AdamontScenario.rcp26: [('EC-EARTH', 'CCLM4-8-17'), ('CNRM-CM5', 'ALADIN53'), ('CNRM-CM5', 'RCA4'),
-                                ('MPI-ESM-LR', 'RCA4'), ('HadGEM2-ES', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'RCA4'),
-                                ('CNRM-CM5', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'WRF381P'), ('NorESM1-M', 'HIRHAM5'),
-                                ('IPSL-CM5A-MR', 'WRF331F'), ('HadGEM2-ES', 'RCA4')],
-        AdamontScenario.rcp45:  [('NorESM1-M', 'REMO2015'), ('HadGEM2-ES', 'RegCM4-6')],
-        AdamontScenario.rcp85: [('HadGEM2-ES', 'RACMO22E')],
-    }
-    for couple_to_remove in scenario_to_list_to_remove[scenario]:
-        s.remove(couple_to_remove)
+def get_gcm_rcm_couples(adamont_scenario=AdamontScenario.histo, adamont_version=2):
+    # Get real scenario
+    real_adamont_scenario = scenario_to_real_scenarios(adamont_scenario)[-1]
+    # Remove some couples for each scenario for ADAMONT v2
+    gcm_rcm_couples = list(get_gcm_rcm_couple_adamont_to_full_name(adamont_version=adamont_version).keys())
+    if adamont_version == 1:
+        if real_adamont_scenario is AdamontScenario.rcp26:
+            gcm_rcm_couples = []
+    if adamont_version == 2:
+        scenario_to_list_to_remove = {
+            AdamontScenario.histo: [],
+            AdamontScenario.rcp26: [('EC-EARTH', 'CCLM4-8-17'), ('CNRM-CM5', 'ALADIN53'), ('CNRM-CM5', 'RCA4'),
+                                    ('MPI-ESM-LR', 'RCA4'), ('HadGEM2-ES', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'RCA4'),
+                                    ('CNRM-CM5', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'WRF381P'), ('NorESM1-M', 'HIRHAM5'),
+                                    ('IPSL-CM5A-MR', 'WRF331F'), ('HadGEM2-ES', 'RCA4')],
+            AdamontScenario.rcp45: [('NorESM1-M', 'REMO2015'), ('HadGEM2-ES', 'RegCM4-6')],
+            AdamontScenario.rcp85: [],
+        }
+        for couple_to_remove in scenario_to_list_to_remove[real_adamont_scenario]:
+            gcm_rcm_couples.remove(couple_to_remove)
+    return list(gcm_rcm_couples)
+
+def get_gcm_list(adamont_version):
+    s = set([gcm for gcm, _ in get_gcm_rcm_couples(adamont_version=adamont_version)])
     return list(s)
 
-def load_gcm_rcm_couples(year_min=None, year_max=None,
-                         adamont_scenario=AdamontScenario.histo,
-                         adamont_version=2):
-    gcm_rcm_couples = []
-    gcm_rcm_couple_to_full_name = get_gcm_rcm_couple_adamont_to_full_name(adamont_version)
-    for gcm_rcm_couple in gcm_rcm_couple_to_full_name.keys():
-        year_min_couple, year_max_couple = get_year_min_and_year_max_from_scenario(
-            adamont_scenario=adamont_scenario,
-            gcm_rcm_couple=gcm_rcm_couple)
-        if (year_min is None) or (year_min_couple <= year_min):
-            if (year_max is None) or (year_max <= year_max_couple):
-                gcm_rcm_couples.append(gcm_rcm_couple)
-    return gcm_rcm_couples
-
-
 def get_suffix_for_the_nc_file(adamont_scenario, gcm_rcm_couple):
     assert isinstance(adamont_scenario, AdamontScenario)
     year_min, year_max = get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple)
@@ -111,10 +111,13 @@ def scenario_to_real_scenarios(adamont_scenario):
     else:
         if adamont_scenario is AdamontScenario.rcp85_extended:
             return [AdamontScenario.histo, AdamontScenario.rcp85]
+        elif adamont_scenario is AdamontScenario.rcp45_extended:
+            return [AdamontScenario.histo, AdamontScenario.rcp45]
+        elif adamont_scenario is AdamontScenario.rcp26_extended:
+            return [AdamontScenario.histo, AdamontScenario.rcp26]
         else:
             raise NotImplementedError
 
 
 def gcm_rcm_couple_to_str(gcm_rcm_couple):
     return ' / '.join(gcm_rcm_couple)
-
diff --git a/extreme_data/meteo_france_data/adamont_data/adamont_studies.py b/extreme_data/meteo_france_data/adamont_data/adamont_studies.py
index 6f494a3e..17dea00f 100644
--- a/extreme_data/meteo_france_data/adamont_data/adamont_studies.py
+++ b/extreme_data/meteo_france_data/adamont_data/adamont_studies.py
@@ -8,7 +8,8 @@ from cached_property import cached_property
 from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy
 from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import get_gcm_rcm_couple_adamont_to_full_name, \
     gcm_rcm_couple_to_color
-from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_str
+from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_str, \
+    get_year_min_and_year_max_from_scenario
 from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
 from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \
     SCM_STUDY_CLASS_TO_ABBREVIATION, ADAMONT_STUDY_CLASS_TO_ABBREVIATION
@@ -17,15 +18,19 @@ from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualiz
 
 class AdamontStudies(object):
 
-    def __init__(self, study_class, gcm_rcm_couples=None, adamont_version=2, **kwargs_study):
+    def __init__(self, study_class, year_min_studies=None, year_max_studies=None,
+                 gcm_rcm_couples=None, adamont_version=2, **kwargs_study):
         self.study_class = study_class
+        self.year_min_studies = year_min_studies
+        self.year_max_studies = year_max_studies
         if gcm_rcm_couples is None:
             gcm_rcm_couple_to_full_name = get_gcm_rcm_couple_adamont_to_full_name(adamont_version)
             gcm_rcm_couples = list(gcm_rcm_couple_to_full_name.keys())
         self.gcm_rcm_couples = gcm_rcm_couples
         self.gcm_rcm_couple_to_study = OrderedDict()  # type: OrderedDict[int, AbstractAdamontStudy]
         for gcm_rcm_couple in self.gcm_rcm_couples:
-            study = study_class(gcm_rcm_couple=gcm_rcm_couple, adamont_version=adamont_version, **kwargs_study)
+            study = study_class(gcm_rcm_couple=gcm_rcm_couple, adamont_version=adamont_version,
+                                year_min=year_min_studies, year_max=year_max_studies, **kwargs_study)
             self.gcm_rcm_couple_to_study[gcm_rcm_couple] = study
 
     @property
@@ -48,32 +53,37 @@ class AdamontStudies(object):
         study_visualizer.show_or_save_to_file(add_classic_title=False, dpi=500, no_title=no_title,
                                               tight_layout=tight_layout)
 
-    def plot_maxima_time_series_adamont(self, massif_names=None, scm_study=None):
+    def plot_maxima_time_series_adamont(self, massif_names=None, scm_study=None, legend_and_labels=True):
         massif_names = massif_names if massif_names is not None else self.study.all_massif_names()
         for massif_names in massif_names:
-            self._plot_maxima_time_series(massif_names, scm_study)
+            self._plot_maxima_time_series(massif_names, scm_study, legend_and_labels=legend_and_labels)
 
-    def _plot_maxima_time_series(self, massif_name, scm_study=None):
+    def _plot_maxima_time_series(self, massif_name, scm_study=None, legend_and_labels=True):
         ax = plt.gca()
-        x = self.study.ordered_years
         linewidth = 2
         for gcm_rcm_couple, study in list(self.gcm_rcm_couple_to_study.items())[::-1]:
             if massif_name in study.massif_name_to_annual_maxima:
+                x = study.ordered_years
                 y = study.massif_name_to_annual_maxima[massif_name]
-                label = gcm_rcm_couple_to_color[gcm_rcm_couple]
+                label = gcm_rcm_couple_to_str(gcm_rcm_couple)
                 color = gcm_rcm_couple_to_color[gcm_rcm_couple]
                 ax.plot(x, y, linewidth=linewidth, label=label, color=color)
         if scm_study is None:
-            y = np.array([study.massif_name_to_annual_maxima[massif_name] for study in self.study_list
-                 if massif_name in study.massif_name_to_annual_maxima])
-            if len(y) > 0:
-                y = np.mean(y, axis=0)
-                label = 'Mean maxima'
-                color = 'black'
-                ax.plot(x, y, linewidth=linewidth * 2, label=label, color=color)
+            pass
+            # I should recode that, taking into account that the length of annual maxima is not the same
+            # for all the time series
+            # x = study.ordered_years
+            # y = np.array([study.massif_name_to_annual_maxima[massif_name] for study in self.study_list
+            #      if massif_name in study.massif_name_to_annual_maxima])
+            # if len(y) > 0:
+            #     y = np.mean(y, axis=0)
+            #     label = 'Mean maxima'
+            #     color = 'black'
+            #     ax.plot(x, y, linewidth=linewidth * 2, label=label, color=color)
         else:
             # todo: otherwise display the mean in strong black
             try:
+                x = scm_study.ordered_years
                 y = scm_study.massif_name_to_annual_maxima[massif_name]
                 label = 'Reanalysis'
                 color = 'black'
@@ -81,23 +91,25 @@ class AdamontStudies(object):
             except KeyError:
                 pass
 
-        ticks = [year for year in x if year % 10 == 0]
+        ticks = [year for year in range(self.year_min_studies, self.year_max_studies+1) if year % 10 == 0]
         ax.xaxis.set_ticks(ticks)
         ax.yaxis.grid()
-        ax.set_xlim((min(x), max(x)))
-        # Augment the ylim for the legend
-        ylim_min, ylim_max = ax.get_ylim()
-        ax.set_ylim((ylim_min, ylim_max * 1.5))
-        ax.tick_params(axis='both', which='major', labelsize=13)
-        handles, labels = ax.get_legend_handles_labels()
-        ncol = 2 if self.study.adamont_version == 1 else 3
-        ax.legend(handles[::-1], labels[::-1], ncol=ncol, prop={'size': 7})
+        ax.set_xlim((self.year_min_studies, self.year_max_studies))
+        if legend_and_labels:
+            # Augment the ylim for the legend
+            ylim_min, ylim_max = ax.get_ylim()
+            ax.set_ylim((ylim_min, ylim_max * 1.5))
+            ax.tick_params(axis='both', which='major', labelsize=13)
+            handles, labels = ax.get_legend_handles_labels()
+            ncol = 2 if self.study.adamont_version == 1 else 3
+            ax.legend(handles[::-1], labels[::-1], ncol=ncol, prop={'size': 7})
         plot_name = 'Annual maxima of {} in {} at {} m'.format(ADAMONT_STUDY_CLASS_TO_ABBREVIATION[self.study_class],
                                                        massif_name.replace('_', ' '),
                                                         self.study.altitude)
         fontsize = 13
-        ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=fontsize)
-        ax.set_xlabel('years', fontsize=fontsize)
+        if legend_and_labels:
+            ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=fontsize)
+            ax.set_xlabel('years', fontsize=fontsize)
         plot_name = 'time series/' + plot_name
         self.show_or_save_to_file(plot_name=plot_name, show=False, no_title=True, tight_layout=True)
         ax.clear()
diff --git a/extreme_data/meteo_france_data/adamont_data/cmip5/climate_explorer_cimp5.py b/extreme_data/meteo_france_data/adamont_data/cmip5/climate_explorer_cimp5.py
index 149f9f9e..01d1a7c9 100644
--- a/extreme_data/meteo_france_data/adamont_data/cmip5/climate_explorer_cimp5.py
+++ b/extreme_data/meteo_france_data/adamont_data/cmip5/climate_explorer_cimp5.py
@@ -8,9 +8,9 @@ import cdsapi
 import numpy as np
 from netCDF4._netCDF4 import Dataset, OrderedDict
 
-from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_to_rnumber, get_gcm_list
+from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_to_rnumber
 from extreme_data.meteo_france_data.adamont_data.adamont_scenario import get_year_min_and_year_max_from_scenario, \
-    AdamontScenario, adamont_scenarios_real
+    AdamontScenario, adamont_scenarios_real, get_gcm_list
 from extreme_data.utils import DATA_PATH
 
 GLOBALTEMP_WEB_PATH = "https://climexp.knmi.nl/CMIP5/Tglobal/"
diff --git a/extreme_data/meteo_france_data/adamont_data/cmip5/plot_temperatures.py b/extreme_data/meteo_france_data/adamont_data/cmip5/plot_temperatures.py
index d1dec204..20066342 100644
--- a/extreme_data/meteo_france_data/adamont_data/cmip5/plot_temperatures.py
+++ b/extreme_data/meteo_france_data/adamont_data/cmip5/plot_temperatures.py
@@ -1,9 +1,9 @@
 import matplotlib.pyplot as plt
 from matplotlib.lines import Line2D
 
-from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import get_gcm_list, gcm_to_color
+from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_to_color
 from extreme_data.meteo_france_data.adamont_data.adamont_scenario import get_linestyle_from_scenario, \
-    adamont_scenarios_real, AdamontScenario, scenario_to_str
+    adamont_scenarios_real, AdamontScenario, scenario_to_str, get_gcm_list
 from extreme_data.meteo_france_data.adamont_data.cmip5.climate_explorer_cimp5 import year_to_global_mean_temp, \
     years_and_global_mean_temps
 
diff --git a/projects/altitude_spatial_model/preliminary_analysis.py b/projects/altitude_spatial_model/preliminary_analysis.py
index 34838736..5148971a 100644
--- a/projects/altitude_spatial_model/preliminary_analysis.py
+++ b/projects/altitude_spatial_model/preliminary_analysis.py
@@ -7,9 +7,9 @@ from cached_property import cached_property
 
 from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy
 from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
-from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_rcm_couple_adamont_v2_to_full_name
+from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import _gcm_rcm_couple_adamont_v2_to_full_name
 from extreme_data.meteo_france_data.adamont_data.adamont_scenario import adamont_scenarios_real, \
-    get_gcm_rcm_couple_adamont_version_2, rcp_scenarios
+    get_gcm_rcm_couples, rcp_scenarios
 from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
 from extreme_data.meteo_france_data.scm_models_data.visualization.plot_utils import plot_against_altitude
 from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer
@@ -118,7 +118,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies):
 
             plot_name = '{} change with altitude'.format(param_name)
             if isinstance(self.study, AbstractAdamontStudy):
-                plot_name = op.join(plot_name, gcm_rcm_couple_adamont_v2_to_full_name[self.study.gcm_rcm_couple])
+                plot_name = op.join(plot_name, _gcm_rcm_couple_adamont_v2_to_full_name[self.study.gcm_rcm_couple])
 
             # # Display the legend
             if legend:
@@ -152,7 +152,7 @@ class PointwiseGevStudyVisualizer(AltitudesStudies):
             label = 'Elevation gradient for\n{} {}'.format(the, value_label[:-idx] + '/100m)')
             plot_name = label.replace('/', ' every ')
             if isinstance(self.study, AbstractAdamontStudy):
-                plot_name = op.join(plot_name, gcm_rcm_couple_adamont_v2_to_full_name[self.study.gcm_rcm_couple])
+                plot_name = op.join(plot_name, _gcm_rcm_couple_adamont_v2_to_full_name[self.study.gcm_rcm_couple])
 
             gev_param_name_to_graduation = {
                 GevParams.LOC: 0.5,
@@ -333,7 +333,7 @@ def main_paper3():
     altitudes = list(chain.from_iterable(altitudes_for_groups))
     # altitudes = [1200, 1500, 1800]
     for scenario in rcp_scenarios[:]:
-        for gcm_rcm_couple in get_gcm_rcm_couple_adamont_version_2(scenario):
+        for gcm_rcm_couple in get_gcm_rcm_couples(scenario):
             visualizer = PointwiseGevStudyVisualizer(AdamontSnowfall, altitudes=altitudes, scenario=scenario,
                                                      gcm_rcm_couple=gcm_rcm_couple)
             visualizer.plot_gev_params_against_altitude()
diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_rcp_85_extended.py b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_rcp_85_extended.py
deleted file mode 100644
index fc819ca7..00000000
--- a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_rcp_85_extended.py
+++ /dev/null
@@ -1,91 +0,0 @@
-from collections import OrderedDict
-
-import matplotlib as mpl
-
-mpl.use('Agg')
-mpl.rcParams['text.usetex'] = True
-mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
-
-from projects.projected_snowfall.comparison_with_scm.comparison_plot import individual_plot, collective_plot
-
-from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
-from extreme_data.meteo_france_data.adamont_data.adamont_scenario import load_gcm_rcm_couples, \
-    AdamontScenario
-from extreme_data.meteo_france_data.adamont_data.adamont_studies import AdamontStudies
-from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
-from extreme_data.meteo_france_data.scm_models_data.utils import Season
-from projects.projected_snowfall.comparison_with_scm.comparison_historical_visualizer import \
-    ComparisonHistoricalVisualizer
-
-
-def main(fast):
-    year_max = 2019
-    # Set the year_min and year_max for the comparison
-    if fast is 1:
-        year_min = [1982, 1950][0]
-        massif_names = ['Vanoise']
-        altitudes = [1800]
-    elif fast is 2:
-        year_min = [1982, 1950][0]
-        massif_names = None
-        altitudes = [1800]
-    elif fast is 3:
-        year_min = [1982, 1950][0]
-        massif_names = ['Vanoise']
-        altitudes = [1200, 1500, 1800, 2100, 2400]
-    elif fast is 4:
-        year_max = 2019
-        massif_names = None
-        year_min = 2006
-        altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600][:]
-    elif fast is 5:
-        year_max = 2019
-        massif_names = None
-        year_min = 1982
-        altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600][:]
-    else:
-        year_max = 2005
-        massif_names = None
-        year_min = 1982
-        altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600][:]
-
-    # Load visualizers
-    altitude_to_visualizer = OrderedDict()
-    for altitude in altitudes:
-        visualizer = load_visualizer(altitude, massif_names, year_min, year_max)
-        altitude_to_visualizer[altitude] = visualizer
-        # Individual plot
-        individual_plot(visualizer)
-    # Collective plot
-    collective_plot(altitude_to_visualizer)
-
-
-def load_visualizer(altitude, massif_names, year_min, year_max) -> ComparisonHistoricalVisualizer:
-    year_min = max(1959, year_min)
-    year_max = min(2019, year_max)
-    study_class_couple = [(SafranSnowfall1Day, AdamontSnowfall)][0]
-    scm_study_class, adamont_study_class = study_class_couple
-    season = Season.annual
-    if year_min <= 2005:
-        if year_max > 2005:
-            adamont_scenario = AdamontScenario.rcp85_extended
-        else:
-            adamont_scenario = AdamontScenario.histo
-    else:
-        adamont_scenario = AdamontScenario.rcp85
-
-    # Loading part
-    scm_study = scm_study_class(altitude=altitude, year_min=year_min, year_max=year_max, season=season)
-    gcm_rcm_couples = load_gcm_rcm_couples(year_min, year_max,
-                                           adamont_scenario=adamont_scenario)
-    adamont_studies = AdamontStudies(adamont_study_class, gcm_rcm_couples,
-                                     altitude=altitude, year_min=year_min, year_max=year_max, season=season,
-                                     scenario=adamont_scenario)
-    visualizer = ComparisonHistoricalVisualizer(scm_study, adamont_studies, massif_names=massif_names)
-    return visualizer
-
-
-if __name__ == '__main__':
-    fast_list = [2, 4, 6][1:]
-    for fast in fast_list:
-        main(fast)
diff --git a/projects/projected_snowfall/comparison_with_scm/__init__.py b/projects/projected_snowfall/data/__init__.py
similarity index 100%
rename from projects/projected_snowfall/comparison_with_scm/__init__.py
rename to projects/projected_snowfall/data/__init__.py
diff --git a/projects/projected_snowfall/data/main_data.py b/projects/projected_snowfall/data/main_data.py
new file mode 100644
index 00000000..49d4ac89
--- /dev/null
+++ b/projects/projected_snowfall/data/main_data.py
@@ -0,0 +1,44 @@
+from collections import OrderedDict
+
+import matplotlib as mpl
+
+mpl.use('Agg')
+mpl.rcParams['text.usetex'] = True
+mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
+
+from projects.projected_snowfall.evaluation.comparison_plot import individual_plot
+
+from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
+from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
+    scenario_to_real_scenarios, rcp_scenarios
+from extreme_data.meteo_france_data.adamont_data.adamont_studies import AdamontStudies
+from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
+from extreme_data.meteo_france_data.scm_models_data.utils import Season
+
+
+def main():
+    scm_study_class = SafranSnowfall1Day
+    adamont_study_class = AdamontSnowfall
+    year_min = 1950
+    year_max = 2100
+    massif_names = ['Vanoise']
+    season = Season.annual
+    scenarios = [AdamontScenario.rcp26_extended, AdamontScenario.rcp45_extended, AdamontScenario.rcp85_extended]
+    # scenarios = rcp_scenarios
+    altitudes = [600, 2100, 3600]
+    for altitude, adamont_scenario in list(zip(altitudes, scenarios))[-1:]:
+        # Loading part
+        scm_study = scm_study_class(altitude=altitude)
+        real_adamont_scenario = scenario_to_real_scenarios(adamont_scenario=adamont_scenario)[-1]
+        gcm_rcm_couples = get_gcm_rcm_couples(adamont_scenario=real_adamont_scenario)
+        adamont_studies = AdamontStudies(study_class=adamont_study_class, gcm_rcm_couples=gcm_rcm_couples,
+                                         altitude=altitude, year_min_studies=year_min, year_max_studies=year_max,
+                                         season=season, scenario=adamont_scenario)
+        print(altitude, adamont_scenario)
+        adamont_studies.plot_maxima_time_series_adamont(massif_names=massif_names, scm_study=scm_study, legend_and_labels=False)
+
+
+if __name__ == '__main__':
+    fast_list = [1, 2, 4, 6][:1]
+    for fast in fast_list:
+        main()
diff --git a/projects/projected_snowfall/projected_data/__init__.py b/projects/projected_snowfall/evaluation/__init__.py
similarity index 100%
rename from projects/projected_snowfall/projected_data/__init__.py
rename to projects/projected_snowfall/evaluation/__init__.py
diff --git a/projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py b/projects/projected_snowfall/evaluation/comparison_historical_visualizer.py
similarity index 100%
rename from projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py
rename to projects/projected_snowfall/evaluation/comparison_historical_visualizer.py
diff --git a/projects/projected_snowfall/comparison_with_scm/comparison_plot.py b/projects/projected_snowfall/evaluation/comparison_plot.py
similarity index 98%
rename from projects/projected_snowfall/comparison_with_scm/comparison_plot.py
rename to projects/projected_snowfall/evaluation/comparison_plot.py
index 398b9f3c..7572e4b9 100644
--- a/projects/projected_snowfall/comparison_with_scm/comparison_plot.py
+++ b/projects/projected_snowfall/evaluation/comparison_plot.py
@@ -9,7 +9,7 @@ from matplotlib.lines import Line2D
 from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_rcm_couple_to_color
 from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_str, \
     scenario_to_str
-from projects.projected_snowfall.comparison_with_scm.comparison_historical_visualizer import \
+from projects.projected_snowfall.evaluation.comparison_historical_visualizer import \
     ComparisonHistoricalVisualizer
 
 
diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py b/projects/projected_snowfall/evaluation/main_comparison_on_quantile_period.py
similarity index 95%
rename from projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py
rename to projects/projected_snowfall/evaluation/main_comparison_on_quantile_period.py
index ad64be48..5eb9eb38 100644
--- a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py
+++ b/projects/projected_snowfall/evaluation/main_comparison_on_quantile_period.py
@@ -4,9 +4,9 @@ import matplotlib
 
 from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
 from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import \
-    get_year_min_and_year_max_used_to_compute_quantile
-from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, gcm_rcm_couple_to_color, \
-    gcm_rcm_couple_to_str, load_gcm_rcm_couples
+    get_year_min_and_year_max_used_to_compute_quantile, gcm_rcm_couple_to_color
+from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, \
+    gcm_rcm_couple_to_str, get_gcm_rcm_couples
 from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day, \
     SafranSnowfallCenterOnDay1dayMeanRate, SafranSnowfallCenterOnDay1day
 from extreme_data.meteo_france_data.scm_models_data.safran.safran_max_snowf import SafranSnowfall2020, \
@@ -68,7 +68,7 @@ def main_comparaison_plot():
     for adamont_version in [1, 2][1:]:
         print('version:', adamont_version)
 
-        gcm_rcm_couples = load_gcm_rcm_couples(adamont_scenario=AdamontScenario.histo, adamont_version=adamont_version)
+        gcm_rcm_couples = get_gcm_rcm_couples(adamont_scenario=AdamontScenario.histo, adamont_version=adamont_version)
 
         study_class_for_adamont_v1 = SafranSnowfall1Day
         study_class = SafranSnowfall2020 if adamont_version == 2 else study_class_for_adamont_v1
@@ -89,9 +89,9 @@ def main_comparaison_plot():
         else:
             list_of_massis_names = [None] + [[m] for m in reanalysis_altitude_studies_1981.study.all_massif_names()]
 
-        for relative_bias in [True, False][:]:
-            for mean in [True, False][1:]:
-                for massif_names in list_of_massis_names[:]:
+        for relative_bias in [True, False][1:]:
+            for mean in [True, False][:1]:
+                for massif_names in list_of_massis_names[:1]:
                     ax = plt.gca()
                     bias_in_the_mean = []
                     list_altitudes_for_bias = []
diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_reanalysis.py b/projects/projected_snowfall/evaluation/main_comparison_reanalysis.py
similarity index 100%
rename from projects/projected_snowfall/comparison_with_scm/main_comparison_reanalysis.py
rename to projects/projected_snowfall/evaluation/main_comparison_reanalysis.py
diff --git a/projects/projected_snowfall/projected_data/main_projection.py b/projects/projected_snowfall/projected_data/main_projection.py
deleted file mode 100644
index 52a7d404..00000000
--- a/projects/projected_snowfall/projected_data/main_projection.py
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-import matplotlib as mpl
-
-from extreme_data.meteo_france_data.scm_models_data.safran.safran_max_snowf import SafranSnowfall2020
-
-mpl.use('Agg')
-mpl.rcParams['text.usetex'] = True
-mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
-from collections import OrderedDict
-
-from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
-from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, \
-    load_gcm_rcm_couples
-from extreme_data.meteo_france_data.adamont_data.adamont_studies import AdamontStudies
-from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
-from extreme_data.meteo_france_data.scm_models_data.utils import Season
-from projects.projected_snowfall.comparison_with_scm.comparison_historical_visualizer import \
-    ComparisonHistoricalVisualizer
-
-
-def main():
-    fast = None
-    adamont_scenario = [AdamontScenario.histo, AdamontScenario.rcp85_extended][1]
-    year_min = 1982 if adamont_scenario is AdamontScenario.rcp85_extended else 2006
-    # Set the year_min and year_max for the comparison
-    if fast is True:
-        year_max = [2030][0]
-        massif_names = ['Vanoise']
-        altitudes = [1800]
-    elif fast is None:
-        # year_min = [1951][0]
-        # year_min = [1951][0]
-        year_max = [2005][0]
-        massif_names = ['Vercors']
-        altitudes = [900, 1200, 1500, 1800, 2100, 2400][3:4]
-    else:
-        year_max = [2100][0]
-        massif_names = None
-        altitudes = [900, 1800, 2700, 3600][2:]
-
-    # Load studies
-    for altitude in altitudes:
-        adamont_study_class = AdamontSnowfall
-        season = Season.annual
-        gcm_rcm_couples = load_gcm_rcm_couples(year_min, year_max,
-                                               adamont_scenario=adamont_scenario)
-        adamont_studies = AdamontStudies(adamont_study_class, gcm_rcm_couples,
-                                         altitude=altitude, year_min=year_min,
-                                         year_max=year_max, season=season,
-                                         scenario=adamont_scenario,
-                                         adamont_version=2)
-        if year_max <= 2020:
-            scm_study = SafranSnowfall2020(altitude=altitude, season=season, year_min=year_min, year_max=year_max)
-        else:
-            scm_study = None
-        adamont_studies.plot_maxima_time_series_adamont(massif_names, scm_study=scm_study)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py b/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py
index bd8c1f1b..9f552e6e 100644
--- a/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py
+++ b/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py
@@ -2,7 +2,7 @@ import unittest
 
 from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import get_gcm_rcm_couple_adamont_to_full_name
 from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, adamont_scenarios_real, \
-    rcp_scenarios, get_gcm_rcm_couple_adamont_version_2
+    rcp_scenarios, get_gcm_rcm_couples, rcm_scenarios_extended
 from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
 from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
 
@@ -10,19 +10,18 @@ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranS
 class TestAdamontStudy(unittest.TestCase):
 
     def test_load_adamont_snowfall(self):
-        for version in [1, 2]:
+        for version in [1, 2][1:]:
             study_list = [
                 AdamontSnowfall(altitude=900, adamont_version=version),
                 AdamontSnowfall(altitude=1800, adamont_version=version)
             ]
-            study_list.extend([
-                AdamontSnowfall(altitude=900, scenario=AdamontScenario.rcp45, adamont_version=version),
-                AdamontSnowfall(altitude=900, scenario=AdamontScenario.rcp85, adamont_version=version),
-                AdamontSnowfall(altitude=900, scenario=AdamontScenario.rcp85_extended, adamont_version=version)
-            ])
-            gcm_rcm_couple_to_full_name = get_gcm_rcm_couple_adamont_to_full_name(version)
+            for scenario in rcp_scenarios + rcm_scenarios_extended:
+                first_gcm_rcm_couple = get_gcm_rcm_couples(scenario, version)[0]
+                study_list.append(AdamontSnowfall(altitude=900, scenario=scenario, adamont_version=version,
+                                                  gcm_rcm_couple=first_gcm_rcm_couple))
+
             study_list.extend([AdamontSnowfall(altitude=900, gcm_rcm_couple=gcm_rcm_couple, adamont_version=version)
-                               for gcm_rcm_couple in gcm_rcm_couple_to_full_name.keys()])
+                               for gcm_rcm_couple in get_gcm_rcm_couples(adamont_version=version)])
             for study in study_list:
                 annual_maxima_for_year_min = study.year_to_annual_maxima[study.year_min]
                 # print(study.altitude, study.scenario_name, study.gcm_rcm_couple)
@@ -43,7 +42,7 @@ class TestAdamontStudy(unittest.TestCase):
         altitude = 1800
         for scenario in rcp_scenarios[:]:
             l = []
-            for gcm_rcm_couple in get_gcm_rcm_couple_adamont_version_2(scenario):
+            for gcm_rcm_couple in get_gcm_rcm_couples(scenario):
                 adamont_study = AdamontSnowfall(altitude=altitude, adamont_version=2,
                                                 year_min=2098, gcm_rcm_couple=gcm_rcm_couple,
                                                 scenario=scenario)
-- 
GitLab