ISCE_INSAR/components/isceobj/Alos2burstProc/runCoregGeom.py

143 lines
6.6 KiB
Python

#
# Author: Cunren Liang
# Copyright 2015-present, NASA-JPL/Caltech
#
import os
import logging
import isceobj
from isceobj.Alos2Proc.runRdr2Geo import topoCPU
from isceobj.Alos2Proc.runRdr2Geo import topoGPU
from isceobj.Alos2Proc.runGeo2Rdr import geo2RdrCPU
from isceobj.Alos2Proc.runGeo2Rdr import geo2RdrGPU
from isceobj.Alos2Proc.Alos2ProcPublic import waterBodyRadar
from isceobj.Alos2Proc.Alos2ProcPublic import resampleBursts
from isceobj.Alos2Proc.Alos2ProcPublic import mosaicBurstAmplitude
from isceobj.Alos2Proc.Alos2ProcPublic import mosaicBurstInterferogram
logger = logging.getLogger('isce.alos2burstinsar.runCoregGeom')
def runCoregGeom(self):
'''compute geometric offset
'''
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.dem)
wbdFile = os.path.abspath(self._insar.wbd)
###############################################################################
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
swathDir = 's{}'.format(swathNumber)
os.chdir(swathDir)
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
##################################################
# compute geometric offsets
##################################################
#set up track parameters just for computing offsets
#ALL track parameters are listed here
#reference
#referenceTrack.passDirection =
#referenceTrack.pointingDirection =
#referenceTrack.operationMode =
#referenceTrack.radarWavelength =
referenceTrack.numberOfSamples = referenceSwath.numberOfSamples
referenceTrack.numberOfLines = referenceSwath.numberOfLines
referenceTrack.startingRange = referenceSwath.startingRange
#referenceTrack.rangeSamplingRate =
referenceTrack.rangePixelSize = referenceSwath.rangePixelSize
referenceTrack.sensingStart = referenceSwath.sensingStart
#referenceTrack.prf =
#referenceTrack.azimuthPixelSize =
referenceTrack.azimuthLineInterval = referenceSwath.azimuthLineInterval
#referenceTrack.dopplerVsPixel =
#referenceTrack.frames =
#referenceTrack.orbit =
#secondary
secondaryTrack.numberOfSamples = secondarySwath.numberOfSamples
secondaryTrack.numberOfLines = secondarySwath.numberOfLines
secondaryTrack.startingRange = secondarySwath.startingRange
secondaryTrack.rangePixelSize = secondarySwath.rangePixelSize
secondaryTrack.sensingStart = secondarySwath.sensingStart
secondaryTrack.azimuthLineInterval = secondarySwath.azimuthLineInterval
if self.useGPU and self._insar.hasGPU():
topoGPU(referenceTrack, 1, 1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
geo2RdrGPU(secondaryTrack, 1, 1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
else:
topoCPU(referenceTrack, 1, 1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
geo2RdrCPU(secondaryTrack, 1, 1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
#clear up, leaving only range/azimuth offsets
os.remove(self._insar.latitude)
os.remove(self._insar.latitude+'.vrt')
os.remove(self._insar.latitude+'.xml')
os.remove(self._insar.longitude)
os.remove(self._insar.longitude+'.vrt')
os.remove(self._insar.longitude+'.xml')
os.remove(self._insar.height)
os.remove(self._insar.height+'.vrt')
os.remove(self._insar.height+'.xml')
os.remove(self._insar.los)
os.remove(self._insar.los+'.vrt')
os.remove(self._insar.los+'.xml')
##################################################
# resample bursts
##################################################
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_1_coreg_geom'
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_1_coreg_geom'
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(referenceSwath, secondarySwath,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0)
##################################################
# mosaic burst amplitudes and interferograms
##################################################
os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
#the interferogram is not good enough, do not mosaic
mosaic=False
if mosaic:
os.chdir(interferogramDir)
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../')
os.chdir('../')
os.chdir('../')
###############################################################################
catalog.printToLog(logger, "runCoregGeom")
self._insar.procDoc.addAllFromCatalog(catalog)