From 552bc2a6c5199319a2e2e4facff074149f90939f Mon Sep 17 00:00:00 2001 From: Michael <m.langguth@fz-juelich.de> Date: Mon, 25 Jul 2022 15:27:10 +0200 Subject: [PATCH] Clearer error-handling and inclusion of climatology-file to postprocess runscript generator. --- .../runscript_generator/config_postprocess.py | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/video_prediction_tools/utils/runscript_generator/config_postprocess.py b/video_prediction_tools/utils/runscript_generator/config_postprocess.py index 9e33f961..ec5c9d0f 100755 --- a/video_prediction_tools/utils/runscript_generator/config_postprocess.py +++ b/video_prediction_tools/utils/runscript_generator/config_postprocess.py @@ -33,9 +33,10 @@ class Config_Postprocess(Config_runscript_base): self.model = None self.checkpoint_dir = None self.results_dir = None + self.clim_f = None #self.lquick = None # list of variables to be written to runscript - self.list_batch_vars = ["VIRT_ENV_NAME", "results_dir", "checkpoint_dir", "model"] # , "lquick"] + self.list_batch_vars = ["VIRT_ENV_NAME", "results_dir", "checkpoint_dir", "clim_f"] # , "lquick"] # copy over method for keyboard interaction self.run_config = Config_Postprocess.run_postprocess # @@ -62,14 +63,14 @@ class Config_Postprocess(Config_runscript_base): # First choose the basic experiment directory dir_base = Config_Postprocess.handle_source_dir(self, "models") - expbase_req_str = "Choose an experiment from the list above:" - expbase_err = NotADirectoryError("Could not find passed directory.") + expbase_req_str = "Choose an experiment set from the list above:" + expbase_err = NotADirectoryError("Please select an experiment from the ones listed above.") dir_base = Config_Postprocess.keyboard_interaction(expbase_req_str, Config_Postprocess.check_dir, expbase_err, prefix2arg=dir_base+"/", ntries=2) # Choose the model - model_req_str = "Enter the name of the trained model:" - model_err = NotADirectoryError("No directory for trained model exists.") + model_req_str = "Enter the name of the model:" + model_err = NotADirectoryError("Select a model listed above (if any).") dir_base = Config_Postprocess.keyboard_interaction(model_req_str, Config_Postprocess.check_model, model_err, prefix2arg=dir_base+"/", ntries=2) @@ -78,14 +79,14 @@ class Config_Postprocess(Config_runscript_base): _ = Config_Postprocess.get_subdir_list(dir_base) # Chose the checkpoint directory - ckp_req_str = "Choose a checkpoint directory from the list above:" - ckp_req_err = NotADirectoryError("Could not find the passed directory.") + ckp_req_str = "Choose a trained model from the list above:" + ckp_req_err = NotADirectoryError("Choose a trained model from the ones listed above (if any).") dir_base = Config_Postprocess.keyboard_interaction(ckp_req_str, Config_Postprocess.check_dir, ckp_req_err, prefix2arg=dir_base+"/", ntries=2) # List the subdirectories... _ = Config_Postprocess.get_subdir_list(dir_base) # ... and obtain the model directory with checkpoints - trained_dir_req_str = "Choose a trained model from the experiment list above:" + trained_dir_req_str = "Choose a checkpoint from the list above:" trained_err = FileNotFoundError("No trained model parameters found.") self.checkpoint_dir = Config_Postprocess.keyboard_interaction(trained_dir_req_str, Config_Postprocess.check_traindir, @@ -103,6 +104,11 @@ class Config_Postprocess(Config_runscript_base): # Set results_dir self.results_dir = os.path.join(base_dir, "results", exp_dir_base, self.model, exp_dir) + self.clim_f = os.path.join(os.path.dirname(base_dir), "T2climatology", "climatology_t2m_1991-2020.nc") + + if not os.path.isfile(self.clim_f): + print("WARNING: Cannot find netCDF-file with climatology of 2m temperature under '{0}'. Please adapt manually.".format(self.clim_f)) + return # Decide if quick evaluation should be performed quick_req_str = "Should a reduced, quick evalutaion be performed (yes/no):" @@ -150,11 +156,14 @@ class Config_Postprocess(Config_runscript_base): :param silent: flag if print-statement are executed :return: status with True confirming success """ + method = Config_Postprocess.check_dir.__name__ + status = False + if not os.path.isdir(dir_in): - if not silent: print("{0} is not a directory".format(dir_in)) - elif dir_in == "": - if not silent: print("{0}: Please enter a directory/checkpoint.") + if not silent and not dir_in.endswith("help"): print("%{0}: {1} is not a directory".format(method, dir_in)) + elif dir_in.endswith("/"): # this most likely happens when prefix2arg is passed + if not silent: print("%{0}: Please enter a directory/checkpoint.".format(method)) else: status = True @@ -220,7 +229,7 @@ class Config_Postprocess(Config_runscript_base): if not silent: print("{0} does not contain any model parameter files (model-*.meta).".format(checkpoint_dir)) else: - if not silent: print("Passed directory '{0}' does not exist!".format(checkpoint_dir)) + if not silent and not checkpoint_dir.endswith("help"): print("Passed directory '{0}' does not exist!".format(checkpoint_dir)) return status # # ----------------------------------------------------------------------------------- -- GitLab