diff --git a/dartwrf/obsseq_2dim.py b/dartwrf/obsseq_2dim.py index 966d709c963f6801689128544c995d17c6280303..f32b8ec99c901c24b0dc371422ee460189aebcd6 100755 --- a/dartwrf/obsseq_2dim.py +++ b/dartwrf/obsseq_2dim.py @@ -1,5 +1,9 @@ """Create obs_seq.out files with collapsed vertical dimension Specifically, one observation per column which is the maximum of the column + +Use this script before running the OSSE workflow, to prepare obs_seq.out files. + +path_3d_obsseq = '/path/exp_obs10_loc20/obs_seq_out/2008-07-30_%H:%M_obs_seq.out' """ from copy import copy @@ -8,35 +12,41 @@ import time as time_module import datetime as dt import numpy as np -from config.cfg import exp from config.cluster import cluster +from dartwrf import utils from dartwrf import assim_synth_obs as aso from dartwrf import obsseq if __name__ == "__main__": - - assim_time = dt.datetime.strptime(sys.argv[1], "%Y-%m-%d_%H:%M") - - # prepare an obsseq without rejected observations - if exp.use_existing_obsseq: # from another exp - oso_input = assim_time.strftime(exp.use_existing_obsseq) + + exp = sys.argv[1] + assim_time = dt.datetime.strptime(sys.argv[2], "%Y-%m-%d_%H:%M") + + path_3d_obsseq = cluster.archive_base+exp+'/obs_seq_out/%Y-%m-%d_%H:%M_obs_seq.out' + oso_input = assim_time.strftime(path_3d_obsseq) + + # load experiment config + sys.path.insert(0, cluster.archivedir+'/'+exp+'/DART-WRF') + from config import cfg # only assured to work with single obstype - if len(exp.observations) > 1: + if len(cfg.exp.observations) > 1: raise NotImplementedError() - n_obs = exp.observations[0]['n_obs'] # existing obsseq with multi levels oso = obsseq.ObsSeq(oso_input) + n_obs = cfg.exp.observations[0]['n_obs'] nlev = len(oso.df)/n_obs if nlev - int(nlev) != 0: raise RuntimeError() nlev = int(nlev) # levels per obs + print('nlev', nlev) + print('n_obs', n_obs) - # copy will be modified - output = copy(oso) + output = copy(oso) # copy will be modified + # output.df = output.df.copy() # without this, we get a SettingWithCopyWarning output.df = output.df.iloc[0::nlev] # every nth level = first level #print(output.df, oso.df) @@ -50,8 +60,9 @@ if __name__ == "__main__": output.df.loc[i_obs_subset, ('observations')] = float(column['observations'].max()) output.df.loc[i_obs_subset, ('truth')] = float(column['truth'].max()) - print(output.df) #, 'observations'], output.df.loc[i_obs, 'observations']) + print(output.df) fout = cluster.archivedir + assim_time.strftime("/obs_seq_out/%Y-%m-%d_%H:%M_obs_seq.out") os.makedirs(cluster.archivedir+'/obs_seq_out', exist_ok=True) output.to_dart(fout) + utils.write_txt(["created from", oso_input,], fout[:-3]+'.txt')