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
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
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
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
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