Apply current workspace changes
This commit is contained in:
@@ -0,0 +1,221 @@
|
||||
#!/usr/bin/env bash
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
BASE_ROOT='/mnt/d/PyINT_POOL_TEST/LT1A_MONO_SYC_STRIP1_E129.6_N45.0_3scene'
|
||||
CASES_ROOT='/mnt/d/PyINT_POOL_TEST/LT1A_MONO_SYC_STRIP1_E129.6_N45.0_3scene_dem_cases'
|
||||
PROJECT='pyint_stage'
|
||||
MASTER_DATE='20230726'
|
||||
SLAVE_DATES=(20230624 20230920)
|
||||
|
||||
REPO='/mnt/d/Code/Insar_management_system_v2'
|
||||
PYINT_HOME="$REPO/third_party/PyINT"
|
||||
PYINT_SCRIPT_DIR="$PYINT_HOME/pyint"
|
||||
PYTHON_BIN='/home/administrator/miniconda3/envs/isce2/bin/python'
|
||||
GAMMA_ENV="$REPO/backend/app/pyint_pipeline/pyint_gamma_env.sh"
|
||||
GAMMA_SCRIPT_DIR='/usr/local/GAMMA_SOFTWARE-20240627/ISP/scripts'
|
||||
|
||||
RUN_STAMP="${1:-$(date -u +%Y%m%dT%H%M%SZ)}"
|
||||
RUN_ROOT="$CASES_ROOT/run_$RUN_STAMP"
|
||||
STATUS_FILE="$RUN_ROOT/stage_status.tsv"
|
||||
CASE_FILTER="${CASE_FILTER:-}"
|
||||
|
||||
fail() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
ensure_file() {
|
||||
local path="$1"
|
||||
[ -f "$path" ] || fail "Required file not found: $path"
|
||||
}
|
||||
|
||||
ensure_dir() {
|
||||
local path="$1"
|
||||
[ -d "$path" ] || fail "Required directory not found: $path"
|
||||
}
|
||||
|
||||
write_status() {
|
||||
local case_name="$1"
|
||||
local stage="$2"
|
||||
local rc="$3"
|
||||
local stdout_log="$4"
|
||||
local stderr_log="$5"
|
||||
printf '%s\t%s\t%s\t%s\t%s\n' "$case_name" "$stage" "$rc" "$stdout_log" "$stderr_log" >>"$STATUS_FILE"
|
||||
}
|
||||
|
||||
run_stage() {
|
||||
local case_name="$1"
|
||||
local stage="$2"
|
||||
shift 2
|
||||
local stdout_log="$RUN_ROOT/$case_name/logs/${stage}.stdout.log"
|
||||
local stderr_log="$RUN_ROOT/$case_name/logs/${stage}.stderr.log"
|
||||
local rc=0
|
||||
|
||||
echo "[stage] $case_name :: $stage"
|
||||
"$@" >"$stdout_log" 2>"$stderr_log" || rc=$?
|
||||
write_status "$case_name" "$stage" "$rc" "$stdout_log" "$stderr_log"
|
||||
|
||||
if [ "$rc" -eq 0 ]; then
|
||||
echo "[ok] $case_name :: $stage"
|
||||
else
|
||||
echo "[fail] $case_name :: $stage (rc=$rc)" >&2
|
||||
fi
|
||||
return "$rc"
|
||||
}
|
||||
|
||||
link_or_copy_static() {
|
||||
local src="$1"
|
||||
local dst="$2"
|
||||
if [ -e "$src" ]; then
|
||||
ln -s "$src" "$dst"
|
||||
fi
|
||||
}
|
||||
|
||||
build_scene_dir() {
|
||||
local case_root="$1"
|
||||
local scene_date="$2"
|
||||
local base_dir="$BASE_ROOT/$PROJECT/SLC/$scene_date"
|
||||
local case_dir="$case_root/$PROJECT/SLC/$scene_date"
|
||||
|
||||
ensure_dir "$base_dir"
|
||||
mkdir -p "$case_dir"
|
||||
|
||||
ensure_file "$base_dir/$scene_date.slc"
|
||||
ensure_file "$base_dir/$scene_date.slc.par"
|
||||
|
||||
ln -s "$base_dir/$scene_date.slc" "$case_dir/$scene_date.slc"
|
||||
cp "$base_dir/$scene_date.slc.par" "$case_dir/$scene_date.slc.par"
|
||||
|
||||
link_or_copy_static "$base_dir/${scene_date}_2rlks.amp" "$case_dir/${scene_date}_2rlks.amp"
|
||||
link_or_copy_static "$base_dir/${scene_date}_2rlks.amp.par" "$case_dir/${scene_date}_2rlks.amp.par"
|
||||
link_or_copy_static "$base_dir/${scene_date}_SLC_Tab" "$case_dir/${scene_date}_SLC_Tab"
|
||||
link_or_copy_static "$base_dir/down2slc.dat" "$case_dir/down2slc.dat"
|
||||
link_or_copy_static "$base_dir/t_${scene_date}" "$case_dir/t_${scene_date}"
|
||||
}
|
||||
|
||||
set_template_key() {
|
||||
local template_path="$1"
|
||||
local key="$2"
|
||||
local value="$3"
|
||||
|
||||
"$PYTHON_BIN" -c '
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
path = Path(sys.argv[1])
|
||||
key = sys.argv[2]
|
||||
value = sys.argv[3]
|
||||
lines = path.read_text(encoding="utf-8").splitlines()
|
||||
prefix = key + "="
|
||||
updated = False
|
||||
for idx, line in enumerate(lines):
|
||||
if line.startswith(prefix):
|
||||
lines[idx] = prefix + value
|
||||
updated = True
|
||||
break
|
||||
if not updated:
|
||||
lines.append(prefix + value)
|
||||
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||||
' "$template_path" "$key" "$value"
|
||||
}
|
||||
|
||||
build_case() {
|
||||
local case_name="$1"
|
||||
local dem_source="$2"
|
||||
local opentopo_dem_type="$3"
|
||||
local case_root="$RUN_ROOT/$case_name"
|
||||
local template_path
|
||||
|
||||
mkdir -p "$case_root/templates" "$case_root/logs"
|
||||
mkdir -p "$case_root/$PROJECT/SLC" "$case_root/$PROJECT/DEM" "$case_root/$PROJECT/RSLC" "$case_root/$PROJECT/ifgrams"
|
||||
mkdir -p "$case_root/dem_store/$PROJECT"
|
||||
|
||||
cp "$BASE_ROOT/templates/$PROJECT.template" "$case_root/templates/$PROJECT.template"
|
||||
template_path="$case_root/templates/$PROJECT.template"
|
||||
set_template_key "$template_path" "prepared_dem_source" "$dem_source"
|
||||
set_template_key "$template_path" "fabdem_dir" "-"
|
||||
set_template_key "$template_path" "opentopo_dem_type" "$opentopo_dem_type"
|
||||
set_template_key "$template_path" "opentopo_api_key" "-"
|
||||
|
||||
build_scene_dir "$case_root" "$MASTER_DATE"
|
||||
for slave_date in "${SLAVE_DATES[@]}"; do
|
||||
build_scene_dir "$case_root" "$slave_date"
|
||||
done
|
||||
|
||||
printf '%s\n' "$case_root"
|
||||
}
|
||||
|
||||
run_case() {
|
||||
local case_name="$1"
|
||||
local dem_source="$2"
|
||||
local opentopo_dem_type="$3"
|
||||
local case_root
|
||||
local rc=0
|
||||
|
||||
case_root="$(build_case "$case_name" "$dem_source" "$opentopo_dem_type")"
|
||||
|
||||
export SCRATCHDIR="$case_root"
|
||||
export TEMPLATEDIR="$case_root/templates"
|
||||
export DEMDIR="$case_root/dem_store"
|
||||
|
||||
run_stage "$case_name" "makedem_pyint" "$PYTHON_BIN" "$PYINT_SCRIPT_DIR/makedem_pyint.py" "$PROJECT" || return $?
|
||||
run_stage "$case_name" "generate_rdc_dem" "$PYTHON_BIN" "$PYINT_SCRIPT_DIR/generate_rdc_dem.py" "$PROJECT" || return $?
|
||||
|
||||
for slave_date in "${SLAVE_DATES[@]}"; do
|
||||
run_stage "$case_name" "coreg_${slave_date}" "$PYTHON_BIN" "$PYINT_SCRIPT_DIR/coreg_gamma.py" "$PROJECT" "$slave_date" || rc=1
|
||||
done
|
||||
|
||||
return "$rc"
|
||||
}
|
||||
|
||||
should_run_case() {
|
||||
local case_name="$1"
|
||||
if [ -z "$CASE_FILTER" ]; then
|
||||
return 0
|
||||
fi
|
||||
case ",$CASE_FILTER," in
|
||||
*",$case_name,"*) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
main() {
|
||||
ensure_dir "$BASE_ROOT"
|
||||
ensure_dir "$BASE_ROOT/$PROJECT/SLC"
|
||||
ensure_file "$BASE_ROOT/templates/$PROJECT.template"
|
||||
ensure_file "$GAMMA_ENV"
|
||||
ensure_file "$PYTHON_BIN"
|
||||
|
||||
mkdir -p "$RUN_ROOT"
|
||||
printf 'case\tstage\trc\tstdout_log\tstderr_log\n' >"$STATUS_FILE"
|
||||
|
||||
. "$GAMMA_ENV" >/dev/null 2>&1
|
||||
export PATH="/home/administrator/miniconda3/envs/isce2/bin:$GAMMA_SCRIPT_DIR:$PYINT_SCRIPT_DIR:$PATH"
|
||||
export PYTHONPATH="$PYINT_HOME${PYTHONPATH:+:$PYTHONPATH}"
|
||||
|
||||
cat >"$RUN_ROOT/run_info.txt" <<EOF
|
||||
run_root=$RUN_ROOT
|
||||
base_root=$BASE_ROOT
|
||||
project=$PROJECT
|
||||
master=$MASTER_DATE
|
||||
slaves=${SLAVE_DATES[*]}
|
||||
python=$PYTHON_BIN
|
||||
pyint_home=$PYINT_HOME
|
||||
EOF
|
||||
|
||||
if should_run_case 'case_A_copdem_baseline'; then
|
||||
run_case 'case_A_copdem_baseline' '/mnt/d/DEM/COPDEM_GLO30_China_4326_DEM' '-'
|
||||
fi
|
||||
if should_run_case 'case_B_gmted2010_jp2'; then
|
||||
run_case 'case_B_gmted2010_jp2' '/mnt/d/DEM/GMTED2010.jp2' '-'
|
||||
fi
|
||||
if should_run_case 'case_C_opentopo_srtmgl1'; then
|
||||
run_case 'case_C_opentopo_srtmgl1' '-' 'SRTMGL1'
|
||||
fi
|
||||
|
||||
echo "[done] run_root=$RUN_ROOT"
|
||||
echo "[done] status_file=$STATUS_FILE"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user