Summarize melt model outputs for partner basins


In [1]:
from __future__ import print_function
%pylab notebook
import datetime as dt
import glob
import matplotlib.pyplot as plt
import pdb
from charistools.hypsometry import Hypsometry
from charistools.meltModels import ImshowTriSurfMelt
from charistools.meltModels import PlotTriSurfInput
from charistools.meltModels import PlotTriSurfMelt
from charistools.modelEnv import ModelEnv
from charistools.timeSeries import TimeSeries
import pandas as pd
import re
import os


Populating the interactive namespace from numpy and matplotlib

Given a basin name, read the 3 melt output files


In [10]:
dir = '/scratch/summit/brodzik/ti_model/derived_hypsometries/partner_basins'
dir = '/pl/active/charis/ti_model/derived_hypsometries/REECv0'

In [11]:
%cd $dir
%ls


/pl/active/charis/ti_model/derived_hypsometries/REECv0
00area_by_elevation/             BR_OBJECTID9/
AM_OBJECTID100/                  GA_Karnali_at_Benighat/
AM_OBJECTID62/                   GA_Narayani_at_Devghat/
AM_OBJECTID64/                   GA_SaptaKosi_at_Chatara/
AM_OBJECTID65/                   GA_v01_OBJECTID1/
AM_OBJECTID66/                   GA_v01_OBJECTID10/
AM_OBJECTID68/                   GA_v01_OBJECTID12/
AM_OBJECTID69/                   GA_v01_OBJECTID2/
AM_OBJECTID72/                   GA_v01_OBJECTID22/
AM_OBJECTID77/                   GA_v01_OBJECTID3/
AM_OBJECTID78/                   GA_v01_OBJECTID32/
AM_OBJECTID79/                   GA_v01_OBJECTID4/
AM_OBJECTID80/                   GA_v01_OBJECTID6/
AM_OBJECTID81/                   GA_v01_OBJECTID9/
AM_OBJECTID82/                   IN_Hunza_at_DainyorBridge/
AM_OBJECTID83/                   IN_v01_OBJECTID0/
AM_OBJECTID84/                   IN_v01_OBJECTID10/
AM_OBJECTID85/                   IN_v01_OBJECTID11/
AM_OBJECTID86/                   IN_v01_OBJECTID12/
AM_OBJECTID88/                   IN_v01_OBJECTID13/
AM_OBJECTID89/                   IN_v01_OBJECTID14/
AM_OBJECTID90/                   IN_v01_OBJECTID17/
AM_OBJECTID91/                   IN_v01_OBJECTID18/
AM_OBJECTID93/                   IN_v01_OBJECTID19/
AM_OBJECTID94/                   IN_v01_OBJECTID2/
AM_OBJECTID97/                   IN_v01_OBJECTID20/
AM_OBJECTID98/                   IN_v01_OBJECTID21/
AM_OBJECTID99/                   IN_v01_OBJECTID23/
AM_Vakhsh_at_Komsomolabad/       IN_v01_OBJECTID24/
AM_Vakhsh_at_Komsomolabad_copy/  IN_v01_OBJECTID25/
BR_OBJECTID10/                   IN_v01_OBJECTID26/
BR_OBJECTID11/                   IN_v01_OBJECTID27/
BR_OBJECTID12/                   IN_v01_OBJECTID29/
BR_OBJECTID13/                   IN_v01_OBJECTID30/
BR_OBJECTID14/                   IN_v01_OBJECTID31/
BR_OBJECTID15/                   IN_v01_OBJECTID32/
BR_OBJECTID16/                   IN_v01_OBJECTID33/
BR_OBJECTID17/                   IN_v01_OBJECTID34/
BR_OBJECTID18/                   IN_v01_OBJECTID36/
BR_OBJECTID19/                   IN_v01_OBJECTID37/
BR_OBJECTID20/                   IN_v01_OBJECTID39/
BR_OBJECTID21/                   IN_v01_OBJECTID4/
BR_OBJECTID22/                   IN_v01_OBJECTID44/
BR_OBJECTID23/                   IN_v01_OBJECTID47/
BR_OBJECTID24/                   IN_v01_OBJECTID48/
BR_OBJECTID25/                   IN_v01_OBJECTID53/
BR_OBJECTID26/                   IN_v01_OBJECTID56/
BR_OBJECTID27/                   IN_v01_OBJECTID57/
BR_OBJECTID28/                   IN_v01_OBJECTID58/
BR_OBJECTID29/                   IN_v01_OBJECTID59/
BR_OBJECTID30/                   IN_v01_OBJECTID6/
BR_OBJECTID32/                   IN_v01_OBJECTID62/
BR_OBJECTID33/                   IN_v01_OBJECTID63/
BR_OBJECTID34/                   IN_v01_OBJECTID65/
BR_OBJECTID35/                   IN_v01_OBJECTID7/
BR_OBJECTID36/                   IN_v01_OBJECTID73/
BR_OBJECTID37/                   IN_v01_OBJECTID8/
BR_OBJECTID38/                   IN_v01_OBJECTID9/
BR_OBJECTID39/                   SY_Naryn_at_NarynTown/
BR_OBJECTID4/                    SY_v01_OBJECTID941/
BR_OBJECTID40/                   SY_v01_OBJECTID950/
BR_OBJECTID41/                   SY_v01_OBJECTID951/
BR_OBJECTID42/                   SY_v01_OBJECTID952/
BR_OBJECTID43/                   SY_v01_OBJECTID953/
BR_OBJECTID44/                   SY_v01_OBJECTID955/
BR_OBJECTID46/                   SY_v01_OBJECTID956/
BR_OBJECTID47/                   SY_v01_OBJECTID957/
BR_OBJECTID49/                   SY_v01_OBJECTID958/
BR_OBJECTID5/                    SY_v01_OBJECTID959/
BR_OBJECTID52/                   SY_v01_OBJECTID960/
BR_OBJECTID56/                   SY_v01_OBJECTID961/
BR_OBJECTID57/                   SY_v01_OBJECTID962/
BR_OBJECTID59/                   SY_v01_OBJECTID964/
BR_OBJECTID6/                    SY_v01_OBJECTID965/
BR_OBJECTID61/                   SY_v01_OBJECTID966/
BR_OBJECTID7/                    SY_v01_OBJECTID967/
BR_OBJECTID8/

In [15]:
def read_melt_for(basinName, dir):

    nstrikes = 2
    
    years = 2001 + np.arange(14)
    
    # Initialize an empty df
    index = [pd.to_datetime(year, format='%Y') for year in years]
        
    df = pd.DataFrame(index=index)
    df['EGImelt'] = 0.
    df['SOImelt'] = 0.
    df['SOLmelt'] = 0.
    
    for year in years:
        
        yearDt = pd.to_datetime(year, format='%Y')
        
        list = sorted(glob.glob("%s/%s/%s.%s.0100m.modicev04_%sstrike.*melt_by_elev*.txt" % (
            dir, basinName, basinName, str(year), str(nstrikes))))
        if len(list) != 3:
            raise ValueError("Unexpected number of melt files found for %s, %d." % (basinName, year))
        
        # Assume sorted list is EGI/SOI/SOL:
        egiMeltHyps = Hypsometry(list[0])
        df.loc[yearDt, 'EGImelt'] = egiMeltHyps.data_by_doy().sum()
        
        soiMeltHyps = Hypsometry(list[1])
        df.loc[yearDt, 'SOImelt'] = soiMeltHyps.data_by_doy().sum()
        
        solMeltHyps = Hypsometry(list[2])
        df.loc[yearDt, 'SOLmelt'] = solMeltHyps.data_by_doy().sum()
        

    return df

In [ ]:
%cd $dir
basinNames = sorted(glob.glob("SY_*_at_*"))
basinNames

In [13]:
basinNames = sorted(glob.glob("??_*_at_*"))
basinNames


Out[13]:
['AM_Vakhsh_at_Komsomolabad',
 'AM_Vakhsh_at_Komsomolabad_copy',
 'GA_Karnali_at_Benighat',
 'GA_Narayani_at_Devghat',
 'GA_SaptaKosi_at_Chatara',
 'IN_Hunza_at_DainyorBridge',
 'SY_Naryn_at_NarynTown']

In [16]:
fig, ax = plt.subplots(len(basinNames), 1, figsize=(10, len(basinNames)*3))

for i, basinName in enumerate(basinNames):
    df = read_melt_for(basinName, dir)
    if len(basinNames) == 1:
        df.plot(ax=ax)
        ax.set_title(basinName)
    else:
        df.plot(ax=ax[i])
        ax[i].set_title(basinName)
    
fig.tight_layout()


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-f7dcc8ed70a2> in <module>()
      2 
      3 for i, basinName in enumerate(basinNames):
----> 4     df = read_melt_for(basinName, dir)
      5     if len(basinNames) == 1:
      6         df.plot(ax=ax)

<ipython-input-15-ecba05536e9f> in read_melt_for(basinName, dir)
     20             dir, basinName, basinName, str(year), str(nstrikes))))
     21         if len(list) != 3:
---> 22             raise ValueError("Unexpected number of melt files found for %s, %d." % (basinName, year))
     23 
     24         # Assume sorted list is EGI/SOI/SOL:

ValueError: Unexpected number of melt files found for AM_Vakhsh_at_Komsomolabad_copy, 2001.

In [ ]: