Source code for watershed_workflow.sources

"""This module provides a dictionary of sources, broken out by data type, and a
dictionary of default sources.

These dictionaries are provided as module-local (singleton) variables.

* huc_sources : A dictionary of sources that provide USGS HUC boundaries.
* hydrography_sources : A dictionary of sources that provide river reaches by HUC.
* dem_sources : A dictionary of available digital elevation models.
* soil_sources : A dictionary of available sources for soil properties.
* land_cover_sources : A dictionary of available land cover datasets.

# """
import logging
from typing import Dict, Any

from .manager_shapefile import ManagerShapefile
from .manager_raster import ManagerRaster

from .manager_wbd import ManagerWBD
from .manager_nhd import ManagerNHD
from .manager_3dep import Manager3DEP
from .manager_nrcs import ManagerNRCS
from .manager_glhymps import ManagerGLHYMPS
from .manager_soilgrids_2017 import ManagerSoilGrids2017
from .manager_pelletier_dtb import ManagerPelletierDTB
from .manager_nlcd import ManagerNLCD

# DayMet THREDDS API is disabled -- this only works for previously-downloaded files!
from .manager_daymet import ManagerDaymet
from .manager_aorc import ManagerAORC

from .manager_modis_appeears import ManagerMODISAppEEARS


# available and default water boundary datasets
huc_sources = {
    'WBD' : ManagerWBD('WBD'),
    'WaterData WBD' : ManagerWBD('WaterData'),
}
default_huc_source = 'WBD'

# available and default hydrography datasets
hydrography_sources = { 'NHDPlus MR v2.1' : ManagerNHD('NHDPlus MR v2.1'),
                        'NHD MR' : ManagerNHD('NHD MR'),
                        'NHDPlus HR' : ManagerNHD('NHDPlus HR')
                       }
default_hydrography_source = 'NHDPlus MR v2.1'

# available and default digital elevation maps
dem_sources : Dict[str,Any] = {
    '3DEP 60m': Manager3DEP(60),
    '3DEP 30m': Manager3DEP(30),
    '3DEP 10m': Manager3DEP(10),
}
default_dem_source = '3DEP 60m'

# available and default soil survey datasets
structure_sources : Dict[str,Any] = {
    'NRCS SSURGO': ManagerNRCS(),
    'GLHYMPS': ManagerGLHYMPS(),
    # 'SoilGrids2017': ManagerSoilGrids2017(),
    'Pelletier DTB': ManagerPelletierDTB(),
}
default_structure_source = 'NRCS SSURGO'

# available and default land cover
land_cover_sources : Dict[str,Any] = {
    'NLCD (L48)': ManagerNLCD(location='L48'),
    'NLCD (AK)': ManagerNLCD(location='AK'),
    'MODIS': ManagerMODISAppEEARS()
}
default_land_cover = 'NLCD (L48)'

lai_sources : Dict[str,Any] = {
   'MODIS': ManagerMODISAppEEARS()
}
default_lai = 'MODIS'

# available and default meteorology
met_sources : Dict[str,Any] = {
    'AORC': ManagerAORC(),
    'DayMet': ManagerDaymet()
}
default_met = 'AORC'


[docs] def getDefaultSources() -> Dict[str, Any]: """Provides a default set of data sources. Returns a dictionary with default sources for each type. """ sources : Dict[str,Any] = dict() sources['HUC'] = huc_sources[default_huc_source] sources['hydrography'] = hydrography_sources[default_hydrography_source] sources['DEM'] = dem_sources[default_dem_source] sources['soil structure'] = structure_sources['NRCS SSURGO'] sources['geologic structure'] = structure_sources['GLHYMPS'] sources['land cover'] = land_cover_sources[default_land_cover] sources['LAI'] = lai_sources[default_lai] sources['depth to bedrock'] = structure_sources['Pelletier DTB'] sources['meteorology'] = met_sources[default_met] return sources
[docs] def getSources(args) -> Dict[str, Any]: """Parsers the command line argument struct from argparse and provides an updated set of data sources. Parameters ---------- args : struct A python struct generated from an argparse.ArgumentParser object with source options set by watershed_workflow.ui.*_source_options Returns ------- sources : dict Dictionary of defaults for each of "HUC", "hydrography", "DEM", "soil type", and "land cover". """ sources = getDefaultSources() try: source_huc = args.source_huc except AttributeError: pass else: sources['HUC'] = huc_sources[source_huc] try: source_hydrography = args.source_hydro except AttributeError: pass else: sources['hydrography'] = hydrography_sources[source_hydrography] try: source_dem = args.source_dem except AttributeError: pass else: sources['DEM'] = dem_sources[source_dem] try: source_soil = args.soil_structure except AttributeError: pass else: sources['soil structure'] = structure_sources[source_soil] try: source_geo = args.geologic_structure except AttributeError: pass else: sources['geologic structure'] = structure_sources[source_geo] try: source_dtb = args.dtb_structure except AttributeError: pass else: sources['depth to bedrock'] = structure_sources[source_dtb] try: land_cover = args.land_cover except AttributeError: pass else: sources['land cover'] = land_cover_sources[land_cover] try: met = args.meteorology except AttributeError: pass else: sources['meteorology'] = met_sources[met] return sources
[docs] def logSources(sources : Dict[str, Any]) -> None: """Pretty print source dictionary to log.""" logging.info('Using sources:') logging.info('--------------') for stype, s in sources.items(): if s is not None: logging.info('{}: {}'.format(stype, s.name)) else: logging.info('{}: None'.format(stype))