# -*- coding: utf-8 -*-
"""
Created on Fri Oct  2 13:11:25 2020

@author: ppantina
"""
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 10 12:33:49 2020

@author: ppantina
"""

##20230830 Added logic to remove EXRAD 20230123 GPS packets from nav file. These packets are missing

radname       = input('Which radar? CRS, EXRAD, HIWRAP: ')
flightDate    = input('Which date?: yyyymmdd ')

##Import some libraries
import h5py
import glob
import os
import numpy as np
import L0_sub_parseIwg
import L0_sub_parseInspva
import L0_sub_parseAnt
import L0_sub_parseCrsHkp
import L0_sub_parseHiwrapHkp
import L0_sub_parseExradHkp
import sub_params
import L0_sub_unitsDescriptions

fileNameParams            = 'radar_params_irma.xlsx'
fileNameUnitDescriptions  = 'radar_attrs.xlsx'

##Call subroutines for parameter/attributes data parsing
hkpUnits, hkpDescriptions, \
antUnits, antDescriptions, \
gpsUnits, gpsDescriptions, \
navUnits, navDescriptions, \
radUnits, radDescriptions = L0_sub_unitsDescriptions.L0_sub_unitsDescriptions(fileNameUnitDescriptions,   radname)
Params                    = sub_params.sub_params                      (fileNameParams, flightDate, radname)

##Paths and info for raw radar/telemetry data
fileNamesTele    = Params                  ['path_HKP']
fileNamesIWG     = Params                  ['path_IWG']
fileNamesArray   = np.sort(glob.glob(fileNamesTele))
navOut                 = L0_sub_parseIwg.      L0_sub_parseIwg      (fileNamesIWG)          #all radars
if not (('EXRAD' in radname)&(flightDate == '20230123')):
    gpsOut                 = L0_sub_parseInspva.   L0_sub_parseInspva   (fileNamesTele, radname) #all radars
##Call subroutines for telemtry data parsing
if 'EXRAD' in radname:
    antOut             = L0_sub_parseAnt.      L0_sub_parseAnt      (fileNamesTele) #exrad only
    hkpOut             = L0_sub_parseExradHkp. L0_sub_parseExradHkp (fileNamesTele)
if radname == 'CRS':
    hkpOut             = L0_sub_parseCrsHkp.   L0_sub_parseCrsHkp   (fileNamesTele)
if 'HIWRAP' in radname:
    hkpOut             = L0_sub_parseHiwrapHkp.L0_sub_parseHiwrapHkp(fileNamesTele)

      
##Create an HDF5 file. Use the input name for the output name
fileout     = radname + '_' + str(flightDate) + '_nav'
fileoutpath = Params['Directory_L0'] + fileout + '.hdf'
print ('Writing', fileoutpath)

f           = h5py.File(fileoutpath, 'w')

##Add global attributes to the file
f.attrs['radname'         ] = radname
f.attrs['experimentName'  ] = Params['experimentName'  ]
f.attrs['FlightDate'      ] = Params['FlightDate'      ]
f.attrs['Description'     ] = Params['Description'     ]
        
##Add telemetry data        

if not (('EXRAD' in radname)&(flightDate == '20230123')):        
  for i, j in enumerate(gpsOut.keys()): ##for gps data       
    ##Create and populate a dataset for each key
    f.create_dataset('gps/' + j,     data = gpsOut[j][:])

    ##Add a description
    f['gps'].attrs['description'] = Params['GPS_Description']

    ##Add Units/Descriptions based on attrs subroutine
    if j in gpsUnits.keys():        f['gps/' + j].attrs['units'      ] = gpsUnits       [j]
    else:                           f['gps/' + j].attrs['units'      ] = ''
    if j in gpsDescriptions.keys(): f['gps/' + j].attrs['description'] = gpsDescriptions[j]
    else:                           f['gps/' + j].attrs['description'] = ''
#endfor i

for i, j in enumerate(navOut.keys()): ##for nav data

    ##Create and populate a dataset for each key
    f.create_dataset('nav/' + j,     data = navOut[j][:])

    ##Add a description
    f['nav'].attrs['description'] = Params['NAV_Description']

    ##Add Units/Descriptions based on attrs subroutine
    if j in navUnits.keys():        f['nav/' + j].attrs['units'      ] = navUnits       [j]
    else:                           f['nav/' + j].attrs['units'      ] = ''
    if j in navDescriptions.keys(): f['nav/' + j].attrs['description'] = navDescriptions[j]
    else:                           f['nav/' + j].attrs['description'] = ''
#endfor i

for i, j in enumerate(hkpOut.keys()): ##for hkp data
    
    ##Create and populate a dataset for each key
    f.create_dataset('hkp/' + j,     data = hkpOut[j][:])

    ##Add a description
    f['hkp'].attrs['description'] = Params['HKP_Description']

    ##Add Units/Descriptions based on attrs subroutine
    if j in hkpUnits.keys():        f['hkp/' + j].attrs['units'      ] = hkpUnits       [j]
    else:                           f['hkp/' + j].attrs['units'      ] = ''
    if j in hkpDescriptions.keys(): f['hkp/' + j].attrs['description'] = hkpDescriptions[j]
    else:                           f['hkp/' + j].attrs['description'] = ''
#endfor i

if radname == 'EXRAD_SCAN':
    for i, j in enumerate(antOut.keys()): ##for nav data
    
        ##Create and populate a dataset for each key
        f.create_dataset('ant/' + j,     data = antOut[j][:])
f.close() #close the file

    
