def run(fires_manager): """Runs emissions module Args: - fires_manager -- bluesky.models.fires.FiresManager object Config options: - emissions > model -- emissions model to use - emissions > species -- whitelist of species to compute emissions for - emissions > include_emissions_details -- whether or not to include emissions per fuel category per phase, as opposed to just per phase - emissions > fuel_loadings -- - consumption > fuel_loadings -- considered if fuel loadings aren't specified in the emissions config """ model = Config().get('emissions', 'model') include_emissions_details = Config().get('emissions', 'include_emissions_details') fires_manager.processed(__name__, __version__, model=model, emitcalc_version=emitcalc_version, eflookup_version=eflookup_version, consume_version=CONSUME_VERSION_STR) try: klass_name = ''.join([e.capitalize() for e in model.split('-')]) klass = getattr(sys.modules[__name__], klass_name) e = klass(fires_manager.fire_failure_handler) except AttributeError: msg = "Invalid emissions model: '{}'.".format(model) if model == 'urbanski': msg += " The urbanski model has be replaced by prichard-oneill" raise BlueSkyConfigurationError(msg) e.run(fires_manager.fires) # fix keys for fire in fires_manager.fires: with fires_manager.fire_failure_handler(fire): for aa in fire.active_areas: for loc in aa.locations: for fb in loc['fuelbeds']: _fix_keys(fb['emissions']) if include_emissions_details: _fix_keys(fb['emissions_details']) datautils.summarize_all_levels(fires_manager, 'emissions') if include_emissions_details: datautils.summarize_over_all_fires(fires_manager, 'emissions_details')
def run(fires_manager): """Runs dispersion module Args: - fires_manager -- bluesky.models.fires.FiresManager object """ model = Config().get('trajectories', 'model').lower() processed_kwargs = {} try: # e.g. 'hysplt' -> 'HysplitDispersion', 'foo_bar' -> 'FooBarDispersion' klass_name = ''.join([ "{}Trajectories".format(m.capitalize()) for m in model.split('_') ]) module, klass = import_class("bluesky.trajectories.{}".format(model), klass_name) processed_kwargs.update( {"{}_version".format(model): module.__version__}) start, num_hours = _get_time_window() output_dir, working_dir = get_working_and_output_dirs('trajectories') model_config = Config().get('trajectories', model) traj_gen = klass(model_config, fires_manager, start, num_hours, output_dir, working_dir=working_dir) traj_info = traj_gen.run() traj_info.update(model=model) # TODO: store trajectories info in summary? # > fires_manager.summarize(trajectories=disperser.run(...)) fires_manager.trajectories = traj_info # TODO: add information about fires to processed_kwargs finally: fires_manager.processed(__name__, __version__, model=model, **processed_kwargs)