import matplotlib
# Allow running headless from the command line
matplotlib.use("agg")

import os
import datetime
import json;

from pylab import *
import numpy as np
import mutils as m

# Override pylab find() to avoid deprecation warning
# pylint: disable=function-redefined
def find(x):
  return where(x)[0]



systems = 20
freqs   = 20
signals = 50
svType  = 2

plotSymb = [ "bo", "ro", "co", "go", "ko", "yo", "mo",
             "b*", "r*", "c*", "g*", "k*", "y*", "m*"]

# Load the receiver JSON file 
with open('receivers.json', 'r') as f:
  receivers = json.load(f)
MaxRX = len(receivers['receivers'])

# Load the signal LUT JSON file 
with open('signals.json', 'r') as f:
  signals = json.load(f)
MaxSatType = len(signals['types'])

for elevType in range(2):
  if(elevType == 0):
    modifier = ''
  else:
    modifier = '30'

  for rx in range(MaxRX):
    LocalDir = receivers['receivers'][rx]['RXStr']
    rxName   = receivers['receivers'][rx]['rxName']

    summaryFig = figure()
    summaryAx = summaryFig.add_subplot(111)

    for satType in range(MaxSatType):
      thisSat    = signals['types'][satType]
      satTypeStr = thisSat['satTypeStr']
    
      MaxSig = len(thisSat['signals'])
      for sigType in range(MaxSig):
        filename = (LocalDir + "/slips" + modifier + "." + 
                    thisSat['signals'][sigType]['satType'] + "." + 
                    thisSat['signals'][sigType]['freq'] + "." + 
                    thisSat['signals'][sigType]['sig'] + "." + 
                    thisSat['signals'][sigType]['orbit'] + ".txt")

        if(os.path.isfile(filename) and (os.path.getsize(filename) > 0)):
          slipData = np.loadtxt(filename,dtype='int')
          rows = size(slipData)/8
          if(rows > 1):
            DOY = np.array([(datetime.datetime(*x.astype(int)) - datetime.datetime(2018,1,1)).days for x in slipData[:,0:3]])
            numSlips  = slipData[:,6]
            numEpochs = slipData[:,7]
            
            i = np.where(numEpochs > 3600)
            if(size(i) > 0):
              fig = figure()
              numSlips   = numSlips[i].astype(float)
              numEpochs  = numEpochs[i].astype(float)


              rate = np.array(numSlips/numEpochs)
              j = find( rate == 0 )
              # Can't represent 0 on a lot scale, so set really small.
              rate[j] = 1e-10
              #plot( DOY[i], numSlips/numEpochs, plotSymb[0], label=thisSat['signals'][sigType]['sigStr'])
              semilogy( DOY[i], rate, plotSymb[0], label=thisSat['signals'][sigType]['sigStr'])
              ylabel('Slip Rate [Slips per Epoch]')
              grid()
              legend()
              xlabel('Time [Day since start of 2018]')
              if(elevType == 0):
                title(rxName)
              else:
                title(rxName + ' - 30 Deg Mask')
              tight_layout()
              show()
              # Save the data as a PNG file
              savefig(LocalDir + "/" + satTypeStr + '-' + thisSat['signals'][sigType]['plotStr'] + modifier + ".png",dpi=150)
              close()

              figure(summaryFig.number)
              #plot( DOY[i], numSlips/numEpochs, plotSymb[sigType], label=thisSat['signals'][sigType]['sigStr'])
              semilogy( DOY[i], rate, plotSymb[sigType], label=thisSat['signals'][sigType]['sigStr'])

      figure(summaryFig.number)
      ylabel('Slip Rate [Slips per Epoch]')
      grid()
      legend()
      xlabel('Time [Day since start of 2018]')
      if(elevType == 0):
        title(satTypeStr + " - " + rxName)
      else:
        title(satTypeStr + " - " + rxName + " - 30 Deg Mask")
      tight_layout()
      show()
      # Save the data as a PNG file
      savefig(LocalDir + "/" + satTypeStr + "-" + modifier + "Summary.png",dpi=150)
      close()


