Commit 006bf0d6 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting] add code to retrieve gcm_rcm_couples. start code to compare bias...

[contrasting] add code to retrieve gcm_rcm_couples. start code to compare bias on the quantile period (between projecitons, and ADAMONT 2020)
parent 9b7d4f08
No related merge requests found
Showing with 198 additions and 0 deletions
+198 -0
links = """
CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_HISTORICAL/
CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP45/
CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP85/
CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_HISTORICAL/
CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP45/
CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP85/
CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_HISTORICAL/
CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP45/
CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP85/
CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_HISTORICAL/
CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP26/
CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP45/
CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP85/
CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_HISTORICAL/
CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP45/
CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP85/
CNRM-ALADIN62_ECMWF-ERAINT_HISTORICAL/
CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_HISTORICAL/
CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP26/
CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP45/
CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP85/
DMI-HIRHAM5_NCC-NorESM1-M_HISTORICAL/
DMI-HIRHAM5_NCC-NorESM1-M_RCP45/
DMI-HIRHAM5_NCC-NorESM1-M_RCP85/
GERICS-REMO2015_NCC-NorESM1-M_HISTORICAL/
GERICS-REMO2015_NCC-NorESM1-M_RCP26/
GERICS-REMO2015_NCC-NorESM1-M_RCP85/
ICTP-RegCM4-6_MOHC-HadGEM2-ES_HISTORICAL/
ICTP-RegCM4-6_MOHC-HadGEM2-ES_RCP26/
ICTP-RegCM4-6_MOHC-HadGEM2-ES_RCP85/
IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_HISTORICAL/
IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP45/
IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP85/
IPSL-WRF381P_IPSL-IPSL-CM5A-MR_HISTORICAL/
IPSL-WRF381P_IPSL-IPSL-CM5A-MR_RCP45/
IPSL-WRF381P_IPSL-IPSL-CM5A-MR_RCP85/
KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_HISTORICAL/
KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP26/
KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP45/
KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP85/
KNMI-RACMO22E_ICHEC-EC-EARTH_HISTORICAL/
KNMI-RACMO22E_ICHEC-EC-EARTH_RCP26/
KNMI-RACMO22E_ICHEC-EC-EARTH_RCP45/
KNMI-RACMO22E_ICHEC-EC-EARTH_RCP85/
KNMI-RACMO22E_MOHC-HadGEM2-ES_HISTORICAL/
KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP26/
KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP45/
KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP85/
MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_HISTORICAL/
MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP26/
MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP45/
MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP85/
SAFRAN_2019/
SAFRAN_2020/
SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_HISTORICAL/
SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP45/
SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP85/
SMHI-RCA4_ICHEC-EC-EARTH_HISTORICAL/
SMHI-RCA4_ICHEC-EC-EARTH_RCP26/
SMHI-RCA4_ICHEC-EC-EARTH_RCP45/
SMHI-RCA4_ICHEC-EC-EARTH_RCP85/
SMHI-RCA4_IPSL-IPSL-CM5A-MR_HISTORICAL/
SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP45/
SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP85/
SMHI-RCA4_MOHC-HadGEM2-ES_HISTORICAL/
SMHI-RCA4_MOHC-HadGEM2-ES_RCP45/
SMHI-RCA4_MOHC-HadGEM2-ES_RCP85/
SMHI-RCA4_MPI-M-MPI-ESM-LR_HISTORICAL/
SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP45/
SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP85/"""
s = set()
for l in links.split('\n'):
print(l)
if '_' in l and 'SAFRAN' not in l:
gcm, rcm, _ = l.split('_')
s.add((gcm, rcm))
print(len(s))
for c in s:
print(c)
"""
('SMHI-RCA4', 'ICHEC-EC-EARTH')
('CLMcom-CCLM4-8-17', 'CNRM-CERFACS-CNRM-CM5')
('SMHI-RCA4', 'MOHC-HadGEM2-ES')
('GERICS-REMO2015', 'NCC-NorESM1-M')
('CLMcom-CCLM4-8-17', 'MPI-M-MPI-ESM-LR')
('KNMI-RACMO22E', 'CNRM-CERFACS-CNRM-CM5')
('IPSL-WRF381P', 'IPSL-IPSL-CM5A-MR')
('MPI-CSC-REMO2009', 'MPI-M-MPI-ESM-LR')
('CNRM-ALADIN62', 'ECMWF-ERAINT')
('CLMcom-CCLM4-8-17', 'ICHEC-EC-EARTH')
('SMHI-RCA4', 'CNRM-CERFACS-CNRM-CM5')
('CNRM-ALADIN63', 'CNRM-CERFACS-CNRM-CM5')
('CLMcom-CCLM4-8-17', 'MOHC-HadGEM2-ES')
('CNRM-ALADIN53', 'CNRM-CERFACS-CNRM-CM5')
('KNMI-RACMO22E', 'ICHEC-EC-EARTH')
('SMHI-RCA4', 'MPI-M-MPI-ESM-LR')
('SMHI-RCA4', 'IPSL-IPSL-CM5A-MR')
('IPSL-INERIS-WRF331F', 'IPSL-IPSL-CM5A-MR')
('KNMI-RACMO22E', 'MOHC-HadGEM2-ES')
('DMI-HIRHAM5', 'NCC-NorESM1-M')
('ICTP-RegCM4-6', 'MOHC-HadGEM2-ES')
"""
def get_year_min_and_year_max_used_to_compute_quantile(rcm):
if rcm == 'MOHC-HadGEM2-ES':
reanalysis_years = (1988, 2011)
model_year = (1982, 2005)
else:
reanalysis_years = (1981, 2011)
model_year = (1975, 2005)
return reanalysis_years, model_year
import numpy as np
import matplotlib
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, gcm_rcm_couple_to_color, \
gcm_rcm_couple_to_str
from extreme_data.meteo_france_data.scm_models_data.safran.safran_max_snowf import SafranSnowfall2020
from extreme_data.meteo_france_data.adamont_data.get_list_gcm_rcm_couples_adamont_v2 import get_year_min_and_year_max_used_to_compute_quantile
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \
STUDY_CLASS_TO_ABBREVIATION
from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies
def compute_bias_and_display_it(ax,
altitude_studies_reanalysis: AltitudesStudies,
adamont_altitude_studies: AltitudesStudies,
gcm_rcm_couple
):
bias_in_the_mean_maxima = []
altitudes = []
for altitude, study_reanalysis in altitude_studies_reanalysis.altitude_to_study.items():
altitudes.append(altitude)
adamont_study = adamont_altitude_studies.altitude_to_study[altitude]
mean_maxima_adamont = adamont_study.mean_annual_maxima
mean_maxima_reanalysis = study_reanalysis.mean_annual_maxima
bias = mean_maxima_adamont - mean_maxima_reanalysis
bias_in_the_mean_maxima.append(bias)
color = gcm_rcm_couple_to_color[gcm_rcm_couple]
label = gcm_rcm_couple_to_str(gcm_rcm_couple)
ax.plot(bias_in_the_mean_maxima, altitudes, label=label, color=color)
return np.array(bias_in_the_mean_maxima)
def main_comparaison_plot():
altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600]
ax = plt.gca()
gcm_rcm_couples = []
bias_in_the_mean = []
for gcm_rcm_couple in gcm_rcm_couples:
gcm, rcm = gcm_rcm_couple
years_reanalysis, years_model = get_year_min_and_year_max_used_to_compute_quantile(rcm)
reanalysis_altitude_studies = AltitudesStudies(study_class=SafranSnowfall2020,
altitudes=altitudes,
year_min=years_reanalysis[0],
year_max=years_reanalysis[1])
adamont_altitude_studies = AltitudesStudies(study_class=AdamontSnowfall,
altitudes=altitudes,
year_min=years_model[0],
year_max=years_model[1],
scenario=AdamontScenario.histo,
gcm_rcm_couple=gcm_rcm_couple)
bias_in_the_mean.extend(compute_bias_and_display_it(ax, reanalysis_altitude_studies,
adamont_altitude_studies, gcm_rcm_couple))
bias_in_the_mean = np.array(bias_in_the_mean)
min_bias, median_bias, max_bias = [f(bias_in_the_mean, axis=0) for f in [np.min, np.median, np.max]]
# Plot the range for the bias, and the median
ax.yaxis.set_ticks(altitudes)
color = 'k'
ax.plot(median_bias, altitudes, label='Median bias', color=color)
ax.fill_betweenx(altitudes, min_bias, max_bias, label='Range for the bias', alpha=0.2, color=color)
ax.vlines(0, ymin=altitudes[0], ymax=altitudes[-1], color='k')
study_str = STUDY_CLASS_TO_ABBREVIATION[type(reanalysis_altitude_studies.study)]
plot_name = 'Bias for {}\n' \
'(on the period used for the quantile correction)'.format(study_str)
ax.set_ylim(top=altitudes[-1] + 500)
ax.legend()
reanalysis_altitude_studies.show_or_save_to_file(plot_name=plot_name)
plt.close()
if __name__ == '__main__':
main_comparaison_plot()
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