示例#1
0
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')
示例#2
0
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)