Prado EFO PVA
functions.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 """
3 Created on Tue May 4 12:43:50 2021
4 
5 @author: cd
6 """
7 
8 import pandas as pd
9 import numpy as np
10 from efo.general import Constants
11 
12 def exc_prob(*, arr):
13  nRows = arr.size
14  # Calculate exceedance probability
15  arrSort = -np.sort(-arr)
16  arrRank = np.arange(1, nRows+1)
17  excProb = np.zeros(nRows)
18  excProb = arrRank/(nRows+1)
19  return excProb, arrSort
20 
21 
22 def calc_cumulative_wy(*, q, dateTime):
23  qCumWy = np.empty(dateTime.size)
24  qCumWy[0] = q[0]
25  for i in range(1,dateTime.size):
26  if (dateTime[i].month == 10) and (dateTime[i].day == 1):
27  qCumWy[i] = q[i]
28  else:
29  qCumWy[i] = qCumWy[i-1] + q[i]
30  return qCumWy
31 
32 
33 def calc_wy_vol(*, T, df, col, scenarios):
34  constants = Constants(T)
35  vDate = T.get_vdate()
36  years = np.unique(vDate[:, 0])
37  returnDf = pd.DataFrame()
38  wyVol = np.empty(years.size)
39  for j, curScen in enumerate(scenarios):
40  idxName = np.full(years.size, scenarios[j])
41  curDf = df.xs(curScen)
42  for i, curYr in enumerate(years):
43  iCurWY = (curDf.index.year == curYr-1) & (curDf.index.month >= 10) | \
44  (curDf.index.year == curYr) & (curDf.index.month <= 9)
45  wyVol[i] = np.sum(curDf.loc[iCurWY][col].to_numpy()*constants.cfs2af)
46  dfIndices = [idxName, years]
47  dfMultiIdx = pd.MultiIndex.from_arrays(dfIndices, names=('name_scenario', 'water_year'))
48  curDf = pd.DataFrame({'wy_vol': wyVol},
49  columns = ['wy_vol'], index=dfMultiIdx)
50  returnDf = returnDf.append(curDf)
51  return returnDf
52 
53 
54 def calc_ndays_exceed_elev(*, hypso, T, df, col, scenarios, elevThresh):
55  storThresh = np.interp(elevThresh, hypso.elev, hypso.stor)
56  returnDf = pd.DataFrame()
57  for j, curScen in enumerate(scenarios):
58  curScenarioDf = df.xs(curScen)
59  curDateTime = curScenarioDf.index
60  years = np.unique(curDateTime.year)
61  nDays = np.empty(years.size)
62  idxName = np.full(years.size, scenarios[j])
63  for i, curYr in enumerate(years):
64  iCurWY = (curDateTime.year == curYr-1) & (curDateTime.month >= 10) | \
65  (curDateTime.year == curYr) & (curDateTime.month <= 9)
66  nDays[i] = np.sum(curScenarioDf.loc[iCurWY][col] > storThresh)
67  dfIndices = [idxName, years]
68  dfMultiIdx = pd.MultiIndex.from_arrays(dfIndices, names=('name_scenario', 'water_year'))
69  curDf = pd.DataFrame({'days_abv_elev': nDays},
70  columns = ['days_abv_elev'], index=dfMultiIdx)
71  returnDf = returnDf.append(curDf)
72  return returnDf
def calc_cumulative_wy(*q, dateTime)
Definition: functions.py:22
def calc_ndays_exceed_elev(*hypso, T, df, col, scenarios, elevThresh)
Definition: functions.py:54
def exc_prob(*arr)
Definition: functions.py:12
def calc_wy_vol(*T, df, col, scenarios)
Definition: functions.py:33