ISCE_INSAR/contrib/stack/stripmapStack/unpackFrame_ENV.py

96 lines
2.5 KiB
Python
Raw Normal View History

2019-01-16 19:40:08 +00:00
#!/usr/bin/env python3
import isce
from isceobj.Sensor import createSensor
import shelve
import argparse
import glob
from isceobj.Util import Poly1D
from isceobj.Planet.AstronomicalHandbook import Const
import os
import datetime
import numpy as np
def cmdLineParse():
'''
Command line parser.
'''
parser = argparse.ArgumentParser(description='Unpack Envisat SLC data and store metadata in pickle file.')
parser.add_argument('-i','--input', dest='h5dir', type=str,
required=True, help='Input Envisat directory')
parser.add_argument('-o', '--output', dest='slcdir', type=str,
required=True, help='Output SLC directory')
return parser.parse_args()
def unpack(hdf5, slcname):
'''
Unpack HDF5 to binary SLC file.
'''
fname = glob.glob(os.path.join(hdf5,'ASA*.N1'))[0]
if not os.path.isdir(slcname):
os.mkdir(slcname)
date = os.path.basename(slcname)
obj = createSensor('ENVISAT_SLC')
obj._imageFileName = fname
obj.orbitDir = '/Users/agram/orbit/VOR'
obj.instrumentDir = '/Users/agram/orbit/INS_DIR'
obj.output = os.path.join(slcname, date+'.slc')
obj.extractImage()
obj.frame.getImage().renderHdr()
######Numpy polynomial manipulation
pc = obj._dopplerCoeffs[::-1]
inds = np.linspace(0, obj.frame.numberOfSamples-1, len(pc) + 1)+1
rng = obj.frame.getStartingRange() + inds * obj.frame.instrument.getRangePixelSize()
dops = np.polyval(pc, 2*rng/Const.c-obj._dopplerTime)
print('Near range doppler: ', dops[0])
print('Far range doppler: ', dops[-1])
dopfit = np.polyfit(inds, dops, len(pc)-1)
poly = Poly1D.Poly1D()
poly.initPoly(order=len(pc)-1)
poly.setCoeffs(dopfit[::-1])
print('Poly near range doppler: ', poly(1))
print('Poly far range doppler: ', poly(obj.frame.numberOfSamples))
# width = obj.frame.getImage().getWidth()
# midrange = r0 + 0.5 * width * dr
# dt = datetime.timedelta(seconds = midrange / Const.c)
# obj.frame.sensingStart = obj.frame.sensingStart - dt
# obj.frame.sensingStop = obj.frame.sensingStop - dt
# obj.frame.sensingMid = obj.frame.sensingMid - dt
pickName = os.path.join(slcname, 'data')
with shelve.open(pickName) as db:
db['frame'] = obj.frame
db['doppler'] = poly
if __name__ == '__main__':
'''
Main driver.
'''
inps = cmdLineParse()
if inps.slcdir.endswith('/'):
inps.slcdir = inps.slcdir[:-1]
if inps.h5dir.endswith('/'):
inps.h5dir = inps.h5dir[:-1]
unpack(inps.h5dir, inps.slcdir)