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