#! /usr/bin/env python3 import re import numpy as np InFileName="CRPSS.data" OutFileName="CRPSS_orank.txt" # Using readlines() InFile = open(InFileName, 'r') Lines = InFile.readlines() OutFile = open(OutFileName, 'w') count = 0 for line in Lines: count += 1 if count < 3: continue words = re.split('\s+', line) if len(words) == 25: obs_idx=words[1] obs_sid="sid_" + words[1] ens_raw=words[2:22] ens_val=np.asarray(words[2:22], dtype='float64') obs_val=words[22] elif len(words) == 14: clm_val=np.asarray(words[3:12], dtype='float64') orank="V10.0.0 TEST NA 00 20210101 20210101 00 20210101 20210101 TMP K NA TMP K NA ANLSYS FULL NEAREST 1 NA NA NA NA ORANK 14760 " + obs_idx + " " + obs_sid + " NA NA NA NA " + obs_val + " NA 1 20 20 " + " ".join(ens_raw) + " NA " + str(np.mean(ens_val)) + " " + str(np.mean(clm_val)) + " " + str(np.std(ens_val)) + " NA NA NA " + str(np.std(clm_val)) + "\n" OutFile.write(orank) # VERSION MODEL DESC FCST_LEAD FCST_VALID_BEG FCST_VALID_END OBS_LEAD OBS_VALID_BEG OBS_VALID_END FCST_VAR FCST_UNITS FCST_LEV OBS_VAR OBS_UNITS OBS_LEV OBTYPE VX_MASK INTERP_MTHD INTERP_PNTS FCST_THRESH OBS_THRESH COV_THRESH ALPHA LINE_TYPE TOTAL INDEX OBS_SID OBS_LAT OBS_LON OBS_LVL OBS_ELV OBS PIT RANK N_ENS_VLD N_ENS ENS_1 ENS_2 ENS_3 ENS_4 ENS_5 OBS_QC ENS_MEAN CLIMO_MEAN SPREAD ENS_MEAN_OERR SPREAD_OERR SPREAD_PLUS_OERR CLIMO_STDEV # time ../bin/stat_analysis -lookin CRPSS_orank.txt -job aggregate_stat -line_type ORANK -out_line_type ECNT -v 4 -out_bin_size 0.1 -out orank_to_ecnt.out