knutti_weight_computer.py 1.00 KiB
import numpy as np

from projects.projected_swe.abstract_weight_computer import AbstractWeightComputer
from projects.projected_swe.non_stationary_weight_computer import NllhWeightComputer


class KnuttiWeightComputer(AbstractWeightComputer):

    def __init__(self, *args, sigma_D, **kwargs):
        super().__init__(*args, **kwargs)
        self.sigma_D = sigma_D

    def compute_nllh_local(self, ensemble_fit, gcm_rcm_couple, massif_name, reference_study):
        mean_maxima_reference = reference_study.massif_name_to_annual_maxima[massif_name].mean()
        studies = ensemble_fit.gcm_rcm_couple_to_visualizer[gcm_rcm_couple].studies
        study = studies.altitude_to_study[reference_study.altitude]
        mean_maxima_couple = study.massif_name_to_annual_maxima[massif_name].mean()
        ratio = (mean_maxima_couple - mean_maxima_reference) / self.sigma_D
        proba = np.exp(-np.power(ratio, 2))
        return -np.log(proba)



class MixedWeightComputer(NllhWeightComputer, KnuttiWeightComputer):
    pass