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 71029bd193bd0edbae4b1ff1f1600873278d8fe1..0978312011050d01022d6ad9647eee93b53f9209 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 @@ -31,8 +31,11 @@ class AbstractAdamontStudy(AbstractStudy): french_region=FrenchRegion.alps, scenario=AdamontScenario.histo, gcm_rcm_couple=('CNRM-CM5', 'ALADIN53')): # Load the default year_min & year_max for the scenario if not specified - if year_min is None and year_max is None: - year_min, year_max = get_year_min_and_year_max_from_scenario(scenario, gcm_rcm_couple) + year_min_scenario, year_max_scenario = get_year_min_and_year_max_from_scenario(scenario, gcm_rcm_couple) + if year_min is None: + year_min = year_min_scenario + if year_max is None: + 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.gcm_rcm_couple = gcm_rcm_couple @@ -49,19 +52,22 @@ class AbstractAdamontStudy(AbstractStudy): # Loading part - - @cached_property def ordered_years(self): return list(range(self.year_min, self.year_max + 1)) @cached_property def winter_year_for_each_time_step(self): - start = datetime(year=self.year_min - 1, month=8, day=1, hour=6, minute=0, second=0) + year_min, _ = get_year_min_and_year_max_from_scenario(self.scenario, self.gcm_rcm_couple) + # It was written in the dataset for the TIME variable that it represents + # "'hours since 1950-08-01 06:00:00'" for the HISTO scenario + # "'hours since 2005-08-01 06:00:00'" for the RCP scenario + start = datetime(year=year_min - 1, month=8, day=1, hour=6, minute=0, second=0) hours_after_start = np.array(self.dataset.variables['TIME']) dates = [start + timedelta(hours=h) for h in hours_after_start] winter_year = [date.year if date.month < 8 else date.year + 1 for date in dates] - winter_year[-1] = winter_year[-2] + # Remark. The last winter year for the HISTO scenario correspond to 2006. + # Thus, the last value is not taken into account return np.array(winter_year) @cached_property @@ -116,6 +122,7 @@ class AbstractAdamontStudy(AbstractStudy): @property def nc_file_path(self): suffix_nc_file = get_suffix_for_the_nc_file(self.scenario, self.gcm_rcm_couple) - nc_file = '{}_FORCING_{}_{}_{}_{}.nc'.format(self.variable_folder_name, self.gcm_rcm_full_name, self.scenario_name, + nc_file = '{}_FORCING_{}_{}_{}_{}.nc'.format(self.variable_folder_name, self.gcm_rcm_full_name, + self.scenario_name, self.region_name, suffix_nc_file) return op.join(self.nc_files_path, nc_file) 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 c4931ae7ca51beab9f334e36e4b6ec4ab1c770db..a7f1831a295436e342d36a60be65e0e4171bf36f 100644 --- a/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py +++ b/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py @@ -10,8 +10,8 @@ class AdamontScenario(Enum): def get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple): assert isinstance(adamont_scenario, AdamontScenario) + gcm, rcm = gcm_rcm_couple if adamont_scenario == AdamontScenario.histo: - gcm, rcm = gcm_rcm_couple if gcm == 'HadGEM2-ES': year_min = 1982 elif rcm == 'RCA4': @@ -20,21 +20,27 @@ def get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple): year_min = 1952 else: year_min = 1951 - return year_min, 2005 + year_max = 2005 else: - return 2006, 2100 + year_min = 2006 + if gcm == 'HadGEM2-ES': + year_max = 2099 + else: + year_max = 2100 + return year_min, year_max + -def load_gcm_rcm_couples_for_year_min_and_year_max(year_min, year_max): +def load_gcm_rcm_couples_for_year_min_and_year_max(year_min, year_max, adamont_scenario=AdamontScenario.histo): gcm_rcm_couples = [] 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=AdamontScenario.histo, - gcm_rcm_couple=gcm_rcm_couple) + 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_couple <= year_min and 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): year_min, year_max = get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple) return '{}080106_{}080106_daysum'.format(year_min - 1, year_max) @@ -45,7 +51,8 @@ def scenario_to_str(adamont_scenario): def gcm_rcm_couple_to_str(gcm_rcm_couple): - return ' / '.join(gcm_rcm_couple) + return ' / '.join(gcm_rcm_couple) + def get_color_from_gcm_rcm_couple(gcm_rcm_couple): return gcm_rcm_couple_to_color[gcm_rcm_couple] @@ -72,7 +79,6 @@ gcm_rcm_couple_to_color = { ('NorESM1-M', 'DMI-HIRHAM5'): 'yellow', - } gcm_rcm_couple_to_full_name = { 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 d6a16a4896c921e65743da72ce255fdeee97e9b1..498ed6c8a0df7435636a0dbd3ac6d462b40d1178 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,7 @@ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm gcm_rcm_couple_to_str, get_color_from_gcm_rcm_couple 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 + SCM_STUDY_CLASS_TO_ABBREVIATION, ADAMONT_STUDY_CLASS_TO_ABBREVIATION from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer @@ -57,7 +57,6 @@ class AdamontStudies(object): ax.plot(x, y, linewidth=linewidth, label=label, color=color) if scm_study is not None: try: - print(type(scm_study)) y = scm_study.massif_name_to_annual_maxima[massif_name] label = 'Reanalysis' color = 'black' @@ -69,7 +68,7 @@ class AdamontStudies(object): ax.tick_params(axis='both', which='major', labelsize=13) handles, labels = ax.get_legend_handles_labels() ax.legend(handles[::-1], labels[::-1]) - plot_name = 'Annual maxima of {} in {}'.format(SCM_STUDY_CLASS_TO_ABBREVIATION[self.study_class], + plot_name = 'Annual maxima of {} in {}'.format(ADAMONT_STUDY_CLASS_TO_ABBREVIATION[self.study_class], massif_name.replace('_', ' ')) ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=15) ax.set_xlabel('years', fontsize=15) diff --git a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py index e5ac797706ba0910d73482df1eb6ac065fc77f25..02ddf560e068454e0ce40675202351867c718ce7 100644 --- a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py +++ b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py @@ -356,7 +356,8 @@ class AbstractStudy(object): def daily_time_series(self, year): daily_time_serie = self.year_to_variable_object[year].daily_time_serie_array - assert daily_time_serie.shape[0] in [365, 366] + nb_days = daily_time_serie.shape[0] + assert nb_days == 365 or (nb_days == 366 and year % 4 == 0) assert daily_time_serie.shape[1] == len(self.column_mask) first_index, last_index = self.year_to_first_index_and_last_index[year] daily_time_serie = daily_time_serie[first_index:last_index + 1, self.column_mask] diff --git a/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py b/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py index 0cb29288834c67520fc8934b36e125f29f410707..152971ced77200f9bcbbf2f6e38ca5304c6b0013 100644 --- a/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py +++ b/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py @@ -57,9 +57,11 @@ SCM_STUDY_CLASS_TO_ABBREVIATION = { CrocusSnowDepthDifference: 'max HS - HS at max of GSL', CrocusSnowDepthAtMaxofSwe: 'HS at max of GSL', CrocusSnowDensity: 'Density', - AdamontSnowfall: 'daily snowfall', SafranDateFirstSnowfall: 'SF1 first date' } +ADAMONT_STUDY_CLASS_TO_ABBREVIATION = { + AdamontSnowfall: 'daily snowfall', +} altitude_massif_name_and_study_class_for_poster = [ (900, 'Chartreuse', CrocusSweTotal), diff --git a/projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py b/projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py index c078db36143f1d849edcf14d1fb02b43f42b83cc..ee8c31e3ff61002117b65b6a4e872985fbcabbe6 100644 --- a/projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py +++ b/projects/projected_snowfall/comparison_with_scm/comparison_historical_visualizer.py @@ -1,15 +1,14 @@ - - import matplotlib.pyplot as plt import numpy as np +from cached_property import cached_property from matplotlib.lines import Line2D from extreme_data.meteo_france_data.adamont_data.adamont_scenario import get_color_from_gcm_rcm_couple, \ - gcm_rcm_couple_to_str + gcm_rcm_couple_to_str, gcm_rcm_couple_to_color from extreme_data.meteo_france_data.adamont_data.adamont_studies import AdamontStudies 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 + SCM_STUDY_CLASS_TO_ABBREVIATION, ADAMONT_STUDY_CLASS_TO_ABBREVIATION from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import StudyVisualizer from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies @@ -23,6 +22,7 @@ class ComparisonHistoricalVisualizer(StudyVisualizer): ): super().__init__(adamont_studies.study, show=show, save_to_file=not show) self.scm_study = scm_study + self.altitude = self.scm_study.altitude self.adamont_studies = adamont_studies if massif_names is None: massif_names = scm_study.study_massif_names @@ -45,17 +45,37 @@ class ComparisonHistoricalVisualizer(StudyVisualizer): pass return np.array(values), gcm_rcm_couples + @cached_property + def mean_bias_maxima(self): + return self.get_mean_bias(plot_maxima=True) + + def get_mean_bias(self, plot_maxima=True): + # Return an array: nb_ensemble x nb_massif + study_method = self.get_study_method(plot_maxima) + gcm_rcm_couple_to_bias_list = {couple: [] for couple in self.adamont_studies.gcm_rcm_couples} + for massif_name in self.massif_names: + values, gcm_rcm_couples = self.get_values(study_method, massif_name) + mean_values = np.mean(values, axis=1) + bias = (mean_values - mean_values[0])[1:] + for b, couple in zip(bias, gcm_rcm_couples): + gcm_rcm_couple_to_bias_list[couple].append(b) + return gcm_rcm_couple_to_bias_list + def plot_comparison(self, plot_maxima=True): - if plot_maxima: - study_method = 'massif_name_to_annual_maxima' - else: - study_method = 'massif_name_to_daily_time_series' + study_method = self.get_study_method(plot_maxima) value_name = study_method.split('to_')[1] for massif_name in self.massif_names: values, gcm_rcm_couples = self.get_values(study_method, massif_name) plot_name = value_name + ' for {}'.format(massif_name.replace('_', '-')) self.shoe_plot_comparison(values, gcm_rcm_couples, plot_name) + def get_study_method(self, plot_maxima): + if plot_maxima: + study_method = 'massif_name_to_annual_maxima' + else: + study_method = 'massif_name_to_daily_time_series' + return study_method + def shoe_plot_comparison(self, values, gcm_rcm_couples, plot_name): ax = plt.gca() width = 10 @@ -78,12 +98,33 @@ class ComparisonHistoricalVisualizer(StudyVisualizer): ax.set_xlim([min(positions) - width, max(positions) + width]) ylabel = 'Annual maxima' if 'maxima' in plot_name else 'daily values' ax.set_ylabel('{} of {} ({})'.format(ylabel, - SCM_STUDY_CLASS_TO_ABBREVIATION[type(self.study)], - self.study.variable_unit)) + ADAMONT_STUDY_CLASS_TO_ABBREVIATION[type(self.study)], + self.study.variable_unit)) - self.plot_name = 'comparison/{}'.format(plot_name) + self.plot_name = 'comparison/{}/{}'.format(self.scm_study.altitude, plot_name) self.show_or_save_to_file(add_classic_title=False, no_title=True, tight_layout=True) ax.clear() plt.close() + def shoe_plot_bias_maxima_comparison(self): + couples = list(self.mean_bias_maxima.keys()) + values = list(self.mean_bias_maxima.values()) + colors = [gcm_rcm_couple_to_color[couple] for couple in couples] + labels = [gcm_rcm_couple_to_str(couple) for couple in couples] + ax = plt.gca() + width = 10 + positions = [i * width * 2 for i in range(len(values))] + bplot = ax.boxplot(values, positions=positions, widths=width, patch_artist=True, showmeans=True) + for color, patch in zip(colors, bplot['boxes']): + patch.set_facecolor(color) + custom_lines = [Line2D([0], [0], color=color, lw=4) for color in colors] + ax.legend(custom_lines, labels, ncol=2) + ax.set_xticks([]) + plot_name = 'Mean bias w.r.t to the reanalysis at {} m '.format(self.altitude) + ax.set_ylabel(plot_name) + ax.set_xlim([min(positions) - width, max(positions) + width]) + self.plot_name = 'altitude_comparison/{}'.format(plot_name) + self.show_or_save_to_file(add_classic_title=False, no_title=True, tight_layout=True) + ax.clear() + plt.close() diff --git a/projects/projected_snowfall/comparison_with_scm/comparison_plot.py b/projects/projected_snowfall/comparison_with_scm/comparison_plot.py new file mode 100644 index 0000000000000000000000000000000000000000..28707f1f1957d92ce8b812d9a81e8602d728776b --- /dev/null +++ b/projects/projected_snowfall/comparison_with_scm/comparison_plot.py @@ -0,0 +1,45 @@ +import matplotlib.pyplot as plt +from typing import Dict + +from matplotlib.lines import Line2D + +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_color, gcm_rcm_couple_to_str +from projects.projected_snowfall.comparison_with_scm.comparison_historical_visualizer import \ + ComparisonHistoricalVisualizer + + +def individual_plot(v): + # v.adamont_studies.plot_maxima_time_series(v.massif_names, v.scm_study) + v.shoe_plot_bias_maxima_comparison() + # for plot_maxima in [True, False][:1]: + # v.plot_comparison(plot_maxima) + + +def collective_plot(altitude_to_visualizer): + bias_of_the_mean_with_the_altitude(altitude_to_visualizer) + + +def bias_of_the_mean_with_the_altitude(altitude_to_visualizer: Dict[int, ComparisonHistoricalVisualizer]): + visualizer = list(altitude_to_visualizer.values())[0] + altitudes = list(altitude_to_visualizer.keys()) + for couple in visualizer.adamont_studies.gcm_rcm_couples: + values = [v.mean_bias_maxima[couple] for v in altitude_to_visualizer.values()] + + ax = plt.gca() + width = 10 + positions = [i * width * 2 for i in range(len(values))] + bplot = ax.boxplot(values, positions=positions, widths=width, patch_artist=True, showmeans=True) + color = gcm_rcm_couple_to_color[couple] + for patch in bplot['boxes']: + patch.set_facecolor(color) + + couple_name = ' + '.join(couple) + plot_name = 'Mean bias w.r.t to the reanalysis for {}'.format(couple_name) + ax.set_ylabel(plot_name) + ax.set_xlabel('Altitude') + ax.set_xticklabels(altitudes) + ax.set_xlim([min(positions) - width, max(positions) + width]) + visualizer.plot_name = 'altitude_comparison/{}'.format(plot_name) + visualizer.show_or_save_to_file(add_classic_title=False, no_title=True, tight_layout=True) + ax.clear() + plt.close() diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_beginning_projection.py b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_beginning_projection.py new file mode 100644 index 0000000000000000000000000000000000000000..c5d682f335ac9f1b2c40765f182ed5b80fb0e9f7 --- /dev/null +++ b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_beginning_projection.py @@ -0,0 +1,43 @@ + + +import matplotlib as mpl + +from projects.projected_snowfall.comparison_with_scm.main_comparison_on_historical_period import load_vizualizer_histo + +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 gcm_rcm_couple_to_full_name +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 = True + # Set the year_min and year_max for the comparison + if fast: + year_min = [2006][0] + year_max = [2019][0] + massif_names = ['Vanoise'] + altitudes = [1800] + else: + year_min = [2006][0] + year_max = [2019][0] + massif_names = None + altitudes = [900, 1800, 2700] + + # Load visualizers + for altitude in altitudes: + study_class_couple = [(SafranSnowfall1Day, AdamontSnowfall)][0] + v = load_vizualizer_histo(altitude, massif_names, study_class_couple, year_max, year_min) + v.adamont_studies.plot_maxima_time_series(v.massif_names, v.scm_study) + + +if __name__ == '__main__': + main() diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_historical_period.py b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_historical_period.py index ef9b14d10958494b2c5cdd0ac0f8fd4a3337034a..4231bdcf9edaaa4b270b4762a18bc5805fc9d6f0 100644 --- a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_historical_period.py +++ b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_historical_period.py @@ -3,9 +3,11 @@ 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 + from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall -from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_full_name, \ - get_year_min_and_year_max_from_scenario, AdamontScenario, load_gcm_rcm_couples_for_year_min_and_year_max +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import load_gcm_rcm_couples_for_year_min_and_year_max, \ + 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 @@ -14,36 +16,53 @@ from projects.projected_snowfall.comparison_with_scm.comparison_historical_visua def main(): - fast = True + fast = False # Set the year_min and year_max for the comparison - if fast: + if fast is None: + year_min = [1982, 1950][1] + massif_names = ['Vanoise', 'Vercors', 'Mont-Blanc'] + altitudes = [900, 1800] + elif fast: year_min = [1982, 1950][1] massif_names = ['Vanoise'] altitudes = [1800] else: massif_names = None year_min = [1982, 1950][1] - altitudes = [900, 1800, 2700] + altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600][:] + + # Load visualizers + # Individual plot for altitude in altitudes: - plot(altitude, massif_names, year_min) + v = load_visualizer_histo(altitude, massif_names, year_min) + individual_plot(v) + # # Collective plot + # altitude_to_visualizer = OrderedDict() + # for altitude in altitudes: + # altitude_to_visualizer[altitude] = load_visualizer_histo(altitude, massif_names, year_min) + # collective_plot(altitude_to_visualizer) -def plot(altitude, massif_names, year_min): + +def load_visualizer_histo(altitude, massif_names, year_min): year_min = max(1959, year_min) year_max = 2005 study_class_couple = [(SafranSnowfall1Day, AdamontSnowfall)][0] + return load_vizualizer_histo(altitude, massif_names, study_class_couple, year_max, year_min) + + +def load_vizualizer_histo(altitude, massif_names, study_class_couple, year_max, year_min): scm_study_class, adamont_study_class = study_class_couple season = Season.annual scm_study = scm_study_class(altitude=altitude, year_min=year_min, year_max=year_max, season=season) - gcm_rcm_couples = load_gcm_rcm_couples_for_year_min_and_year_max(year_min, year_max) + gcm_rcm_couples = load_gcm_rcm_couples_for_year_min_and_year_max(year_min, year_max, adamont_scenario=AdamontScenario.histo) adamont_studies = AdamontStudies(adamont_study_class, gcm_rcm_couples, - altitude=altitude, year_min=year_min, year_max=year_max, season=season) - adamont_studies.plot_maxima_time_series(massif_names, scm_study) + altitude=altitude, year_min=year_min, year_max=year_max, season=season, + scenario=AdamontScenario.histo) visualizer = ComparisonHistoricalVisualizer(scm_study, adamont_studies, massif_names=massif_names) - for plot_maxima in [True, False][:1]: - visualizer.plot_comparison(plot_maxima) + return visualizer if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/projects/projected_snowfall/projected_data/__init__.py b/projects/projected_snowfall/projected_data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/projects/projected_snowfall/projected_data/main_projection.py b/projects/projected_snowfall/projected_data/main_projection.py new file mode 100644 index 0000000000000000000000000000000000000000..b11886d727c4fced2576e32fc80d560cdcdbfc82 --- /dev/null +++ b/projects/projected_snowfall/projected_data/main_projection.py @@ -0,0 +1,48 @@ + + +import matplotlib as mpl + +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 gcm_rcm_couple_to_full_name, AdamontScenario, \ + load_gcm_rcm_couples_for_year_min_and_year_max +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 = True + # Set the year_min and year_max for the comparison + if fast: + year_min = [2006][0] + year_max = [2030][0] + massif_names = ['Vanoise'] + altitudes = [1800] + else: + year_min = [2006][0] + year_max = [2100][0] + massif_names = None + altitudes = [900, 1800, 2700] + + # Load studies + for altitude in altitudes: + adamont_study_class = AdamontSnowfall + season = Season.annual + gcm_rcm_couples = load_gcm_rcm_couples_for_year_min_and_year_max(year_min, year_max, + adamont_scenario=AdamontScenario.rcp85) + adamont_studies = AdamontStudies(adamont_study_class, gcm_rcm_couples, + altitude=altitude, year_min=year_min, + year_max=year_max, season=season, + scenario=AdamontScenario.rcp85) + adamont_studies.plot_maxima_time_series(massif_names) + + +if __name__ == '__main__': + main()