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

[contrasting] change name of the model. add quadratic models. improve plots

parent f1345ab3
No related merge requests found
Showing with 196 additions and 46 deletions
+196 -46
...@@ -80,4 +80,4 @@ def load_plot(cmap, graduation, label, massif_name_to_value, altitude, fit_metho ...@@ -80,4 +80,4 @@ def load_plot(cmap, graduation, label, massif_name_to_value, altitude, fit_metho
ax.set_xticks([]) ax.set_xticks([])
if add_x_label: if add_x_label:
ax.set_xlabel('Altitude = {}m'.format(altitude), fontsize=15) ax.set_xlabel('Altitude = {}m'.format(altitude), fontsize=15)
ax.set_title('Fit method is {}'.format(fit_method)) # ax.set_title('Fit method is {}'.format(fit_method))
...@@ -34,19 +34,37 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel): ...@@ -34,19 +34,37 @@ class AbstractAltitudinalModel(AbstractSpatioTemporalPolynomialModel):
@property @property
def name_str(self): def name_str(self):
name = '' s = ''
for coordinate_name, idx in zip(['s', 't'], [self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates]): if self.dim_to_str_number(GevParams.SHAPE, self.coordinates.idx_x_coordinates) == '1':
name += coordinate_name s += '\\zeta_s'
for param_name in GevParams.PARAM_NAMES: if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) in ['1', '2']:
name += self.dim_to_str_number(param_name, idx) s += '\\mu_t'
if isinstance(self, AbstractAddCrossTerm): if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) == '2':
name += 'sxt' s += '^2'
for c in [AbstractAddCrossTermForLocation, AbstractAddCrossTermForScale, AbstractAddCrossTermForShape]: if self.dim_to_str_number(GevParams.SCALE, self.coordinates.idx_temporal_coordinates) in ['1', '2']:
if isinstance(self, c): s += '\\sigma_t'
name += '1' if self.dim_to_str_number(GevParams.LOC, self.coordinates.idx_temporal_coordinates) == '2':
else: s += '^2'
name += '0' if len(s) == 0:
return name s = '0'
return '$ \\boldsymbol{ \\mathcal{M}_{%s} }$' % s
# @property
# def name_str(self):
# name = ''
# for coordinate_name, idx in zip(['s', 't'], [self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates]):
# name += coordinate_name
# for param_name in GevParams.PARAM_NAMES:
# name += self.dim_to_str_number(param_name, idx)
# if isinstance(self, AbstractAddCrossTerm):
# name += 'sxt'
# for c in [AbstractAddCrossTermForLocation, AbstractAddCrossTermForScale, AbstractAddCrossTermForShape]:
# if isinstance(self, c):
# name += '1'
# else:
# name += '0'
# return name
class StationaryAltitudinal(AbstractAltitudinalModel): class StationaryAltitudinal(AbstractAltitudinalModel):
...@@ -134,6 +152,7 @@ class NonStationaryAltitudinalLocationQuadraticScaleLinear(AbstractAltitudinalMo ...@@ -134,6 +152,7 @@ class NonStationaryAltitudinalLocationQuadraticScaleLinear(AbstractAltitudinalMo
class AbstractAddCrossTerm(AbstractAltitudinalModel): class AbstractAddCrossTerm(AbstractAltitudinalModel):
pass pass
class AbstractAddCrossTermForLocation(AbstractAddCrossTerm): class AbstractAddCrossTermForLocation(AbstractAddCrossTerm):
# @property # @property
...@@ -180,7 +199,8 @@ class AbstractAddCrossTermForShape(AbstractAddCrossTerm): ...@@ -180,7 +199,8 @@ class AbstractAddCrossTermForShape(AbstractAddCrossTerm):
if GevParams.SHAPE in d: if GevParams.SHAPE in d:
insert_index = 1 if self.coordinates.idx_x_coordinates == d[GevParams.SHAPE][0][0] else 0 insert_index = 1 if self.coordinates.idx_x_coordinates == d[GevParams.SHAPE][0][0] else 0
d[GevParams.SHAPE].insert(insert_index, d[GevParams.SHAPE].insert(insert_index,
((self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates), 1)) ((self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates),
1))
else: else:
d[GevParams.SHAPE] = [((self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates), 1)] d[GevParams.SHAPE] = [((self.coordinates.idx_x_coordinates, self.coordinates.idx_temporal_coordinates), 1)]
return d return d
......
from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models import AbstractAltitudinalModel
class AltitudinalShapeConstantTimeLocationQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1)]
}
class AltitudinalShapeConstantTimeLocationQuadraticScaleLinear(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 1)]
}
class AltitudinalShapeConstantTimeLocationQuadraticScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)]
}
class AltitudinalShapeConstantTimeLocationLinearScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 1)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)]
}
class AltitudinalShapeConstantTimeScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)]
}
from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models import AbstractAltitudinalModel
class AltitudinalShapeLinearTimeLocationQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1)],
GevParams.SHAPE: [(self.coordinates.idx_x_coordinates, 1)]
}
class AltitudinalShapeLinearTimeLocationQuadraticScaleLinear(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 1)],
GevParams.SHAPE: [(self.coordinates.idx_x_coordinates, 1)]
}
class AltitudinalShapeLinearTimeLocationQuadraticScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SHAPE: [(self.coordinates.idx_x_coordinates, 1)]
}
class AltitudinalShapeLinearTimeLocationLinearScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 1)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SHAPE: [(self.coordinates.idx_x_coordinates, 1)]
}
class AltitudinalShapeLinearTimeScaleQuadratic(AbstractAltitudinalModel):
@property
def param_name_to_list_dim_and_degree(self):
return {
GevParams.LOC: [(self.coordinates.idx_x_coordinates, 1)],
GevParams.SCALE: [(self.coordinates.idx_x_coordinates, 1), (self.coordinates.idx_temporal_coordinates, 2)],
GevParams.SHAPE: [(self.coordinates.idx_x_coordinates, 1)]
}
...@@ -29,6 +29,14 @@ from extreme_fit.model.margin_model.polynomial_margin_model.gumbel_altitudinal_m ...@@ -29,6 +29,14 @@ from extreme_fit.model.margin_model.polynomial_margin_model.gumbel_altitudinal_m
NonStationaryGumbelAltitudinalLocationLinearScaleLinearCrossTermForLocation, \ NonStationaryGumbelAltitudinalLocationLinearScaleLinearCrossTermForLocation, \
NonStationaryGumbelAltitudinalLocationQuadraticScaleLinearCrossTermForLocation, \ NonStationaryGumbelAltitudinalLocationQuadraticScaleLinearCrossTermForLocation, \
NonStationaryGumbelAltitudinalScaleLinearCrossTermForLocation, NonStationaryGumbelCrossTermForLocation NonStationaryGumbelAltitudinalScaleLinearCrossTermForLocation, NonStationaryGumbelCrossTermForLocation
from extreme_fit.model.margin_model.polynomial_margin_model.models_based_on_pariwise_analysis.gev_quadratic_location_and_scale_with_constant_shape import \
AltitudinalShapeConstantTimeLocationQuadratic, AltitudinalShapeConstantTimeLocationQuadraticScaleLinear, \
AltitudinalShapeConstantTimeLocationQuadraticScaleQuadratic, \
AltitudinalShapeConstantTimeLocationLinearScaleQuadratic, AltitudinalShapeConstantTimeScaleQuadratic
from extreme_fit.model.margin_model.polynomial_margin_model.models_based_on_pariwise_analysis.gev_quadratic_location_and_scale_with_linear_shape import \
AltitudinalShapeLinearTimeLocationQuadratic, AltitudinalShapeLinearTimeLocationQuadraticScaleLinear, \
AltitudinalShapeLinearTimeLocationQuadraticScaleQuadratic, AltitudinalShapeLinearTimeLocationLinearScaleQuadratic, \
AltitudinalShapeLinearTimeScaleQuadratic
from extreme_fit.model.margin_model.polynomial_margin_model.models_based_on_pariwise_analysis.gev_with_constant_shape_wrt_altitude import \ from extreme_fit.model.margin_model.polynomial_margin_model.models_based_on_pariwise_analysis.gev_with_constant_shape_wrt_altitude import \
AltitudinalShapeConstantTimeLocShapeLinear, \ AltitudinalShapeConstantTimeLocShapeLinear, \
AltitudinalShapeConstantTimeLocScaleLinear, AltitudinalShapeConstantTimeScaleShapeLinear, \ AltitudinalShapeConstantTimeLocScaleLinear, AltitudinalShapeConstantTimeScaleShapeLinear, \
...@@ -112,6 +120,20 @@ ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS = [ ...@@ -112,6 +120,20 @@ ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS = [
# AltitudinalShapeLinearTimeScaleShapeLinear, # AltitudinalShapeLinearTimeScaleShapeLinear,
# AltitudinalShapeLinearTimeLocScaleShapeLinear, # AltitudinalShapeLinearTimeLocScaleShapeLinear,
# With a quadratic term
# AltitudinalShapeConstantTimeLocationQuadratic,
# AltitudinalShapeConstantTimeLocationQuadraticScaleLinear,
# AltitudinalShapeConstantTimeLocationQuadraticScaleQuadratic,
# AltitudinalShapeConstantTimeLocationLinearScaleQuadratic,
# AltitudinalShapeConstantTimeScaleQuadratic,
#
# AltitudinalShapeLinearTimeLocationQuadratic,
# AltitudinalShapeLinearTimeLocationQuadraticScaleLinear,
# AltitudinalShapeLinearTimeLocationQuadraticScaleQuadratic,
# AltitudinalShapeLinearTimeLocationLinearScaleQuadratic,
# AltitudinalShapeLinearTimeScaleQuadratic,
] ]
ALTITUDINAL_GEV_MODELS_LOCATION_ONLY_SCALE_ALTITUDES = [ ALTITUDINAL_GEV_MODELS_LOCATION_ONLY_SCALE_ALTITUDES = [
......
import time
from typing import List from typing import List
import matplotlib as mpl import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
from extreme_data.meteo_france_data.adamont_data.abstract_simulation_study import SimulationStudy
from extreme_data.meteo_france_data.adamont_data.snowfall_simulation import SafranSnowfallSimulationRCP85
from extreme_fit.model.margin_model.polynomial_margin_model.utils import ALTITUDINAL_GEV_MODELS, \
ALTITUDINAL_GEV_MODELS_LOCATION_QUADRATIC_MINIMUM, ALTITUDINAL_GEV_MODELS_LOCATION_ONLY_SCALE_ALTITUDES, \
ALTITUDINAL_GEV_MODELS_LOCATION, ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitude_group import altitudes_for_groups
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.plot_total_aic import plot_total_aic, \
plot_individual_aic
from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import MeanAlpsTemperatureCovariate
mpl.rcParams['text.usetex'] = True mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
from extreme_data.meteo_france_data.scm_models_data.visualization.utils import create_adjusted_axes from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.one_fold_fit import OneFoldFit ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
from projects.exceeding_snow_loads.utils import dpi_paper1_figure from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.altitude_group import altitudes_for_groups
from projects.altitude_spatial_model.altitudes_fit.one_fold_analysis.plot_total_aic import plot_individual_aic
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day, SafranSnowfall3Days, \ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall1Day, SafranSnowfall3Days, \
SafranSnowfall5Days, SafranSnowfall7Days, SafranPrecipitation1Day, SafranPrecipitation3Days, \ SafranSnowfall5Days, SafranSnowfall7Days, SafranPrecipitation1Day, SafranPrecipitation3Days, \
...@@ -47,12 +38,13 @@ def main(): ...@@ -47,12 +38,13 @@ def main():
study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranPrecipitation1Day study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranPrecipitation1Day
, SafranPrecipitation3Days][:1] , SafranPrecipitation3Days][:1]
altitudes = [1800, 2100, 2400] altitudes = [1800, 2100, 2400]
study_classes = [SafranSnowfall1Day, SafranSnowfall3Days][:1] study_classes = [SafranSnowfall1Day, SafranSnowfall3Days, SafranSnowfall5Days, SafranSnowfall7Days][:1]
# study_classes = [SafranPrecipitation1Day][:1]
# Common parameters # Common parameters
# altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600] # altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600]
massif_names = None massif_names = None
massif_names = ['Mercantour', 'Vercors', 'Ubaye'] # massif_names = ['Mercantour', 'Vercors', 'Ubaye']
seasons = [Season.annual, Season.winter, Season.spring, Season.automn][:1] seasons = [Season.annual, Season.winter, Season.spring, Season.automn][:1]
main_loop(altitudes_for_groups, massif_names, seasons, study_classes) main_loop(altitudes_for_groups, massif_names, seasons, study_classes)
...@@ -72,6 +64,8 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes): ...@@ -72,6 +64,8 @@ def main_loop(altitudes_list, massif_names, seasons, study_classes):
visualizer_list = load_visualizer_list(season, study_class, altitudes_list, massif_names) visualizer_list = load_visualizer_list(season, study_class, altitudes_list, massif_names)
for visualizer in visualizer_list: for visualizer in visualizer_list:
plots(massif_names, season, visualizer) plots(massif_names, season, visualizer)
del visualizer_list
time.sleep(2)
def load_visualizer_list(season, study_class, altitudes_list, massif_names): def load_visualizer_list(season, study_class, altitudes_list, massif_names):
...@@ -79,7 +73,6 @@ def load_visualizer_list(season, study_class, altitudes_list, massif_names): ...@@ -79,7 +73,6 @@ def load_visualizer_list(season, study_class, altitudes_list, massif_names):
visualizer_list = [] visualizer_list = []
# Load all studies # Load all studies
for altitudes in altitudes_list: for altitudes in altitudes_list:
print('here', altitudes)
studies = AltitudesStudies(study_class, altitudes, season=season) studies = AltitudesStudies(study_class, altitudes, season=season)
visualizer = AltitudesStudiesVisualizerForNonStationaryModels(studies=studies, visualizer = AltitudesStudiesVisualizerForNonStationaryModels(studies=studies,
model_classes=model_classes, model_classes=model_classes,
......
...@@ -61,8 +61,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -61,8 +61,8 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
self._method_name_and_order_to_max_abs = {} self._method_name_and_order_to_max_abs = {}
self._max_abs_for_shape = None self._max_abs_for_shape = None
moment_names = ['moment', 'changes_in_the_moment', 'relative_changes_in_the_moment'][2:] moment_names = ['moment', 'changes_for_moment', 'relative_changes_for_moment'][:]
orders = [1, 2, None][2:] orders = [1, 2, None][:]
@property @property
def massif_name_to_one_fold_fit(self) -> Dict[str, OneFoldFit]: def massif_name_to_one_fold_fit(self) -> Dict[str, OneFoldFit]:
...@@ -106,10 +106,13 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -106,10 +106,13 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
# Plot settings # Plot settings
moment = ' '.join(method_name.split('_')) moment = ' '.join(method_name.split('_'))
moment = moment.replace('moment', '{} in 2019'.format(OneFoldFit.get_moment_str(order=order))) moment = moment.replace('moment', '{} in 2019'.format(OneFoldFit.get_moment_str(order=order)))
plot_name = '{}{} annual maxima of {}'.format(OneFoldFit.folder_for_plots, moment, plot_name = '{}{} for annual maxima of {}'.format(OneFoldFit.folder_for_plots, moment,
SCM_STUDY_CLASS_TO_ABBREVIATION[ SCM_STUDY_CLASS_TO_ABBREVIATION[
self.studies.study_class]) self.studies.study_class])
ylabel = '{} ({})'.format(plot_name, self.study.variable_unit) if 'change' in method_name:
plot_name += '\nbetween {} and {}'.format(2019-50, 2019)
parenthesis = self.study.variable_unit if 'relative' not in method_name else '\%'
ylabel = '{} ({})'.format(plot_name, parenthesis)
# Plot the map # Plot the map
a_change_is_displayed = self.moment_names.index(method_name) > 0 a_change_is_displayed = self.moment_names.index(method_name) > 0
...@@ -117,9 +120,10 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer): ...@@ -117,9 +120,10 @@ class AltitudesStudiesVisualizerForNonStationaryModels(StudyVisualizer):
label=ylabel, massif_name_to_value=massif_name_to_value, label=ylabel, massif_name_to_value=massif_name_to_value,
plot_name=plot_name, add_x_label=True, plot_name=plot_name, add_x_label=True,
negative_and_positive_values=a_change_is_displayed, negative_and_positive_values=a_change_is_displayed,
massif_name_to_text=None, altitude=self.altitude_group.reference_altitude, altitude=self.altitude_group.reference_altitude,
add_colorbar=self.add_colorbar, add_colorbar=self.add_colorbar,
max_abs_change=self.method_name_and_order_to_max_abs(method_name, order) max_abs_change=self.method_name_and_order_to_max_abs(method_name, order),
massif_name_to_text=self.massif_name_to_name,
) )
@property @property
......
...@@ -24,11 +24,13 @@ from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset ...@@ -24,11 +24,13 @@ from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
class OneFoldFit(object): class OneFoldFit(object):
SIGNIFICANCE_LEVEL = 0.05 SIGNIFICANCE_LEVEL = 0.05
best_estimator_minimizes_total_aic = False best_estimator_minimizes_total_aic = False
return_period = 50
def __init__(self, massif_name: str, dataset: AbstractDataset, models_classes, def __init__(self, massif_name: str, dataset: AbstractDataset, models_classes,
fit_method=MarginFitMethod.extremes_fevd_mle, temporal_covariate_for_fit=None, fit_method=MarginFitMethod.extremes_fevd_mle, temporal_covariate_for_fit=None,
altitude_class=DefaultAltitudeGroup, altitude_class=DefaultAltitudeGroup,
only_models_that_pass_anderson_test=True): only_models_that_pass_anderson_test=True,
):
self.only_models_that_pass_anderson_test = only_models_that_pass_anderson_test self.only_models_that_pass_anderson_test = only_models_that_pass_anderson_test
self.altitude_group = altitude_class() self.altitude_group = altitude_class()
self.massif_name = massif_name self.massif_name = massif_name
...@@ -57,11 +59,11 @@ class OneFoldFit(object): ...@@ -57,11 +59,11 @@ class OneFoldFit(object):
@classmethod @classmethod
def get_moment_str(cls, order): def get_moment_str(cls, order):
if order == 1: if order == 1:
return 'Mean' return 'mean'
elif order == 2: elif order == 2:
return 'Std' return 'std'
elif order is None: elif order is None:
return 'Return level' return '{}-year return levels'.format(cls.return_period)
def get_moment(self, altitude, year, order=1): def get_moment(self, altitude, year, order=1):
gev_params = self.get_gev_params(altitude, year) gev_params = self.get_gev_params(altitude, year)
...@@ -70,7 +72,7 @@ class OneFoldFit(object): ...@@ -70,7 +72,7 @@ class OneFoldFit(object):
elif order == 2: elif order == 2:
return gev_params.std return gev_params.std
elif order is None: elif order is None:
return gev_params.return_level(return_period=50) return gev_params.return_level(return_period=self.return_period)
else: else:
raise NotImplementedError raise NotImplementedError
...@@ -82,7 +84,7 @@ class OneFoldFit(object): ...@@ -82,7 +84,7 @@ class OneFoldFit(object):
def moment(self, altitudes, year=2019, order=1): def moment(self, altitudes, year=2019, order=1):
return [self.get_moment(altitude, year, order) for altitude in altitudes] return [self.get_moment(altitude, year, order) for altitude in altitudes]
def changes_in_the_moment(self, altitudes, year=2019, nb_years=50, order=1): def changes_for_moment(self, altitudes, year=2019, nb_years=50, order=1):
changes = [] changes = []
for altitude in altitudes: for altitude in altitudes:
mean_after = self.get_moment(altitude, year, order) mean_after = self.get_moment(altitude, year, order)
...@@ -91,7 +93,7 @@ class OneFoldFit(object): ...@@ -91,7 +93,7 @@ class OneFoldFit(object):
changes.append(change) changes.append(change)
return changes return changes
def relative_changes_in_the_moment(self, altitudes, year=2019, nb_years=50, order=1): def relative_changes_for_moment(self, altitudes, year=2019, nb_years=50, order=1):
relative_changes = [] relative_changes = []
for altitude in altitudes: for altitude in altitudes:
mean_after = self.get_moment(altitude, year, order) mean_after = self.get_moment(altitude, year, order)
......
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