Skip to content

Commit 7b3c6a2

Browse files
Liang YuGitHub Enterprise
authored andcommitted
Expose lines per block in rdr2geo and geo2rdr (#861)
* add getters/setters for rdr2geo and geo2rdr blocksize in C++ and CUDA * added lines per block to rdr2geo & geo2rdr pybind constructors * modified workflows for blocksize * update yamls * schema for rdr2geo and geo2rdr less restrictive * default rdr2geo threshold tightended
1 parent 20afc33 commit 7b3c6a2

File tree

12 files changed

+111
-35
lines changed

12 files changed

+111
-35
lines changed

cxx/isce3/geometry/Geo2rdr.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ class isce3::geometry::Geo2rdr {
9494
*/
9595
void numiter(int n) { _numiter = n; }
9696

97+
/**
98+
* Set lines to be processed per block
99+
*
100+
* @param[in] linesPerBlock Lines to be processed per block
101+
*/
102+
void linesPerBlock(size_t linesPerBlock) { _linesPerBlock = linesPerBlock; }
103+
97104
/**
98105
* Run geo2rdr with offsets and externally created offset rasters
99106
*
@@ -151,6 +158,9 @@ class isce3::geometry::Geo2rdr {
151158
/** Return number of Newton-Raphson iterations used for processing */
152159
int numiter() const { return _numiter; }
153160

161+
/** Get linesPerBlock */
162+
size_t linesPerBlock() const { return _linesPerBlock; }
163+
154164
private:
155165

156166
/** Print information for debugging */

cxx/isce3/geometry/Topo.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ class isce3::geometry::Topo {
142142
*/
143143
void decimaldegMargin(double deg) { _margin = deg; }
144144

145+
/**
146+
* Set lines to be processed per block
147+
*
148+
* @param[in] linesPerBlock Lines to be processed per block
149+
*/
150+
void linesPerBlock(size_t linesPerBlock) { _linesPerBlock = linesPerBlock; }
151+
145152
// Get topo processing options
146153

147154
/** Get distance convergence threshold used for processing */
@@ -171,6 +178,9 @@ class isce3::geometry::Topo {
171178
/** Get margin in decimal degrees */
172179
double decimaldegMargin() const { return _margin; }
173180

181+
/** Get linesPerBlock */
182+
size_t linesPerBlock() const { return _linesPerBlock; }
183+
174184
/** Get read-only reference to RadarGridParameters */
175185
const isce3::product::RadarGridParameters & radarGridParameters() const { return _radarGrid; }
176186

python/extensions/pybind_isce3/cuda/geometry/geo2rdr.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,22 @@ void addbinding(py::class_<Geo2rdr> & pyGeo2Rdr)
2222
const isce3::core::Ellipsoid & ellipsoid,
2323
const isce3::core::LUT2d<double> & doppler,
2424
const double threshold,
25-
const int numiter)
25+
const int numiter,
26+
const int lines_per_block)
2627
{
2728
auto geo2rdr_obj = Geo2rdr(radar_grid, orbit, ellipsoid, doppler);
2829
geo2rdr_obj.threshold(threshold);
2930
geo2rdr_obj.numiter(numiter);
31+
geo2rdr_obj.linesPerBlock(lines_per_block);
3032
return geo2rdr_obj;
3133
}),
3234
py::arg("radar_grid"),
3335
py::arg("orbit"),
3436
py::arg("ellipsoid"),
3537
py::arg("doppler") = isce3::core::LUT2d<double>(),
3638
py::arg("threshold") = 0.05,
37-
py::arg("numiter") = 25)
39+
py::arg("numiter") = 25,
40+
py::arg("lines_per_block") = 1000)
3841
.def("geo2rdr", py::overload_cast<isce3::io::Raster &, const std::string &,
3942
double, double>
4043
(&Geo2rdr::geo2rdr),
@@ -52,5 +55,8 @@ void addbinding(py::class_<Geo2rdr> & pyGeo2Rdr)
5255
.def_property("numiter",
5356
py::overload_cast<>(&Geo2rdr::numiter, py::const_),
5457
py::overload_cast<int>(&Geo2rdr::numiter))
58+
.def_property("lines_per_block",
59+
py::overload_cast<>(&Geo2rdr::linesPerBlock, py::const_),
60+
py::overload_cast<size_t>(&Geo2rdr::linesPerBlock))
5561
;
5662
}

python/extensions/pybind_isce3/cuda/geometry/rdr2geo.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
2525
const double threshold, const int numiter,
2626
const int extraiter,
2727
const dataInterpMethod dem_interp_method,
28-
const int epsg_out, const bool compute_mask) {
28+
const int epsg_out, const bool compute_mask,
29+
const int lines_per_block) {
2930
auto rdr2geo_obj = Topo(radar_grid, orbit, ellipsoid, doppler);
3031
rdr2geo_obj.threshold(threshold);
3132
rdr2geo_obj.numiter(numiter);
3233
rdr2geo_obj.extraiter(extraiter);
3334
rdr2geo_obj.demMethod(dem_interp_method);
3435
rdr2geo_obj.epsgOut(epsg_out);
3536
rdr2geo_obj.computeMask(compute_mask);
37+
rdr2geo_obj.linesPerBlock(lines_per_block);
3638
return rdr2geo_obj;
3739
}),
3840
py::arg("radar_grid"), py::arg("orbit"),
@@ -42,7 +44,8 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
4244
py::arg("extraiter") = 10,
4345
py::arg("dem_interp_method") =
4446
isce3::core::BIQUINTIC_METHOD,
45-
py::arg("epsg_out") = 4326, py::arg("compute_mask") = true)
47+
py::arg("epsg_out") = 4326, py::arg("compute_mask") = true,
48+
py::arg("lines_per_block") = 1000)
4649
.def("topo",
4750
py::overload_cast<isce3::io::Raster&, const std::string&>(
4851
&Topo::topo),
@@ -96,5 +99,9 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
9699
py::overload_cast<int>(&Topo::epsgOut))
97100
.def_property("compute_mask",
98101
py::overload_cast<>(&Topo::computeMask, py::const_),
99-
py::overload_cast<bool>(&Topo::computeMask));
102+
py::overload_cast<bool>(&Topo::computeMask))
103+
.def_property("lines_per_block",
104+
py::overload_cast<>(&Topo::linesPerBlock, py::const_),
105+
py::overload_cast<size_t>(&Topo::linesPerBlock))
106+
;
100107
}

python/extensions/pybind_isce3/geometry/geo2rdr.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,22 @@ void addbinding(py::class_<Geo2rdr> & pyGeo2Rdr)
3131
const isce3::core::Ellipsoid & ellipsoid,
3232
const isce3::core::LUT2d<double> & doppler,
3333
const double threshold,
34-
const int numiter)
34+
const int numiter,
35+
const int lines_per_block)
3536
{
3637
auto geo2rdr_obj = Geo2rdr(radar_grid, orbit, ellipsoid, doppler);
3738
geo2rdr_obj.threshold(threshold);
3839
geo2rdr_obj.numiter(numiter);
40+
geo2rdr_obj.linesPerBlock(lines_per_block);
3941
return geo2rdr_obj;
4042
}),
4143
py::arg("radar_grid"),
4244
py::arg("orbit"),
4345
py::arg("ellipsoid"),
4446
py::arg("doppler") = isce3::core::LUT2d<double>(),
4547
py::arg("threshold") = 0.05,
46-
py::arg("numiter") = 25)
48+
py::arg("numiter") = 25,
49+
py::arg("lines_per_block") = 1000)
4750
.def("geo2rdr", py::overload_cast<isce3::io::Raster &, const std::string &,
4851
double, double>
4952
(&Geo2rdr::geo2rdr),
@@ -61,6 +64,9 @@ void addbinding(py::class_<Geo2rdr> & pyGeo2Rdr)
6164
.def_property("numiter",
6265
py::overload_cast<>(&Geo2rdr::numiter, py::const_),
6366
py::overload_cast<int>(&Geo2rdr::numiter))
67+
.def_property("lines_per_block",
68+
py::overload_cast<>(&Geo2rdr::linesPerBlock, py::const_),
69+
py::overload_cast<size_t>(&Geo2rdr::linesPerBlock))
6470
;
6571
}
6672

python/extensions/pybind_isce3/geometry/rdr2geo.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,16 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
157157
const double threshold, const int numiter,
158158
const int extraiter,
159159
const dataInterpMethod dem_interp_method,
160-
const int epsg_out, const bool compute_mask) {
160+
const int epsg_out, const bool compute_mask,
161+
const int lines_per_block) {
161162
auto rdr2geo_obj = Topo(radar_grid, orbit, ellipsoid, doppler);
162163
rdr2geo_obj.threshold(threshold);
163164
rdr2geo_obj.numiter(numiter);
164165
rdr2geo_obj.extraiter(extraiter);
165166
rdr2geo_obj.demMethod(dem_interp_method);
166167
rdr2geo_obj.epsgOut(epsg_out);
167168
rdr2geo_obj.computeMask(compute_mask);
169+
rdr2geo_obj.linesPerBlock(lines_per_block);
168170
return rdr2geo_obj;
169171
}),
170172
py::arg("radar_grid"), py::arg("orbit"),
@@ -174,7 +176,8 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
174176
py::arg("extraiter") = 10,
175177
py::arg("dem_interp_method") =
176178
isce3::core::BIQUINTIC_METHOD,
177-
py::arg("epsg_out") = 4326, py::arg("compute_mask") = true)
179+
py::arg("epsg_out") = 4326, py::arg("compute_mask") = true,
180+
py::arg("lines_per_block") = 1000)
178181
.def("topo",
179182
py::overload_cast<isce3::io::Raster&, const std::string&>(
180183
&Topo::topo),
@@ -228,5 +231,9 @@ void addbinding(py::class_<Topo> & pyRdr2Geo)
228231
py::overload_cast<int>(&Topo::epsgOut))
229232
.def_property("compute_mask",
230233
py::overload_cast<>(&Topo::computeMask, py::const_),
231-
py::overload_cast<bool>(&Topo::computeMask));
234+
py::overload_cast<bool>(&Topo::computeMask))
235+
.def_property("lines_per_block",
236+
py::overload_cast<>(&Topo::linesPerBlock, py::const_),
237+
py::overload_cast<size_t>(&Topo::linesPerBlock))
238+
;
232239
}

python/packages/nisar/workflows/geo2rdr.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ def run(cfg):
2525
dem_file = cfg['DynamicAncillaryFileGroup']['DEMFile']
2626
scratch_path = pathlib.Path(cfg['ProductPathGroup']['ScratchPath'])
2727
freq_pols = cfg['processing']['input_subset']['list_of_frequencies']
28-
29-
# Get geo2rdr params
30-
geo2rdr_in = cfg['processing']['geo2rdr']
28+
threshold = cfg['processing']['geo2rdr']['threshold']
29+
numiter = cfg['processing']['geo2rdr']['maxiter']
30+
lines_per_block = cfg['processing']['geo2rdr']['lines_per_block']
3131

3232
# Get parameters from SLC
3333
slc = SLC(hdf5file=sec_hdf5)
@@ -72,8 +72,8 @@ def run(cfg):
7272
Geo2Rdr = isce3.geometry.Geo2Rdr
7373

7474
geo2rdr_obj = Geo2Rdr(radar_grid, orbit, ellipsoid, doppler_grid,
75-
threshold=geo2rdr_in['threshold'],
76-
numiter=geo2rdr_in['maxiter'])
75+
threshold, numiter, lines_per_block)
76+
7777
# Opem Topo Raster
7878
topo_path = pathlib.Path(cfg['processing']['geo2rdr']['topo_path'])
7979
rdr2geo_topo_path = topo_path / 'rdr2geo' / f'freq{freq}' / 'topo.vrt'

python/packages/nisar/workflows/geocode_insar.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def cpu_run(cfg, runw_hdf5, output_hdf5):
233233
dem_file = cfg["DynamicAncillaryFileGroup"]["DEMFile"]
234234
threshold_geo2rdr = cfg["processing"]["geo2rdr"]["threshold"]
235235
iteration_geo2rdr = cfg["processing"]["geo2rdr"]["maxiter"]
236-
lines_per_block = cfg["processing"]["blocksize"]["y"]
236+
lines_per_block = cfg["processing"]["geocode"]["lines_per_block"]
237237
dem_block_margin = cfg["processing"]["dem_margin"]
238238
az_looks = cfg["processing"]["crossmul"]["azimuth_looks"]
239239
rg_looks = cfg["processing"]["crossmul"]["range_looks"]
@@ -379,7 +379,7 @@ def gpu_run(cfg, runw_hdf5, output_hdf5):
379379
dem_file = cfg["DynamicAncillaryFileGroup"]["DEMFile"]
380380
freq_pols = cfg["processing"]["input_subset"]["list_of_frequencies"]
381381
geogrids = cfg["processing"]["geocode"]["geogrids"]
382-
lines_per_block = cfg["processing"]["blocksize"]["y"]
382+
lines_per_block = cfg["processing"]["geocode"]["lines_per_block"]
383383
interp_method = cfg["processing"]["geocode"]["interp_method"]
384384
gunw_datasets = cfg["processing"]["geocode"]["datasets"]
385385
az_looks = cfg["processing"]["crossmul"]["azimuth_looks"]

python/packages/nisar/workflows/rdr2geo.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ def run(cfg):
2424
dem_file = cfg['DynamicAncillaryFileGroup']['DEMFile']
2525
scratch_path = pathlib.Path(cfg['ProductPathGroup']['ScratchPath'])
2626
freq_pols = cfg['processing']['input_subset']['list_of_frequencies']
27+
threshold = cfg['processing']['rdr2geo']['threshold']
28+
numiter = cfg['processing']['rdr2geo']['numiter']
29+
extraiter = cfg['processing']['rdr2geo']['extraiter']
30+
lines_per_block = cfg['processing']['rdr2geo']['lines_per_block']
2731

2832
# get params from SLC
2933
slc = SLC(hdf5file=input_hdf5)
@@ -64,7 +68,10 @@ def run(cfg):
6468
else:
6569
Rdr2Geo = isce3.geometry.Rdr2Geo
6670

67-
rdr2geo_obj = Rdr2Geo(radargrid, orbit, ellipsoid, grid_doppler)
71+
rdr2geo_obj = Rdr2Geo(radargrid, orbit, ellipsoid, grid_doppler,
72+
threshold=threshold, numiter=numiter,
73+
extraiter=extraiter,
74+
lines_per_block=lines_per_block)
6875

6976
# run
7077
rdr2geo_obj.topo(dem_raster, str(rdr2geo_scratch_path))

share/nisar/defaults/insar.yaml

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,13 @@ runconfig:
100100
y_abs:
101101
x_abs:
102102

103-
radar_grid_cubes:
104-
103+
# OPTIONAL - Set lines to be processed per block
104+
lines_per_block: 1000
105+
106+
radar_grid_cubes:
107+
105108
# List of heights in meters
106-
heights:
109+
heights:
107110

108111
# OPTIONAL - Same as the geocode group outputEPSG if not provided
109112
outputEPSG:
@@ -114,8 +117,8 @@ runconfig:
114117
# All postings/spacings must be > 0.
115118
# ISCE3 output rasters always have North-up West-left orientation
116119
output_posting:
117-
x_posting:
118-
y_posting:
120+
x_posting:
121+
y_posting:
119122

120123
# OPTIONAL - To control output grid in same units as output EPSG
121124
y_snap:
@@ -124,7 +127,7 @@ runconfig:
124127
x_snap:
125128

126129
# OPTIONAL - Can control with absolute values or with snap values
127-
top_left:
130+
top_left:
128131
# OPTIONAL - Set top-left y in same units as output EPSG
129132
y_abs:
130133
# OPTIONAL - Set top-left x in same units as output EPSG
@@ -133,15 +136,20 @@ runconfig:
133136
# OPTIONAL - Can control with absolute values or with snap values
134137
bottom_right:
135138
y_abs:
136-
x_abs:
139+
x_abs:
137140

138141
geo2rdr:
139142
# No topo_path provided. Default to ScratchPath.
140143
threshold: 1.0e-8
141144
maxiter: 25
145+
lines_per_block: 1000
142146

143-
blocksize:
144-
y: 1000
147+
rdr2geo:
148+
# No topo_path provided. Default to ScratchPath.
149+
threshold: 1.0e-7
150+
numiter: 25
151+
extraiter: 10
152+
lines_per_block: 1000
145153

146154
dem_margin:
147155

0 commit comments

Comments
 (0)