Source code for rheas

""" RHEAS module for main functionality.

.. module:: rheas
   :synopsis: Module for executing the RHEAS system

.. moduleauthor:: Kostas Andreadis <kandread@jpl.nasa.gov>

"""

import config
import nowcast
import forecast
import argparse
import dbio
import datasets
from datetime import datetime
import logging


[docs]def parseArgs(): """Parses command line arguments and prints help messages.""" parser = argparse.ArgumentParser(description='Runs RHEAS simulation.') parser.add_argument('config', help='configuration file') parser.add_argument('-d', metavar='DB', help='name of database to connect') parser.add_argument('-u', '--update', help='update database', action='store_true') parser.add_argument('-v', '--verbose', help='increase verbosity', action='store_true') parser.add_argument('-l', metavar='logfile', help='name of log file') args = parser.parse_args() return args.config, args.d, args.update, args.verbose, args.l
[docs]def update(dbname, configfile): """Fetch datasets and update database.""" log = logging.getLogger(__name__) conf = datasets.readDatasetList(configfile) try: bbox = map(lambda s: conf.getfloat('domain', s), [ 'minlon', 'minlat', 'maxlon', 'maxlat']) except: bbox = None for name in conf.sections(): if name != 'domain': try: mod = __import__("datasets.{0}".format(name), fromlist=[name]) except: mod = None if conf.has_option(name, 'startdate'): t0 = datetime.strptime(conf.get(name, 'startdate'), "%Y-%m-%d") else: t0 = None if conf.has_option(name, 'enddate'): t1 = datetime.strptime(conf.get(name, 'enddate'), "%Y-%m-%d") else: t1 = datetime.today() if mod is None: # download generic datasets datasets.download(dbname, (t0, t1), bbox, conf, name) else: dt = mod.dates(dbname) if t0 is None: if dt is None: log.warning("Date information for {0} not found in the database or data.conf. Please add a startdate in the data.conf file.".format(name)) else: dt = (dt[0], t1) else: dt = (t0, t1) if dt is not None: mod.download(dbname, dt, bbox)
[docs]def run(): """Main RHEAS routine.""" config_filename, dbname, db_update, verbose, logfile = parseArgs() if verbose: log_level = logging.DEBUG else: log_level = logging.INFO if logfile is None: logging.basicConfig(level=log_level, format='%(levelname)s: %(message)s') else: logging.basicConfig(filename=logfile, level=log_level, format='%(levelname)s: %(message)s') log = logging.getLogger(__name__) if dbname is None: dbname = "rheas" dbio.connect(dbname) # check if database update is requested if db_update: log.info("Updating database!") update(dbname, config_filename) else: options = config.loadFromFile(config_filename) # check what simulations have been requested if "nowcast" in options: nowcast.execute(dbname, options) if "forecast" in options: forecast.execute(dbname, options)
if __name__ == '__main__': run()