An error occurred while loading the file. Please try again.
-
Le Roux Erwan authored7d4ef49a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import numpy as np
from experiment.meteo_france_data.scm_models_data.abstract_extended_study import AbstractExtendedStudy
from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from experiment.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusSweVariable, CrocusDepthVariable
from experiment.meteo_france_data.scm_models_data.cumulated_study import CumulatedStudy
class Crocus(AbstractStudy):
"""
In the Crocus data, there is no 'massifsList' variable, thus we assume massifs are ordered just like Safran data
"""
def __init__(self, variable_class, *args, **kwargs):
assert variable_class in [CrocusSweVariable, CrocusDepthVariable]
super().__init__(variable_class, *args, **kwargs)
self.model_name = 'Crocus'
def annual_aggregation_function(self, *args, **kwargs):
return np.mean(*args, **kwargs)
def winter_annual_aggregation(self, time_serie):
# In the Durand paper, we only want the data from November to April
# 91 = 30 + 31 + 30 first days of the time serie correspond to the month of August + September + October
# 92 = 31 + 30 + 31 last days correspond to the month of May + June + JUly
return super().apply_annual_aggregation(time_serie[91:-92, ...])
class CrocusSwe(Crocus, CumulatedStudy):
def __init__(self, *args, **kwargs):
CumulatedStudy.__init__(self, CrocusSweVariable, *args, **kwargs)
Crocus.__init__(self, CrocusSweVariable, *args, **kwargs)
def apply_annual_aggregation(self, time_serie):
return self.winter_annual_aggregation(time_serie)
class ExtendedCrocusSwe(AbstractExtendedStudy, CrocusSwe):
pass
class CrocusDepth(Crocus, CumulatedStudy):
def __init__(self, *args, **kwargs):
CumulatedStudy.__init__(self, CrocusDepthVariable, *args, **kwargs)
Crocus.__init__(self, CrocusDepthVariable, *args, **kwargs)
def apply_annual_aggregation(self, time_serie):
return self.winter_annual_aggregation(time_serie)
class ExtendedCrocusDepth(AbstractExtendedStudy, CrocusDepth):
pass
class CrocusDaysWithSnowOnGround(Crocus):
"""Having snow on the ground is equivalent to snow depth > 0"""
def __init__(self, *args, **kwargs):
super().__init__(CrocusDepthVariable, *args, **kwargs)
def annual_aggregation_function(self, *args, **kwargs):
return np.count_nonzero(*args, **kwargs)
if __name__ == '__main__':
for study in [CrocusSwe(altitude=900)]:
d = study.year_to_dataset_ordered_dict[1960]
print(study.df_massifs_longitude_and_latitude)
time_arr = np.array(d.variables['time'])
a = study.year_to_daily_time_serie_array[1960]
print(a.shape)