diff --git a/extreme_data/meteo_france_data/scm_models_data/safran/safran_2020.py b/extreme_data/meteo_france_data/scm_models_data/safran/safran_2020.py new file mode 100644 index 0000000000000000000000000000000000000000..78157550be8750a9470eb7f43ba2fb8b0799c071 --- /dev/null +++ b/extreme_data/meteo_france_data/scm_models_data/safran/safran_2020.py @@ -0,0 +1,34 @@ +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() diff --git a/extreme_fit/model/margin_model/polynomial_margin_model/gev_altitudinal_models.py b/extreme_fit/model/margin_model/polynomial_margin_model/gev_altitudinal_models.py index 6007c798e76f5f4c4c381d081d178da9befbcabe..4ec8e20909dcad0a0677cb54bad519e69a867de4 100644 --- a/extreme_fit/model/margin_model/polynomial_margin_model/gev_altitudinal_models.py +++ b/extreme_fit/model/margin_model/polynomial_margin_model/gev_altitudinal_models.py @@ -35,8 +35,6 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel): @property def name_str(self): 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']: s = '\\mu_t' if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) == '2': @@ -52,11 +50,14 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel): if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_temporal_coordinates) == '2': s += '^2' l += [s] + if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_x_coordinates) == '1': + l += ['\\zeta_z'] if len(l) == 0: s = '0' else: s = ','.join(l) - return '$ \\boldsymbol{ \\mathcal{M}_{%s} }$' % s + # return '$ \\boldsymbol{ \\mathcal{M}_{%s} }$' % s + return '$ \\boldsymbol{%s}$' % s # @property diff --git a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py index 9aa9a2fd9ffeae4bc4a4b80d9495ecafa8893723..05598359593f9a602abfea19a48027e146d36684 100644 --- a/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/main_altitudes_studies.py @@ -3,6 +3,10 @@ import time from typing import List import matplotlib + +from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \ + AbstractExtractEurocodeReturnLevel + matplotlib.use('Agg') import matplotlib as mpl @@ -34,13 +38,14 @@ def main(): set_seed_for_test() - fast = False + fast = True if fast is None: massif_names = None altitudes_list = altitudes_for_groups[2:3] elif fast: - massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][:1] - altitudes_list = altitudes_for_groups[3:] + AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 + massif_names = ['Vanoise', 'Haute-Maurienne', 'Vercors'][2:] + altitudes_list = altitudes_for_groups[:1] else: massif_names = None altitudes_list = altitudes_for_groups[:] @@ -68,13 +73,13 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes): def plot_visualizers(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) - for relative in [True, False]: - plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) + # plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list) + # plot_shoe_plot_ratio_interval_size_against_altitude(massif_names, visualizer_list) + # for relative in [True, False]: + # plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list, relative=relative) # 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): # Plot time series diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py index 2a50df32b9783491ae211e96f6930dfd589f572f..ad0fa2a4e19aa0ec767081f3f1d6fe8431d0a80e 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/plot_total_aic.py @@ -15,7 +15,7 @@ from projects.exceeding_snow_loads.utils import dpi_paper1_figure def plots(visualizer: AltitudesStudiesVisualizerForNonStationaryModels): visualizer.plot_shape_map() - visualizer.plot_moments() + # visualizer.plot_moments() visualizer.plot_qqplots() # for std in [True, False]: # visualizer.studies.plot_mean_maxima_against_altitude(std=std) diff --git a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py index 8a5b6229602b599d10b45dc21c791b070e8b3cc0..8351ee61c5911840c9397952c47917c40fda80df 100644 --- a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py +++ b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py @@ -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.safran import SafranSnowfall, SafranTemperature, \ 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.visualization.main_study_visualizer import \ study_iterator_global, SCM_STUDIES, ALL_ALTITUDES, SCM_STUDY_CLASS_TO_ABBREVIATION @@ -84,8 +85,6 @@ class TestSCMAllStudy(unittest.TestCase): self.assertTrue(True) - - class TestSCMSafranNormalizedPrecipitationRateOnWetDays(unittest.TestCase): def test_annual_maxima(self): @@ -164,5 +163,15 @@ class TestSafranTemperature(TestSCMStudy): 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__': unittest.main()