From 2df04819b72b0259544979af628f9e40ef7b3128 Mon Sep 17 00:00:00 2001
From: lkugler <lukas.kugler@gmail.com>
Date: Mon, 22 May 2023 18:33:13 +0200
Subject: [PATCH] obs_seq.out as argument to evaluate()

---
 dartwrf/assim_synth_obs.py | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/dartwrf/assim_synth_obs.py b/dartwrf/assim_synth_obs.py
index 39ac427..7453271 100755
--- a/dartwrf/assim_synth_obs.py
+++ b/dartwrf/assim_synth_obs.py
@@ -297,7 +297,7 @@ def qc_obs(time, oso):
         print('saved', f_out_dart)
 
 
-def evaluate(assim_time, 
+def evaluate(assim_time, obs_seq_out=False,
              output_format="%Y-%m-%d_%H:%M_obs_seq.final-eval_posterior_allobs"):
     """Calculates either prior or posterior obs space values.
 
@@ -307,7 +307,8 @@ def evaluate(assim_time,
 
     Args:
         assim_time (datetime): time of assimilation
-        output_format (str): format string for output filename, default is `"%Y-%m-%d_%H:%M_obs_seq.final-eval_posterior_allobs"`
+        obs_seq_out (str, optional):    use the argument as obs_seq.out file, defaults to use the existing obs_seq.out file
+        output_format (str, optional): format string for output filename, default is `"%Y-%m-%d_%H:%M_obs_seq.final-eval_posterior_allobs"`
 
     Returns:
         obsseq.ObsSeq
@@ -324,8 +325,12 @@ def evaluate(assim_time,
     print("prepare nature")
     prepare_nature_dart(assim_time)  # link WRF files to DART directory
 
-    if not os.path.isfile(cluster.dart_rundir+'/obs_seq.out'):
-        raise RuntimeError(cluster.dart_rundir+'/obs_seq.out does not exist')
+    if obs_seq_out:
+        copy(obs_seq_out, cluster.dart_rundir+'/obs_seq.out')
+    else:
+        # use existing obs_seq.out file
+        if not os.path.isfile(cluster.dart_rundir+'/obs_seq.out'):
+            raise RuntimeError(cluster.dart_rundir+'/obs_seq.out does not exist')
 
     dart_nml.write_namelist(just_prior_values=True)
     filter(nproc=6)
@@ -576,9 +581,8 @@ def main(time, prior_init_time, prior_valid_time, prior_path_exp):
         print(" 4) evaluate posterior observations for all observations (incl rejected)")
         write_list_of_inputfiles_posterior(time)
         
-        copy(cluster.archivedir+'/obs_seq_out/'+time.strftime('%Y-%m-%d_%H:%M_obs_seq.out-beforeQC'), 
-             cluster.dart_rundir+'/obs_seq.out')
-    evaluate(time, output_format="%Y-%m-%d_%H:%M_obs_seq.final-eval_posterior_allobs")
+        evaluate(time, obs_seq_out=cluster.archivedir+'/obs_seq_out/'+time.strftime('%Y-%m-%d_%H:%M_obs_seq.out-beforeQC'),
+                       output_format="%Y-%m-%d_%H:%M_obs_seq.final-eval_posterior_allobs")
 
 
 if __name__ == "__main__":
-- 
GitLab