topo: call gdal2isce_xml.py inside runMultilook() if xml file missing

+ topo: merge runMultilookGdal() into runMultilook() with new argument "method" to control to use isce Looks module (averaging) or gdal_translate (extraction; default, same as before).

+ topo: call gdal2isce_xml.py so that xml file for multilooked data are always generate. This fix the warning message from gdal_translate: "Warning 1: Geotransform matrix has non rotational terms"

+ topo: skip multilooking if the data file has vrt/xml file missing, which sometimes happens to incLocal and shadowMask (don't know the cause yet; I used GPU version).

+ crossmul/resampleSlc: re-organize module import at the top of scripts
LT1AB
Zhang Yunjun 2020-05-02 10:26:29 -07:00
parent 0b1b618363
commit 08dfd9de21
3 changed files with 71 additions and 71 deletions

View File

@ -1,12 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import isce
import os import os
import logging
from components.stdproc.stdproc import crossmul
import isceobj
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
import isceobj
import argparse import argparse
import logging
import isce
import isceobj
from components.stdproc.stdproc import crossmul
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
def createParser(): def createParser():

View File

@ -1,18 +1,19 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import argparse
import shelve
import json
import logging
import numpy as np
import isce import isce
import isceobj import isceobj
import stdproc import stdproc
from stdproc.stdproc import crossmul from stdproc.stdproc import crossmul
import numpy as np
from isceobj.Util.Poly2D import Poly2D
import argparse
import os
import shelve
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
import json
import logging
from isceobj.Util.decorators import use_api from isceobj.Util.decorators import use_api
from isceobj.Util.Poly2D import Poly2D
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
def createParser(): def createParser():
parser = argparse.ArgumentParser( description='Use polynomial offsets and create burst by burst interferograms') parser = argparse.ArgumentParser( description='Use polynomial offsets and create burst by burst interferograms')

View File

@ -6,11 +6,12 @@ import shelve
import datetime import datetime
import shutil import shutil
import numpy as np import numpy as np
import gdal
import isce import isce
import isceobj import isceobj
from isceobj.Constants import SPEED_OF_LIGHT from isceobj.Constants import SPEED_OF_LIGHT
from isceobj.Util.Poly2D import Poly2D from isceobj.Util.Poly2D import Poly2D
from mroipac.looks.Looks import Looks
def createParser(): def createParser():
''' '''
@ -49,12 +50,11 @@ class Dummy(object):
def runTopoGPU(info, demImage, dop=None, nativedop=False, legendre=False): def runTopoGPU(info, demImage, dop=None, nativedop=False, legendre=False):
from isceobj.Planet.Planet import Planet
from zerodop.GPUtopozero.GPUtopozero import PyTopozero
from isceobj import Constants as CN from isceobj import Constants as CN
from isceobj.Planet.Planet import Planet
from isceobj.Util.Poly2D import Poly2D from isceobj.Util.Poly2D import Poly2D
from iscesys import DateTimeUtil as DTU from iscesys import DateTimeUtil as DTU
from zerodop.GPUtopozero.GPUtopozero import PyTopozero
## TODO GPU does not support shadow and layover and local inc file generation ## TODO GPU does not support shadow and layover and local inc file generation
full = False full = False
@ -358,20 +358,29 @@ def runSimamp(outdir, hname='z.rdr'):
return return
def runMultilook(in_dir, out_dir, alks, rlks): def runMultilook(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr', method='gdal',
print('generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks)) fbase_list=['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']):
"""
Multilook geometry files.
"""
from iscesys.Parsers.FileParserFactory import createFileParser from iscesys.Parsers.FileParserFactory import createFileParser
FP = createFileParser('xml') from mroipac.looks.Looks import Looks
print('generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks))
# create 'geom_master' directory
os.makedirs(out_dir, exist_ok=True) os.makedirs(out_dir, exist_ok=True)
for fbase in ['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']: # multilook files one by one
fname = '{}.rdr'.format(fbase) for fbase in fbase_list:
in_file = os.path.join(in_dir, fname) in_file = os.path.join(in_dir, '{}{}'.format(fbase, in_ext))
out_file = os.path.join(out_dir, fname) out_file = os.path.join(out_dir, '{}{}'.format(fbase, out_ext))
if os.path.isfile(in_file): if all(os.path.isfile(in_file+ext) for ext in ['','.vrt','.xml']):
xmlProp = FP.parse(in_file+'.xml')[0]
# option 1 - Looks module (isce)
if method == 'isce':
xmlProp = createFileParser('xml').parse(in_file+'.xml')[0]
if('image_type' in xmlProp and xmlProp['image_type'] == 'dem'): if('image_type' in xmlProp and xmlProp['image_type'] == 'dem'):
inImage = isceobj.createDemImage() inImage = isceobj.createDemImage()
else: else:
@ -387,29 +396,8 @@ def runMultilook(in_dir, out_dir, alks, rlks):
lkObj.setOutputFilename(out_file) lkObj.setOutputFilename(out_file)
lkObj.looks() lkObj.looks()
# copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master # option 2 - gdal_translate (gdal)
# to facilitate the number of looks extraction elif method == 'gdal':
# the file path inside .xml file is not, but should, updated
shutil.copy(in_file+'.xml', out_file+'.full.xml')
shutil.copy(in_file+'.vrt', out_file+'.full.vrt')
return out_dir
def runMultilookGdal(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr',
fbase_list=['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']):
print('generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks))
import gdal
# create 'geom_master' directory
os.makedirs(out_dir, exist_ok=True)
# multilook files one by one
for fbase in fbase_list:
in_file = os.path.join(in_dir, '{}{}'.format(fbase, in_ext))
out_file = os.path.join(out_dir, '{}{}'.format(fbase, out_ext))
if os.path.isfile(in_file):
ds = gdal.Open(in_file, gdal.GA_ReadOnly) ds = gdal.Open(in_file, gdal.GA_ReadOnly)
in_wid = ds.RasterXSize in_wid = ds.RasterXSize
in_len = ds.RasterYSize in_len = ds.RasterYSize
@ -424,6 +412,15 @@ def runMultilookGdal(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr',
print(cmd) print(cmd)
os.system(cmd) os.system(cmd)
# generate ISCE .xml file
if not os.path.isfile(out_file+'.xml'):
cmd = 'gdal2isce_xml.py -i {}.vrt'.format(out_file)
print(cmd)
os.system(cmd)
else:
raise ValueError('un-supported multilook method: {}'.format(method))
# copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master # copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master
# to facilitate the number of looks extraction # to facilitate the number of looks extraction
# the file path inside .xml file is not, but should, updated # the file path inside .xml file is not, but should, updated
@ -521,8 +518,7 @@ def main(iargs=None):
# write multilooked geometry files in "geom_master" directory, same level as "Igrams" # write multilooked geometry files in "geom_master" directory, same level as "Igrams"
if inps.rlks * inps.rlks > 1: if inps.rlks * inps.rlks > 1:
out_dir = os.path.join(os.path.dirname(os.path.dirname(info.outdir)), 'geom_master') out_dir = os.path.join(os.path.dirname(os.path.dirname(info.outdir)), 'geom_master')
runMultilookGdal(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks) runMultilook(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks)
#runMultilook(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks)
return return