diff --git a/projects/elevation_temporal_model_for_projections/__init__.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/__init__.py
similarity index 100%
rename from projects/elevation_temporal_model_for_projections/__init__.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/__init__.py
diff --git a/projects/elevation_temporal_model_for_projections/ensemble_fit/abstract_ensemble_fit.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/__init__.py
similarity index 100%
rename from projects/elevation_temporal_model_for_projections/ensemble_fit/abstract_ensemble_fit.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/__init__.py
diff --git a/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/abstract_ensemble_fit.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/abstract_ensemble_fit.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2c9cf659961692b111cd34a62f710983cd6644a
--- /dev/null
+++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/abstract_ensemble_fit.py
@@ -0,0 +1,4 @@
+
+
+class AbstractEnsembleFit(object):
+    pass
\ No newline at end of file
diff --git a/projects/elevation_temporal_model_for_projections/ensemble_fit/independent_ensemble_fit.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/independent_ensemble_fit.py
similarity index 100%
rename from projects/elevation_temporal_model_for_projections/ensemble_fit/independent_ensemble_fit.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/independent_ensemble_fit.py
diff --git a/projects/elevation_temporal_model_for_projections/ensemble_fit/together_ensemble_fit.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/together_ensemble_fit.py
similarity index 100%
rename from projects/elevation_temporal_model_for_projections/ensemble_fit/together_ensemble_fit.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/ensemble_fit/together_ensemble_fit.py
diff --git a/projects/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py
similarity index 74%
rename from projects/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py
index 01fa3a47eca1bffc8bf23502ac18112a5f488d54..f3f05a462abbd40b01d52f3088aef06e52721f55 100644
--- a/projects/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py
+++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py
@@ -4,13 +4,15 @@ from typing import List
 
 import matplotlib
 
+from projects.projected_snowfall.elevation_temporal_model_for_projections.utils_projected_visualizer import \
+    load_projected_visualizer_list
+from projects.projected_snowfall.elevation_temporal_model_for_projections.visualizer_for_projection_ensemble import \
+    VisualizerForProjectionEnsemble
+
 matplotlib.use('Agg')
 
-from extreme_data.meteo_france_data.scm_models_data.safran.safran_max_snowf import SafranSnowfall2019, \
-    SafranSnowfall2020
 from projects.altitude_spatial_model.altitudes_fit.plots.plot_histogram_altitude_studies import \
-    plot_shoe_plot_changes_against_altitude, plot_histogram_all_trends_against_altitudes, \
-    plot_shoe_plot_ratio_interval_size_against_altitude, plot_histogram_all_models_against_altitudes
+    plot_shoe_plot_changes_against_altitude, plot_histogram_all_trends_against_altitudes
 
 from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \
     AbstractExtractEurocodeReturnLevel
@@ -18,25 +20,20 @@ from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extra
 import matplotlib as mpl
 
 from extreme_fit.model.utils import set_seed_for_test
-from projects.altitude_spatial_model.altitudes_fit.plots.plot_coherence_curves import plot_coherence_curves
 
 mpl.rcParams['text.usetex'] = True
 mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
 
-from projects.altitude_spatial_model.altitudes_fit.utils_altitude_studies_visualizer import load_visualizer_list
-
 from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitude_group import altitudes_for_groups
-from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.plot_total_aic import plot_individual_aic
 
 from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day, SafranSnowfall3Days, \
-    SafranSnowfall5Days, SafranSnowfall7Days, SafranDateFirstSnowfall, SafranPrecipitation1Day, \
-    SafranPrecipitation3Days, SafranSnowfallCenterOnDay1dayMeanRate, SafranSnowfallNotCenterOnDay1day
+    SafranSnowfall5Days, SafranSnowfall7Days
 from extreme_data.meteo_france_data.scm_models_data.utils import Season
 
 
 def main():
     study_classes = [SafranSnowfall1Day
-                     , SafranSnowfall3Days,
+                        , SafranSnowfall3Days,
                      SafranSnowfall5Days, SafranSnowfall7Days][:1]
     seasons = [Season.annual, Season.winter, Season.spring, Season.automn][:1]
 
@@ -70,9 +67,9 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes, model_must_p
     for season in seasons:
         for study_class in study_classes:
             print('Inner loop', season, study_class)
-            visualizer_list = load_visualizer_list(season, study_class, altitudes_list, massif_names,
-                                                   model_must_pass_the_test
-                                                )
+            visualizer_list = load_projected_visualizer_list(season, study_class, altitudes_list, massif_names,
+                                                             model_must_pass_the_test
+                                                             )
             plot_visualizers(massif_names, visualizer_list)
             for visualizer in visualizer_list:
                 plot_visualizer(massif_names, visualizer)
@@ -97,13 +94,14 @@ def plot_visualizer(massif_names, visualizer):
     # visualizer.studies.plot_maxima_time_series(['Vanoise'])
 
     # Plot the results for the model that minimizes the individual aic
-    plot_individual_aic(visualizer)
+    plots(visualizer)
 
     # Plot the results for the model that minimizes the total aic
     # plot_total_aic(model_classes, visualizer)
     pass
 
-def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels):
+
+def plots(visualizer: VisualizerForProjectionEnsemble):
     # visualizer.plot_shape_map()
     visualizer.plot_moments()
     # visualizer.plot_qqplots()
@@ -111,10 +109,5 @@ def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels):
     #     visualizer.studies.plot_mean_maxima_against_altitude(std=std)
 
 
-def plot_individual_aic(visualizer):
-    OneFoldFit.best_estimator_minimizes_total_aic = False
-    plots(visualizer)
-
-
 if __name__ == '__main__':
     main()
diff --git a/projects/projected_snowfall/elevation_temporal_model_for_projections/utils_projected_visualizer.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/utils_projected_visualizer.py
new file mode 100644
index 0000000000000000000000000000000000000000..f3bd8d953e60b4beb0f3bc2dab3af272d85fc919
--- /dev/null
+++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/utils_projected_visualizer.py
@@ -0,0 +1,44 @@
+from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
+    ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
+from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
+from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitudes_studies_visualizer_for_non_stationary_models import \
+    AltitudesStudiesVisualizerForNonStationaryModels
+
+
+def load_projected_visualizer_list(season, study_class, altitudes_list, massif_names, model_must_pass_the_test=True, **kwargs_study):
+    model_classes = ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
+    visualizer_list = []
+    # Load all studies
+    for altitudes in altitudes_list:
+        studies = AltitudesStudies(study_class, altitudes, season=season, **kwargs_study)
+        visualizer = AltitudesStudiesVisualizerForNonStationaryModels(studies=studies,
+                                                                      model_classes=model_classes,
+                                                                      massif_names=massif_names,
+                                                                      show=False,
+                                                                      temporal_covariate_for_fit=None,
+                                                                      confidence_interval_based_on_delta_method=False,
+                                                                      display_only_model_that_pass_anderson_test=model_must_pass_the_test
+                                                                      )
+        visualizer_list.append(visualizer)
+    compute_and_assign_max_abs(visualizer_list)
+
+    return visualizer_list
+
+
+def compute_and_assign_max_abs(visualizer_list):
+    # Compute the max abs for all metrics
+    d = {}
+    for method_name in AltitudesStudiesVisualizerForNonStationaryModels.moment_names:
+        for order in AltitudesStudiesVisualizerForNonStationaryModels.orders:
+            c = (method_name, order)
+            max_abs = max([
+                max([abs(e) for e in v.method_name_and_order_to_d(method_name, order).values()
+                     ]) for v in visualizer_list])
+            d[c] = max_abs
+    # Assign the max abs dictionary
+    for v in visualizer_list:
+        v._method_name_and_order_to_max_abs = d
+    # Compute the max abs for the shape parameter
+    max_abs_for_shape = max([max([abs(e) for e in v.massif_name_to_shape.values()]) for v in visualizer_list])
+    for v in visualizer_list:
+        v._max_abs_for_shape = max_abs_for_shape
diff --git a/projects/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py
similarity index 97%
rename from projects/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py
rename to projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py
index 29ad21306be0626cda8aa4adb207d49987a681e3..a88cc1a9faf5ad4fe4a7c286f47f946222e02c6b 100644
--- a/projects/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py
+++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py
@@ -33,25 +33,35 @@ from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
 
 class VisualizerForProjectionEnsemble(StudyVisualizer):
 
-    def __init__(self, studies: AltitudesStudies,
+    def __init__(self, gcm_rcm_couple_to_altitude_studies: Dict[str,AltitudesStudies],
                  model_classes: List[AbstractSpatioTemporalPolynomialModel],
                  show=False,
+                 ensemble_fit_classes=None,
                  massif_names=None,
                  fit_method=MarginFitMethod.extremes_fevd_mle,
                  temporal_covariate_for_fit=None,
-                 display_only_model_that_pass_anderson_test=True,
+                 display_only_model_that_pass_gof_test=False,
                  confidence_interval_based_on_delta_method=False
                  ):
-        super().__init__(studies.study, show=show, save_to_file=not show)
-        self.studies = studies
+        studies = list(gcm_rcm_couple_to_altitude_studies.values())[0]
+        study = studies.study
+        super().__init__(study, show=show, save_to_file=not show)
+        self.ensemble_fit_classes = ensemble_fit_classes
+        self.gcm_rcm_couple_to_altitude_studies = gcm_rcm_couple_to_altitude_studies
         self.non_stationary_models = model_classes
         self.fit_method = fit_method
         self.temporal_covariate_for_fit = temporal_covariate_for_fit
-        self.display_only_model_that_pass_test = display_only_model_that_pass_anderson_test
-        self.massif_names = massif_names if massif_names is not None else self.study.all_massif_names()
+        self.display_only_model_that_pass_test = display_only_model_that_pass_gof_test
+        self.massif_names = massif_names if massif_names is not None else study.all_massif_names()
         self.massif_name_to_massif_id = {m: i for i, m in enumerate(self.massif_names)}
-        self.altitude_group = get_altitude_group_from_altitudes(self.studies.altitudes)
+        self.altitude_group = get_altitude_group_from_altitudes(studies.altitudes)
         self.confidence_interval_based_on_delta_method = confidence_interval_based_on_delta_method
+
+        # Load ensemble_fit mapper
+        ensemble_fit_class_to_object = {}
+        for ensemble_fit_class in ensemble_fit_classes:
+            pass
+
         # Load one fold fit
         self.massif_name_to_massif_altitudes = {}
         self._massif_name_to_one_fold_fit = {}