# # Author: Piyush Agram # Copyright 2016 # import logging import isceobj import copy import os logger = logging.getLogger('isce.grdsar.runPreprocessor') def runPreprocessor(self): '''Extract images. ''' catalog = isceobj.Catalog.createCatalog(self._grd.procDoc.name) if len(self.polarizations): polListProvided = True polList = [x for x in self.polarizations] else: polListProvided = False polList = ['HH', 'HV', 'VV', 'VH', 'RH', 'RV'] self.reference.configure() os.makedirs(self.reference.output, exist_ok=True) slantRangeExtracted = False r0min = 0. r0max = 0. for pol in polList: ###Process reference pol-by-pol frame = copy.deepcopy(self.reference) frame.polarization = pol frame.output = os.path.join(self.reference.output, 'beta_{0}.img'.format(pol)) frame.slantRangeFile = os.path.join(self.reference.output, 'slantrange.img') frame.product.startingSlantRange = r0min frame.product.endingSlantRange = r0max try: reference = extract_slc(frame, slantRange=(not slantRangeExtracted)) success=True if not slantRangeExtracted: r0min = frame.product.startingSlantRange r0max = frame.product.endingSlantRange slantRangeExtracted = True except Exception as err: print('Could not extract polarization {0}'.format(pol)) print('Generated error: ', err) success=False if polListProvided: raise Exception('User requested polarization {0} but not found in input data'.format(pol)) if success: catalog.addInputsFrom(frame.product, 'reference.sensor') catalog.addItem('numberOfSamples', frame.product.numberOfSamples, 'reference') catalog.addItem('numberOfLines', frame.product.numberOfLines, 'reference') catalog.addItem('groundRangePixelSize', frame.product.groundRangePixelSize, 'reference') self._grd.polarizations.append(pol) self._grd.saveProduct( frame.product, os.path.splitext(frame.output)[0] + '.xml') self._grd.outputFolder = self.reference.output catalog.printToLog(logger, "runPreprocessor") self._grd.procDoc.addAllFromCatalog(catalog) def extract_slc(sensor, slantRange=False): # sensor.configure() sensor.parse() sensor.extractImage() if slantRange: sensor.extractSlantRange() else: img = isceobj.createImage() img.load( sensor.slantRangeFile + '.xml') img.setAccessMode('READ') sensor.product.slantRangeImage = img return sensor.output