isce2
isce2 copied to clipboard
Issue with unpackFrame_ENV for using strimapApp Envisat
As the title suggest, i was trying to unpack Envisat (*.N1) format into slc using unpackFrame_ENV for stripmapApp. However, the unpack crash due to _dopplerCoeffs in /contrib/stack/stripmapStack/unpackFrame_ENV.py does not exist! i tried to replace _dopplerCoeffs with obj.dopplerRangeTime as seen below but i couldnt understand the rest of the code. if theres anything wrong please correct me or suggest anything if possible. thanks in advance
#!/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')
parser.add_argument('-r','--orbit', dest='orbitDir', type=str,
required=True, help='orbit Envisat directory')
parser.add_argument('-x','--instrument', dest='instrumentDir', type=str,
required=True, help='instrument Envisat directory')
return parser.parse_args()
def unpack(hdf5, slcname, orbitDir, instrumentDir):
'''
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 = orbitDir #'/home/xz/aux/orbits/esa/envisat/vor'
obj.instrumentDir = instrumentDir #'/home/xz/aux/aux/esa/envisat/ASA_INS_AX'
obj.output = os.path.join(slcname, date+'.slc')
obj.extractImage()
obj.frame.getImage().renderHdr()
######Numpy polynomial manipulation
#pc = obj._dopplerCoeffs[::-1] old line
#pc = obj.dopplerRangeTime[::-1] i used this or the one below it
pc = obj._imageryFileData['doppler'][::-1]
inds = np.linspace(0, obj.frame.numberOfSamples-1, len(pc))+1
rng = obj.frame.getStartingRange() + inds * obj.frame.instrument.getRangePixelSize()
dops = np.polyval(pc, 2*rng/Const.c-obj.dopplerRangeTime)
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]
if inps.orbitDir.endswith('/'):
inps.h5dir = inps.h5dir[:-1]
if inps.instrumentDir.endswith('/'):
inps.h5dir = inps.h5dir[:-1]
unpack(inps.h5dir, inps.slcdir, inps.orbitDir, inps.instrumentDir)
Hello, in case you didn't find a solution I followed the instructions of vittorio3d and the code now works for me! https://github.com/isce-framework/isce2/discussions/488#discussioncomment-3482353