116 lines
3.4 KiB
Python
116 lines
3.4 KiB
Python
|
#!/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
|
||
|
from mroipac.dopiq.DopIQ import DopIQ
|
||
|
import copy
|
||
|
|
||
|
def cmdLineParse():
|
||
|
'''
|
||
|
Command line parser.
|
||
|
'''
|
||
|
|
||
|
parser = argparse.ArgumentParser(description='Unpack CSK SLC data and store metadata in pickle file.')
|
||
|
parser.add_argument('-i','--input', dest='h5dir', type=str,
|
||
|
required=True, help='Input CSK directory')
|
||
|
parser.add_argument('-o', '--output', dest='slcdir', type=str,
|
||
|
required=True, help='Output SLC directory')
|
||
|
parser.add_argument('-m', '--mult', dest='multiple', action='store_true',
|
||
|
default=False, help='If stitching multiple frames')
|
||
|
parser.add_Argument('-t', '--type', dest='orbtype', type=str, default='PRC',
|
||
|
help='Orbit Type - PRC or ODR')
|
||
|
|
||
|
return parser.parse_args()
|
||
|
|
||
|
|
||
|
def unpack(hdf5, slcname,multiple=False,orbtype='PRC'):
|
||
|
'''
|
||
|
Unpack HDF5 to binary SLC file.
|
||
|
'''
|
||
|
|
||
|
if multiple:
|
||
|
print('Trying multiple sub-dirs - ESA convention ...')
|
||
|
imgname = glob.glob(os.path.join(hdf5, '*', 'DAT*'))
|
||
|
ldrname = glob.glob(os.path.join(hdf5, '*', 'LEA*'))
|
||
|
|
||
|
if (len(imgname)==0) or (len(ldrname) == 0):
|
||
|
print('Did not find ESA style files in sub-dirs. Trying RPAC style in sub-dirs ....')
|
||
|
imgname = glob.glob(os.path.join(hdf5, '*', 'IMA*'))
|
||
|
ldrname = glob.glob(os.path.join(hdf5, '*', 'SAR*'))
|
||
|
|
||
|
if (len(imgname)==0) or (len(ldrname) == 0):
|
||
|
print('Did not find RPAC style files in sub-dirs. Trying RPAC style in same-dir ....')
|
||
|
imgname = glob.glob(os.path.join(hdf5, 'IMA*'))
|
||
|
ldrname = glob.glob(os.path.join(hdf5, 'SAR*'))
|
||
|
|
||
|
else:
|
||
|
imgname = [glob.glob(os.path.join(hdf5,'DAT*'))[0]]
|
||
|
ldrname = [glob.glob(os.path.join(hdf5,'LEA*'))[0]]
|
||
|
|
||
|
if not os.path.isdir(slcname):
|
||
|
os.mkdir(slcname)
|
||
|
|
||
|
date = os.path.basename(slcname)
|
||
|
obj = createSensor('ERS')
|
||
|
obj.configure()
|
||
|
obj._imageFileList = imgname
|
||
|
obj._leaderFileList = ldrname
|
||
|
|
||
|
####Need to figure out 1/2 automatically also
|
||
|
if orbtype == 'ODR':
|
||
|
obj._orbitType = 'ODR'
|
||
|
obj._orbitDir = '/Users/agram/orbit/ODR/ERS1'
|
||
|
|
||
|
if orbtype == 'PRC':
|
||
|
obj._orbitType = 'PRC'
|
||
|
obj._orbitDir = '/Users/agram/orbit/PRC/ERS1'
|
||
|
|
||
|
obj.output = os.path.join(slcname, date+'.raw')
|
||
|
|
||
|
obj.extractImage()
|
||
|
obj.frame.getImage().renderHdr()
|
||
|
|
||
|
|
||
|
#####Estimate doppler
|
||
|
dop = DopIQ()
|
||
|
dop.configure()
|
||
|
|
||
|
img = copy.deepcopy(obj.frame.getImage())
|
||
|
img.setAccessMode('READ')
|
||
|
|
||
|
dop.wireInputPort('frame', object=obj.frame)
|
||
|
dop.wireInputPort('instrument', object=obj.frame.instrument)
|
||
|
dop.wireInputPort('image', object=img)
|
||
|
dop.calculateDoppler()
|
||
|
dop.fitDoppler()
|
||
|
fit = dop.quadratic
|
||
|
coef = [fit['a'], fit['b'], fit['c']]
|
||
|
|
||
|
print(coef)
|
||
|
obj.frame._dopplerVsPixel = [x*obj.frame.PRF for x in coef]
|
||
|
|
||
|
pickName = os.path.join(slcname, 'raw')
|
||
|
with shelve.open(pickName) as db:
|
||
|
db['frame'] = obj.frame
|
||
|
|
||
|
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,
|
||
|
multiple=inps.multiple, orbtype=inps.orbtype)
|