From 145e046abc4675d84096af106feb0e51e7d88023 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Tue, 16 Feb 2021 15:56:52 +0100 Subject: [PATCH] [projections] fix main_data.py by fixing rcp_extended for adamont_v2 --- .../adamont_data/abstract_adamont_study.py | 24 +++++++++---------- .../adamont_data/adamont/adamont_snowfall.py | 4 ++-- .../adamont_data/adamont_studies.py | 1 + projects/projected_snowfall/data/main_data.py | 15 ++++++------ .../test_adamont_study.py | 9 +++++++ 5 files changed, 31 insertions(+), 22 deletions(-) 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 12a6b059..53f2031b 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 @@ -83,23 +83,21 @@ class AbstractAdamontStudy(AbstractStudy): def load_year_to_annual_maxima_version_2(self): year_to_annual_maxima = OrderedDict() - for dataset in self.datasets: + for dataset, real_scenario in zip(self.datasets, self.adamont_real_scenarios): annual_maxima = np.array(dataset.variables[self.variable_class.indicator_name_for_maxima]) assert annual_maxima.shape[1] == len(self.column_mask) annual_maxima = annual_maxima[:, self.column_mask] - year_to_annual_maxima = OrderedDict() - year_min, year_max = get_year_min_and_year_max_from_scenario(self.scenario, self.gcm_rcm_couple) + year_min, year_max = get_year_min_and_year_max_from_scenario(real_scenario, self.gcm_rcm_couple) years = list(range(year_min, year_max + 1)) - if self.scenario in adamont_scenarios_real: - time = np.array(dataset.variables['time']) - msg = 'len_years={} while len_time={},' \ - 'check year_min and year_max, ' \ - 'check in debug mode the time field of the daatset to see the starting date'.format(years, time) - # # Some print to check which year are in the data - # start = datetime(year=2005, month=8, day=1, hour=6, minute=0, second=0) - # dates = [start + timedelta(hours=int(h)) for h in time] - # print(["{}-{}".format(date.year-1, date.year) for date in dates]) - assert len(years) == len(time), msg + time = np.array(dataset.variables['time']) + msg = 'len_years={} while len_time={},' \ + 'check year_min and year_max, ' \ + 'check in debug mode the time field of the daatset to see the starting date'.format(years, time) + # # Some print to check which year are in the data + # start = datetime(year=2005, month=8, day=1, hour=6, minute=0, second=0) + # dates = [start + timedelta(hours=int(h)) for h in time] + # print(["{}-{}".format(date.year-1, date.year) for date in dates]) + assert len(years) == len(time), msg for year, maxima in zip(years, annual_maxima): if self.year_min <= year <= self.year_max: year_to_annual_maxima[year] = maxima 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 33f7aab9..6f24a261 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,8 +25,8 @@ class AdamontSnowfall(AbstractAdamontStudy): if __name__ == '__main__': - study = AdamontSnowfall(altitude=1800, adamont_version=2, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'), - scenario=AdamontScenario.rcp85) + study = AdamontSnowfall(altitude=1800, adamont_version=1, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'), + scenario=AdamontScenario.rcp85_extended) pass print(study.year_to_annual_maxima) print(study.year_to_annual_maxima) 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 17dea00f..34fb794e 100644 --- a/extreme_data/meteo_france_data/adamont_data/adamont_studies.py +++ b/extreme_data/meteo_france_data/adamont_data/adamont_studies.py @@ -107,6 +107,7 @@ class AdamontStudies(object): massif_name.replace('_', ' '), self.study.altitude) fontsize = 13 + ax.tick_params(axis='both', which='major', labelsize=fontsize) if legend_and_labels: ax.set_ylabel('{} ({})'.format(plot_name, self.study.variable_unit), fontsize=fontsize) ax.set_xlabel('years', fontsize=fontsize) diff --git a/projects/projected_snowfall/data/main_data.py b/projects/projected_snowfall/data/main_data.py index 49d4ac89..ff0460d1 100644 --- a/projects/projected_snowfall/data/main_data.py +++ b/projects/projected_snowfall/data/main_data.py @@ -6,11 +6,12 @@ mpl.use('Agg') mpl.rcParams['text.usetex'] = True mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] +import matplotlib.pyplot as plt 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 + scenario_to_real_scenarios, rcp_scenarios, rcm_scenarios_extended 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 @@ -23,10 +24,11 @@ def main(): year_max = 2100 massif_names = ['Vanoise'] season = Season.annual - scenarios = [AdamontScenario.rcp26_extended, AdamontScenario.rcp45_extended, AdamontScenario.rcp85_extended] + scenarios = rcm_scenarios_extended # scenarios = rcp_scenarios altitudes = [600, 2100, 3600] - for altitude, adamont_scenario in list(zip(altitudes, scenarios))[-1:]: + for altitude, adamont_scenario in list(zip(altitudes, scenarios))[:]: + plt.figure(figsize=(20, 5)) # Loading part scm_study = scm_study_class(altitude=altitude) real_adamont_scenario = scenario_to_real_scenarios(adamont_scenario=adamont_scenario)[-1] @@ -35,10 +37,9 @@ def main(): 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) + 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() + 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 a05caed6..a987b096 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 @@ -40,6 +40,14 @@ class TestAdamontStudy(unittest.TestCase): year_min=year_min, gcm_rcm_couple=gcm_rcm_couple) assert set(adamont_study.study_massif_names) == set(reanalysis_study.study_massif_names) + def test_rcp_extended(self): + for version in [1, 2]: + study = AdamontSnowfall(altitude=1800, adamont_version=version, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'), + scenario=AdamontScenario.rcp85_extended) + self.assertEqual(len(study.ordered_years), len(study.massif_name_to_annual_maxima["Vanoise"])) + self.assertTrue(True) + + def test_existing_gcm_rcm_couple_and_rcp(self): altitude = 1800 for scenario in rcp_scenarios[:]: @@ -55,5 +63,6 @@ class TestAdamontStudy(unittest.TestCase): self.assertTrue(True) + if __name__ == '__main__': unittest.main() -- GitLab