import numpy as np
import os
import matplotlib.pyplot as plt
import datetime as dt

def load_lion_lvl2(syear,sdoy,eyear="single",edoy="single"):
  if eyear=="single" or edoy=="single":
    eyear,edoy=syear,sdoy
  year,doy=syear,sdoy
  g=open("sci.tmp","w")
  h=open("hsk.tmp","w")
  while year+doy/1000. <= eyear+edoy/1000.:
    path="/data/missions/soho/costep/level2/lion/"
    if year<2000:
      prefix="/lio%02d"%(year-1900)
    else:
      prefix="/lip%02d"%(year-2000)
    file=path+str(year)+prefix+"%03d"%doy+".sl2"
    #data=np.loadtxt(path+str(year)+prefix+"%03d"%doy+".sl2")
    #hsk =data[::5]

    try:
      f=open(file,"r")
      for idx,line in enumerate(f):
        if idx%5==0:
          h.write(line)
        else:
          g.write(line)
      f.close()
    except:
      print "no file ", year, doy


    doy+=1
    if doy>370:
      year+=1
      doy=1


  g.close()
  h.close()
  hsk=np.loadtxt("hsk.tmp")
  sci=np.loadtxt("sci.tmp")
  os.system("rm sci.tmp hsk.tmp")
  return hsk, sci

def plot_lion_lvl2(hsk,sci,chs,log=True):
  # chs is a list: 
  # example: [item4, [item8,item9]] 
  # item number correspond to column 1 in the doc table
  # will plot two panels: panel1: item4, panel2: item8 and item9
  panels=len(chs)
  year,doy=hsk[:,0].astype(int),hsk[:,1].astype(int)
  year,doy=np.repeat(year, 4),np.repeat(doy, 4)
  hour,minute,second=sci[:,0].astype(int),sci[:,1].astype(int),sci[:,2].astype(int)
  datearray=np.array([dt.datetime(year[q],1,1)+dt.timedelta(days=doy[q]-1,hours=hour[q],minutes=minute[q],seconds=second[q]) for q in range(len(year))])
  mask=np.ones(len(datearray),dtype=bool)
  for q in range(len(datearray)-1):
    if datearray[q+1]-datearray[q]<dt.timedelta(seconds=0) or datearray[q+1]-datearray[q]>dt.timedelta(hours=23):
      for w in range(4):  
        if q+w<len(mask)-1:
          mask[q+w]=False
  plt.figure()
  plt.subplots_adjust(hspace=0.1) #left=0.13, right=0.9, top=0.97,bottom=0.055, wspace=None, 
  axes=[]
  for panel in range(panels):
    if panel==0:
      ax0=  plt.subplot2grid((panels, 1), (panel, 0))
    else:
      plt.subplot2grid((panels, 1), (panel, 0),sharex=ax0)   
    if type(chs[panel]) is list:
      for lineno in range(len(chs[panel])):
        item=chs[panel][lineno]
        plt.plot_date(datearray[mask],sci[:,item-1][mask],"-",label="item %i"%item)
    else:
      item=chs[panel]
      plt.plot_date(datearray[mask],sci[:,item-1][mask],"-",label="item %i"%item)
    plt.legend()
    if log==True:
      plt.yscale("log")
    if panel!=panels-1:
      plt.setp(plt.gca().get_xticklabels(), visible=False) # do not show tick labels
    if panel==0:
      plt.title("SOHO/LION - item corresp. to table 'second record'")
  plt.show() 


syear=int(raw_input("Start Year: "))
sdoy=int(raw_input("Start DoY: "))
eyear=int(raw_input("End Year: "))
edoy=int(raw_input("End DoY: "))
print "items"
print "item number correspond to column 1 in the doc table"
print "multiple items can be plotted by ',' separation"
print "example: 7,11"
items=raw_input("Items?: ")
items=items.split(",")
itemlist=[]
for q in items: itemlist.append(int(q))

hsk, sci=load_lion_lvl2(syear,sdoy,eyear,edoy)


plot_lion_lvl2(hsk,sci,itemlist)


