Commit d2dc5bd4 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] change the name_str for the model on the map. add safran 2020 for the snowfall.

parent f575d8e7
No related merge requests found
Showing with 64 additions and 15 deletions
+64 -15
from collections import OrderedDict
import numpy as np
from cached_property import cached_property
from netCDF4._netCDF4 import Dataset
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day
class SnowfallSafran2020(SafranSnowfall1Day):
nc_filepath = """/home/erwan/Documents/projects/spatiotemporalextremes/local/spatio_temporal_datasets/SAFRAN_montagne_CROCUS_2020/max-1day-snowf_SAFRAN.nc"""
def __init__(self, **kwargs):
super().__init__(**kwargs)
@property
def ordered_years(self):
return list(range(1959, 2021))
@cached_property
def year_to_annual_maxima(self) -> OrderedDict:
year_to_annual_maxima = OrderedDict()
dataset = Dataset(SnowfallSafran2020.nc_filepath)
annual_maxima = np.array(dataset.variables['max-1day-snowf'])
assert annual_maxima.shape[1] == len(self.column_mask)
annual_maxima = annual_maxima[:, self.column_mask]
for year, a in zip(self.ordered_years, annual_maxima):
year_to_annual_maxima[year] = a
return year_to_annual_maxima
if __name__ == '__main__':
test_safran_2020_loader()
...@@ -35,8 +35,6 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel): ...@@ -35,8 +35,6 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel):
@property @property
def name_str(self): def name_str(self):
l = [] l = []
if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_x_coordinates) == '1':
l += ['\\zeta_z']
if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) in ['1', '2']: if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) in ['1', '2']:
s = '\\mu_t' s = '\\mu_t'
if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) == '2': if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) == '2':
...@@ -52,11 +50,14 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel): ...@@ -52,11 +50,14 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel):
if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_temporal_coordinates) == '2': if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_temporal_coordinates) == '2':
s += '^2' s += '^2'
l += [s] l += [s]
if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_x_coordinates) == '1':
l += ['\\zeta_z']
if len(l) == 0: if len(l) == 0:
s = '0' s = '0'
else: else:
s = ','.join(l) s = ','.join(l)
return '$ \\boldsymbol{ \\mathcal{M}_{%s} }$' % s # return '$ \\boldsymbol{ \\mathcal{M}_{%s} }$' % s
return '$ \\boldsymbol{%s}$' % s
# @property # @property
......
...@@ -3,6 +3,10 @@ import time ...@@ -3,6 +3,10 @@ import time
from typing import List from typing import List
import matplotlib import matplotlib
from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \
AbstractExtractEurocodeReturnLevel
matplotlib.use('Agg') matplotlib.use('Agg')
import matplotlib as mpl import matplotlib as mpl
...@@ -34,13 +38,14 @@ def main(): ...@@ -34,13 +38,14 @@ def main():
set_seed_for_test() set_seed_for_test()
fast = False fast = True
if fast is None: if fast is None:
massif_names = None massif_names = None
altitudes_list = altitudes_for_groups[2:3] altitudes_list = altitudes_for_groups[2:3]
elif fast: elif fast:
massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][:1] AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10
altitudes_list = altitudes_for_groups[3:] massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][2:]
altitudes_list = altitudes_for_groups[:1]
else: else:
massif_names = None massif_names = None
altitudes_list = altitudes_for_groups[:] altitudes_list = altitudes_for_groups[:]
...@@ -68,13 +73,13 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes): ...@@ -68,13 +73,13 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes):
def plot_visualizers(massif_names, visualizer_list): def plot_visualizers(massif_names, visualizer_list):
plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list) # plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list)
plot_shoe_plot_ratio_interval_size_against_altitude(massif_names, visualizer_list) # plot_shoe_plot_ratio_interval_size_against_altitude(massif_names, visualizer_list)
for relative in [True, False]: # for relative in [True, False]:
plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) # plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative)
# plot_coherence_curves(massif_names, visualizer_list) # plot_coherence_curves(massif_names, visualizer_list)
plot_coherence_curves(['Vanoise'], visualizer_list) # plot_coherence_curves(['Vanoise'], visualizer_list)
pass
def plot_visualizer(massif_names, visualizer): def plot_visualizer(massif_names, visualizer):
# Plot time series # Plot time series
......
...@@ -15,7 +15,7 @@ from projects.exceeding_snow_loads.utils import dpi_paper1_figure ...@@ -15,7 +15,7 @@ from projects.exceeding_snow_loads.utils import dpi_paper1_figure
def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels): def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels):
visualizer.plot_shape_map() visualizer.plot_shape_map()
visualizer.plot_moments() # visualizer.plot_moments()
visualizer.plot_qqplots() visualizer.plot_qqplots()
# for std in [True, False]: # for std in [True, False]:
# visualizer.studies.plot_mean_maxima_against_altitude(std=std) # visualizer.studies.plot_mean_maxima_against_altitude(std=std)
......
...@@ -10,6 +10,7 @@ from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusS ...@@ -10,6 +10,7 @@ from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusS
from extreme_data.meteo_france_data.scm_models_data.safran.cumulated_study import NB_DAYS from extreme_data.meteo_france_data.scm_models_data.safran.cumulated_study import NB_DAYS
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranTemperature, \ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranTemperature, \
SafranPrecipitation, SafranSnowfall3Days, SafranRainfall3Days, SafranNormalizedPreciptationRateOnWetDays SafranPrecipitation, SafranSnowfall3Days, SafranRainfall3Days, SafranNormalizedPreciptationRateOnWetDays
from extreme_data.meteo_france_data.scm_models_data.safran.safran_2020 import SnowfallSafran2020
from extreme_data.meteo_france_data.scm_models_data.utils import Season from extreme_data.meteo_france_data.scm_models_data.utils import Season
from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \ from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \
study_iterator_global, SCM_STUDIES, ALL_ALTITUDES, SCM_STUDY_CLASS_TO_ABBREVIATION study_iterator_global, SCM_STUDIES, ALL_ALTITUDES, SCM_STUDY_CLASS_TO_ABBREVIATION
...@@ -84,8 +85,6 @@ class TestSCMAllStudy(unittest.TestCase): ...@@ -84,8 +85,6 @@ class TestSCMAllStudy(unittest.TestCase):
self.assertTrue(True) self.assertTrue(True)
class TestSCMSafranNormalizedPrecipitationRateOnWetDays(unittest.TestCase): class TestSCMSafranNormalizedPrecipitationRateOnWetDays(unittest.TestCase):
def test_annual_maxima(self): def test_annual_maxima(self):
...@@ -164,5 +163,15 @@ class TestSafranTemperature(TestSCMStudy): ...@@ -164,5 +163,15 @@ class TestSafranTemperature(TestSCMStudy):
return round(float(f), 1) return round(float(f), 1)
class TestSafran2020(TestSCMStudy):
def test_safran_2020_loader(self):
study = SnowfallSafran2020(altitude=1800)
annual_maxima = study.year_to_annual_maxima[1959]
annual_maxima = study.year_to_annual_maxima[2020]
annual_maxima = study.massif_name_to_annual_maxima['Vercors']
self.assertTrue(True)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
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