Skip to content

Commit c1d3e80

Browse files
committed
resolved conflicts
1 parent dd02da6 commit c1d3e80

File tree

3 files changed

+215
-0
lines changed

3 files changed

+215
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/usr/bin/env python3
2+
import time
3+
4+
import journal
5+
from nisar.workflows import (crossmul, dense_offsets, geo2rdr,
6+
geocode_insar, h5_prep, filter_interferogram,
7+
rdr2geo, resample_slc, rubbersheet, unwrap,
8+
bandpass_insar)
9+
from nisar.workflows.insar_runconfig import InsarRunConfig
10+
from nisar.workflows.persistence import Persistence
11+
from nisar.workflows.yaml_argparse import YamlArgparse
12+
13+
14+
def run(cfg: dict, out_paths: dict, run_steps: dict):
15+
'''
16+
Run INSAR workflow with parameters in cfg dictionary
17+
'''
18+
info_channel = journal.info("insar.run")
19+
info_channel.log("starting INSAR")
20+
21+
t_all = time.time()
22+
23+
if run_steps['bandpass_insar']:
24+
bandpass_insar.run(cfg)
25+
26+
if run_steps['h5_prep']:
27+
h5_prep.run(cfg)
28+
29+
if run_steps['rdr2geo']:
30+
rdr2geo.run(cfg)
31+
32+
if run_steps['geo2rdr']:
33+
geo2rdr.run(cfg)
34+
35+
if run_steps['coarse_resample']:
36+
resample_slc.run(cfg, 'coarse')
37+
38+
if (run_steps['dense_offsets']) and \
39+
(cfg['processing']['dense_offsets']['enabled']):
40+
dense_offsets.run(cfg)
41+
42+
if run_steps['rubbersheet'] and \
43+
cfg['processing']['rubbersheet']['enabled']:
44+
rubbersheet.run(cfg, out_paths['RIFG'])
45+
46+
# If enabled, run fine_resampling
47+
if run_steps['fine_resample'] and \
48+
cfg['processing']['fine_resample']['enabled']:
49+
resample_slc.run(cfg, 'fine')
50+
51+
# If fine_resampling is enabled, use fine-coregistered SLC
52+
# to run crossmul
53+
if run_steps['crossmul']:
54+
if cfg['processing']['fine_resample']['enabled']:
55+
crossmul.run(cfg, out_paths['RIFG'], 'fine')
56+
else:
57+
crossmul.run(cfg, out_paths['RIFG'], 'coarse')
58+
59+
if run_steps['unwrap'] and 'RUNW' in out_paths:
60+
unwrap.run(cfg, out_paths['RIFG'], out_paths['RUNW'])
61+
62+
if run_steps['geocode'] and 'GUNW' in out_paths:
63+
geocode_insar.run(cfg, out_paths['RUNW'], out_paths['GUNW'])
64+
65+
t_all_elapsed = time.time() - t_all
66+
info_channel.log(f"successfully ran INSAR in {t_all_elapsed:.3f} seconds")
67+
68+
69+
if __name__ == "__main__":
70+
# parse CLI input
71+
yaml_parser = YamlArgparse()
72+
args = yaml_parser.parse()
73+
74+
# convert CLI input to run configuration
75+
insar_runcfg = InsarRunConfig(args)
76+
77+
# determine what steps if any need to be rerun
78+
persist = Persistence(insar_runcfg.args.restart)
79+
80+
# run InSAR workflow
81+
if persist.run:
82+
_, out_paths = h5_prep.get_products_and_paths(insar_runcfg.cfg)
83+
84+
run(insar_runcfg.cfg, out_paths, persist.run_steps)
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import os
2+
3+
import journal
4+
5+
class Persistence():
6+
'''
7+
basic class that determines InSAR persistence
8+
'''
9+
# init InSAR steps in reverse chronological run order
10+
insar_steps = ['geocode', 'unwrap', 'filter_interferogram', 'crossmul', 'fine_resample',
11+
'rubbersheet', 'dense_offsets', 'coarse_resample', 'geo2rdr', 'rdr2geo',
12+
'h5_prep', 'bandpass_insar']
13+
14+
def __init__(self, restart=False):
15+
# bool flag that determines if insar.run is called
16+
# prevents calling of insar.run if last run was successful and no restart
17+
self.run = restart
18+
19+
# dict key: step name data: bool for whether or not to run step
20+
# assume all steps successfully ran so default each steps run flag to false
21+
self.run_steps = {}
22+
for i in self.insar_steps:
23+
self.run_steps[i] = restart
24+
25+
if not restart:
26+
self.read_log()
27+
28+
info_channel = journal.info("persistence.init")
29+
if self.run:
30+
info_channel.log("Possible steps to be run:")
31+
for step in self.insar_steps:
32+
info_channel.log(f"{step}: {self.run_steps[step]}")
33+
else:
34+
info_channel.log("No steps to be (re)run.")
35+
36+
def read_log(self):
37+
'''
38+
determine state of last run to determine this runs steps
39+
'''
40+
# assume log file small enough to fit into memory for reverse read
41+
path_log = journal.debug.journal.device.log.name
42+
43+
# check for empty log from error free runconfig and yamlparse execution
44+
if os.path.getsize(path_log) == 0:
45+
self.__init__(True)
46+
else:
47+
# read log in reverse chronological order
48+
for log_line in reversed(list(open(path_log, 'r'))):
49+
# check for end of successful run
50+
if 'successfully ran INSAR' in log_line:
51+
break
52+
53+
# check for message indicating successful run of step
54+
if 'Successfully ran' in log_line or 'successfully ran' in log_line:
55+
# iterate thru reverse chronological steps
56+
for insar_step in self.insar_steps:
57+
# any step not found in line will be step to run
58+
if insar_step not in log_line:
59+
# set step name found to True
60+
self.run_steps[insar_step] = True
61+
else:
62+
# check if any steps need to be run
63+
if any(self.run_steps.values()):
64+
self.run = True
65+
66+
# assume all previous steps successfully run and stop
67+
break
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
set(TESTFILES
2+
nisar/products/readers/attitude.py
3+
nisar/products/readers/orbit.py
4+
nisar/products/readers/raw.py
5+
nisar/workflows/crossmul.py
6+
nisar/workflows/focus.py
7+
nisar/workflows/stage_dem.py
8+
nisar/workflows/gcov.py
9+
nisar/workflows/geo2rdr.py
10+
nisar/workflows/geocode_insar.py
11+
nisar/workflows/gslc.py
12+
nisar/workflows/gpu_check.py
13+
nisar/workflows/insar.py
14+
nisar/workflows/filter_interferogram.py
15+
nisar/workflows/bandpass_insar.py
16+
nisar/workflows/process_args.py
17+
nisar/workflows/point_target_info.py
18+
nisar/workflows/rdr2geo.py
19+
nisar/workflows/resample_slc.py
20+
nisar/workflows/unwrap.py
21+
nisar/workflows/antenna_parser.py
22+
)
23+
24+
if(WITH_CUDA)
25+
list(APPEND TESTFILES
26+
nisar/workflows/dense_offsets.py
27+
nisar/workflows/rubbersheet.py
28+
nisar/workflows/cuda_insar.py
29+
)
30+
endif()
31+
32+
foreach(TESTFILE ${TESTFILES})
33+
get_filename_component(NAMEWE ${TESTFILE} NAME_WE)
34+
get_filename_component(DIR ${TESTFILE} DIRECTORY)
35+
string(REPLACE "/" "." TESTNAME test.python.pkg.${DIR}.${NAMEWE})
36+
37+
add_test(${TESTNAME} ${PYTEST_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/${TESTFILE})
38+
set_property(TEST ${TESTNAME} PROPERTY ENVIRONMENT
39+
LD_LIBRARY_PATH=${PYTEST_LD_LIBRARY_PATH}
40+
PYTHONPATH=${PYTEST_PYTHONPATH})
41+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${DIR})
42+
set_property(TEST ${TESTNAME} PROPERTY WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${DIR})
43+
endforeach()
44+
45+
set_tests_properties(test.python.pkg.nisar.workflows.geo2rdr PROPERTIES
46+
DEPENDS test.python.pkg.nisar.workflows.rdr2geo)
47+
set_tests_properties(test.python.pkg.nisar.workflows.resample_slc PROPERTIES
48+
DEPENDS test.python.pkg.nisar.workflows.geo2rdr)
49+
set_tests_properties(test.python.pkg.nisar.workflows.crossmul PROPERTIES
50+
DEPENDS test.python.pkg.nisar.workflows.resample_slc)
51+
# using rdr2geo outputs as RUNW rasters to confirm geocode run
52+
# using RUNW HDF5 needed as a verifiable dummy RUNW input
53+
set_tests_properties(test.python.pkg.nisar.workflows.geocode_insar PROPERTIES
54+
DEPENDS "test.python.pkg.nisar.workflows.rdr2geo;test.python.pkg.nisar.workflows.unwrap")
55+
56+
set_tests_properties(test.python.pkg.nisar.workflows.insar PROPERTIES
57+
DEPENDS test.python.pkg.nisar.workflows.geocode_insar)
58+
59+
if(WITH_CUDA)
60+
set_tests_properties(test.python.pkg.nisar.workflows.dense_offsets PROPERTIES
61+
DEPENDS test.python.pkg.nisar.workflows.cuda_insar)
62+
set_tests_properties(test.python.pkg.nisar.workflows.rubbersheet PROPERTIES
63+
DEPENDS test.python.pkg.nisar.workflows.cuda_insar)
64+
endif()

0 commit comments

Comments
 (0)