Skip to content

Commit 8452ff7

Browse files
Merge pull request #36 from forrestfwilliams/develop
Release v0.4.0
2 parents 4654142 + 1453b00 commit 8452ff7

File tree

13 files changed

+636
-156
lines changed

13 files changed

+636
-156
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,4 @@ tags
242242
[._]*.un~
243243

244244
# Data
245-
ale/umbra*
245+
src/multirtc/multimetric/*/

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [PEP 440](https://www.python.org/dev/peps/pep-0440/)
77
and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

9+
## [0.4.0]
10+
11+
### Changed
12+
* CLI interface so that the RTC workflow must now be accessed via a subcommand (`mulitrtc rtc`).
13+
14+
### Added
15+
* Utilities for assessing absolute/relative location error, and point target characteristics of output products.
16+
917
## [0.3.3]
1018

1119
### Changed

README.md

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ A python library for creating ISCE3-based RTCs for multiple SAR data sources
99
> All credit for this library's RTC algorithm goes to Gustavo Shiroma and the JPL [OPERA](https://www.jpl.nasa.gov/go/opera/about-opera/) and [ISCE3](https://github.com/isce-framework/isce3) teams. This package merely allows others to use their algorithm with a wider set of SAR data sources. The RTC algorithm utilized by this package is described in [Shiroma et al., 2023](https://doi.org/10.1109/TGRS.2022.3147472).
1010
1111
## Usage
12-
MultiRTC allows users to create RTC products from SLC data for multiple SAR sensor platforms. Currently this list includes:
12+
MultiRTC allows users to create RTC products from SLC data for multiple SAR sensor platforms, and provides utilities for assessing the resulting products. All utilities can be accessed via CLI pattern `multirtc SUBCOMMAND ARGS`, with the primary subcommand `multirtc rtc`.
13+
14+
Currently the list of supported datasets includes:
1315

1416
Full RTC:
1517
- [Sentinel-1 Burst SLCs](https://www.earthdata.nasa.gov/data/catalog/alaska-satellite-facility-distributed-active-archive-center-sentinel-1-bursts-version)
@@ -22,7 +24,7 @@ Geocode Only:
2224
To create an RTC, use the `multirtc` CLI entrypoint using the following pattern:
2325

2426
```bash
25-
multirtc PLATFORM SLC-GRANULE --resolution RESOLUTION --work-dir WORK-DIR
27+
multirtc rtc PLATFORM SLC-GRANULE --resolution RESOLUTION --work-dir WORK-DIR
2628
```
2729
Where `PLATFORM` is the name of the satellite platform (currently `S1`, `CAPELLA`, `ICEYE` or `UMBRA`), `SLC-GRANULE` is the name of the SLC granule, `RESOLUTION` is the desired output resolution of the RTC image in meters, and `WORK-DIR` is the name of the working directory to perform processing in. Inputs such as the SLC data, DEM, and external orbit information are stored in `WORK-DIR/input`, while the RTC image and associated outputs are stored in `WORK-DIR/output` once processing is complete. SLC data that is available in the [Alaska Satellite Facility's data archive](https://search.asf.alaska.edu/#/?maxResults=250) (such as Sentinel-1 Burst SLCs) will be automatically downloaded to the input directory, but data not available in this archive (commercial datasets) are required to be staged in the input directory prior to processing.
2830

@@ -34,6 +36,36 @@ Currently, the Umbra processor only supports basic geocoding and not full RTC pr
3436
### DEM options
3537
Currently, only the OPERA DEM is supported. This is a global Height Above Ellipsoid DEM sourced from the [COP-30 DEM](https://portal.opentopography.org/raster?opentopoID=OTSDEM.032021.4326.3). In the future, we hope to support a wider variety of automatically retrieved and user provided DEMs.
3638

39+
## Calibration & Validation Subcommands
40+
MultiRTC includes three calibration and validation (cal/val) subcommands for assessing the geometric and radiometric quality of SAR products. These tools are useful for analyzing geolocation, co-registration, and impulse response performance.
41+
42+
### `ale` Absolute Location Error
43+
Quantifies the geolocation accuracy of a SAR image by comparing known corner reflectors at the Rosamond, California site with their positions in the geocoded image.
44+
45+
Usage:
46+
```bash
47+
multirtc ale FILEPATH DATE AZMANGLE PROJECT --basedir BASEDIR
48+
```
49+
See `multirtc ale --help` for descriptions of each argument.
50+
51+
### `rle` Relative Location Error
52+
Measures the relative alignment of overlapping geocoded SAR images by measuring the offsets between each 1024x1024 pixel chunk of the images.
53+
54+
Usage:
55+
```bash
56+
multirtc rle REFPATH SECPATH PROJECT --basedir BASEDIR
57+
```
58+
See `multirtc rle --help` for descriptions of each argument.
59+
60+
### `pt` Point Target Analysis
61+
Evaluates the impulse response of corner reflector at the Rosamond, California site in the SAR image, including resolution, peak to side-lobe ratio (PSLR), and integrated side-lobe ratio (ISLR).
62+
63+
Usage:
64+
```bash
65+
multirtc pt FILEPATH DATE AZMANGLE PROJECT --basedir BASEDIR
66+
```
67+
See `multirtc pt --help` for descriptions of each argument.
68+
3769
## When will support for [insert SAR provider here] products be added?
3870
We're currently working on this package on a "best effort" basis with no specific timeline for any particular dataset. We would love to add support for every SAR dataset ASAP, but we only have so much time to devote to this package. If you want a particular dataset to be prioritized there are several things you can do:
3971

ale/environment.yml

Lines changed: 0 additions & 20 deletions
This file was deleted.

environment.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ dependencies:
1919
- burst2safe
2020
- tqdm
2121
- hyp3lib
22+
# For multimetric
23+
- matplotlib
24+
- pandas
25+
- lmfit
26+
- scipy
27+
- scikit-image
2228
# For packaging, and testing
2329
- setuptools
2430
- setuptools_scm

pyproject.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,23 @@ dependencies = [
3232
"burst2safe",
3333
"tqdm",
3434
"hyp3lib",
35+
"matplotlib",
36+
"pandas",
37+
"lmfit",
38+
"scipy",
39+
"scikit-image",
3540
]
3641
dynamic = ["version", "readme"]
3742

3843
[project.optional-dependencies]
39-
develop = [
40-
"pytest",
41-
"pytest-cov",
42-
"pytest-console-scripts",
43-
"ruff",
44-
]
44+
develop = ["pytest", "pytest-cov", "pytest-console-scripts", "ruff"]
4545

4646
[project.urls]
4747
Homepage = "https://github.com/forrestfwilliams/multirtc"
4848
Documentation = "https://github.com/forrestfwilliams/multirtc"
4949

5050
[project.scripts]
51-
multirtc = "multirtc.multirtc:main"
51+
multirtc = "multirtc.__main__:main"
5252

5353
[tool.pytest.ini_options]
5454
testpaths = ["tests"]

src/multirtc/__main__.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import argparse
2+
3+
from multirtc import multirtc
4+
from multirtc.multimetric import ale, point_target, rle
5+
6+
7+
def main():
8+
global_parser = argparse.ArgumentParser(
9+
prog='multirtc',
10+
description='ISCE3-based multi-sensor RTC and cal/val tool',
11+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
12+
)
13+
subparsers = global_parser.add_subparsers(title='command', help='MultiRTC sub-commands')
14+
15+
multirtc_parser = multirtc.create_parser(subparsers.add_parser('rtc', help=multirtc.__doc__))
16+
multirtc_parser.set_defaults(func=multirtc.run)
17+
18+
ale_parser = ale.create_parser(subparsers.add_parser('ale', help=ale.__doc__))
19+
ale_parser.set_defaults(func=ale.run)
20+
21+
rle_parser = rle.create_parser(subparsers.add_parser('rle', help=rle.__doc__))
22+
rle_parser.set_defaults(func=rle.run)
23+
24+
pt_parser = point_target.create_parser(subparsers.add_parser('pt', help=point_target.__doc__))
25+
pt_parser.set_defaults(func=point_target.run)
26+
27+
args = global_parser.parse_args()
28+
args.func(args)
29+
30+
31+
if __name__ == '__main__':
32+
main()

0 commit comments

Comments
 (0)