ISCE_INSAR/components/isceobj/InsarProc/runPreprocessor.py

185 lines
8.4 KiB
Python
Raw Normal View History

2019-01-16 19:40:08 +00:00
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Copyright 2012 California Institute of Technology. ALL RIGHTS RESERVED.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# United States Government Sponsorship acknowledged. This software is subject to
# U.S. export control laws and regulations and has been classified as 'EAR99 NLR'
# (No [Export] License Required except when exporting to an embargoed country,
# end user, or in support of a prohibited end use). By downloading this software,
# the user agrees to comply with all applicable U.S. export laws and regulations.
# The user has the responsibility to obtain export licenses, or other export
# authority as may be required before exporting this software to any 'EAR99'
# embargoed foreign country or citizen of those countries.
#
# Author: Brett George
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import logging
import isceobj
import mroipac
from mroipac.baseline.Baseline import Baseline
from isceobj.Util.decorators import use_api
logger = logging.getLogger('isce.insar.runPreprocessor')
@use_api
def runPreprocessor(self):
reference = make_raw(self.reference, self.referencedop)
self.insar.rawReferenceIQImage = reference.iqImage
secondary = make_raw(self.secondary, self.secondarydop)
self.insar.rawSecondaryIQImage = secondary.iqImage
self._insar.numberRangeBins = reference.frame.numberRangeBins
2019-01-16 19:40:08 +00:00
#add raw images to main object
referenceRaw = initRawImage(reference)
self._insar.setReferenceRawImage(referenceRaw)
secondaryRaw = initRawImage(secondary)
self._insar.setSecondaryRawImage(secondaryRaw)
2019-01-16 19:40:08 +00:00
#add frames to main object
self._insar.setReferenceFrame(reference.frame)
self._insar.setSecondaryFrame(secondary.frame)
2019-01-16 19:40:08 +00:00
#add doppler to main object
self._insar.setReferenceDoppler(reference.getDopplerValues())
self._insar.setSecondaryDoppler(secondary.getDopplerValues())
2019-01-16 19:40:08 +00:00
#add squints to main object
self._insar.setReferenceSquint(reference.getSquint())
self._insar.setSecondarySquint(secondary.getSquint())
2019-01-16 19:40:08 +00:00
#add look direction
self._insar.setLookSide(reference.frame.getInstrument().getPlatform().pointingDirection)
2019-01-16 19:40:08 +00:00
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
frame = self._insar.getReferenceFrame()
2019-01-16 19:40:08 +00:00
instrument = frame.getInstrument()
platform = instrument.getPlatform()
planet = platform.getPlanet()
catalog.addInputsFrom(planet, 'planet')
catalog.addInputsFrom(planet.get_elp(), 'planet.ellipsoid')
catalog.addInputsFrom(reference.sensor, 'reference.sensor')
catalog.addItem('width', referenceRaw.getWidth(), 'reference')
catalog.addItem('xmin', referenceRaw.getXmin(), 'reference')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'reference')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'reference')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'reference')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'reference')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'reference')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'reference')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'reference')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'reference')
catalog.addItem('lookSide', platform.pointingDirection, 'reference')
catalog.addInputsFrom(frame, 'reference.frame')
catalog.addInputsFrom(instrument, 'reference.instrument')
catalog.addInputsFrom(platform, 'reference.platform')
catalog.addInputsFrom(frame.orbit, 'reference.orbit')
frame = self._insar.getSecondaryFrame()
2019-01-16 19:40:08 +00:00
instrument = frame.getInstrument()
platform = instrument.getPlatform()
catalog.addInputsFrom(secondary.sensor, 'secondary.sensor')
catalog.addItem('width', secondaryRaw.getWidth(), 'secondary')
catalog.addItem('xmin', secondaryRaw.getXmin(), 'secondary')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'secondary')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'secondary')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'secondary')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'secondary')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'secondary')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'secondary')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'secondary')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'secondary')
catalog.addItem('lookSide', platform.pointingDirection, 'secondary')
catalog.addInputsFrom(frame, 'secondary.frame')
catalog.addInputsFrom(instrument, 'secondary.instrument')
catalog.addInputsFrom(platform, 'secondary.platform')
catalog.addInputsFrom(frame.orbit, 'secondary.orbit')
2019-01-16 19:40:08 +00:00
optlist = ['all', 'top', 'middle', 'bottom']
success=False
baseLocation = None
for option in optlist:
baseObj = Baseline()
baseObj.configure()
baseObj.baselineLocation = option
baseObj.wireInputPort(name='referenceFrame',object=self._insar.getReferenceFrame())
baseObj.wireInputPort(name='secondaryFrame',object=self._insar.getSecondaryFrame())
2019-01-16 19:40:08 +00:00
try:
baseObj.baseline()
success=True
baseLocation=option
except:
print('Baseline computation with option {0} Failed'.format(option))
pass
if success:
break
if not success:
raise Exception('Baseline computation failed with all possible options. Images may not overlap.')
catalog.addItem('horizontal_baseline_top', baseObj.hBaselineTop, 'baseline')
catalog.addItem('horizontal_baseline_rate', baseObj.hBaselineRate, 'baseline')
catalog.addItem('horizontal_baseline_acc', baseObj.hBaselineAcc, 'baseline')
catalog.addItem('vertical_baseline_top', baseObj.vBaselineTop, 'baseline')
catalog.addItem('vertical_baseline_rate', baseObj.vBaselineRate, 'baseline')
catalog.addItem('vertical_baseline_acc', baseObj.vBaselineAcc, 'baseline')
catalog.addItem('perp_baseline_top', baseObj.pBaselineTop, 'baseline')
catalog.addItem('perp_baseline_bottom', baseObj.pBaselineBottom, 'baseline')
catalog.addItem('baseline_location', baseLocation, 'baseline')
catalog.printToLog(logger, "runPreprocessor")
self._insar.procDoc.addAllFromCatalog(catalog)
def make_raw(sensor, doppler):
from make_raw import make_raw
objMakeRaw = make_raw()
objMakeRaw(sensor=sensor, doppler=doppler)
return objMakeRaw
def initRawImage(makeRawObj):
from isceobj.Image import createSlcImage
from isceobj.Image import createRawImage
#the "raw" image in same case is an slc.
#for now let's do it in this way. probably need to make this a factory
#instantiated based on the sensor type
imageType = makeRawObj.frame.getImage()
if isinstance(imageType, createRawImage().__class__):
filename = makeRawObj.frame.getImage().getFilename()
bytesPerLine = makeRawObj.frame.getImage().getXmax()
goodBytes = makeRawObj.frame.getImage().getXmax() - makeRawObj.frame.getImage().getXmin()
logger.debug("bytes_per_line: %s" % (bytesPerLine))
logger.debug("good_bytes_per_line: %s" % (goodBytes))
objRaw = createRawImage()
objRaw.setFilename(filename)
objRaw.setNumberGoodBytes(goodBytes)
objRaw.setWidth(bytesPerLine)
objRaw.setXmin(makeRawObj.frame.getImage().getXmin())
objRaw.setXmax(bytesPerLine)
elif(isinstance(imageType,createSlcImage().__class__)):
objRaw = createSlcImage()
filename = makeRawObj.frame.getImage().getFilename()
bytesPerLine = makeRawObj.frame.getImage().getXmax()
objRaw.setFilename(filename)
objRaw.setWidth(bytesPerLine)
objRaw.setXmin(makeRawObj.frame.getImage().getXmin())
objRaw.setXmax(bytesPerLine)
return objRaw