From 9c3c20aa7655fa5b823440ed84b6d5ed4362280b Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Tue, 11 Jun 2024 14:05:21 +0200 Subject: [PATCH] Fix bug when single predictand --- esmvaltool/diag_scripts/spy4cast/mca.py | 32 ++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/esmvaltool/diag_scripts/spy4cast/mca.py b/esmvaltool/diag_scripts/spy4cast/mca.py index 9470b3f5ee..8dffcb1d8d 100644 --- a/esmvaltool/diag_scripts/spy4cast/mca.py +++ b/esmvaltool/diag_scripts/spy4cast/mca.py @@ -50,43 +50,47 @@ def main(cfg): if len(variables['predictand']) == 1: predictand = variables['predictand'][0] z = Dataset(name=predictand['filename'], folder=cfg['work_dir']).open(var=predictand['short_name']) - z_ppcessed = spy4cast.Preprocess(z) + z_ppcessed = spy4cast.Preprocess(z, period=7, order=4) z_ppcessed.save(f'preprocessed_z_{predictand["alias"]}', folder=cfg['work_dir']) - single_predictand = True + single_predictand = True #Por si cogemos uno solo, sino nos vamos al alias que tiene toda la info. El Slice lo haces en la recipe, en la receta metes el predictando y el predictor groups = group_metadata(input_data, 'alias', sort='alias') for dataset in groups: - # logger.info("Processing dataset %s", dataset) + logger.info("Processing dataset %s", dataset) variables = group_metadata(groups[dataset], 'variable_group') - if 'predictor' not in variables or 'predictand' not in variables: - logger.info(f"Dataset {dataset} incomplete: variables: {variables.keys()}") - if 'predictor' not in variables: - continue - predictor = variables['predictor'][0] - predictand = variables['predictand'][0] + if single_predictand: + if 'predictor' not in variables: + logger.info(f"Dataset {dataset} does not have predictand: {variables.keys()}") + continue + else: + if 'predictor' not in variables or 'predictand' not in variables: + logger.info(f"Dataset {dataset} incomplete: variables: {variables.keys()}") + continue + predictor = variables['predictor'][0] y = Dataset(name=predictor['filename'], folder=cfg['work_dir']).open(var=predictor['short_name']) # y.q(Region(-5, 10, -30, -10, Month.JUN, Month.JUL, 1850, 2000), skip=0) - y_ppcessed = spy4cast.Preprocess(y) + y_ppcessed = spy4cast.Preprocess(y, period=7, order=4) y_ppcessed.save('save_preprocessed_y_', folder=cfg['work_dir']) if not single_predictand: predictand = variables['predictand'][0] z = Dataset(name=predictand['filename'], folder=cfg['work_dir']).open(var=predictand['short_name']) # z.slice(Region(35, 45, 345, 360, Month.JUN, Month.JUL, 1850, 2000), skip=0) - z_ppcessed = spy4cast.Preprocess(z) + z_ppcessed = spy4cast.Preprocess(z, period=7, order=4) z_ppcessed.save(f'preprocessed_z_{predictand["alias"]}', folder=cfg['work_dir']) nm = cfg['modes'] alpha = cfg['alpha'] - mca = spy4cast.MCA(y_ppcessed, z_ppcessed, nm, alpha) + mca = spy4cast.MCA(y_ppcessed, z_ppcessed, nm, alpha, sig='monte-carlo', montecarlo_iterations=10) + #mca = spy4cast.MCA(y_ppcessed, z_ppcessed, nm, alpha) logger.info("Saving MCA...") - mca.save(f'mca_{dataset}', folder=cfg['work_dir']) + mca.save(f'mca_{dataset}', folder=cfg['work_dir']) #AquĆ­ es donde lo guarda logger.info("Plotting...") mca.plot(save_fig=True, cmap='viridis', folder=cfg['plot_dir'], name=f'mca-{dataset}.png') logger.info('Finished!!!') - if cfg['cross_validation']: + if cfg['cross_validation']: #Meter cross si podemos cross = spy4cast.Crossvalidation(y_ppcessed, z_ppcessed, nm, alpha) cross.save(f'cross_{dataset}', folder=cfg['work_dir']) cross.plot(save_fig=True, folder=cfg['plot_dir'], name=f'crossvalidation-{dataset}.png')