Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add prep_nisar to load NISAR GUNW products #1035

Merged
merged 17 commits into from
Sep 8, 2023
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions src/mintpy/cli/prep_nisar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/usr/bin/env python
############################################################
# Program is part of MintPy #
# Copyright (c) 2013, Zhang Yunjun, Heresh Fattahi #
# Author: Sara Mirzaee #
############################################################

import sys
import argparse

############################################################
EXAMPLE = """example:
python3 ./prep_nisar.py -i 'interferograms/stitched/*.h5' -d 'dem.tiff'
yunjunz marked this conversation as resolved.
Show resolved Hide resolved
"""

def _create_parser():
parser = argparse.ArgumentParser(
description="Prepare NISAR products for MintPy",
formatter_class=argparse.RawTextHelpFormatter,
epilog=EXAMPLE,
)

parser.add_argument(
"-i",
"--input-file-glob",
dest='input_glob',
type=str,
default="./interferograms/NISAR*.h5",
help="path pattern of NISAR interferograms (default: %(default)s).",
)

parser.add_argument(
"-d",
"--dem-file",
dest="dem_file",
type=str,
default="./dem.tif",
help="path to the DEM (default: %(default)s).",
)

parser.add_argument(
"-o",
"--out-dir",
dest="out_dir",
type=str,
default="./mintpy",
help="output directory (default: %(default)s).",
)

parser.add_argument(
'--force',
dest='update_mode',
action='store_false',
help='Force to overwrite all .rsc metadata files.'
)
parser.add_argument(
'--sub-lat',
'--sublat',
'--subset-lat',
dest='subset_lat',
type=float,
nargs=2,
metavar=('LATMIN', 'LATMAX'),
help='subset in latitude'
)

parser.add_argument(
'--sub-lon',
'--sublon',
'--subset-lon',
dest='subset_lon',
type=float,
nargs=2,
metavar=('LONMIN', 'LONMAX'),
help='subset in longitude'
)

return parser


def cmd_line_parse(iargs=None):
"""Create the command line parser."""
parser = _create_parser()
inps = parser.parse_args(args=iargs)

return inps

####################################################################################
def main(iargs=None):
# parse
inps = cmd_line_parse(iargs)

# import
from mintpy.prep_nisar import load_nisar

# run
load_nisar(inps)


####################################################################################
if __name__=="__main__":
main(sys.argv[1:])
5 changes: 5 additions & 0 deletions src/mintpy/defaults/auto_path.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,18 @@
mintpy.load.waterMaskFile = ../mask/watermask.msk
'''

AUTO_PATH_NISAR = '''##----------Default file path of NISAR products
mintpy.load.unwFile = ../interferograms/*.h5
mintpy.load.demFile = ../dem.tiff
'''

AUTO_PATH_DICT = {
'isce_tops' : AUTO_PATH_ISCE_TOPS,
'isce_stripmap' : AUTO_PATH_ISCE_STRIPMAP,
'roipac' : AUTO_PATH_ROIPAC,
'gamma' : AUTO_PATH_GAMMA,
'aria' : AUTO_PATH_ARIA,
'nisar' : AUTO_PATH_NISAR,
}

prefix = 'mintpy.load.'
Expand Down
2 changes: 1 addition & 1 deletion src/mintpy/defaults/smallbaselineApp.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ mintpy.compute.config = auto #[none / slurm / pbs / lsf ], auto for none (sam
## no - save 0% disk usage, fast [default]
## lzf - save ~57% disk usage, relative slow
## gzip - save ~62% disk usage, very slow [not recommend]
mintpy.load.processor = auto #[isce, aria, hyp3, gmtsar, snap, gamma, roipac], auto for isce
mintpy.load.processor = auto #[isce, aria, hyp3, gmtsar, snap, gamma, roipac, nisar], auto for isce
mintpy.load.autoPath = auto #[yes / no], auto for no, use pre-defined auto path
mintpy.load.updateMode = auto #[yes / no], auto for yes, skip re-loading if HDF5 files are complete
mintpy.load.compression = auto #[gzip / lzf / no], auto for no.
Expand Down
27 changes: 24 additions & 3 deletions src/mintpy/load_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from mintpy.utils import ptime, readfile, utils as ut

#################################################################
PROCESSOR_LIST = ['isce', 'aria', 'hyp3', 'gmtsar', 'snap', 'gamma', 'roipac', 'cosicorr']
PROCESSOR_LIST = ['isce', 'aria', 'hyp3', 'gmtsar', 'snap', 'gamma', 'roipac', 'cosicorr', 'nisar']

# primary observation dataset names
OBS_DSET_NAMES = ['unwrapPhase', 'rangeOffset', 'azimuthOffset']
Expand Down Expand Up @@ -601,7 +601,6 @@ def run_or_skip(outFile, inObj, box, updateMode=True, xstep=1, ystep=1, geom_obj

def prepare_metadata(iDict):
"""Prepare metadata via prep_{processor}.py scripts."""

processor = iDict['processor']
script_name = f'prep_{processor}.py'
print('-'*50)
Expand Down Expand Up @@ -631,6 +630,28 @@ def prepare_metadata(iDict):
ut.print_command_line(script_name, iargs)
# run
prep_module.main(iargs)
elif processor == 'nisar':
dem_file = iDict['mintpy.load.demFile']
gunw_files = iDict['mintpy.load.unwFile']

# run prep_*.py
iargs = ['-i', gunw_files, '-d', dem_file, '-o', '../mintpy']

if iDict['mintpy.subset.yx']:
warnings.warn('Subset in Y/X is not implemented for NISAR. \n'
'There might be shift in the coordinates of different products. \n'
'Use lat/lon instead.')
if iDict['mintpy.subset.lalo']:
lalo = iDict['mintpy.subset.lalo'].split(',')
lats = lalo[0].split(':')
lons = lalo[1].split(':')
iargs = iargs + ['--sub-lat', lats[0], lats[1], '--sub-lon', lons[0], lons[1]]

ut.print_command_line(script_name, iargs)
try:
prep_module.main(iargs)
except:
warnings.warn('prep_nisar.py failed. Assuming its result exists and continue...')

elif processor == 'isce':
from mintpy.utils import isce_utils, s1_utils
Expand Down Expand Up @@ -785,7 +806,7 @@ def load_data(inps):
extraDict = get_extra_metadata(iDict)

# skip data writing for aria as it is included in prep_aria
if iDict['processor'] == 'aria':
if iDict['processor'] in ['aria', 'nisar']:
return

## 2. search & write data files
Expand Down
Loading