def do_L5_batch(cf_level): #logger = pfp_log.change_logger_filename("pfp_log", "L5") for i in list(cf_level.keys()): if not os.path.isfile(cf_level[i]): msg = " Control file " + cf_level[i] + " not found" logger.error(msg) continue cf_file_name = os.path.split(cf_level[i]) msg = "Starting L5 processing with " + cf_file_name[1] logger.info(msg) try: cf_l5 = pfp_io.get_controlfilecontents(cf_level[i]) if "Options" not in cf_l5: cf_l5["Options"] = {} cf_l5["Options"]["call_mode"] = "batch" cf_l5["Options"]["show_plots"] = "No" infilename = pfp_io.get_infilenamefromcf(cf_l5) ds4 = pfp_io.nc_read_series(infilename) if ds4.returncodes["value"] != 0: return ds5 = pfp_levels.l5qc(None, cf_l5, ds4) outfilename = pfp_io.get_outfilenamefromcf(cf_l5) nc_file = pfp_io.nc_open_write(outfilename) if nc_file is None: return pfp_io.nc_write_series(nc_file, ds5) msg = "Finished L5 processing with " + cf_file_name[1] logger.info(msg) # now plot the fingerprints for the L5 files cf_fp = pfp_io.get_controlfilecontents("controlfiles/standard/fingerprint.txt") if "Files" not in dir(cf_fp): cf_fp["Files"] = {} file_name = pfp_io.get_outfilenamefromcf(cf_l5) file_path = ntpath.split(file_name)[0] + "/" cf_fp["Files"]["file_path"] = file_path cf_fp["Files"]["in_filename"] = ntpath.split(file_name)[1] if "plot_path" in cf_l5["Files"]: cf_fp["Files"]["plot_path"] = cf_l5["Files"]["plot_path"] else: cf_fp["Files"]["plot_path"] = file_path[:file_path.index("Data")] + "Plots/" if "Options" not in cf_fp: cf_fp["Options"] = {} cf_fp["Options"]["call_mode"] = "batch" cf_fp["Options"]["show_plots"] = "No" msg = "Doing fingerprint plots using " + cf_fp["Files"]["in_filename"] logger.info(msg) pfp_plot.plot_fingerprint(cf_fp) msg = "Finished fingerprint plots" logger.info(msg) logger.info("") except Exception: msg = "Error occurred during L5 with " + cf_file_name[1] logger.error(msg) error_message = traceback.format_exc() logger.error(error_message) continue return
def do_run_l5(main_gui, cfg): """ Purpose: Top level routine for running the L5 gap filling. Usage: pfp_top_level.do_run_l5() Side effects: Creates an L5 netCDF file with gap filled meteorology. Author: PRI Date: Back in the day Mods: December 2017: rewrite for use with new GUI """ try: logger.info("Starting L5 processing") in_filepath = pfp_io.get_infilenamefromcf(cfg) if not pfp_utils.file_exists(in_filepath): in_filename = os.path.split(in_filepath) logger.error("File " + in_filename[1] + " not found") return ds4 = pfp_io.nc_read_series(in_filepath) if ds4.returncodes["value"] != 0: return #ds4.globalattributes['controlfile_name'] = cfg['controlfile_name'] sitename = ds4.globalattributes['site_name'] if "Options" not in cfg: cfg["Options"] = {} cfg["Options"]["call_mode"] = "interactive" ds5 = pfp_levels.l5qc(main_gui, cfg, ds4) # check to see if all went well if ds5.returncodes["value"] != 0: # tell the user something went wrong logger.info("Quitting L5: " + sitename) # delete the output file if it exists out_filepath = pfp_io.get_outfilenamefromcf(cfg) if os.path.isfile(out_filepath): os.remove(out_filepath) else: # tell the user we are finished logger.info("Finished L5: " + sitename) # get the output file name from the control file out_filepath = pfp_io.get_outfilenamefromcf(cfg) # open it for writing nc_file = pfp_io.nc_open_write(out_filepath) if nc_file is None: return # write the output file pfp_io.nc_write_series(nc_file, ds5) logger.info("Finished saving L5 gap filled data") logger.info("") except Exception: msg = " Error running L5, see below for details ..." logger.error(msg) error_message = traceback.format_exc() logger.error(error_message) return
def do_run_l5(main_gui, cfg=None): """ Purpose: Top level routine for running the L5 gap filling. Usage: pfp_top_level.do_run_l5() Side effects: Creates an L5 netCDF file with gap filled meteorology. Author: PRI Date: Back in the day Mods: December 2017: rewrite for use with new GUI """ try: logger.info("Starting L5 processing") if not cfg: cfg = pfp_io.load_controlfile(path='controlfiles') if len(cfg) == 0: logger.info("Quiting L5 processing (no control file)") return in_filepath = pfp_io.get_infilenamefromcf(cfg) if not pfp_utils.file_exists(in_filepath): in_filename = os.path.split(in_filepath) logger.error("File " + in_filename[1] + " not found") return ds4 = pfp_io.nc_read_series(in_filepath) #ds4.globalattributes['controlfile_name'] = cfg['controlfile_name'] sitename = ds4.globalattributes['site_name'] if "Options" not in cfg: cfg["Options"] = {} cfg["Options"]["call_mode"] = "interactive" ds5 = pfp_levels.l5qc(main_gui, cfg, ds4) if ds5.returncodes["value"] != 0: logger.info("Quitting L5: " + sitename) else: logger.info("Finished L5: " + sitename) out_filepath = pfp_io.get_outfilenamefromcf(cfg) nc_file = pfp_io.nc_open_write(out_filepath) pfp_io.nc_write_series(nc_file, ds5) logger.info("Finished saving L5 gap filled data") logger.info("") except Exception: msg = " Error running L5, see below for details ..." logger.error(msg) error_message = traceback.format_exc() logger.error(error_message) return