from pyorac.run import process_post, process_pre, process_main from pyorac.util import warning_format warnings.formatwarning = warning_format warnings.filterwarnings('always', category=OracWarning) # Define parser pars = ArgumentParser( description='Run one part of ORAC on a given file. Note ' 'that this *DOES NOT* consider default settings for each ' 'aerosol phase.') pars.add_argument('target', type=str, help='File to be processed.') args_common(pars) args_cc4cl(pars) args_preproc(pars) args_main(pars) args_postproc(pars) args = pars.parse_args() args = check_args_common(args) args = check_args_cc4cl(args) log_path = os.path.join(args.out_dir, LOG_DIR) try: inst = FileName(args.in_dir, args.target) if inst.oractype in ('primary', 'secondary'): jid, _ = process_post(args, log_path) elif inst.oractype is None: jid, _ = process_pre(args, log_path)
def process_all(orig_args): """Run the ORAC pre, main, and post processors on a file.""" from argparse import ArgumentParser from copy import deepcopy from pyorac.arguments import args_common, args_main from pyorac.local_defaults import log_dir, pre_dir # Generate main-processor-only parser pars = ArgumentParser() args_common(pars) args_main(pars) # We need one argument from args_cc4cl() pars.add_argument("--sub_dir", default="") compare = pars.parse_args("") # Copy input arguments as we'll need to fiddle with them check_args_common(orig_args) check_args_cc4cl(orig_args) log_path = os.path.join(orig_args.out_dir, log_dir) args = deepcopy(orig_args) written_dirs = set() # The folders we actually wrote to # Work out output filename args.out_dir = os.path.join(orig_args.out_dir, pre_dir) jid_pre, _ = process_pre(args, log_path, tag="pre{}".format(args.label)) if jid_pre is not None: written_dirs.add(args.out_dir) # Run main processor ------------------------------------------------------- root_name = args.File.root_name(args.revision, args.processor, args.project, args.product_name) args.target = root_name + ".config.nc" out_files = [] # All files that would be made (facilitates --dry_run) jid_main = [] # ID no. for each queued job args.in_dir = [args.out_dir] for sett in args.settings: phs_args = deepcopy(args) parsed_settings_arguments = pars.parse_args(sett.split()) for key, val in compare.__dict__.items(): if val == parsed_settings_arguments.__dict__[key]: parsed_settings_arguments.__dict__.pop(key) phs_args.__dict__.update(parsed_settings_arguments.__dict__) phs_args.out_dir = os.path.join(orig_args.out_dir, phs_args.sub_dir) jid, out = process_main(phs_args, log_path, dependency=jid_pre, tag=args.label) out_files.append(out) if jid is not None: jid_main.append(jid) written_dirs.add(args.out_dir) # Run postprocessor if necessary if len(args.settings) > 1: args.target = root_name + phs_args.phase + ".primary.nc" args.in_dir = written_dirs args.out_dir = orig_args.out_dir jid, out_file = process_post(args, log_path, out_files, dependency=jid_main, tag="post{}".format(args.label)) if jid is not None: written_dirs.add(args.out_dir) else: out_file = out_files[0] # Run CCI formatting if args.reformat != "": call_reformat(args, log_path, args.reformat, out_file, dependency=jid) # Output root filename and output folders for regression tests return jid, out_file