def runOrbit2sch_new(self):
    from isceobj.Catalog import recordInputsAndOutputs
    logger.info("Converting the orbit to SCH coordinates")
    pegHAvg = self.insar.averageHeight
    peg = self.insar.peg
    planet = self.insar.planet

    masterOrbit = self.insar.masterOrbit
    slaveOrbit = self.insar.slaveOrbit

    objOrbit2sch1 = stdproc.createOrbit2sch(averageHeight=pegHAvg)
    objOrbit2sch1.stdWriter = self.stdWriter.set_file_tags(
        "orbit2sch", "log", "err", "log")
    objOrbit2sch2 = stdproc.createOrbit2sch(averageHeight=pegHAvg)
    objOrbit2sch2.stdWriter = self.stdWriter

    ## loop over master/slave orbits
    for obj, orb, tag in zip((objOrbit2sch1, objOrbit2sch2),
                             (self.insar.masterOrbit, self.insar.slaveOrbit),
                             ('master', 'slave')):
        obj(planet=planet, orbit=orb, peg=peg)
        recordInputsAndOutputs(self.insar.procDoc, obj, "runOrbit2sch." + tag,
                               logger, "runOrbit2sch." + tag)

    self.insar.masterOrbit = objOrbit2sch1.orbit
    self.insar.slaveOrbit = objOrbit2sch2.orbit
    return None
def runOrbit2sch(self):
    from isceobj.Catalog import recordInputsAndOutputs
    import numpy
    logger.info("Converting the orbit to SCH coordinates")

    # Piyush
    ####We don't know the correct SCH heights yet.
    ####Not computing average peg height yet.
    peg = self.insar.peg
    pegHavg = self.insar.averageHeight
    planet = self.insar.planet

#    if self.pegSelect.upper() == 'MASTER':
#        pegHavg = self.insar.getFirstAverageHeight()
#    elif self.pegSelect.upper() == 'SLAVE':
#        pegHavg = self.insar.getSecondAverageHeight()
#    elif self.pegSelect.upper() == 'AVERAGE':
#        pegHavg = self.insar.averageHeight
#    else:
#        raise Exception('Unknown peg selection method: ', self.pegSelect)

    masterOrbit = self.insar.masterOrbit
    slaveOrbit = self.insar.slaveOrbit

    objOrbit2sch1 = stdproc.createOrbit2sch(averageHeight=pegHavg)
    objOrbit2sch1.stdWriter = self.stdWriter.set_file_tags("orbit2sch",
                                                           "log",
                                                           "err",
                                                           "log")
    objOrbit2sch2 = stdproc.createOrbit2sch(averageHeight=pegHavg)
    objOrbit2sch2.stdWriter = self.stdWriter

    ## loop over master/slave orbits
    for obj, orb, tag, order in zip((objOrbit2sch1, objOrbit2sch2),
                                    (self.insar.masterOrbit, self.insar.slaveOrbit),
                                    ('master', 'slave'),
                                    ('First', 'Second')):
        obj(planet=planet, orbit=orb, peg=peg)
        recordInputsAndOutputs(self.insar.procDoc, obj,
                               "runOrbit2sch." + tag,
                               logger,
                               "runOrbit2sch." + tag)

        #equivalent to self.insar.masterOrbit =
        setattr(self.insar,'%sOrbit'%(tag), obj.orbit)

        #Piyush
        ####The heights and the velocities need to be updated now.
        (ttt, ppp, vvv, rrr) = obj.orbit._unpackOrbit()

        #equivalent to self.insar.setFirstAverageHeight()
        # SCH heights replacing the earlier llh heights
        # getattr(self.insar,'set%sAverageHeight'%(order))(numpy.sum(numpy.array(ppp),axis=0)[2] /(1.0*len(ppp)))

        #equivalent to self.insar.setFirstProcVelocity()
        getattr(self.insar,'set%sProcVelocity'%(order))(vvv[len(vvv)//2][0])

    return None
Exemple #3
0
def run(orbit, peg, pegHavg, planet, stdWriter, catalog=None, sceneid='NO_ID'):
    """
    Convert orbit to SCH.
    """
    logger.info("Converting the orbit to SCH coordinates: %s" % sceneid)

    objOrbit2sch = stdproc.createOrbit2sch(averageHeight=pegHavg)
    objOrbit2sch.stdWriter = stdWriter.set_file_tags("orbit2sch",
                                                     "log",
                                                     "err",
                                                     "log")

    objOrbit2sch(planet=planet, orbit=orbit, peg=peg)
    if catalog:
        isceobj.Catalog.recordInputsAndOutputs(catalog, objOrbit2sch,
                                               "runOrbit2sch." + sceneid,
                                               logger,
                                               "runOrbit2sch." + sceneid)


    #Piyush
    ####The heights and the velocities need to be updated now.
    (ttt, ppp, vvv, rrr) = objOrbit2sch.orbit._unpackOrbit()
    procVelocity = vvv[len(vvv)//2][0]

    return objOrbit2sch.orbit, procVelocity
def runOrbit2sch_old(self):
    from isceobj.Catalog import recordInputsAndOutputs
    logger.info("Converting the orbit to SCH coordinates")
    pegHAvg = self.insar.averageHeight
    peg = self.insar.peg
    planet = self.insar.planet

    masterOrbit = self.insar.masterOrbit
    slaveOrbit = self.insar.slaveOrbit

    objOrbit2sch1 = stdproc.createOrbit2sch(averageHeight=pegHAvg)
    objOrbit2sch1.stdWriter = self.stdWriter.set_file_tags(
        "orbit2sch", "log", "err", "log")

    objOrbit2sch1(planet=planet, orbit=masterOrbit, peg=peg)

    # Record the inputs and outputs
    recordInputsAndOutputs(self.insar.procDoc, objOrbit2sch1,
                           "runOrbit2sch.master", logger,
                           "runOrbit2sch.master")

    objOrbit2sch2 = stdproc.createOrbit2sch(averageHeight=pegHAvg)
    objOrbit2sch2.stdWriter = self.stdWriter

    #    objOrbit2sch2.wireInputPort(name='planet', object=planet)
    #    objOrbit2sch2.wireInputPort(name='orbit', object=slaveOrbit)
    #    objOrbit2sch2.wireInputPort(name='peg', object=peg)

    objOrbit2sch2(planet=planet, orbit=slaveOrbit, peg=peg)

    # Record the inputs and outputs
    recordInputsAndOutputs(self.insar.procDoc, objOrbit2sch2,
                           "runOrbit2sch.slave", logger, "runOrbit2sch.slave")

    self.insar.masterOrbit = objOrbit2sch1.orbit
    self.insar.slaveOrbit = objOrbit2sch2.orbit
    return None
Exemple #5
0
def wgs84_to_sch(orbit, peg, pegHavg, planet):
    '''
    Convert WGS84 orbits to SCH orbits and return it.
    '''
    import stdproc
    from iscesys.StdOEL.StdOELPy import create_writer
    import copy

    stdWriter = create_writer("log","",True,filename='orb.log')
    orbSch = stdproc.createOrbit2sch(averageHeight=pegHavg)
    orbSch.setStdWriter(stdWriter)
    orbSch(planet=planet, orbit=orbit, peg=peg)
    schOrigOrbit = copy.copy(orbSch.orbit)

    return schOrigOrbit
    def getSCHOrbit(self, orbit, peg, hdg):
        '''
        Accepts a WGS-84 orbit and converts it to SCH.
        '''
        writer = create_writer("log", "", True, filename='orbit_extender.log')
        llh = [peg.lat, peg.lon, peg.hgt]

        ####Local radius
        radius = self._planet.ellipsoid.radiusOfCurvature(llh, hdg=hdg)

        #midPeg is a Location.Peg object
        midPeg = Peg(latitude=peg.lat,
                     longitude=peg.lon,
                     heading=hdg,
                     radiusOfCurvature=radius)

        orbSch = stdproc.createOrbit2sch(averageHeight=peg.hgt)
        orbSch.setStdWriter(writer)
        orbSch(planet=self._planet, orbit=orbit, peg=midPeg)

        return orbSch.orbit
Exemple #7
0
    def focus(self, mr, fd):
        """
        Focus SAR data

        @param mr (\a make_raw) a make_raw instance
        @param fd (\a float) Doppler centroid for focusing
        """
        import stdproc
        import isceobj
        #from isceobj.Sensor.Generic import Generic

        # Extract some useful variables
        frame = mr.getFrame()
        orbit = frame.getOrbit()
        planet = frame.getInstrument().getPlatform().getPlanet()

        # Calculate Peg Point
        self.logger.info("Calculating Peg Point")
        peg = self.calculatePegPoint(frame, orbit, planet)
        V, H = self.calculateProcessingVelocity(frame, peg)

        # Interpolate orbit
        self.logger.info("Interpolating Orbit")
        pt = stdproc.createPulsetiming()
        pt.wireInputPort(name='frame', object=frame)
        pt.pulsetiming()
        orbit = pt.getOrbit()

        # Convert orbit to SCH coordinates
        self.logger.info("Converting orbit reference frame")
        o2s = stdproc.createOrbit2sch()
        o2s.wireInputPort(name='planet', object=planet)
        o2s.wireInputPort(name='orbit', object=orbit)
        o2s.wireInputPort(name='peg', object=peg)
        o2s.setAverageHeight(H)
        o2s.orbit2sch()

        # Create Raw Image
        rawImage = isceobj.createRawImage()
        filename = frame.getImage().getFilename()
        bytesPerLine = frame.getImage().getXmax()
        goodBytes = bytesPerLine - frame.getImage().getXmin()
        rawImage.setAccessMode('read')
        rawImage.setByteOrder(frame.getImage().byteOrder)
        rawImage.setFilename(filename)
        rawImage.setNumberGoodBytes(goodBytes)
        rawImage.setWidth(bytesPerLine)
        rawImage.setXmin(frame.getImage().getXmin())
        rawImage.setXmax(bytesPerLine)
        rawImage.createImage()

        # Create SLC Image
        slcImage = isceobj.createSlcImage()
        rangeSamplingRate = frame.getInstrument().getRangeSamplingRate()
        rangePulseDuration = frame.getInstrument().getPulseLength()
        chirpSize = int(rangeSamplingRate * rangePulseDuration)
        chirpExtension = 0  #0.5*chirpSize
        numberRangeBins = int(goodBytes / 2) - chirpSize + chirpExtension
        slcImage.setFilename(filename.replace('.raw', '.slc'))
        slcImage.setByteOrder(frame.getImage().byteOrder)
        slcImage.setAccessMode('write')
        slcImage.setDataType('CFLOAT')
        slcImage.setWidth(numberRangeBins)
        slcImage.createImage()

        # Calculate motion compenstation correction for Doppler centroid
        self.logger.info("Correcting Doppler centroid for motion compensation")
        fdmocomp = stdproc.createFdMocomp()
        fdmocomp.wireInputPort(name='frame', object=frame)
        fdmocomp.wireInputPort(name='peg', object=peg)
        fdmocomp.wireInputPort(name='orbit', object=o2s.getOrbit())
        fdmocomp.setWidth(numberRangeBins)
        fdmocomp.setSatelliteHeight(H)
        fdmocomp.setDopplerCoefficients([fd[0], 0.0, 0.0, 0.0])
        fdmocomp.fdmocomp()
        fd[0] = fdmocomp.getDopplerCentroid()
        self.logger.info("Updated Doppler centroid: %s" % (fd))

        # Calculate the motion compensation Doppler centroid correction plus rate
        #self.logger.info("Testing new Doppler code")
        #frate = stdproc.createFRate()
        #frate.wireInputPort(name='frame',object=frame)
        #frate.wireInputPort(name='peg', object=peg)
        #frate.wireInputPort(name='orbit',object=o2s.getOrbit())
        #frate.wireInputPort(name='planet',object=planet)
        #frate.setWidth(numberRangeBins)
        #frate.frate()
        #fd = frate.getDopplerCentroid()
        #fdrate = frate.getDopplerRate()
        #self.logger.info("Updated Doppler centroid and rate: %s %s" % (fd,fdrate))

        synthetic_aperature_length = self._calculateSyntheticAperatureLength(
            frame, V)

        patchSize = self.nextpow2(2 * synthetic_aperature_length)
        valid_az_samples = patchSize - synthetic_aperature_length
        rawFileSize = rawImage.getLength() * rawImage.getWidth()
        linelength = rawImage.getXmax()
        overhead = patchSize - valid_az_samples
        numPatches = (1 + int(
            (rawFileSize / float(linelength) - overhead) / valid_az_samples))

        # Focus image
        self.logger.info("Focusing image")
        focus = stdproc.createFormSLC()
        focus.wireInputPort(name='rawImage', object=rawImage)
        focus.wireInputPort(name='slcImage', object=slcImage)
        focus.wireInputPort(name='orbit', object=o2s.getOrbit())
        focus.wireInputPort(name='frame', object=frame)
        focus.wireInputPort(name='peg', object=peg)
        focus.wireInputPort(name='planet', object=planet)
        focus.setDebugFlag(96)
        focus.setBodyFixedVelocity(V)
        focus.setSpacecraftHeight(H)
        focus.setAzimuthPatchSize(patchSize)
        focus.setNumberValidPulses(valid_az_samples)
        focus.setSecondaryRangeMigrationFlag('n')
        focus.setNumberAzimuthLooks(1)
        focus.setNumberPatches(numPatches)
        focus.setDopplerCentroidCoefficients(fd)
        #focus.setDopplerCentroidCoefficients([fd[0], 0.0, 0.0])
        focus.formslc()
        mocompPos = focus.getMocompPosition()
        fp = open('position.sch', 'w')
        for i in range(len(mocompPos[0])):
            fp.write("%f %f\n" % (mocompPos[0][i], mocompPos[1][i]))
        fp.close()

        slcImage.finalizeImage()
        rawImage.finalizeImage()

        # Recreate the SLC image
        slcImage = isceobj.createSlcImage()
        slcImage.setFilename(filename.replace('.raw', '.slc'))
        slcImage.setAccessMode('read')
        slcImage.setDataType('CFLOAT')
        slcImage.setWidth(numberRangeBins)
        slcImage.createImage()
        width = int(slcImage.getWidth())
        length = int(slcImage.getLength())

        # Create a frame object and write it out using the Generic driver
        frame.setImage(slcImage)
        frame.setOrbit(o2s.getOrbit())
        #writer = Generic()
        #writer.frame = frame
        #writer.write('test.h5',compression='gzip')

        slcImage.finalizeImage()

        self.width = width
        self.length = length
    
    ###Copy the orbits
    schOrbit = copy.copy(iObj.referenceOrbit)
    del iObj
    print('Line-by-Line SCH interpolated')
    print('Number of state vectors: %d'%len(schOrbit._stateVectors))
    print('Time interval: %s %s'%(str(schOrbit._minTime),
        str(schOrbit._maxTime)))
    

    ######Now convert the original state vectors to SCH coordinates
    ###stdWriter logging mechanism for some fortran modules
    stdWriter = create_writer("log","",True,filename='orb.log')
    
    print('*********************')
    orbSch = stdproc.createOrbit2sch(averageHeight=pegHavg)
    orbSch.setStdWriter(stdWriter)
    orbSch(planet=planet, orbit=origOrbit, peg=peg)
    print('*********************')
    
    schOrigOrbit = copy.copy(orbSch.orbit)
    del orbSch
    print('Original WGS84 vectors to SCH')
    print('Number of state vectors: %d'%len(schOrigOrbit._stateVectors))
    print('Time interval: %s %s'%(str(schOrigOrbit._minTime),
        str(schOrigOrbit._maxTime)))
    print(str(schOrigOrbit._stateVectors[0]))
    
    
    
    ####Line-by-line interpolation of SCH orbits
Exemple #9
0
    def focus(self,mr,fd):
        """
        Focus SAR data

        @param mr (\a make_raw) a make_raw instance
        @param fd (\a float) Doppler centroid for focusing
        """
        import stdproc
        import isceobj

        # Extract some useful variables
        frame = mr.getFrame()
        orbit = frame.getOrbit()
        planet = frame.getInstrument().getPlatform().getPlanet()

        # Calculate Peg Point
        self.logger.info("Calculating Peg Point")
        peg,H,V = self.calculatePegPoint(frame,orbit,planet)

        # Interpolate orbit
        self.logger.info("Interpolating Orbit")
        pt = stdproc.createPulsetiming()
        pt.wireInputPort(name='frame',object=frame)
        pt.pulsetiming()
        orbit = pt.getOrbit()

        # Convert orbit to SCH coordinates
        self.logger.info("Converting orbit reference frame")
        o2s = stdproc.createOrbit2sch()
        o2s.wireInputPort(name='planet',object=planet)
        o2s.wireInputPort(name='orbit',object=orbit)
        o2s.wireInputPort(name='peg',object=peg)
        o2s.setAverageHeight(H)

        # updated 07/24/2012
        o2s.stdWriter = self._writer_set_file_tags(
            "orbit2sch", "log", "err", "out"
            )
        # updated 07/24/2012

        o2s.orbit2sch()

        # Create Raw Image
        rawImage = isceobj.createRawImage()
        filename = frame.getImage().getFilename()
        bytesPerLine = frame.getImage().getXmax()
        goodBytes = bytesPerLine - frame.getImage().getXmin()
        rawImage.setAccessMode('read')
        rawImage.setByteOrder(frame.getImage().byteOrder)
        rawImage.setFilename(filename)
        rawImage.setNumberGoodBytes(goodBytes)
        rawImage.setWidth(bytesPerLine)
        rawImage.setXmin(frame.getImage().getXmin())
        rawImage.setXmax(bytesPerLine)
        rawImage.createImage()

        self.logger.info("Sensing Start: %s" % (frame.getSensingStart()))

        # Focus image
        self.logger.info("Focusing image")
        focus = stdproc.createFormSLC()
        focus.wireInputPort(name='rawImage',object=rawImage)

        #2013-06-03 Kosal: slcImage is not part of ports anymore (see formslc)
        #it is returned by formscl()
        rangeSamplingRate = frame.getInstrument().getRangeSamplingRate()
        rangePulseDuration = frame.getInstrument().getPulseLength()
        chirpSize = int(rangeSamplingRate*rangePulseDuration)
        chirpExtension = 0 #0.5*chirpSize
        numberRangeBin = int(goodBytes/2) - chirpSize + chirpExtension
        focus.setNumberRangeBin(numberRangeBin)
        #Kosal

        focus.wireInputPort(name='orbit',object=o2s.getOrbit())
        focus.wireInputPort(name='frame',object=frame)
        focus.wireInputPort(name='peg',object=peg)
        focus.setBodyFixedVelocity(V)
        focus.setSpacecraftHeight(H)
        focus.setAzimuthPatchSize(8192)
        focus.setNumberValidPulses(2048)
        focus.setSecondaryRangeMigrationFlag('n')
        focus.setNumberAzimuthLooks(1)
        focus.setNumberPatches(12)
        focus.setDopplerCentroidCoefficients([fd,0.0,0.0,0.0])

        # updated 07/24/2012
        focus.stdWriter = self._writer_set_file_tags(
            "formslc", "log", "err", "out"
            )

        # update 07/24/2012

        #2013-06-04 Kosal: slcImage is returned
        slcImage = focus.formslc()
        #Kosal

        rawImage.finalizeImage()

        width = int(slcImage.getWidth())
        length = int(slcImage.getLength())
        self.logger.debug("Width: %s" % (width))
        self.logger.debug("Length: %s" % (length))

        slcImage.finalizeImage()

        self.width = width
        self.length = length