Commit 3d343284 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[refactor] add swe and ground snow load variable for adamont v2. rename also some files.

parent 124a132b
No related merge requests found
Showing with 112 additions and 39 deletions
+112 -39
...@@ -85,6 +85,7 @@ class AbstractAdamontStudy(AbstractStudy): ...@@ -85,6 +85,7 @@ class AbstractAdamontStudy(AbstractStudy):
year_to_annual_maxima = OrderedDict() year_to_annual_maxima = OrderedDict()
for dataset, real_scenario in zip(self.datasets, self.adamont_real_scenarios): 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]) annual_maxima = np.array(dataset.variables[self.variable_class.indicator_name_for_maxima])
annual_maxima = self.variable_class.transform_annual_maxima(annual_maxima)
assert annual_maxima.shape[1] == len(self.column_mask) assert annual_maxima.shape[1] == len(self.column_mask)
annual_maxima = annual_maxima[:, self.column_mask] annual_maxima = annual_maxima[:, self.column_mask]
year_min, year_max = get_year_min_and_year_max_from_scenario(real_scenario, self.gcm_rcm_couple) year_min, year_max = get_year_min_and_year_max_from_scenario(real_scenario, self.gcm_rcm_couple)
......
from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_variables import CrocusSweSimulationVariable, \
CrocusTotalSnowLoadVariable
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusVariable
from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchRegion
class AdamontSwe(AbstractAdamontStudy):
def __init__(self, *args, **kwargs):
super().__init__(CrocusSweSimulationVariable, *args, **kwargs)
class AdamontSnowLoad(AbstractAdamontStudy):
def __init__(self, *args, **kwargs):
super().__init__(CrocusTotalSnowLoadVariable, *args, **kwargs)
def load_annual_maxima(self, dataset):
return CrocusVariable.snow_load_multiplication_factor * super().load_annual_maxima(dataset)
if __name__ == '__main__':
for study_class in [AdamontSwe, AdamontSnowLoad]:
study = study_class(altitude=1800, adamont_version=2, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'),
scenario=AdamontScenario.rcp85_extended)
print(study.year_to_annual_maxima[2000])
\ No newline at end of file
...@@ -7,15 +7,8 @@ from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchR ...@@ -7,15 +7,8 @@ from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchR
class AdamontSnowfall(AbstractAdamontStudy): class AdamontSnowfall(AbstractAdamontStudy):
def __init__(self, altitude: int = 1800, def __init__(self, *args, **kwargs):
year_min=None, year_max=None, super().__init__(SafranSnowfallSimulationVariable, *args, **kwargs)
multiprocessing=True, season=Season.annual,
french_region=FrenchRegion.alps,
scenario=AdamontScenario.histo, gcm_rcm_couple=('CNRM-CM5', 'ALADIN53'),
adamont_version=2):
super().__init__(SafranSnowfallSimulationVariable, altitude,
year_min, year_max,
multiprocessing, season, french_region, scenario, gcm_rcm_couple, adamont_version)
if __name__ == '__main__': if __name__ == '__main__':
......
import numpy as np import numpy as np
from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import AbstractSnowLoadVariable, \
TotalSnowLoadVariable, CrocusTotalSweVariable
from extreme_data.meteo_france_data.scm_models_data.safran.safran_variable import SafranSnowfallVariable from extreme_data.meteo_france_data.scm_models_data.safran.safran_variable import SafranSnowfallVariable
from root_utils import classproperty from root_utils import classproperty
...@@ -15,10 +17,16 @@ class AbstractAdamontVariable(AbstractVariable): ...@@ -15,10 +17,16 @@ class AbstractAdamontVariable(AbstractVariable):
def indicator_name_for_maxima(cls): def indicator_name_for_maxima(cls):
raise NotImplementedError raise NotImplementedError
@classmethod
def transform_annual_maxima(cls, annual_maxima):
return annual_maxima
class SafranSnowfallSimulationVariable(AbstractAdamontVariable): class SafranSnowfallSimulationVariable(AbstractAdamontVariable):
UNIT = SafranSnowfallVariable.UNIT UNIT = SafranSnowfallVariable.UNIT
NAME = SafranSnowfallVariable.NAME NAME = SafranSnowfallVariable.NAME
# For adamont v1
@property @property
def daily_time_serie_array(self) -> np.ndarray: def daily_time_serie_array(self) -> np.ndarray:
return self.variable_array return self.variable_array
...@@ -27,6 +35,8 @@ class SafranSnowfallSimulationVariable(AbstractAdamontVariable): ...@@ -27,6 +35,8 @@ class SafranSnowfallSimulationVariable(AbstractAdamontVariable):
def keyword(cls): def keyword(cls):
return 'SNOW' return 'SNOW'
# For adamont v2
@classmethod @classmethod
def variable_name_for_folder_and_nc_file(cls): def variable_name_for_folder_and_nc_file(cls):
return 'Snow' return 'Snow'
...@@ -35,3 +45,28 @@ class SafranSnowfallSimulationVariable(AbstractAdamontVariable): ...@@ -35,3 +45,28 @@ class SafranSnowfallSimulationVariable(AbstractAdamontVariable):
def indicator_name_for_maxima(cls): def indicator_name_for_maxima(cls):
return 'max-1day-snowf' return 'max-1day-snowf'
class CrocusSweSimulationVariable(AbstractAdamontVariable):
UNIT = CrocusTotalSweVariable.UNIT
NAME = CrocusTotalSweVariable.NAME
# For adamont v2
@classmethod
def variable_name_for_folder_and_nc_file(cls):
return cls.indicator_name_for_maxima.replace('-', '_').capitalize()
@classproperty
def indicator_name_for_maxima(cls):
return 'swe-max-winter-11-04-NN'
class CrocusTotalSnowLoadVariable(CrocusSweSimulationVariable):
NAME = TotalSnowLoadVariable.NAME
UNIT = TotalSnowLoadVariable.UNIT
@classmethod
def transform_annual_maxima(cls, annual_maxima):
return AbstractSnowLoadVariable.transform_swe_into_snow_load(annual_maxima)
...@@ -134,7 +134,7 @@ class CrocusDaysWithSnowOnGround(Crocus): ...@@ -134,7 +134,7 @@ class CrocusDaysWithSnowOnGround(Crocus):
if __name__ == '__main__': if __name__ == '__main__':
for study in [CrocusSwe3Days(altitude=900, orientation=90.0)]: for study in [CrocusSnowLoadTotal(altitude=900, orientation=90.0)]:
d = study.year_to_dataset_ordered_dict[1959] d = study.year_to_dataset_ordered_dict[1959]
print(d) print(d)
print(study.reanalysis_path) print(study.reanalysis_path)
......
...@@ -57,8 +57,11 @@ class AbstractSnowLoadVariable(CrocusVariable): ...@@ -57,8 +57,11 @@ class AbstractSnowLoadVariable(CrocusVariable):
@property @property
def daily_time_serie_array(self) -> np.ndarray: def daily_time_serie_array(self) -> np.ndarray:
snow_pressure = self.snow_load_multiplication_factor * super().daily_time_serie_array return self.transform_swe_into_snow_load(super().daily_time_serie_array)
return snow_pressure
@classmethod
def transform_swe_into_snow_load(cls, swe):
return cls.snow_load_multiplication_factor * swe
class RecentSnowLoadVariableOneDay(AbstractSnowLoadVariable, CrocusRecentSweVariableOneDay): class RecentSnowLoadVariableOneDay(AbstractSnowLoadVariable, CrocusRecentSweVariableOneDay):
......
...@@ -2,7 +2,7 @@ import time ...@@ -2,7 +2,7 @@ import time
from collections import OrderedDict from collections import OrderedDict
from typing import List from typing import List
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, \ from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, \
ExtendedCrocusDepth, \ ExtendedCrocusDepth, \
......
...@@ -5,7 +5,7 @@ from itertools import chain ...@@ -5,7 +5,7 @@ from itertools import chain
import numpy as np import numpy as np
from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy 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.adamont_safran 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 get_gcm_rcm_couples, rcp_scenarios from extreme_data.meteo_france_data.adamont_data.adamont_scenario import 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.safran.safran import SafranSnowfall1Day
......
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario
from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies
......
...@@ -2,7 +2,7 @@ import numpy as np ...@@ -2,7 +2,7 @@ import numpy as np
import os.path as op import os.path as op
import matplotlib import matplotlib
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import \ from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import \
get_year_min_and_year_max_used_to_compute_quantile, gcm_rcm_couple_to_color 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, \ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, \
......
...@@ -21,7 +21,7 @@ from extreme_trend.elevation_temporal_model_for_projections.visualizer_for_proje ...@@ -21,7 +21,7 @@ from extreme_trend.elevation_temporal_model_for_projections.visualizer_for_proje
import matplotlib import matplotlib
from extreme_fit.model.utils import set_seed_for_test from extreme_fit.model.utils import set_seed_for_test
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
rcp_scenarios rcp_scenarios
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import TimeTemporalCovariate from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import TimeTemporalCovariate
......
...@@ -9,7 +9,7 @@ mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] ...@@ -9,7 +9,7 @@ mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from projects.projected_extreme_snowfall.evaluation.comparison_plot import individual_plot from projects.projected_extreme_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.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
scenario_to_real_scenarios, rcp_scenarios, rcm_scenarios_extended 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.adamont_data.adamont_studies import AdamontStudies
......
import unittest import unittest
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_crocus import AdamontSwe, AdamontSnowLoad
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_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, \ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, adamont_scenarios_real, \
rcp_scenarios, get_gcm_rcm_couples, rcm_scenarios_extended 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.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusVariable
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
...@@ -11,24 +13,36 @@ class TestAdamontStudy(unittest.TestCase): ...@@ -11,24 +13,36 @@ class TestAdamontStudy(unittest.TestCase):
def test_load_adamont_snowfall(self): def test_load_adamont_snowfall(self):
for version in [1, 2][:]: for version in [1, 2][:]:
study_list = [ self.load_many_study(AdamontSnowfall, version)
AdamontSnowfall(altitude=900, adamont_version=version), self.assertTrue(True)
AdamontSnowfall(altitude=1800, adamont_version=version)
] def test_load_adamont_swe(self):
for scenario in rcp_scenarios + rcm_scenarios_extended: self.load_many_study(AdamontSwe, version=2)
gcm_rcm_couples = get_gcm_rcm_couples(scenario, version) self.assertTrue(True)
if len(gcm_rcm_couples) > 0:
first_gcm_rcm_couple = gcm_rcm_couples[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) def test_load_adamont_swe(self):
for gcm_rcm_couple in get_gcm_rcm_couples(adamont_version=version)]) maxima = [study_class(altitude=1800, adamont_version=2, gcm_rcm_couple=('HadGEM2-ES', 'RACMO22E'),
for study in study_list: scenario=AdamontScenario.rcp85_extended).year_to_annual_maxima[2000][0]
annual_maxima_for_year_min = study.year_to_annual_maxima[study.year_min] for study_class in [AdamontSwe, AdamontSnowLoad]]
# print(study.altitude, study.scenario_name, study.gcm_rcm_couple) swe, snow_load = maxima
# print(len(study.massif_name_to_annual_maxima['Vanoise'])) snow_load_from_swe = swe * CrocusVariable.snow_load_multiplication_factor
self.assertTrue(True) self.assertEqual(snow_load_from_swe, snow_load)
def load_many_study(self, adamont_study_class, version):
study_list = [
adamont_study_class(altitude=900, adamont_version=version),
adamont_study_class(altitude=1800, adamont_version=version)
]
for scenario in rcp_scenarios + rcm_scenarios_extended:
gcm_rcm_couples = get_gcm_rcm_couples(scenario, version)
if len(gcm_rcm_couples) > 0:
first_gcm_rcm_couple = gcm_rcm_couples[0]
study_list.append(adamont_study_class(altitude=900, scenario=scenario, adamont_version=version,
gcm_rcm_couple=first_gcm_rcm_couple))
study_list.extend([adamont_study_class(altitude=900, gcm_rcm_couple=gcm_rcm_couple, adamont_version=version)
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]
def test_massifs_names_adamont_v2(self): def test_massifs_names_adamont_v2(self):
year_min = 2004 year_min = 2004
...@@ -47,7 +61,6 @@ class TestAdamontStudy(unittest.TestCase): ...@@ -47,7 +61,6 @@ class TestAdamontStudy(unittest.TestCase):
self.assertEqual(len(study.ordered_years), len(study.massif_name_to_annual_maxima["Vanoise"])) self.assertEqual(len(study.ordered_years), len(study.massif_name_to_annual_maxima["Vanoise"]))
self.assertTrue(True) self.assertTrue(True)
def test_existing_gcm_rcm_couple_and_rcp(self): def test_existing_gcm_rcm_couple_and_rcp(self):
altitude = 1800 altitude = 1800
for scenario in rcp_scenarios[:]: for scenario in rcp_scenarios[:]:
......
import unittest import unittest
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies
......
import unittest import unittest
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario
from extreme_data.meteo_france_data.adamont_data.cmip5.temperature_to_year import temperature_minmax_to_year_minmax from extreme_data.meteo_france_data.adamont_data.cmip5.temperature_to_year import temperature_minmax_to_year_minmax
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment