# PyINT/Gamma LT-1 集成维护记录 更新时间:2026-04-30 ## 1. 背景 本轮工作目标是评估并吸收专家提供的 `D:\Code\PyINT_LT1` 中 LT-1 / Gamma 相关修复,继续推进当前项目内 `PyINT / Gamma` 的 D-InSAR 生产能力。 已有排查结论见: - `docs/PYINT_GAMMA_AB_FINDINGS_20260420.md` - `docs/PYINT_GAMMA_INTEGRATION_DESIGN_20260418.md` 之前 A/B 排查已经确认:当前 PyINT/Gamma 的关键问题主要在 LT-1 导入、DEM 几何和 `coreg` 前置链路,不是解缠、地理编码或导出问题。并且旧的 rescue/fallback 曾经掩盖真实 `coreg` 失败,导致流程成功但产物全 0。 ## 2. 专家代码判断 专家目录: `D:\Code\PyINT_LT1` 该目录不是完整 PyINT 替代仓库,而是一组 LT-1 专用脚本补丁,主要包含: - `down2slc_LT1.py` - `down2slc_cat_LT1.py` - `down2slc_LT1_all.py` - `coreg_gamma.py` - `coreg_gamma_all.py` - `generate_rdc_dem.py` - `makedem_pyint.py` - `makedem.py` - `diff/unwrap/geocode` 相关脚本 可吸收价值: - 修正 LT-1 文件名日期提取偏移。 - 修正 LT-1 批处理错误日志名。 - 改善 `coreg_gamma.py` 中 master/slave 路径、RSLC 路径和 masterDate 选择。 - 增加 master 日期本身的 RSLC 生成处理。 - 对多景拼接场景更明确地区分单片 SLC、update SLC 和最终拼接 SLC。 不能整包覆盖的原因: - 专家版多个脚本大量使用裸 `os.system()`,部分命令失败不会立即中断。 - 当前项目已经收紧失败语义,要求 Gamma 核心命令失败即失败,避免再次出现“假成功、全 0 结果”。 - 专家版引用 `LT1_precision_orbit.py`,但该文件不在 `D:\Code\PyINT_LT1` 中。 - 当前项目已经有系统级精轨桥接 `backend/app/pyint_pipeline/apply_lt1_precise_orbit.py`,不应退回到未纳管的外部精轨脚本。 - 当前 WSL 环境没有 `csh/tcsh`,不能让 Python 运行链硬依赖 `LT1_import_SLC_from_zipfiles1` 这类 csh 脚本。 ## 3. 本轮改动范围 本轮只修改 Gamma/PyINT vendored 脚本,不修改 ISCE2 或 ENVI D-InSAR 生产链。 改动文件: - `third_party/PyINT/pyint/down2slc_LT1.py` - `third_party/PyINT/pyint/down2slc_cat_LT1.py` - `third_party/PyINT/pyint/down2slc_LT1_all.py` - `third_party/PyINT/pyint/coreg_gamma.py` - `third_party/PyINT/pyint/generate_rdc_dem.py` ## 4. 已落实策略 ### 4.1 LT-1 日期解析 旧实现使用固定切片 `file0[41:48]`,会把 `20241206` 截成 `0241206`。 本轮改为从文件名中正则提取 `20\d{6}`,同时兼容 `.tar.gz` 和 `.tiff` 输入。 ### 4.2 LT-1 单景导入 保留当前 Python 直接调用 `par_LT1_SLC` 的方式,不强制依赖 `csh`。 如果运行环境中存在 `par_LT1_SLC_YSLi`: - 额外生成 `.slc.update` / `.slc.update.par` - 将 update 参数文件中的 `state_vector_*` 合回主 `.slc.par` - 同时对 `.slc.par` 和 `.slc.update.par` 执行当前项目的精轨桥接 如果运行环境中不存在 `par_LT1_SLC_YSLi`: - 继续使用 `par_LT1_SLC` 的输出 - 打印 warning - 仍执行当前项目的精轨桥接 当前 WSL/Gamma 环境检查结果: - `par_LT1_SLC` 可用 - `SLC_cat_list.py` 可用 - `par_LT1_SLC_YSLi` 不可用 - `csh/tcsh` 不可用 因此 `par_LT1_SLC_YSLi` 必须保持可选,不能作为硬依赖。 ### 4.3 LT-1 多景拼接导入 多景场景改为逐景直接调用 Gamma 导入命令,并明确产出: - `_.slc` - `_.slc.par` - 可选 `_.slc.update` - 可选 `_.slc.update.par` 拼接时: - 如果所有分片都有 update SLC,则优先用 update SLC tab 调用 `SLC_cat_list.py` - 如果 update SLC 不可用,则回退到普通 SLC tab,并打印 warning - 最终 `.slc.par` 仍会再执行一次当前项目的精轨桥接 ### 4.4 错误日志 `down2slc_LT1_all.py` 的错误日志从: `down2slc_sen_all.err` 修正为: `down2slc_LT1_all.err` 这能让运行失败时的阶段日志更准确。 ### 4.5 coreg / DEM masterDate 兜底 `coreg_gamma.py` 和 `generate_rdc_dem.py` 增加 masterDate 实际存在性检查: - 如果模板中的 `masterDate` 在 `SLC/` 下存在,则照常使用。 - 如果不存在,则选择最接近的已有 SLC 日期,并打印提示。 `coreg_gamma.py` 同时增加 master 日期本身处理: - 如果 `Mdate == Sdate`,直接将 master SLC 复制为 master RSLC。 - 生成 master RSLC 的多视幅度。 - 不再进入 slave coreg 流程。 ## 5. 保留的安全边界 本轮没有恢复旧 rescue/fallback。 必须继续保留: - Gamma 核心命令失败即失败。 - `run_lt1_pyint_pipeline.py` 的全 0 二进制产物检查。 - 当前项目的 LT-1 精轨桥接和运行摘要记录。 - `Task_*` 输入资产适配层。 这几个边界是防止 PyINT/Gamma 再次产出“看似成功但科学结果无效”的关键。 ## 6. 已完成验证 已完成静态验证: ```bash python3 -m py_compile \ third_party/PyINT/pyint/down2slc_LT1.py \ third_party/PyINT/pyint/down2slc_cat_LT1.py \ third_party/PyINT/pyint/down2slc_LT1_all.py \ third_party/PyINT/pyint/coreg_gamma.py \ third_party/PyINT/pyint/generate_rdc_dem.py ``` 已完成 diff 检查: ```bash git diff --check ``` 已确认本轮 Git 改动只包含 Gamma/PyINT 文件和本维护文档,不涉及 ISCE2 / ENVI 生产链。 ## 7. 后续验证建议 建议用历史失败样例做 A/B: - `D:\Task_Pool\DInSAR\Task_260416_Gamma_PyINT\Task_20230602_20230720` 重点看: - `down2slc_LT1_all.err` - `coreg_gamma_all.err` - `SLC//orbit_bridge_summary.json` - `pyint_run_summary.json` - `diff_filt` / `cor` / `unw` / `geo_unw` 的 all-zero 检查结果 判断标准: - 不能靠 rescue 跳过失败。 - `coreg` 若失败,应明确失败并留下阶段日志。 - 若流程成功,关键二进制产物不能全 0。 - 精轨桥接 summary 应覆盖 master/slave 日期。 ## 8. 建议提交 建议和本轮代码一起提交: ```powershell git add docs/PYINT_GAMMA_LT1_INTEGRATION_NOTES_20260430.md ` third_party/PyINT/pyint/coreg_gamma.py ` third_party/PyINT/pyint/down2slc_LT1.py ` third_party/PyINT/pyint/down2slc_LT1_all.py ` third_party/PyINT/pyint/down2slc_cat_LT1.py ` third_party/PyINT/pyint/generate_rdc_dem.py git commit -m "fix(pyint): integrate LT1 gamma import and coreg fixes" ```