diff --git a/experiment/meteo_france_data/scm_models_data/abstract_study.py b/experiment/meteo_france_data/scm_models_data/abstract_study.py index 424398e0fc25bf37f87854d6d096fa1b9d401c68..898b98b60cc91e896af55792314f278a1d1f198f 100644 --- a/experiment/meteo_france_data/scm_models_data/abstract_study.py +++ b/experiment/meteo_france_data/scm_models_data/abstract_study.py @@ -1,8 +1,10 @@ +import datetime import io import os import os.path as op from collections import OrderedDict from contextlib import redirect_stdout +from itertools import chain from multiprocessing.pool import Pool from typing import List, Dict, Tuple, Union @@ -41,8 +43,11 @@ class AbstractStudy(object): - a start and a end year Les fichiers netcdf de SAFRAN et CROCUS sont autodocumentés (on peut les comprendre avec ncdump -h notamment). + + The year 2017 represents the nc file that correspond to the winter between the year 2017 and 2018. """ REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/alp_flat/reanalysis' + # REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/alp_allslopes/reanalysis' # REANALYSIS_FOLDER = 'SAFRAN_montagne-CROCUS_2019/postes/reanalysis' def __init__(self, variable_class: type, altitude: int = 1800, year_min=1000, year_max=3000, @@ -56,6 +61,33 @@ class AbstractStudy(object): self.year_max = year_max self.multiprocessing = multiprocessing + """ Time """ + + @cached_property + def year_to_days(self) -> OrderedDict: + # Map each year to the 'days since year-08-01 06:00:00' + year_to_days = OrderedDict() + for year in self.ordered_years: + date = datetime.datetime(year=year, month=8, day=1, hour=6, minute=0, second=0) + days = [] + for i in range(366): + days.append(str(date).split()[0]) + date += datetime.timedelta(days=1) + if date.month == 8 and date.day == 1: + break + year_to_days[year] = days + return year_to_days + + @property + def all_days(self): + return list(chain(*list(self.year_to_days.values()))) + + @property + def all_daily_series(self): + all_daily_series = np.concatenate(list(self.year_to_daily_time_serie_array.values())) + assert len(all_daily_series) == len(self.all_days) + return all_daily_series + """ Annual maxima """ @property diff --git a/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py b/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py new file mode 100644 index 0000000000000000000000000000000000000000..681fe9241b5204b601d9a3a64c6b9d3b26ccee1b --- /dev/null +++ b/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py @@ -0,0 +1,22 @@ +from collections import OrderedDict + +import numpy as np +import pandas as pd + +from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth +from experiment.meteo_france_data.scm_models_data.scm_constants import ALTITUDES +from utils import get_display_name_from_object_type + +massif_name = 'Queyras' +study_class = CrocusDepth +all_days = study_class(altitude=0).all_days +altitude_to_queyras_depth = OrderedDict() +for altitude in ALTITUDES[:]: + study = study_class(altitude=altitude) + if massif_name in study.study_massif_names: + idx_queyras = study.study_massif_names.index(massif_name) + queyras_all_daily_series = study.all_daily_series[:, idx_queyras] + altitude_to_queyras_depth[altitude] = queyras_all_daily_series +df = pd.DataFrame.from_dict(altitude_to_queyras_depth) +df.index = all_days +df.to_csv('{}_{}.csv'.format(massif_name, get_display_name_from_object_type(study_class))) \ No newline at end of file diff --git a/test/test_experiment/test_region_eurocode.py b/test/test_experiment/test_region_eurocode.py index b9c1ad9b64be5b8a9398b0356cb9874de0a53320..706631c0f79fc99890816d19e2dfaf48bd87d572 100644 --- a/test/test_experiment/test_region_eurocode.py +++ b/test/test_experiment/test_region_eurocode.py @@ -3,16 +3,6 @@ from collections import OrderedDict from experiment.eurocode_data.eurocode_visualizer import display_region_limit from experiment.eurocode_data.region_eurocode import C1, E -from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusSweTotal -from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ - study_iterator_global -from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \ - StudyVisualizer -from experiment.trend_analysis.non_stationary_trends import \ - ConditionalIndedendenceLocationTrendTest -from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ - BetweenZeroAndOneNormalization, BetweenZeroAndOneNormalizationMinEpsilon, BetweenZeroAndOneNormalizationMaxEpsilon -from utils import get_display_name_from_object_type class TestCoordinateSensitivity(unittest.TestCase):