From dcb45778a0e005ca926f2f3b97e7e03ffc28fb96 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Tue, 8 Sep 2020 15:55:47 +0200 Subject: [PATCH] [contrasting] add crocus snow density for some study for thierry --- .../crocus/crocus_snow_density.py | 30 +++++++++++++++++++ .../visualization/main_study_visualizer.py | 4 ++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 extreme_data/meteo_france_data/scm_models_data/crocus/crocus_snow_density.py diff --git a/extreme_data/meteo_france_data/scm_models_data/crocus/crocus_snow_density.py b/extreme_data/meteo_france_data/scm_models_data/crocus/crocus_snow_density.py new file mode 100644 index 00000000..6035221e --- /dev/null +++ b/extreme_data/meteo_france_data/scm_models_data/crocus/crocus_snow_density.py @@ -0,0 +1,30 @@ +from collections import OrderedDict + +from cached_property import cached_property + +from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import Crocus, CrocusSweTotal +from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusDensityVariable + + +class CrocusSnowDensity(Crocus): + + def __init__(self, *args, **kwargs): + super().__init__(CrocusDensityVariable, *args, **kwargs) + study_swe = CrocusSweTotal(*args, **kwargs) + self._year_to_annual_maxima = OrderedDict() + for year in study_swe.ordered_years: + daily_time_series_swe = study_swe.year_to_daily_time_serie_array[year] + daily_time_series_snow_depth = self.year_to_daily_time_serie_array[year] + daily_time_series_density = daily_time_series_swe / daily_time_series_snow_depth + ind_to_exclude = daily_time_series_snow_depth < 0.1 + daily_time_series_density[ind_to_exclude] = 0 + self._year_to_annual_maxima[year] = daily_time_series_density.max(axis=0) + + @cached_property + def year_to_annual_maxima(self) -> OrderedDict: + return self._year_to_annual_maxima + + +if __name__ == '__main__': + study = CrocusSnowDensity() + print(study.year_to_annual_maxima[1959]) 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 fb55246b..e8d68e3b 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 @@ -8,6 +8,7 @@ from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusD ExtendedCrocusDepth, \ ExtendedCrocusSweTotal, CrocusDaysWithSnowOnGround, CrocusSwe3Days, CrocusSnowLoad3Days, CrocusSnowLoadTotal, \ CrocusSnowLoadEurocode, CrocusSnowLoad5Days, CrocusSnowLoad7Days +from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_snow_density import CrocusSnowDensity from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusDensityVariable from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, \ SafranRainfall, \ @@ -55,7 +56,8 @@ SCM_STUDY_CLASS_TO_ABBREVIATION = { CrocusDifferenceSnowLoad: ('max GSL - GSL from max HS \n with {}'.format(eurocode_snow_density)), CrocusSnowDepthDifference: 'max HS - HS at max of GSL', CrocusSnowDepthAtMaxofSwe: 'HS at max of GSL', - SafranSnowfallSimulationRCP85: 'SF1 RCP85 projections' + CrocusSnowDensity: 'Density', + SafranSnowfallSimulationRCP85: 'SF1 RCP85 projections', } altitude_massif_name_and_study_class_for_poster = [ -- GitLab