Source code for pyswmm.raingages

# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2019 Bryant E. McDonnell
#
# Licensed under the terms of the BSD2 License
# See LICENSE.txt for details
# -----------------------------------------------------------------------------
"""Raingages module for the pythonic interface to SWMM5."""

# Local imports
from pyswmm.swmm5 import PYSWMMException
from pyswmm.toolkitapi import RainGageResults, ObjectType


[docs] class RainGages(object): """ Rain Gages Iterator Methods. :param object model: Open Model Instance Examples: >>> from pyswmm import Simulation, Nodes >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... for raingage in RainGages(sim): ... print(raingage) ... print(raingage.raingageid) ... >>> <swmm5.RainGage object at 0x031B0350> >>> Gage1 >>> <swmm5.RainGage object at 0x030693D0> >>> Gage4 >>> <swmm5.RainGage object at 0x031B0350> >>> Gage3 >>> <swmm5.RainGage object at 0x030693D0> >>> Gage10 Iterating over Nodes Object >>> raingages = RainGages(sim) >>> for raingage in raingages: ... print(raingage.raingageid) >>> Gage1 >>> Gage4 >>> Gage3 >>> Gage10 Testing Existence >>> raingages = RainGages(sim) >>> "Gage1" in raingages >>> True Initializing a node Object >>> raingages = RainGages(sim) >>> gage1 = raingages['Gage1'] >>> print(gage1.total_precip) >>> 0.04 >>> >>> gage1.total_precip = 1 >>> print(gage1.total_precip) >>> 1 """ def __init__(self, model): if not model._model.fileLoaded: raise PYSWMMException("SWMM Model Not Open") self._model = model._model self._cuindex = 0 self._nRaingages = self._model.getProjectSize(ObjectType.GAGE.value) def __len__(self): """ Return number of raingages. Use the expression 'len(RainGages(sim))'. :return: Number of Raingages :rtype: int """ return self._model.getProjectSize(ObjectType.GAGE.value) def __contains__(self, raingageid): """ Checks if Rain Gage ID exists. :return: ID Exists :rtype: bool """ return self._model.ObjectIDexist(ObjectType.GAGE.value, raingageid) def __getitem__(self, raingageid): if self.__contains__(raingageid): rg = RainGage(self._model, raingageid) return rg else: raise PYSWMMException( "Raingage ID: {} Does not Exist".format(raingageid)) def __iter__(self): return self def __next__(self): if self._cuindex < self._nRaingages: raingageobject = self.__getitem__(self._raingageid) self._cuindex += 1 # Next Iteration return raingageobject else: raise StopIteration() @property def _raingageid(self): """Node ID.""" return self._model.getObjectId(ObjectType.GAGE.value, self._cuindex)
[docs] class RainGage(object): """ Raingage Methods. :param object model: Open Model Instance :param str raingageid: Raingage ID Examples: >>> from pyswmm import Simulation, Raingages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg1 = Raingages(sim)["Gage1"] ... print(rg1.raingageid) ... for step in sim: ... print(rg1.total_precip) ... Gage1 ... 0 ... 10 """ def __init__(self, model, raingageid): if not model.fileLoaded: raise PYSWMMException("SWMM Model Not Open") if raingageid not in model.getObjectIDList(ObjectType.GAGE.value): raise PYSWMMException("ID Not valid") self._model = model self._raingageid = raingageid # --- Get Parameters # ------------------------------------------------------------------------- @property def raingageid(self): """ Get Rain Gage ID. :return: Parameter Value :rtype: float Examples: >>> from pyswmm import Simulation, RainGages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg = RainGage(sim)["Gage1"] ... print(rg.raingageid) >>> Gage1 """ return self._raingageid @property def total_precip(self): """ Get/set raingage total precipitation rate (like in/hr or mm/hr). :return: Parameter Value :rtype: float Examples: >>> from pyswmm import Simulation, RainGages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg1 = RainGages(sim)["Gage1"] ... print(rg1.total_precip) >>> 1.0 Setting the value >>> from pyswmm import Simulation, RainGages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg1 = RainGages(sim)["Gage1"] ... print(rg1.total_precip) ... rg1.total_precip = 0.2 ... print(rg1.total_precip) >>> 1.0 >>> 0.2 """ return self._model.getGagePrecip(self._raingageid, RainGageResults.total_precip) @total_precip.setter def total_precip(self, param): """Set Total Precipitation Rate (in/hr or mm/hr).""" self._model.setGagePrecip(self._raingageid, param) @property def rainfall(self): """ Get raingage total rainfall rate (like in/hr or mm/hr). :return: Parameter Value :rtype: float Examples: >>> from pyswmm import Simulation, RainGages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg1 = RainGages(sim)["Gage1"] ... print(rg1.rainfall) >>> 1.0 """ return self._model.getGagePrecip(self._raingageid, RainGageResults.rainfall) @property def snowfall(self): """ Get raingage total snowfall rate (like in/hr or mm/hr). :return: Parameter Value :rtype: float Examples: >>> from pyswmm import Simulation, RainGages >>> >>> with Simulation('tests/data/TestModel1_weirSetting.inp') as sim: ... rg1 = RainGages(sim)["Gage1"] ... print(rg1.snowfall) >>> 0.0 """ return self._model.getGagePrecip(self._raingageid, RainGageResults.snowfall)