Exemplo n.º 1
0
def topo(swath,
         track,
         demFile,
         latFile,
         lonFile,
         hgtFile,
         losFile=None,
         incFile=None,
         mskFile=None,
         numberRangeLooks=1,
         numberAzimuthLooks=1,
         multilookTimeOffset=True):
    import datetime
    import isceobj
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    pointingDirection = {'right': -1, 'left': 1}

    demImage = isceobj.createDemImage()
    demImage.load(demFile + '.xml')
    demImage.setAccessMode('read')

    #####Run Topo
    planet = Planet(pname='Earth')
    topo = createTopozero()
    topo.slantRangePixelSpacing = numberRangeLooks * swath.rangePixelSize
    topo.prf = 1.0 / (numberAzimuthLooks * swath.azimuthLineInterval)
    topo.radarWavelength = track.radarWavelength
    topo.orbit = track.orbit
    topo.width = int(swath.numberOfSamples / numberRangeLooks)
    topo.length = int(swath.numberOfLines / numberAzimuthLooks)
    topo.wireInputPort(name='dem', object=demImage)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1  #must be set as 1
    topo.numberAzimuthLooks = 1  #must be set as 1 Cunren
    topo.lookSide = pointingDirection[track.pointingDirection]
    if multilookTimeOffset == True:
        topo.sensingStart = swath.sensingStart + datetime.timedelta(
            seconds=(numberAzimuthLooks - 1.0) / 2.0 / swath.prf)
        topo.rangeFirstSample = swath.startingRange + (
            numberRangeLooks - 1.0) / 2.0 * swath.rangePixelSize
    else:
        topo.sensingStart = swath.sensingStart
        topo.rangeFirstSample = swath.startingRange
    topo.demInterpolationMethod = 'BIQUINTIC'

    topo.latFilename = latFile
    topo.lonFilename = lonFile
    topo.heightFilename = hgtFile
    if losFile != None:
        topo.losFilename = losFile
    if incFile != None:
        topo.incFilename = incFile
    if mskFile != None:
        topo.maskFilename = mskFile

    topo.topo()

    return list(topo.snwe)
Exemplo n.º 2
0
def runTopoCPU(info, demImage, dop=None, nativedop=False, legendre=False):
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    if not os.path.isdir(info.outdir):
        os.makedirs(info.outdir)

    #####Run Topo
    planet = Planet(pname='Earth')
    topo = createTopozero()
    topo.slantRangePixelSpacing = info.slantRangePixelSpacing
    topo.prf = info.prf
    topo.radarWavelength = info.radarWavelength
    topo.orbit = info.orbit
    topo.width = info.width // info.numberRangeLooks
    topo.length = info.length // info.numberAzimuthLooks
    topo.wireInputPort(name='dem', object=demImage)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = info.numberRangeLooks
    topo.numberAzimuthLooks = info.numberAzimuthLooks
    topo.lookSide = info.lookSide
    topo.sensingStart = info.sensingStart + datetime.timedelta(seconds=(
        (info.numberAzimuthLooks - 1) / 2) / info.prf)
    topo.rangeFirstSample = info.rangeFirstSample + (
        (info.numberRangeLooks - 1) / 2) * info.slantRangePixelSpacing

    topo.demInterpolationMethod = 'BIQUINTIC'
    if legendre:
        topo.orbitInterpolationMethod = 'LEGENDRE'

    topo.latFilename = info.latFilename
    topo.lonFilename = info.lonFilename
    topo.losFilename = info.losFilename
    topo.heightFilename = info.heightFilename
    topo.incFilename = info.incFilename
    topo.maskFilename = info.maskFilename

    if nativedop and (dop is not None):

        try:
            coeffs = dop._coeffs
        except:
            coeffs = dop

        doppler = Poly2D()
        doppler.setWidth(info.width // info.numberRangeLooks)
        doppler.setLength(info.length // info.numberAzimuthLooks)
        doppler.initPoly(rangeOrder=len(coeffs) - 1,
                         azimuthOrder=0,
                         coeffs=[coeffs])
    else:
        print('Zero doppler')
        doppler = None

    topo.polyDoppler = doppler
    topo.topo()
    return
Exemplo n.º 3
0
def create_georectified_lat_lon(swathList, reference, outdir, demZero,
                                load_function):
    """ export geo rectified latitude and longitude """

    for swath in swathList:
        reference = load_function(
            os.path.join(reference, 'IW{0}.xml'.format(swath)))

        ###Check if geometry directory already exists.
        dirname = os.path.join(outdir, 'IW{0}'.format(swath))

        if os.path.isdir(dirname):
            print('Geometry directory {0} already exists.'.format(dirname))
        else:
            os.makedirs(dirname)

        ###For each burst
        for ind in range(reference.numberOfBursts):
            burst = reference.bursts[ind]

            latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1))
            lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1))
            hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1))
            losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1))

            if not (os.path.exists(latname + '.xml')
                    or os.path.exists(lonname + '.xml')):

                #####Run Topo
                planet = Planet(pname='Earth')
                topo = createTopozero()
                topo.slantRangePixelSpacing = burst.rangePixelSize
                topo.prf = 1.0 / burst.azimuthTimeInterval
                topo.radarWavelength = burst.radarWavelength
                topo.orbit = burst.orbit
                topo.width = burst.numberOfSamples
                topo.length = burst.numberOfLines
                topo.wireInputPort(name='dem', object=demZero)
                topo.wireInputPort(name='planet', object=planet)
                topo.numberRangeLooks = 1
                topo.numberAzimuthLooks = 1
                topo.lookSide = -1
                topo.sensingStart = burst.sensingStart
                topo.rangeFirstSample = burst.startingRange
                topo.demInterpolationMethod = 'BIQUINTIC'
                topo.latFilename = latname
                topo.lonFilename = lonname
                topo.heightFilename = hgtname
                topo.losFilename = losname

                topo.topo()
    return
Exemplo n.º 4
0
def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile,
            latFile, lonFile, hgtFile, losFile):
    import datetime
    import isceobj
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    pointingDirection = {'right': -1, 'left': 1}

    demImage = isceobj.createDemImage()
    demImage.load(demFile + '.xml')
    demImage.setAccessMode('read')

    planet = Planet(pname='Earth')

    topo = createTopozero()
    topo.slantRangePixelSpacing = numberRangeLooks * masterTrack.rangePixelSize
    topo.prf = 1.0 / (numberAzimuthLooks * masterTrack.azimuthLineInterval)
    topo.radarWavelength = masterTrack.radarWavelength
    topo.orbit = masterTrack.orbit
    topo.width = masterTrack.numberOfSamples
    topo.length = masterTrack.numberOfLines
    topo.wireInputPort(name='dem', object=demImage)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1  #must be set as 1
    topo.numberAzimuthLooks = 1  #must be set as 1 Cunren
    topo.lookSide = pointingDirection[masterTrack.pointingDirection]
    topo.sensingStart = masterTrack.sensingStart + datetime.timedelta(
        seconds=(numberAzimuthLooks - 1.0) / 2.0 *
        masterTrack.azimuthLineInterval)
    topo.rangeFirstSample = masterTrack.startingRange + (
        numberRangeLooks - 1.0) / 2.0 * masterTrack.rangePixelSize
    topo.demInterpolationMethod = 'BIQUINTIC'

    topo.latFilename = latFile
    topo.lonFilename = lonFile
    topo.heightFilename = hgtFile
    topo.losFilename = losFile
    #topo.incFilename = incName
    #topo.maskFilename = mskName

    topo.topo()

    return list(topo.snwe)
Exemplo n.º 5
0
def call_topo(input):

    (dirname, demImage, master, ind) = input

    burst = master.bursts[ind]
    latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1))
    lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1))
    hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1))
    losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1))
    maskname = os.path.join(dirname, 'shadowMask_%02d.rdr' % (ind + 1))
    incname = os.path.join(dirname, 'incLocal_%02d.rdr' % (ind + 1))
    #####Run Topo
    planet = Planet(pname='Earth')
    topo = createTopozero()
    topo.slantRangePixelSpacing = burst.rangePixelSize
    topo.prf = 1.0 / burst.azimuthTimeInterval
    topo.radarWavelength = burst.radarWavelength
    topo.orbit = burst.orbit
    topo.width = burst.numberOfSamples
    topo.length = burst.numberOfLines
    topo.wireInputPort(name='dem', object=demImage)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = 1
    topo.lookSide = -1
    topo.sensingStart = burst.sensingStart
    topo.rangeFirstSample = burst.startingRange
    topo.demInterpolationMethod = 'BIQUINTIC'
    topo.latFilename = latname
    topo.lonFilename = lonname
    topo.heightFilename = hgtname
    topo.losFilename = losname
    topo.maskFilename = maskname
    topo.incFilename = incname
    topo.topo()

    bbox = [
        topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude,
        topo.maximumLongitude
    ]

    topo = None

    return bbox
Exemplo n.º 6
0
def runTopo(frame,
            demImage,
            latName='lat.rdr',
            lonName='lon.rdr',
            hgtName='z.rdr',
            losName='los.rdr',
            incName='inc.rdr',
            mskName='msk.rdr',
            offsetFromStart=0,
            numOfLines=100):
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    #####Run Topo
    planet = Planet(pname='Earth')
    topo = createTopozero()
    topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / frame.rangeSamplingRate
    topo.prf = frame.PRF  #!!!should be changed to azimuth time interval for burst mode
    topo.radarWavelength = frame.radarWavelegth
    topo.orbit = frame.getOrbit()
    topo.width = frame.getNumberOfSamples()
    #topo.length = frame.getNumberOfLines()
    topo.length = numOfLines
    topo.wireInputPort(name='dem', object=demImage)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1  #must be set as 1
    topo.numberAzimuthLooks = 1  #must be set as 1 Cunren
    #topo.lookSide = -1
    topo.lookSide = frame.getInstrument().getPlatform().pointingDirection
    topo.sensingStart = frame.getSensingStart() + datetime.timedelta(
        seconds=offsetFromStart * (1.0 / topo.prf))
    topo.rangeFirstSample = frame.startingRange
    topo.demInterpolationMethod = 'BIQUINTIC'

    topo.latFilename = latName
    topo.lonFilename = lonName
    topo.heightFilename = hgtName
    topo.losFilename = losName
    topo.incFilename = incName
    topo.maskFilename = mskName

    topo.topo()

    return list(topo.snwe)
Exemplo n.º 7
0
def runTopo(self):
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    swathList = self._insar.getValidSwathList(self.swaths)

    ####Catalog for logging
    catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)

    ####Load in DEM
    demfilename = self.verifyDEM()
    catalog.addItem('Dem Used', demfilename, 'topo')

    boxes = []
    for swath in swathList:
        #####Load the master product
        master = self._insar.loadProduct(
            os.path.join(self._insar.masterSlcProduct,
                         'IW{0}.xml'.format(swath)))

        numCommon = self._insar.numberOfCommonBursts[swath - 1]
        startIndex = self._insar.commonBurstStartMasterIndex[swath - 1]

        if numCommon > 0:
            catalog.addItem('Number of common bursts IW-{0}'.format(swath),
                            self._insar.numberOfCommonBursts[swath - 1],
                            'topo')

            ###Check if geometry directory already exists.
            dirname = os.path.join(self._insar.geometryDirname,
                                   'IW{0}'.format(swath))

            if os.path.isdir(dirname):
                logger.info(
                    'Geometry directory {0} already exists.'.format(dirname))
            else:
                os.makedirs(dirname)

            ###For each burst
            for index in range(numCommon):
                ind = index + startIndex
                burst = master.bursts[ind]

                latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1))
                lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1))
                hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1))
                losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1))
                incangname = os.path.join(dirname,
                                          'incang_%02d.rdr' % (ind + 1))

                demImage = isceobj.createDemImage()
                demImage.load(demfilename + '.xml')

                #####Run Topo
                planet = Planet(pname='Earth')
                topo = createTopozero()
                topo.slantRangePixelSpacing = burst.rangePixelSize
                topo.prf = 1.0 / burst.azimuthTimeInterval
                topo.radarWavelength = burst.radarWavelength
                topo.orbit = burst.orbit
                topo.width = burst.numberOfSamples
                topo.length = burst.numberOfLines
                topo.wireInputPort(name='dem', object=demImage)
                topo.wireInputPort(name='planet', object=planet)
                topo.numberRangeLooks = 1
                topo.numberAzimuthLooks = 1
                topo.lookSide = -1
                topo.sensingStart = burst.sensingStart
                topo.rangeFirstSample = burst.startingRange
                topo.demInterpolationMethod = 'BIQUINTIC'
                topo.latFilename = latname
                topo.lonFilename = lonname
                topo.heightFilename = hgtname
                topo.losFilename = losname
                topo.incFilename = incangname
                topo.topo()

                bbox = [
                    topo.minimumLatitude, topo.maximumLatitude,
                    topo.minimumLongitude, topo.maximumLongitude
                ]
                boxes.append(bbox)

                catalog.addItem(
                    'Number of lines for burst {0} - IW-{1}'.format(
                        index, swath), burst.numberOfLines, 'topo')
                catalog.addItem(
                    'Number of pixels for bursts {0} - IW-{1}'.format(
                        index, swath), burst.numberOfSamples, 'topo')
                catalog.addItem(
                    'Bounding box for burst {0} - IW-{1}'.format(index, swath),
                    bbox, 'topo')

        else:
            print('Skipping Processing for Swath {0}'.format(swath))

        topo = None

    boxes = np.array(boxes)
    bbox = [
        np.min(boxes[:, 0]),
        np.max(boxes[:, 1]),
        np.min(boxes[:, 2]),
        np.max(boxes[:, 3])
    ]
    catalog.addItem('Overall bounding box', bbox, 'topo')

    catalog.printToLog(logger, "runTopo")
    self._insar.procDoc.addAllFromCatalog(catalog)

    return
Exemplo n.º 8
0
def main(iargs=None):

    inps = cmdLineParse(iargs)

    swathList = ut.getSwathList(inps.master)

    demImage = isceobj.createDemImage()
    demImage.load(inps.dem + '.xml')

    boxes = []
    for swath in swathList:
        master =  ut.loadProduct(os.path.join(inps.master , 'IW{0}.xml'.format(swath)))
    
        ###Check if geometry directory already exists.
        dirname = os.path.join(inps.geom_masterDir, 'IW{0}'.format(swath))

        if os.path.isdir(dirname):
            print('Geometry directory {0} already exists.'.format(dirname))
        else:
            os.makedirs(dirname)


    ###For each burst
        for ind in range(master.numberOfBursts):
            burst = master.bursts[ind]

            latname = os.path.join(dirname, 'lat_%02d.rdr'%(ind+1))
            lonname = os.path.join(dirname, 'lon_%02d.rdr'%(ind+1))
            hgtname = os.path.join(dirname, 'hgt_%02d.rdr'%(ind+1))
            losname = os.path.join(dirname, 'los_%02d.rdr'%(ind+1))
            maskname = os.path.join(dirname, 'shadowMask_%02d.rdr'%(ind+1))
            incname = os.path.join(dirname, 'incLocal_%02d.rdr'%(ind+1))
        #####Run Topo
            planet = Planet(pname='Earth')
            topo = createTopozero()
            topo.slantRangePixelSpacing = burst.rangePixelSize
            topo.prf = 1.0/burst.azimuthTimeInterval
            topo.radarWavelength = burst.radarWavelength
            topo.orbit = burst.orbit
            topo.width = burst.numberOfSamples
            topo.length = burst.numberOfLines
            topo.wireInputPort(name='dem', object=demImage)
            topo.wireInputPort(name='planet', object=planet)
            topo.numberRangeLooks = 1
            topo.numberAzimuthLooks = 1
            topo.lookSide = -1
            topo.sensingStart = burst.sensingStart
            topo.rangeFirstSample = burst.startingRange
            topo.demInterpolationMethod='BIQUINTIC'
            topo.latFilename = latname
            topo.lonFilename = lonname
            topo.heightFilename = hgtname
            topo.losFilename = losname
            topo.maskFilename = maskname
            topo.incFilename = incname
            topo.topo()

            bbox = [topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude]
            boxes.append(bbox)

            topo = None

    boxes = np.array(boxes)
    bbox = [np.min(boxes[:,0]), np.max(boxes[:,1]), np.min(boxes[:,2]), np.max(boxes[:,3])]
    print ('bbox : ',bbox)
Exemplo n.º 9
0
def runTopo(self):
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    logger.info("Running topo")

    #IU.copyAttributes(demImage, objDem)
    geometryDir = self.insar.geometryDirname

    os.makedirs(geometryDir, exist_ok=True)

    demFilename = self.verifyDEM()
    objDem = isceobj.createDemImage()
    objDem.load(demFilename + '.xml')

    info = self._insar.loadProduct(self._insar.masterSlcCropProduct)
    intImage = info.getImage()

    planet = info.getInstrument().getPlatform().getPlanet()
    topo = createTopozero()

    topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / info.rangeSamplingRate
    topo.prf = info.PRF
    topo.radarWavelength = info.radarWavelegth
    topo.orbit = info.orbit
    topo.width = intImage.getWidth()
    topo.length = intImage.getLength()
    topo.wireInputPort(name='dem', object=objDem)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = 1
    topo.lookSide = info.getInstrument().getPlatform().pointingDirection
    topo.sensingStart = info.getSensingStart()
    topo.rangeFirstSample = info.startingRange

    topo.demInterpolationMethod = 'BIQUINTIC'
    topo.latFilename = os.path.join(geometryDir,
                                    self.insar.latFilename + '.full')
    topo.lonFilename = os.path.join(geometryDir,
                                    self.insar.lonFilename + '.full')
    topo.losFilename = os.path.join(geometryDir,
                                    self.insar.losFilename + '.full')
    topo.heightFilename = os.path.join(geometryDir,
                                       self.insar.heightFilename + '.full')
    #    topo.incFilename = os.path.join(info.outdir, 'inc.rdr')
    #    topo.maskFilename = os.path.join(info.outdir, 'mask.rdr')

    ####Doppler adjustment
    dop = [x / 1.0 for x in info._dopplerVsPixel]

    doppler = Poly2D()
    doppler.setWidth(topo.width // topo.numberRangeLooks)
    doppler.setLength(topo.length // topo.numberAzimuthLooks)

    if self._insar.masterGeometrySystem.lower().startswith('native'):
        doppler.initPoly(rangeOrder=len(dop) - 1, azimuthOrder=0, coeffs=[dop])
    else:
        doppler.initPoly(rangeOrder=0, azimuthOrder=0, coeffs=[[0.]])

    topo.polyDoppler = doppler

    topo.topo()

    # Record the inputs and outputs
    from isceobj.Catalog import recordInputsAndOutputs
    recordInputsAndOutputs(self._insar.procDoc, topo, "runTopo", logger,
                           "runTopo")

    self._insar.estimatedBbox = [
        topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude,
        topo.maximumLongitude
    ]
    return topo
Exemplo n.º 10
0
def runTopo(self):
    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    logger.info("Running topo")

    #IU.copyAttributes(demImage, objDem)
    objDem = self.insar.demImage.clone()

    info = self.insar.masterFrame
    slc = self.insar.formSLC1
    intImage = slc.slcImage


    planet = info.getInstrument().getPlatform().getPlanet()
    topo = createTopozero()

    topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / info.rangeSamplingRate
    topo.prf = info.PRF
    topo.radarWavelength = info.radarWavelegth
    topo.orbit = info.orbit
    topo.width = intImage.getWidth()
    topo.length = intImage.getLength()
    topo.wireInputPort(name='dem', object=objDem)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = 1
    topo.lookSide = info.getInstrument().getPlatform().pointingDirection
    topo.sensingStart = slc.slcSensingStart 
    topo.rangeFirstSample = slc.startingRange

    topo.demInterpolationMethod='BIQUINTIC'
    topo.latFilename = self.insar.latFilename
    topo.lonFilename = self.insar.lonFilename
    topo.losFilename = self.insar.losFilename
    topo.heightFilename = self.insar.heightFilename
#    topo.incFilename = os.path.join(info.outdir, 'inc.rdr')
#    topo.maskFilename = os.path.join(info.outdir, 'mask.rdr')


    ####Doppler adjustment
    dop = info._dopplerVsPixel[::-1]
    xx = np.linspace(0, (topo.width-1), num=len(dop)+ 1)
    x = (topo.rangeFirstSample - info.startingRange)/topo.slantRangePixelSpacing + xx * topo.numberRangeLooks
    v = np.polyval(dop, x)
    p = np.polyfit(xx, v, len(dop)-1)[::-1]

    doppler = Poly2D()
    doppler.setWidth(topo.width)
    doppler.setLength(topo.length)
    doppler.initPoly(rangeOrder = len(dop)-1, azimuthOrder=0, coeffs=[list(p)])

    topo.polyDoppler = doppler

    topo.topo()


    # Record the inputs and outputs
    from isceobj.Catalog import recordInputsAndOutputs
    recordInputsAndOutputs(self._insar.procDoc, topo, "runTopo",
                           logger, "runTopo")

    self._insar.setTopo(topo)

    return topo
Exemplo n.º 11
0
def runTopo(self, method='legendre'):

    from zerodop.topozero import createTopozero
    from isceobj.Planet.Planet import Planet

    refPol = self._grd.polarizations[0]
    reference = self._grd.loadProduct(
        os.path.join(self._grd.outputFolder, 'beta_{0}.xml'.format(refPol)))

    azlooks, rglooks = self._grd.getLooks(self.posting,
                                          reference.azimuthPixelSize,
                                          reference.groundRangePixelSize,
                                          self.numberAzimuthLooks,
                                          self.numberRangeLooks)

    if (azlooks == 1) and (rglooks == 1):
        rangeName = reference.slantRangeImage.filename

    else:
        rangeName = filenameWithLooks(reference.slantRangeImage.filename,
                                      azlooks, rglooks)

    print('Range name : ', rangeName)
    ####Dem name
    demname = self.verifyDEM()
    print('DEM name: ', demname)
    demImg = isceobj.createDemImage()
    demImg.load(demname + '.xml')

    os.makedirs(self._grd.geometryFolder, exist_ok=True)

    #####Run Topo
    planet = Planet(pname='Earth')
    topo = createTopozero()
    topo.prf = 1.0 / reference.azimuthTimeInterval
    topo.radarWavelength = reference.radarWavelength
    topo.orbit = reference.orbit
    topo.width = reference.numberOfSamples // rglooks
    topo.length = reference.numberOfLines // azlooks
    topo.wireInputPort(name='dem', object=demImg)
    topo.wireInputPort(name='planet', object=planet)
    topo.numberRangeLooks = 1
    topo.numberAzimuthLooks = azlooks
    topo.lookSide = reference.side
    topo.sensingStart = reference.sensingStart + datetime.timedelta(seconds=(
        (azlooks - 1) / 2) * reference.azimuthTimeInterval)
    topo.slantRangeFilename = rangeName

    topo.demInterpolationMethod = 'BIQUINTIC'
    topo.orbitInterpolationMethod = method.upper()

    topo.latFilename = os.path.join(self._grd.geometryFolder, 'lat.rdr')
    topo.lonFilename = os.path.join(self._grd.geometryFolder, 'lon.rdr')
    topo.heightFilename = os.path.join(self._grd.geometryFolder, 'z.rdr')
    topo.losFilename = os.path.join(self._grd.geometryFolder,
                                    self._grd.losFileName)
    topo.incFilename = os.path.join(self._grd.geometryFolder,
                                    self._grd.incFileName)
    topo.maskFilename = os.path.join(self._grd.geometryFolder,
                                     self._grd.slMaskFileName)
    topo.slantRangeFilename = rangeName

    topo.topo()

    runSimamp(self._grd.geometryFolder)

    return