From 8aacdc11df959c2a4430959c6980f2eb19203e8d Mon Sep 17 00:00:00 2001 From: rileykk Date: Tue, 3 Dec 2024 12:57:50 -0800 Subject: [PATCH] Initial commit for stub implementation for DIST-S1 PGE --- .ci/docker/Dockerfile_dist_s1 | 67 ++++ .ci/scripts/dist_s1/build_dist_s1.sh | 83 ++++ .ci/scripts/dist_s1/test_dist_s1.sh | 96 +++++ .ci/scripts/dswx_ni/build_dswx_ni.sh | 2 +- .ci/scripts/util/build_all_images.sh | 1 + .ci/scripts/util/test_all_images.sh | 1 + src/opera/pge/dist_s1/dist_s1_pge.py | 93 +++++ .../algorithm_parameters_dist_s1_schema.yaml | 0 .../dist_s1/schema/dist_s1_sas_schema.yaml | 28 ++ ...SO_metadata_L3_DIST_S1_template.xml.jinja2 | 0 .../dist_s1_measured_parameters.yaml | 1 + src/opera/scripts/pge_main.py | 5 +- src/opera/test/data/test_dist_s1_config.yaml | 378 ++++++++++++++++++ .../test/pge/dist_s1/test_dist_s1_pge.py | 123 ++++++ 14 files changed, 875 insertions(+), 3 deletions(-) create mode 100644 .ci/docker/Dockerfile_dist_s1 create mode 100644 .ci/scripts/dist_s1/build_dist_s1.sh create mode 100644 .ci/scripts/dist_s1/test_dist_s1.sh create mode 100644 src/opera/pge/dist_s1/dist_s1_pge.py create mode 100644 src/opera/pge/dist_s1/schema/algorithm_parameters_dist_s1_schema.yaml create mode 100644 src/opera/pge/dist_s1/schema/dist_s1_sas_schema.yaml create mode 100644 src/opera/pge/dist_s1/templates/OPERA_ISO_metadata_L3_DIST_S1_template.xml.jinja2 create mode 100644 src/opera/pge/dist_s1/templates/dist_s1_measured_parameters.yaml create mode 100644 src/opera/test/data/test_dist_s1_config.yaml create mode 100644 src/opera/test/pge/dist_s1/test_dist_s1_pge.py diff --git a/.ci/docker/Dockerfile_dist_s1 b/.ci/docker/Dockerfile_dist_s1 new file mode 100644 index 00000000..37c32731 --- /dev/null +++ b/.ci/docker/Dockerfile_dist_s1 @@ -0,0 +1,67 @@ +# Dockerfile to produce the production DSWx-NI PGE Docker image for OPERA +# Authors: Scott Collins, Ray Bambery + +# Default SAS image path, must be provided by the docker build call via --build-arg +ARG SAS_IMAGE +FROM $SAS_IMAGE + +ARG PGE_SOURCE_DIR +ARG PGE_DEST_DIR=/home/ops +ARG CONDA_ROOT=/home/ops/miniconda3 + +ENV PGE_DEST_DIR=$PGE_DEST_DIR +ENV CONDA_ROOT=$CONDA_ROOT + +ARG BUILD_DATE_TIME +ARG BUILD_VERSION + +# labels +# the label-schema convention: http://label-schema.org/rc1/ +LABEL org.label-schema.build-date=${BUILD_DATE_TIME} \ + org.label-schema.version=${BUILD_VERSION} \ + org.label-schema.license="Copyright 2024,\ + by the California Institute of Technology.\ + ALL RIGHTS RESERVED.\ + United States Government sponsorship acknowledged.\ + Any commercial use must be negotiated with the Office of Technology Transfer\ + at the California Institute of Technology.\ + This software may be subject to U.S. export control laws and regulations.\ + By accepting this document, the user agrees to comply with all applicable\ + U.S. export laws and regulations. User has the responsibility to obtain\ + export licenses, or other export authority as may be required, before\ + exporting such information to foreign countries or providing access to\ + foreign persons." \ + org.label-schema.name="OPERA Product Generation Executable (PGE) Image" \ + org.label-schema.schema-version="1.0" \ + org.label-schema.vendor="California Institute of Technology" \ + maintainer="California Institute of Technology" + +# Copy the OPERA PGE software into the container +# the base container has a default user "mamba" with UID/GID 1000/1000 +COPY --chown=dist_user:dist_user ${PGE_SOURCE_DIR} ${PGE_DEST_DIR} + +# Switch to root for installing into Conda Env +USER 0:0 + +# Set the default shell to run commands within the Conda environment named "DSXW-SAR" using bash +SHELL ["conda", "run", "-n", "dist-s1-env", "/bin/bash", "-c"] + +# Install dependencies into existing Conda Env +# Modifications to the destination dir permissions are also required here to ensure +# we don't run into issues when running as an outside user (via docker run -u) +RUN set -ex \ + && cd ${PGE_DEST_DIR} \ + && mkdir -p ${CONDA_ROOT}/bin \ + && cp ${PGE_DEST_DIR}/opera/scripts/*_entrypoint.sh ${CONDA_ROOT}/bin \ + && chmod +x ${CONDA_ROOT}/bin/*_entrypoint.sh \ + && python -m pip install -r ${PGE_DEST_DIR}/opera/requirements.txt \ + && conda install --yes --channel conda-forge hdf5 \ + && chmod 777 $(find ${PGE_DEST_DIR} -type d) + +# Set the Docker entrypoint and clear the default command +ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "dist-s1-env", "sh", "-c", "exec ${CONDA_ROOT}/bin/pge_docker_entrypoint.sh \"${@}\"", "--"] +CMD [] + +# Set the user/group back to the default +USER dist_user:dist_user + diff --git a/.ci/scripts/dist_s1/build_dist_s1.sh b/.ci/scripts/dist_s1/build_dist_s1.sh new file mode 100644 index 00000000..7b07a81e --- /dev/null +++ b/.ci/scripts/dist_s1/build_dist_s1.sh @@ -0,0 +1,83 @@ +#!/bin/bash +set -e + +# Source the build script utility functions +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +. "${SCRIPT_DIR}"/../util/util.sh + +# Parse args +parse_build_args "$@" + +echo ' +===================================== + +Building DIST-S1 PGE docker image... + +===================================== +' + +PGE_NAME="dist_s1" +IMAGE="opera_pge/${PGE_NAME}" +BUILD_DATE_TIME=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + +# defaults, SAS image should be updated as necessary for new image releases from ADT +[ -z "${WORKSPACE}" ] && WORKSPACE=$(realpath $(dirname $(realpath $0))/../../..) +[ -z "${TAG}" ] && TAG="${USER}-dev" +[ -z "${SAS_IMAGE}" ] && SAS_IMAGE="ghcr.io/opera-adt/dist-s1:0.0.3" + +echo "WORKSPACE: $WORKSPACE" +echo "IMAGE: $IMAGE" +echo "TAG: $TAG" +echo "SAS_IMAGE: $SAS_IMAGE" + +# Check that the .ci scripts directory exists +if [ ! -d "${WORKSPACE}/.ci" ]; then + echo "Error: the .ci directory doesn't exist at ${WORKSPACE}/.ci" + exit 1 +fi + +# Create a directory on the host to use as a staging area for files to be +# copied into the resulting Docker image. +STAGING_DIR=$(mktemp -d -p ${WORKSPACE} docker_image_staging_XXXXXXXXXX) + +# Configure a trap to clean up on exit regardless of whether the build succeeds +trap build_script_cleanup EXIT + +# Copy files to the staging area and build the PGE docker image +mkdir -p ${STAGING_DIR}/opera/pge + +copy_pge_files $WORKSPACE $STAGING_DIR $PGE_NAME + +# Create a VERSION file in the staging area to track version and build time +printf "pge_version: ${TAG}\pge_build_datetime: ${BUILD_DATE_TIME}\n" \ + > ${STAGING_DIR}/opera/VERSION \ + +# Remove the old Docker image, if it exists +EXISTING_IMAGE_ID=$(docker images -q ${IMAGE}:${TAG}) +if [[ ! -z ${EXISTING_IMAGE_ID} ]]; then + docker rmi ${EXISTING_IMAGE_ID} +fi + +# Select the appropriate platform to target the container for. +# This is to support Apple M1 builds, which will default to (very slow) emulation +# if the incorrect platform is specified. +# Note that currently, the container build process on Apple M1 is significantly +# slower than for other architectures. +if [[ `uname -m` == "arm64" ]]; then + PLATFORM='--platform linux/arm64' +else + PLATFORM='--platform linux/amd64' +fi + +# Build the PGE docker image +docker build ${PLATFORM} --progress plain --rm --force-rm -t ${IMAGE}:${TAG} \ + --build-arg SAS_IMAGE=${SAS_IMAGE} \ + --build-arg BUILD_DATE_TIME=${BUILD_DATE_TIME} \ + --build-arg BUILD_VERSION=${TAG} \ + --build-arg PGE_SOURCE_DIR=$(basename ${STAGING_DIR}) \ + --file ${WORKSPACE}/.ci/docker/Dockerfile_dist_s1 ${WORKSPACE} + +echo "DIST-S1 PGE Docker image build complete" + +exit 0 diff --git a/.ci/scripts/dist_s1/test_dist_s1.sh b/.ci/scripts/dist_s1/test_dist_s1.sh new file mode 100644 index 00000000..77779b71 --- /dev/null +++ b/.ci/scripts/dist_s1/test_dist_s1.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# Script to execute unit tests on the OPERA DISP-S1 PGE Docker image + +set -e + +# Source the build script utility functions +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +. "${SCRIPT_DIR}"/../util/util.sh + +# Parse args +parse_build_args "$@" + +echo ' +===================================== + +Testing DIST-S1 PGE Docker image... + +===================================== +' + +PGE_NAME="dist_s1" +IMAGE="opera_pge/${PGE_NAME}" +TEST_RESULTS_REL_DIR="test_results" +CONTAINER_HOME="/home/ops" +CONDA_ROOT="/opt/conda" + +# defaults +[ -z "${WORKSPACE}" ] && WORKSPACE=$(realpath $(dirname $(realpath $0))/../../..) +[ -z "${TAG}" ] && TAG="${USER}-dev" + +TEST_RESULTS_DIR="${WORKSPACE}/${TEST_RESULTS_REL_DIR}/${PGE_NAME}" + +echo "Test results output directory: ${TEST_RESULTS_DIR}" +mkdir --parents ${TEST_RESULTS_DIR} +chmod -R 775 ${TEST_RESULTS_DIR} + +# Use the environment of the docker image to run linting, tests, etc... +# Note the change of working directory (-w) to a directory without +# Python code so that import statements favor Python code found in the +# Docker image rather than code found on the host. +DOCKER_RUN="docker run --rm \ + -v ${WORKSPACE}:/workspace \ + -v ${WORKSPACE}/src/opera/test/data:${CONTAINER_HOME}/opera/test/data \ + -w /workspace/${TEST_RESULTS_REL_DIR} \ + -u ${UID}:$(id -g) \ + --entrypoint ${CONDA_ROOT}/bin/pge_tests_entrypoint.sh \ + ${IMAGE}:${TAG}" + +# Configure a trap to set permissions on exit regardless of whether the testing succeeds +function set_perms { + # Open up permissions on all test results so we can be sure the CI system can + # delete them after results are archived within Jenkins + ${DOCKER_RUN} bash -c "find \ + /workspace/${TEST_RESULTS_REL_DIR} -type d -exec chmod 775 {} +" + + ${DOCKER_RUN} bash -c "find \ + /workspace/${TEST_RESULTS_REL_DIR} -type f -exec chmod 664 {} +" +} + +trap set_perms EXIT + +# linting and pep8 style check (configured by .flake8 and .pylintrc) +${DOCKER_RUN} bash -c "source /usr/local/bin/_activate_current_env.sh; flake8 \ + --config ${CONTAINER_HOME}/opera/.flake8 \ + --jobs auto \ + --exit-zero \ + --application-import-names opera \ + --output-file /workspace/${TEST_RESULTS_REL_DIR}/${PGE_NAME}/flake8.log \ + ${CONTAINER_HOME}/opera" + +${DOCKER_RUN} bash -c "export HOME=/home/mamba/opera; source /usr/local/bin/_activate_current_env.sh; pylint \ + --rcfile=${CONTAINER_HOME}/opera/.pylintrc \ + --jobs 0 \ + --exit-zero \ + --output=/workspace/${TEST_RESULTS_REL_DIR}/${PGE_NAME}/pylint.log \ + --enable-all-extensions \ + ${CONTAINER_HOME}/opera" + +# pytest (including code coverage) +${DOCKER_RUN} bash -c "source /usr/local/bin/_activate_current_env.sh; pytest \ + --junit-xml=/workspace/${TEST_RESULTS_REL_DIR}/${PGE_NAME}/pytest-junit.xml \ + --cov=${CONTAINER_HOME}/opera/pge/base \ + --cov=${CONTAINER_HOME}/opera/pge/${PGE_NAME} \ + --cov=${CONTAINER_HOME}/opera/scripts \ + --cov=${CONTAINER_HOME}/opera/util \ + --cov-report=term \ + --cov-report=html:/workspace/${TEST_RESULTS_REL_DIR}/${PGE_NAME}/coverage_html \ + /workspace/src/opera/test/pge/base \ + /workspace/src/opera/test/pge/${PGE_NAME} \ + /workspace/src/opera/test/scripts \ + /workspace/src/opera/test/util > /workspace/${TEST_RESULTS_REL_DIR}/${PGE_NAME}/pytest.log 2>&1" + +echo "DIST-S1 PGE Docker image test complete" + +exit 0 diff --git a/.ci/scripts/dswx_ni/build_dswx_ni.sh b/.ci/scripts/dswx_ni/build_dswx_ni.sh index 15f34c87..0cf0d989 100755 --- a/.ci/scripts/dswx_ni/build_dswx_ni.sh +++ b/.ci/scripts/dswx_ni/build_dswx_ni.sh @@ -53,7 +53,7 @@ copy_pge_files $WORKSPACE $STAGING_DIR $PGE_NAME mkdir -p ${STAGING_DIR}/opera/pge/dswx_s1; cp -r ${WORKSPACE}/src/opera/pge/dswx_s1/dswx_s1_pge.py ${STAGING_DIR}/opera/pge/dswx_s1/ # Create a VERSION file in the staging area to track version and build time -printf "pge_version: ${TAG}\npge_build_datetime: ${BUILD_DATE_TIME}\n" \ +printf "pge_version: ${TAG}\pge_build_datetime: ${BUILD_DATE_TIME}\n" \ > ${STAGING_DIR}/opera/VERSION \ # Remove the old Docker image, if it exists diff --git a/.ci/scripts/util/build_all_images.sh b/.ci/scripts/util/build_all_images.sh index f0ed4b03..89cdce88 100755 --- a/.ci/scripts/util/build_all_images.sh +++ b/.ci/scripts/util/build_all_images.sh @@ -34,6 +34,7 @@ ${BUILD_SCRIPTS_DIR}/rtc_s1/build_rtc_s1.sh --tag ${TAG} --workspace ${WORKSPACE ${BUILD_SCRIPTS_DIR}/dswx_s1/build_dswx_s1.sh --tag ${TAG} --workspace ${WORKSPACE} ${BUILD_SCRIPTS_DIR}/disp_s1/build_disp_s1.sh --tag ${TAG} --workspace ${WORKSPACE} ${BUILD_SCRIPTS_DIR}/dswx_ni/build_dswx_ni.sh --tag ${TAG} --workspace ${WORKSPACE} +${BUILD_SCRIPTS_DIR}/dist_s1/build_dist_s1.sh --tag ${TAG} --workspace ${WORKSPACE} echo 'Build Complete' diff --git a/.ci/scripts/util/test_all_images.sh b/.ci/scripts/util/test_all_images.sh index 5fd165d3..e4ad6951 100755 --- a/.ci/scripts/util/test_all_images.sh +++ b/.ci/scripts/util/test_all_images.sh @@ -34,6 +34,7 @@ ${BUILD_SCRIPTS_DIR}/rtc_s1/test_rtc_s1.sh --tag ${TAG} --workspace ${WORKSPACE} ${BUILD_SCRIPTS_DIR}/dswx_s1/test_dswx_s1.sh --tag ${TAG} --workspace ${WORKSPACE} ${BUILD_SCRIPTS_DIR}/disp_s1/test_disp_s1.sh --tag ${TAG} --workspace ${WORKSPACE} ${BUILD_SCRIPTS_DIR}/dswx_ni/test_dswx_ni.sh --tag ${TAG} --workspace ${WORKSPACE} +${BUILD_SCRIPTS_DIR}/dist_s1/test_dist_s1.sh --tag ${TAG} --workspace ${WORKSPACE} echo 'Build Complete' exit 0 diff --git a/src/opera/pge/dist_s1/dist_s1_pge.py b/src/opera/pge/dist_s1/dist_s1_pge.py new file mode 100644 index 00000000..737455c5 --- /dev/null +++ b/src/opera/pge/dist_s1/dist_s1_pge.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +""" +============== +dist_s1_pge.py +============== +Module defining the implementation for the Surface Disturbance (DIST) from Sentinel-1 A/C (S1) PGE. + +""" + +from opera.pge.base.base_pge import PreProcessorMixin, PgeExecutor, PostProcessorMixin + + +class DistS1PreProcessorMixin(PreProcessorMixin): + """ + Mixin class responsible for handling all pre-processing steps for the DIST-S1 + PGE. The pre-processing phase is defined as all steps necessary prior + to SAS execution. + + This particular pre-processor is currently a stub implementation, inheriting from the base pre-processor mixin + and adding nothing at this time. New functionalities will be added as new versions of the DIST-S1 SAS are released. + + """ + + _pre_mixin_name = "DistS1PreProcessorMixin" + _valid_input_extensions = (".tif",) + + def run_preprocessor(self, **kwargs): + """ + Executes the pre-processing steps for DIST-S1 PGE initialization. + The DistS1PreProcessorMixin version of this class performs all actions + of the PreProcessorMixin class. Parameterization of the validation + functions is handled via specialized class attributes (i.e. _valid_input_extensions) + + Parameters + ---------- + **kwargs: dict + Any keyword arguments needed by the pre-processor + """ + super().run_preprocessor(**kwargs) + + +class DistS1PostProcessorMixin(PostProcessorMixin): + """ + Mixin class responsible for handling all post-processing steps for the DIST-S1 + PGE. The post-processing phase is defined as all steps required after SAS + execution has completed, prior to handover of output products to PCM. + + This particular pre-processor is currently a stub implementation, inheriting from the base pre-processor mixin + and adding nothing at this time. New functionalities will be added as new versions of the DIST-S1 SAS are released. + + """ + + _post_mixin_name = "DistS1PostProcessorMixin" + _cached_core_filename = None + _tile_metadata_cache = {} + _tile_filename_cache = {} + + def run_postprocessor(self, **kwargs): + """ + Executes the post-processing steps for the DSWx-NI PGE. + The DistS1PostProcessorMixin version of this method performs the same + steps as the base PostProcessorMixin. + + Parameters + ---------- + **kwargs: dict + Any keyword arguments needed by the post-processor + """ + super().run_postprocessor(**kwargs) + + +class DistS1Executor(DistS1PreProcessorMixin, DistS1PostProcessorMixin, PgeExecutor): + """ + Main class for execution of the DIST-S1 PGE, including the SAS layer. + This class essentially rolls up the DIST-specific pre- and post-processor + functionality, while inheriting all other functionality for setup and execution + of the SAS from the base PgeExecutor class. + """ + + NAME = "DIST-S1" + """Short name for the DIST-S1 PGE""" + + LEVEL = "L3" + """Processing Level for DIST-S1 Products""" + + SAS_VERSION = "0.0.3" # Beta release https://github.com/opera-adt/dist-s1/releases/tag/v0.0.3 + """Version of the SAS wrapped by this PGE, should be updated as needed""" + + def __init__(self, pge_name, runconfig_path, **kwargs): + super().__init__(pge_name, runconfig_path, **kwargs) + + self.rename_by_pattern_map = {} diff --git a/src/opera/pge/dist_s1/schema/algorithm_parameters_dist_s1_schema.yaml b/src/opera/pge/dist_s1/schema/algorithm_parameters_dist_s1_schema.yaml new file mode 100644 index 00000000..e69de29b diff --git a/src/opera/pge/dist_s1/schema/dist_s1_sas_schema.yaml b/src/opera/pge/dist_s1/schema/dist_s1_sas_schema.yaml new file mode 100644 index 00000000..7f421679 --- /dev/null +++ b/src/opera/pge/dist_s1/schema/dist_s1_sas_schema.yaml @@ -0,0 +1,28 @@ +# +# Yamale schema for the DIST-S1 SAS Configuration +# +run_config: + + # PLACEHOLDER FOR pre_rtc_copol PARAMETER DESCRIPTION + pre_rtc_copol: list(str(), required=True) + + # PLACEHOLDER FOR pre_rtc_crosspol PARAMETER DESCRIPTION + pre_rtc_crosspol: list(str(), required=True) + + # PLACEHOLDER FOR post_rtc_copol PARAMETER DESCRIPTION + post_rtc_copol: list(str(), required=True) + + # PLACEHOLDER FOR post_rtc_crosspol PARAMETER DESCRIPTION + post_rtc_crosspol: list(str(), required=True) + + # PLACEHOLDER FOR mgrs_tile_id PARAMETER DESCRIPTION + mgrs_tile_id: str(required=True) + + # PLACEHOLDER FOR dist_s1_alert_db_dir PARAMETER DESCRIPTION + dist_s1_alert_db_dir: str(required=False) + + # PLACEHOLDER FOR dst_dir PARAMETER DESCRIPTION + dst_dir: str(required=False) + + # PLACEHOLDER FOR water_mask PARAMETER DESCRIPTION + water_mask: str(required=False) diff --git a/src/opera/pge/dist_s1/templates/OPERA_ISO_metadata_L3_DIST_S1_template.xml.jinja2 b/src/opera/pge/dist_s1/templates/OPERA_ISO_metadata_L3_DIST_S1_template.xml.jinja2 new file mode 100644 index 00000000..e69de29b diff --git a/src/opera/pge/dist_s1/templates/dist_s1_measured_parameters.yaml b/src/opera/pge/dist_s1/templates/dist_s1_measured_parameters.yaml new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/src/opera/pge/dist_s1/templates/dist_s1_measured_parameters.yaml @@ -0,0 +1 @@ +{} diff --git a/src/opera/scripts/pge_main.py b/src/opera/scripts/pge_main.py index 7262f29d..83388a49 100755 --- a/src/opera/scripts/pge_main.py +++ b/src/opera/scripts/pge_main.py @@ -23,13 +23,14 @@ PGE_NAME_MAP = { + 'BASE_PGE': ('opera.pge.base.base_pge', 'PgeExecutor'), 'CSLC_S1_PGE': ('opera.pge.cslc_s1.cslc_s1_pge', 'CslcS1Executor'), 'DISP_S1_PGE': ('opera.pge.disp_s1.disp_s1_pge', 'DispS1Executor'), + 'DIST_S1_PGE': ('opera.pge.dist_s1.dist_s1_pge', 'DistS1Executor'), 'DSWX_HLS_PGE': ('opera.pge.dswx_hls.dswx_hls_pge', 'DSWxHLSExecutor'), + 'DSWX_NI_PGE': ('opera.pge.dswx_ni.dswx_ni_pge', 'DSWxNIExecutor'), 'DSWX_S1_PGE': ('opera.pge.dswx_s1.dswx_s1_pge', 'DSWxS1Executor'), 'RTC_S1_PGE': ('opera.pge.rtc_s1.rtc_s1_pge', 'RtcS1Executor'), - 'DSWX_NI_PGE': ('opera.pge.dswx_ni.dswx_ni_pge', 'DSWxNIExecutor'), - 'BASE_PGE': ('opera.pge.base.base_pge', 'PgeExecutor') } """Mapping of PGE names specified by a RunConfig to the PGE module and class type to instantiate""" diff --git a/src/opera/test/data/test_dist_s1_config.yaml b/src/opera/test/data/test_dist_s1_config.yaml new file mode 100644 index 00000000..68a58acc --- /dev/null +++ b/src/opera/test/data/test_dist_s1_config.yaml @@ -0,0 +1,378 @@ +RunConfig: + Name: OPERA-DIST-S1-PGE-TEST-CONFIG + Groups: + PGE: + PGENameGroup: + PGEName: DIST_S1_PGE + InputFilesGroup: + InputFilePaths: + - dist_s1_pge_test/input_dir + DynamicAncillaryFilesGroup: + AncillaryFileMap: + dem_file: dist_s1_pge_test/input_dir/dem.tif + hand_file: dist_s1_pge_test/input_dir/hand.tif + reference_water_file: dist_s1_pge_test/input_dir/reference_water.tif + world_cover: dist_s1_pge_test/input_dir/worldcover.tif + shoreline_shapefile: dist_s1_pge_test/input_dir/shoreline.shp + ProductPathGroup: + OutputProductPath: dist_s1_pge_test/output_dir + ScratchPath: dist_s1_pge_test/scratch_dir + PrimaryExecutable: + ProductIdentifier: DIST_S1 + ProductVersion: "1.0" + ProgramPath: /bin/echo + ProgramOptions: + - hello world > dist_s1_pge_test/output_dir/OPERA_L3_DSWx-NI_T18MVA_20200702T231843Z_20230317T190549Z_v0.1_B01_WTR.tif; + - /bin/echo DIST-S1 invoked with RunConfig + ErrorCodeBase: 400000 + SchemaPath: pge/dist_s1/schema/dist_s1_sas_schema.yaml + AlgorithmParametersSchemaPath: pge/dist_s1/schema/algorithm_parameters_dist_s1_schema.yaml + IsoTemplatePath: pge/dist_s1/templates/OPERA_ISO_metadata_L3_DIST_S1_template.xml.jinja2 + IsoMeasuredParameterDescriptions: pge/dist_s1/templates/dist_s1_measured_parameters.yaml + QAExecutable: + Enabled: false + ProgramPath: null + ProgramOptions: [] + DebugLevelGroup: + DebugSwitch: false + ExecuteViaShell: true + SAS: + run_config: + pre_rtc_copol: + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292318-IW1_20240706T015901Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292318-IW1_20240718T015900Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292318-IW1_20240730T015900Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292318-IW1_20240811T015900Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292318-IW1_20240823T015900Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292318-IW1_20240904T015900Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292318-IW1_20240916T015901Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292318-IW1_20240928T015901Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292318-IW1_20241010T015902Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292318-IW1_20241022T015902Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292318-IW2_20240706T015902Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292318-IW2_20240718T015901Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292318-IW2_20240730T015901Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292318-IW2_20240811T015901Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292318-IW2_20240823T015901Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292318-IW2_20240904T015901Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292318-IW2_20240916T015902Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292318-IW2_20240928T015902Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292318-IW2_20241010T015903Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292318-IW2_20241022T015902Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292319-IW1_20240706T015903Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292319-IW1_20240718T015903Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292319-IW1_20240730T015903Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292319-IW1_20240811T015903Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292319-IW1_20240823T015903Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292319-IW1_20240904T015903Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292319-IW1_20240916T015904Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292319-IW1_20240928T015904Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292319-IW1_20241010T015905Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292319-IW1_20241022T015904Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292319-IW2_20240706T015904Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292319-IW2_20240718T015904Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292319-IW2_20240730T015904Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292319-IW2_20240811T015904Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292319-IW2_20240823T015904Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292319-IW2_20240904T015904Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292319-IW2_20240916T015905Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292319-IW2_20240928T015905Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292319-IW2_20241010T015906Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292319-IW2_20241022T015905Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292320-IW1_20240706T015906Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292320-IW1_20240718T015906Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292320-IW1_20240730T015905Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292320-IW1_20240811T015905Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292320-IW1_20240823T015906Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292320-IW1_20240904T015906Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292320-IW1_20240916T015907Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292320-IW1_20240928T015906Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292320-IW1_20241010T015907Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292320-IW1_20241022T015907Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292320-IW2_20240706T015907Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292320-IW2_20240718T015907Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292320-IW2_20240730T015906Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292320-IW2_20240811T015906Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292320-IW2_20240823T015907Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292320-IW2_20240904T015907Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292320-IW2_20240916T015908Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292320-IW2_20240928T015907Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292320-IW2_20241010T015908Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292320-IW2_20241022T015908Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292321-IW1_20240706T015909Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292321-IW1_20240718T015908Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292321-IW1_20240730T015908Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292321-IW1_20240811T015908Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292321-IW1_20240823T015908Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292321-IW1_20240904T015908Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292321-IW1_20240916T015909Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292321-IW1_20240928T015909Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292321-IW1_20241010T015910Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292321-IW1_20241022T015910Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292321-IW2_20240706T015910Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292321-IW2_20240718T015909Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292321-IW2_20240730T015909Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292321-IW2_20240811T015909Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292321-IW2_20240823T015909Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292321-IW2_20240904T015909Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292321-IW2_20240916T015910Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292321-IW2_20240928T015910Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292321-IW2_20241010T015911Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292321-IW2_20241022T015911Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292322-IW1_20240706T015912Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292322-IW1_20240718T015911Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292322-IW1_20240730T015911Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292322-IW1_20240811T015911Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292322-IW1_20240823T015911Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292322-IW1_20240904T015911Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292322-IW1_20240916T015912Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292322-IW1_20240928T015912Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292322-IW1_20241010T015913Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292322-IW1_20241022T015913Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292322-IW2_20240706T015913Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292322-IW2_20240718T015912Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292322-IW2_20240730T015912Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292322-IW2_20240811T015912Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292322-IW2_20240823T015912Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292322-IW2_20240904T015912Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292322-IW2_20240916T015913Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292322-IW2_20240928T015913Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292322-IW2_20241010T015914Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292322-IW2_20241022T015913Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292323-IW1_20240706T015914Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292323-IW1_20240718T015914Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292323-IW1_20240730T015914Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292323-IW1_20240811T015914Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292323-IW1_20240823T015914Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292323-IW1_20240904T015914Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292323-IW1_20240916T015915Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292323-IW1_20240928T015915Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292323-IW1_20241010T015916Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292323-IW1_20241022T015915Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292323-IW2_20240706T015915Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292323-IW2_20240718T015915Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292323-IW2_20240730T015915Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292323-IW2_20240811T015915Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292323-IW2_20240823T015915Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292323-IW2_20240904T015915Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292323-IW2_20240916T015916Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292323-IW2_20240928T015916Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292323-IW2_20241010T015917Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292323-IW2_20241022T015916Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292324-IW1_20240706T015917Z_20240708T000435Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292324-IW1_20240718T015917Z_20240718T072557Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292324-IW1_20240730T015916Z_20240730T064555Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292324-IW1_20240811T015917Z_20240811T064742Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292324-IW1_20240823T015917Z_20240823T084936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292324-IW1_20240904T015917Z_20240904T150822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292324-IW1_20240916T015918Z_20240916T114330Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292324-IW1_20240928T015917Z_20240929T005548Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292324-IW1_20241010T015918Z_20241010T101259Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292324-IW1_20241022T015918Z_20241022T180854Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292324-IW2_20240706T015918Z_20240707T204046Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292324-IW2_20240718T015918Z_20240718T072037Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292324-IW2_20240730T015917Z_20240730T064543Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292324-IW2_20240811T015917Z_20240811T064811Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292324-IW2_20240823T015918Z_20240823T073725Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292324-IW2_20240904T015918Z_20240904T144513Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292324-IW2_20240916T015919Z_20240916T075719Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292324-IW2_20240928T015918Z_20240928T224822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292324-IW2_20241010T015919Z_20241010T100855Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292324-IW2_20241022T015919Z_20241022T180523Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292325-IW1_20240706T015920Z_20240707T204046Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292325-IW1_20240718T015919Z_20240718T072037Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292325-IW1_20240730T015919Z_20240730T064543Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292325-IW1_20240811T015919Z_20240811T064811Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292325-IW1_20240823T015919Z_20240823T073725Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292325-IW1_20240904T015920Z_20240904T144513Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292325-IW1_20240916T015920Z_20240916T075719Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292325-IW1_20240928T015920Z_20240928T224822Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292325-IW1_20241010T015921Z_20241010T100855Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292325-IW1_20241022T015921Z_20241022T180523Z_S1A_30_v1.0_VV.tif + pre_rtc_crosspol: + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292318-IW1_20240706T015901Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292318-IW1_20240718T015900Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292318-IW1_20240730T015900Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292318-IW1_20240811T015900Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292318-IW1_20240823T015900Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292318-IW1_20240904T015900Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292318-IW1_20240916T015901Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292318-IW1_20240928T015901Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292318-IW1_20241010T015902Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292318-IW1_20241022T015902Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292318-IW2_20240706T015902Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292318-IW2_20240718T015901Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292318-IW2_20240730T015901Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292318-IW2_20240811T015901Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292318-IW2_20240823T015901Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292318-IW2_20240904T015901Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292318-IW2_20240916T015902Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292318-IW2_20240928T015902Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292318-IW2_20241010T015903Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292318-IW2_20241022T015902Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292319-IW1_20240706T015903Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292319-IW1_20240718T015903Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292319-IW1_20240730T015903Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292319-IW1_20240811T015903Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292319-IW1_20240823T015903Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292319-IW1_20240904T015903Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292319-IW1_20240916T015904Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292319-IW1_20240928T015904Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292319-IW1_20241010T015905Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292319-IW1_20241022T015904Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292319-IW2_20240706T015904Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292319-IW2_20240718T015904Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292319-IW2_20240730T015904Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292319-IW2_20240811T015904Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292319-IW2_20240823T015904Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292319-IW2_20240904T015904Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292319-IW2_20240916T015905Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292319-IW2_20240928T015905Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292319-IW2_20241010T015906Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292319-IW2_20241022T015905Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292320-IW1_20240706T015906Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292320-IW1_20240718T015906Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292320-IW1_20240730T015905Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292320-IW1_20240811T015905Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292320-IW1_20240823T015906Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292320-IW1_20240904T015906Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292320-IW1_20240916T015907Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292320-IW1_20240928T015906Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292320-IW1_20241010T015907Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292320-IW1_20241022T015907Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292320-IW2_20240706T015907Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292320-IW2_20240718T015907Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292320-IW2_20240730T015906Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292320-IW2_20240811T015906Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292320-IW2_20240823T015907Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292320-IW2_20240904T015907Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292320-IW2_20240916T015908Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292320-IW2_20240928T015907Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292320-IW2_20241010T015908Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292320-IW2_20241022T015908Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292321-IW1_20240706T015909Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292321-IW1_20240718T015908Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292321-IW1_20240730T015908Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292321-IW1_20240811T015908Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292321-IW1_20240823T015908Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292321-IW1_20240904T015908Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292321-IW1_20240916T015909Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292321-IW1_20240928T015909Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292321-IW1_20241010T015910Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292321-IW1_20241022T015910Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292321-IW2_20240706T015910Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292321-IW2_20240718T015909Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292321-IW2_20240730T015909Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292321-IW2_20240811T015909Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292321-IW2_20240823T015909Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292321-IW2_20240904T015909Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292321-IW2_20240916T015910Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292321-IW2_20240928T015910Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292321-IW2_20241010T015911Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292321-IW2_20241022T015911Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292322-IW1_20240706T015912Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292322-IW1_20240718T015911Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292322-IW1_20240730T015911Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292322-IW1_20240811T015911Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292322-IW1_20240823T015911Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292322-IW1_20240904T015911Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292322-IW1_20240916T015912Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292322-IW1_20240928T015912Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292322-IW1_20241010T015913Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292322-IW1_20241022T015913Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292322-IW2_20240706T015913Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292322-IW2_20240718T015912Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292322-IW2_20240730T015912Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292322-IW2_20240811T015912Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292322-IW2_20240823T015912Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292322-IW2_20240904T015912Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292322-IW2_20240916T015913Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292322-IW2_20240928T015913Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292322-IW2_20241010T015914Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292322-IW2_20241022T015913Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292323-IW1_20240706T015914Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292323-IW1_20240718T015914Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292323-IW1_20240730T015914Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292323-IW1_20240811T015914Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292323-IW1_20240823T015914Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292323-IW1_20240904T015914Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292323-IW1_20240916T015915Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292323-IW1_20240928T015915Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292323-IW1_20241010T015916Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292323-IW1_20241022T015915Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292323-IW2_20240706T015915Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292323-IW2_20240718T015915Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292323-IW2_20240730T015915Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292323-IW2_20240811T015915Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292323-IW2_20240823T015915Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292323-IW2_20240904T015915Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292323-IW2_20240916T015916Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292323-IW2_20240928T015916Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292323-IW2_20241010T015917Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292323-IW2_20241022T015916Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292324-IW1_20240706T015917Z_20240708T000435Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292324-IW1_20240718T015917Z_20240718T072557Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292324-IW1_20240730T015916Z_20240730T064555Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292324-IW1_20240811T015917Z_20240811T064742Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292324-IW1_20240823T015917Z_20240823T084936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292324-IW1_20240904T015917Z_20240904T150822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292324-IW1_20240916T015918Z_20240916T114330Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292324-IW1_20240928T015917Z_20240929T005548Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292324-IW1_20241010T015918Z_20241010T101259Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292324-IW1_20241022T015918Z_20241022T180854Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292324-IW2_20240706T015918Z_20240707T204046Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292324-IW2_20240718T015918Z_20240718T072037Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292324-IW2_20240730T015917Z_20240730T064543Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292324-IW2_20240811T015917Z_20240811T064811Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292324-IW2_20240823T015918Z_20240823T073725Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292324-IW2_20240904T015918Z_20240904T144513Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292324-IW2_20240916T015919Z_20240916T075719Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292324-IW2_20240928T015918Z_20240928T224822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292324-IW2_20241010T015919Z_20241010T100855Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292324-IW2_20241022T015919Z_20241022T180523Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-06/OPERA_L2_RTC-S1_T137-292325-IW1_20240706T015920Z_20240707T204046Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-18/OPERA_L2_RTC-S1_T137-292325-IW1_20240718T015919Z_20240718T072037Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-07-30/OPERA_L2_RTC-S1_T137-292325-IW1_20240730T015919Z_20240730T064543Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-11/OPERA_L2_RTC-S1_T137-292325-IW1_20240811T015919Z_20240811T064811Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-08-23/OPERA_L2_RTC-S1_T137-292325-IW1_20240823T015919Z_20240823T073725Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-04/OPERA_L2_RTC-S1_T137-292325-IW1_20240904T015920Z_20240904T144513Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-16/OPERA_L2_RTC-S1_T137-292325-IW1_20240916T015920Z_20240916T075719Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-09-28/OPERA_L2_RTC-S1_T137-292325-IW1_20240928T015920Z_20240928T224822Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-10/OPERA_L2_RTC-S1_T137-292325-IW1_20241010T015921Z_20241010T100855Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-10-22/OPERA_L2_RTC-S1_T137-292325-IW1_20241022T015921Z_20241022T180523Z_S1A_30_v1.0_VH.tif + post_rtc_copol: + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292318-IW1_20241103T015902Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292318-IW2_20241103T015902Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292319-IW1_20241103T015904Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292319-IW2_20241103T015905Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292320-IW1_20241103T015907Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292320-IW2_20241103T015908Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292321-IW1_20241103T015910Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292321-IW2_20241103T015911Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292322-IW1_20241103T015913Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292322-IW2_20241103T015914Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292323-IW1_20241103T015915Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292323-IW2_20241103T015916Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292324-IW1_20241103T015918Z_20241103T071409Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292324-IW2_20241103T015919Z_20241103T074936Z_S1A_30_v1.0_VV.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292325-IW1_20241103T015921Z_20241103T074936Z_S1A_30_v1.0_VV.tif + post_rtc_crosspol: + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292318-IW1_20241103T015902Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292318-IW2_20241103T015902Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292319-IW1_20241103T015904Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292319-IW2_20241103T015905Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292320-IW1_20241103T015907Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292320-IW2_20241103T015908Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292321-IW1_20241103T015910Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292321-IW2_20241103T015911Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292322-IW1_20241103T015913Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292322-IW2_20241103T015914Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292323-IW1_20241103T015915Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292323-IW2_20241103T015916Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292324-IW1_20241103T015918Z_20241103T071409Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292324-IW2_20241103T015919Z_20241103T074936Z_S1A_30_v1.0_VH.tif + - test_data/10SGD_cropped/137/2024-11-03/OPERA_L2_RTC-S1_T137-292325-IW1_20241103T015921Z_20241103T074936Z_S1A_30_v1.0_VH.tif + mgrs_tile_id: 10SGD + dist_s1_alert_db_dir: + dst_dir: + water_mask: diff --git a/src/opera/test/pge/dist_s1/test_dist_s1_pge.py b/src/opera/test/pge/dist_s1/test_dist_s1_pge.py new file mode 100644 index 00000000..9796ebbf --- /dev/null +++ b/src/opera/test/pge/dist_s1/test_dist_s1_pge.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +""" +=================== +test_dist_s1_pge.py +=================== +Unit tests for the pge/dist_s1/dist_s1_pge.py module. +""" + +import glob +import os +import tempfile +import unittest +from io import StringIO +from os.path import abspath, join + +from pkg_resources import resource_filename + +from opera.pge import RunConfig +from opera.pge.dist_s1.dist_s1_pge import DistS1Executor +from opera.util import PgeLogger + + +class DistS1PgeTestCase(unittest.TestCase): + """Base test class using unittest""" + + starting_dir = None + working_dir = None + test_dir = None + input_file = None + + @classmethod + def setUpClass(cls) -> None: + """Set up directories and files for testing""" + cls.starting_dir = abspath(os.curdir) + cls.test_dir = resource_filename(__name__, "") + cls.data_dir = join(cls.test_dir, os.pardir, os.pardir, "data") + + os.chdir(cls.test_dir) + + @classmethod + def tearDownClass(cls) -> None: + """At completion re-establish starting directory""" + os.chdir(cls.starting_dir) + + def setUp(self) -> None: + """Use the temporary directory as the working directory""" + self.working_dir = tempfile.TemporaryDirectory( + prefix="test_dist_s1_pge_", suffix="_temp", dir=os.curdir + ) + + # Create the input dir expected by the test RunConfig and add a + # dummy input file + input_dir = join(self.working_dir.name, "dist_s1_pge_test/input_dir") + os.makedirs(input_dir, exist_ok=True) + + self.input_file = tempfile.NamedTemporaryFile( + dir=input_dir, prefix="test_input_", suffix=".tiff" + ) + + os.chdir(self.working_dir.name) + + def tearDown(self) -> None: + """Return to starting directory""" + os.chdir(self.test_dir) + self.input_file.close() + self.working_dir.cleanup() + + def test_dswx_ni_pge_execution(self): + """ + Test execution of the DistS1Executor class and its associated mixins + using a test RunConfig that creates dummy expected output files and logs + a message to be captured by PgeLogger. + """ + runconfig_path = join(self.data_dir, 'test_dist_s1_config.yaml') + + pge = DistS1Executor(pge_name="DistS1PgeTest", runconfig_path=runconfig_path) + + # Check that basic attributes were initialized + self.assertEqual(pge.name, "DIST-S1") + self.assertEqual(pge.pge_name, "DistS1PgeTest") + self.assertEqual(pge.runconfig_path, runconfig_path) + + # Check that other objects have not been instantiated yet + self.assertIsNone(pge.runconfig) + self.assertIsNone(pge.logger) + + # Kickoff execution of DSWx-NI PGE + pge.run() + + # Check that the runconfig and logger were instantiated + self.assertIsInstance(pge.runconfig, RunConfig) + self.assertIsInstance(pge.logger, PgeLogger) + + # Check that directories were created according to RunConfig + self.assertTrue(os.path.isdir(pge.runconfig.output_product_path)) + self.assertTrue(os.path.isdir(pge.runconfig.scratch_path)) + + # Check that an in-memory log was created + stream = pge.logger.get_stream_object() + self.assertIsInstance(stream, StringIO) + + # Check that a RunConfig for the SAS was isolated within the scratch directory + expected_sas_config_file = join(pge.runconfig.scratch_path, 'test_dist_s1_config_sas.yaml') + self.assertTrue(os.path.exists(expected_sas_config_file)) + + # Check that the log file was created and moved into the output directory + expected_log_file = pge.logger.get_file_name() + self.assertTrue(os.path.exists(expected_log_file)) + + # Lastly, check that the dummy output products were created + slc_files = glob.glob(join(pge.runconfig.output_product_path, "*.tif")) + self.assertEqual(len(slc_files), 1) + + # Open and read the log + with open(expected_log_file, 'r', encoding='utf-8') as infile: + log_contents = infile.read() + + self.assertIn(f"DIST-S1 invoked with RunConfig {expected_sas_config_file}", log_contents) + + +if __name__ == "__main__": + unittest.main()