import sys
import numpy as np
import h5py
import json
import matplotlib.pyplot as plt
import datetime
from dateutil    import parser
from prime_utils import runningAvg
VERBOSE=0
[docs]
def main(setupfile):
    r"""
    Plot raw and filtered data for the region specified in the setupfile.
    Parameters
    ----------
    setupfile: string
        json file (.json) including the region name. The "regionname.dat"
        should exist in the path accessible for this script
    """
    #-------------------------------------------------------
    run_setup=json.load(open(setupfile))
    if VERBOSE>0:
    	print(run_setup)
    
    #-------------------------------------------------------
    # definitions
    fdata = run_setup["regioninfo"]["regionname"]+".dat"
    day0  = run_setup["regioninfo"]["day0"]
    ndays_average = run_setup["regioninfo"]["running_avg_obs"]
    
    #-------------------------------------------------------
    # get raw data
    rawdata = np.loadtxt(fdata,dtype=str)
    ndays_data = rawdata.shape[0]
    days_since_day0 = np.array([(parser.parse(rawdata[i,0])-parser.parse(day0)).days for i in range(rawdata.shape[0])])
    new_cases = np.array([float(rawdata[i,1]) for i in range(ndays_data)])
    datesData = np.array([parser.parse(rawdata[i,0]) for i in range(ndays_data)])
    
    #-------------------------------------------------------
    # Filtered Data (with a running average)
    new_cases_filter = runningAvg(np.array([float(rawdata[i,1]) for i in range(ndays_data)]),ndays_average)
    
    #-------------------------------------------------------
    # plot
    
    fig = plt.figure(figsize=(6,6))
    ax=fig.add_axes([0.18,0.26,0.75,0.7])
    
    maxVal = np.max(new_cases)
    
    symtype=run_setup["ppopts"]["newcases"][0]
    ms=run_setup["ppopts"]["newcases"][1]
    
    pl1=ax.plot(datesData,new_cases,symtype,ms=ms)
    
    
    plt.plot(datesData,new_cases,'.k',label='Data')
    
    # TODO should change label depending on input deck options
    filter_label = str(ndays_average)+"-day running average"
    plt.plot(datesData,new_cases_filter,'s-r',label=filter_label)
    
    plt.xticks(rotation=45)
    
    x0=parser.parse(run_setup["ppopts"]["xylim_newcases"][0])
    x1=parser.parse(run_setup["ppopts"]["xylim_newcases"][1])
    
    x1=parser.parse(rawdata[-1,0])+datetime.timedelta(days=run_setup["ppopts"]["days_extra"]) 
    ax.set_xlim([x0,x1])
    
    y0 = 0.0
    y1 = 1.1*maxVal
    
    ax.set_ylim([y0,y1])
    
    xlbs=run_setup["ppopts"]["xylbl_newcases"][0]
    xlbf=run_setup["ppopts"]["xylbl_newcases"][1]
    ax.set_xlabel(xlbs,fontsize=xlbf)
    ylbs=run_setup["ppopts"]["xylbl_newcases"][2]
    ylbf=run_setup["ppopts"]["xylbl_newcases"][3]
    ax.set_ylabel(ylbs,fontsize=ylbf)
    
    for tick in ax.xaxis.get_major_ticks():
        tick.label.set_fontsize(run_setup["ppopts"]["xyticklbl_newcases"][0])
    
    for tick in ax.yaxis.get_major_ticks():
        tick.label.set_fontsize(run_setup["ppopts"]["xyticklbl_newcases"][1])
    
    plt.legend(fontsize=run_setup["ppopts"]["xyticklbl_newcases"][0])
    
    figname=run_setup["regioninfo"]["regionname"] + "_case_data" 
    plt.savefig(figname+"."+run_setup["ppopts"]["figtype"])
    plt.close()  
    
if __name__ == '__main__':
    main(sys.argv[1])