diff --git a/modules/aeolus/aeolus_amv.py b/modules/aeolus/aeolus_amv.py index 77aa92fb1d1c2217f3e25d0c564b8b50555d3dfb..6b2ed63824e2dd59f510b18b5fbb37ec4fb26bd7 100644 --- a/modules/aeolus/aeolus_amv.py +++ b/modules/aeolus/aeolus_amv.py @@ -4,9 +4,9 @@ import glob import numpy as np import xarray as xr from netCDF4 import Dataset -from aeolus.geos_nav import GEOSNavigation, get_navigation +from aeolus.geos_nav import get_navigation from aeolus.datasource import get_datasource, CLAVRx_CALIPSO, CLAVRx -from util.util import haversine_np, LatLonTuple, GenericException +from util.util import haversine_np, LatLonTuple, add_time_range_to_filename from amv.intercompare import best_fit, bin_data_by, get_press_bin_ranges, spd_dir_from_uv, uv_from_spd_dir, \ direction_difference, run_best_fit_gfs import math @@ -14,7 +14,7 @@ from metpy.units import units from util.gfs_reader import get_vert_profile_s from amv.intercompare import get_raob_dict_cdf from util.line_plot import do_plot -import h5py +import pickle amv_file_duration = 60 # minutes @@ -247,7 +247,7 @@ def create_file2(filename, raob_to_amv_dct, raob_dct, amv_files): rootgrp.close() -def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, product): +def run_best_fit_driver(output_path, amv_dir, source, raob_path, gfs_path, product_dir, product): amv_ds = get_datasource(amv_dir, source) gfs_files = get_datasource(gfs_path, 'GFS') raob_ds = get_datasource(raob_path, 'RAOB') @@ -263,6 +263,8 @@ def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, produ bfs_gfs_list = [] prd_list = [] + ts_first = None + for k, raob_filename in enumerate(raob_files): raob_dct = get_raob_dict_cdf(raob_filename) keys = list(raob_dct.keys()) @@ -270,6 +272,8 @@ def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, produ m_d, amv_filename = match_amvs_to_raobs(raob_dct, ts, amv_ds) if m_d is None: continue + if ts_first is None: + ts_first = ts gfs_file = gfs_files.get_file(ts)[0] if gfs_file is None: @@ -307,13 +311,14 @@ def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, produ if prd_dct is None: continue - # TODO: write output file here - filename = None - create_bestfit_file('test_match.nc', m_d, raob_dct, gfs_at_raob_dct, bf_dct, prd_dct, amv_ds.get_parameters(), raob_filename, amv_filename) + outfile = output_path+'amv_bestfit.nc' + outfile = add_time_range_to_filename(outfile, ts, None) + create_bestfit_file(outfile, m_d, raob_dct, gfs_at_raob_dct, bf_dct, prd_dct, amv_ds.get_parameters(), raob_filename, amv_filename) - # Skip this and below if writing an output file. out_list.append((bf_dct, prd_dct)) + ts_last = ts + for tup in out_list: ab_dct = tup[0] pr_dct = tup[1] @@ -341,6 +346,13 @@ def run_best_fit_driver(amv_dir, source, raob_path, gfs_path, product_dir, produ prd = np.concatenate(prd_list) tup = (amvs, bfs, prd, bfs_gfs, rbm) + outfile = output_path + 'amv_bestfit.pkl' + outfile = add_time_range_to_filename(outfile, ts_first, ts_last) + + f = open(outfile, 'wb') + pickle.dump(tup, f) + f.close() + return tup