diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9662b34 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,8 @@ +# 二进制/大文本不做行级 diff,避免 git 卡顿 +*.csv -diff -merge -text +*.pdf -diff -text +*.docx -diff -text +*.xlsx -diff -text +*.png -diff -text +*.jpg -diff -text +*.zip -diff -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..241da69 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# ============================================================ +# 大数据文件不进 git:统一走 https://files.ddwsgood.top/ +# 需要时从网页或 WebDAV 下载,命令行见 COLLAB.md +# ============================================================ + +# 原始与派生数据(约 1.2 GB) +/data/ +/data.zip +/附件/* + +# 但保留赛题核心数据表(文本,体积可控) +!/附件/*.csv +!/附件/*.xlsx +!/附件/数据说明.txt + +# 大体量二进制格式一律不入库 +*.zip +*.rar +*.7z +*.tar +*.gz +*.tif +*.tiff +*.nc +*.mseed +*.SAC +*.shp +*.shx +*.dbf +*.prj +*.gdbtable +*.gdbtindex +*.spx +*.ovr +*.sqlite +*.db + +# Python / 编辑器 +__pycache__/ +*.py[cod] +.ipynb_checkpoints/ +.venv/ +venv/ +.DS_Store +Thumbs.db +*.log + +# 过程产物 +temp_*/ +/tmp/ diff --git a/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_audit.json b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_audit.json new file mode 100644 index 0000000..3b07868 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_audit.json @@ -0,0 +1,85 @@ +{ + "source_zip": "3ecd6ef8-fb24-44f0-b9f1-c8839fe83760.zip", + "doi": "10.11888/Cryos.tpdc.272812", + "metadata_claim": { + "slope_failures": 737, + "glof": 380 + }, + "slope_failures": { + "all_rows": { + "n": 618, + "by_precision": { + "day": 459, + "year": 154, + "other": 4, + "month": 1 + }, + "year_min": 1597, + "year_max": 2022 + }, + "valid_nondupe": 534, + "dup_rows": 84, + "by_sheet": { + "Rock avalanches": 235, + "Ice avalanches": 163, + "Ice-rock avalanches": 91, + "GLOF triggered by avalanches": 64, + "GLOF triggered by calving": 38, + "Glacier detachments": 27 + }, + "by_mechanism": { + "Rock avalanche": 235, + "Ice avalanche": 163, + "Ice-rock avalanche": 91, + "Ice avalanches": 50, + "Glacier terminal calving": 38, + "Glacier detachment": 27, + "Ice-rock avalanches": 14 + }, + "precision_by_sheet": { + "GLOF triggered by avalanches|day": 42, + "GLOF triggered by avalanches|other": 1, + "GLOF triggered by avalanches|year": 21, + "GLOF triggered by calving|day": 27, + "GLOF triggered by calving|year": 11, + "Glacier detachments|day": 24, + "Glacier detachments|year": 3, + "Ice avalanches|day": 123, + "Ice avalanches|month": 1, + "Ice avalanches|year": 39, + "Ice-rock avalanches|day": 78, + "Ice-rock avalanches|year": 13, + "Rock avalanches|day": 165, + "Rock avalanches|other": 3, + "Rock avalanches|year": 67 + }, + "hma": 148, + "himalaya": 88, + "hma_by_sheet": { + "Ice avalanches": 39, + "Ice-rock avalanches": 37, + "GLOF triggered by avalanches": 27, + "Rock avalanches": 17, + "GLOF triggered by calving": 15, + "Glacier detachments": 13 + }, + "complete_volume": 326, + "complete_volume_and_H": 206, + "complete_angle": 174 + }, + "glof": { + "all_rows": { + "n": 376, + "by_precision": { + "day": 251, + "year": 118, + "other": 7 + }, + "year_min": 1725, + "year_max": 2021 + }, + "hma": 108, + "himalaya": 74, + "complete_volume": 68 + } +} \ No newline at end of file diff --git a/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_glof_clean.csv b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_glof_clean.csv new file mode 100644 index 0000000..d9a154b Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_glof_clean.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_log.txt b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_log.txt new file mode 100644 index 0000000..a9ad808 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_log.txt @@ -0,0 +1,176 @@ +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:97: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf[c] = pd.to_numeric(sf[c], errors="coerce") +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:102: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["dedupe_key"] = (sf.Site.map(norm_site) + "|" + sf.lat.round(3).astype(str) + "|" +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:104: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_dupe"] = sf.duplicated("dedupe_key", keep="first") +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:107: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_hma"] = sf.lat.between(25, 45) & sf.lon.between(60, 105) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:108: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_himalaya"] = sf.lat.between(26, 31) & sf.lon.between(75, 95) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:133: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + gl["is_hma"] = gl.lat.between(25, 45) & gl.lon.between(60, 105) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:134: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + gl["is_himalaya"] = gl.lat.between(26, 31) & gl.lon.between(75, 95) +{ + "source_zip": "3ecd6ef8-fb24-44f0-b9f1-c8839fe83760.zip", + "doi": "10.11888/Cryos.tpdc.272812", + "metadata_claim": { + "slope_failures": 737, + "glof": 380 + }, + "slope_failures": { + "all_rows": { + "n": 618, + "by_precision": { + "day": 459, + "year": 154, + "other": 4, + "month": 1 + }, + "year_min": 1597, + "year_max": 2022 + }, + "valid_nondupe": 534, + "dup_rows": 84, + "by_sheet": { + "Rock avalanches": 235, + "Ice avalanches": 163, + "Ice-rock avalanches": 91, + "GLOF triggered by avalanches": 64, + "GLOF triggered by calving": 38, + "Glacier detachments": 27 + }, + "by_mechanism": { + "Rock avalanche": 235, + "Ice avalanche": 163, + "Ice-rock avalanche": 91, + "Ice avalanches": 50, + "Glacier terminal calving": 38, + "Glacier detachment": 27, + "Ice-rock avalanches": 14 + }, + "precision_by_sheet": { + "GLOF triggered by avalanches|day": 42, + "GLOF triggered by avalanches|other": 1, + "GLOF triggered by avalanches|year": 21, + "GLOF triggered by calving|day": 27, + "GLOF triggered by calving|year": 11, + "Glacier detachments|day": 24, + "Glacier detachments|year": 3, + "Ice avalanches|day": 123, + "Ice avalanches|month": 1, + "Ice avalanches|year": 39, + "Ice-rock avalanches|day": 78, + "Ice-rock avalanches|year": 13, + "Rock avalanches|day": 165, + "Rock avalanches|other": 3, + "Rock avalanches|year": 67 + }, + "hma": 148, + "himalaya": 88, + "hma_by_sheet": { + "Ice avalanches": 39, + "Ice-rock avalanches": 37, + "GLOF triggered by avalanches": 27, + "Rock avalanches": 17, + "GLOF triggered by calving": 15, + "Glacier detachments": 13 + }, + "complete_volume": 326, + "complete_volume_and_H": 206, + "complete_angle": 174 + }, + "glof": { + "all_rows": { + "n": 376, + "by_precision": { + "day": 251, + "year": 118, + "other": 7 + }, + "year_min": 1725, + "year_max": 2021 + }, + "hma": 108, + "himalaya": 74, + "complete_volume": 68 + } +} + +============================================================ +同机制可用子集(体积与水平距离均有值,去重后): +sheet +Glacier detachments 8 +Ice avalanches 14 +Ice-rock avalanches 21 +Rock avalanches 157 +冰岩崩+冰川滑塌 n=29;HMA n=7 +固定 70/30 留出:log10 H = 0.510 + 0.131 log10 V;留出 RMSE=0.41 log10,R²=-0.59(n_test=9) + +编目 Angle of reach:n=169,p10=8.7°,中位=16.6°,p90=28.0° +等效 tan(角) 中位=0.298(即 Voellmy μ 的等效量级) +2026-08-26:角=8.85°,μ_eq=0.156,位于编目第 11 百分位 diff --git a/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_slope_failures_clean.csv b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_slope_failures_clean.csv new file mode 100644 index 0000000..5a2ce32 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/backups/20261023/catalog_slope_failures_clean.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/backups/20261023/runout_angle_stats.json b/2026_初步评估/B_DeepSeek试解/backups/20261023/runout_angle_stats.json new file mode 100644 index 0000000..8d34d86 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/backups/20261023/runout_angle_stats.json @@ -0,0 +1,28 @@ +{ + "n_ice": 29, + "n_hma": 7, + "fit_all": [ + 0.5103912274801464, + 0.1305365071066225 + ], + "holdout_rmse_log10": 0.4098753489469039, + "holdout_r2": -0.5948355536248682, + "holdout_n": 9, + "angle_reach_deg": { + "n": 169, + "p10": 8.68, + "median": 16.6, + "p90": 28.0 + }, + "mu_eq_tan": { + "p10": 0.15266435857230512, + "median": 0.2981129475786629, + "p90": 0.5317094316614788 + }, + "event_2026": { + "angle_deg": 8.84844622545709, + "mu_eq": 0.1556741028128031, + "pctile_in_catalog": 10.650887573964498, + "n": 169 + } +} \ No newline at end of file diff --git a/2026_初步评估/B_DeepSeek试解/experience.md b/2026_初步评估/B_DeepSeek试解/experience.md new file mode 100644 index 0000000..6c81849 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/experience.md @@ -0,0 +1,188 @@ +# B 赛道初步试解经验(DeepSeek 子任务 B) + +日期:2026-10-23。AI 辅助:DeepSeek-V4.1-Flash(DeepSeek)。本文是选题与可行性评估,不是正式论文。 +复现:在本目录执行 `python3 源码/solve_b_baseline.py`,结果写入 `结果/`。脚本只读 `../../附件`,外部数据在 `外部数据/`。 + +## 0. 一句话结论 + +B 题的数据缺口**部分可补**:公开的 Zenodo 事件包给出了源区多边形、源区 ERA5 降水、事件前 SAR 速度、以及同事件尼泊尔侧实测流动范围;本地 DEM 能复现 20.6 km / 3210 m 的实际流程。但**触发时间样本仍只有 1 个**,Q3 的真实 95% 覆盖率依旧不可验证。因此 B 的定位应是“机制清晰、情景可算、区间只能声明为情景带”,不能用“补了数据”掩盖这一点。 + +## 1. 这轮真正拿到的东西 + +| 类别 | 内容 | 状态 | +|---|---|---| +| 已下载可用 | Zenodo 22717809(源区 AOI、ERA5 源区逐日/逐小时、30 m 派生栅格、SAR 速度、周边冰川清单),3.0 MB | 已落盘并核对同源 | +| 已下载可用 | Zenodo 22730419 的 `flow_extent`(同事件尼泊尔侧流动范围多边形),448 KB,CC-BY-NC | 已落盘 | +| 只读元数据 | Zenodo 23466792:源区 0.716 km²、总地形损失 110.80 Mm³ | 未下载(无公开文件) | +| 已由主线程登录取到(本轮追加审计) | TPDC 专题 19 个 ZIP(138 MB):GFS 灾前预报 4 包、TPCSM 5 km 模拟、2021 色东普冰崩 SAC、2026 KKN 台 BHZ、受灾点位、河网等 | 抽样审计见第 1.1 节 | +| **勘误** | ~~DOI 10.11888/SolidEar.tpdc.303620 为灾害论文配套数据~~。实际跳转到 `data.tpdc.ac.cn/en/data/82939055-9f6e-4ba1-a65a-fecf31a208e3`,是**西藏地热水化学与关键矿产数据库(2021–2024)**,与冰崩无关且需申请访问。该说法已撤回,不得再作为灾害资料引用 | 主线程浏览器核实 | + +**关键纠正(上一轮的疑点)**:附件 4 的冰川 nc 坐标**是对的**。公开 AOI 的 bbox 85.505–85.540°E、28.262–28.292°N 与 nc 反算范围 85.505–85.550°E、28.270–28.307°N 重合,nc 质心落在 AOI 内;nc 与本地 DEM 重叠 20 010 格,高程差中位 +29 m、MAE 43.6 m。此前“与蓝塘里壤峰纬度差 24 km”的怀疑应撤回——崩解发生在**北坡 28.28°N**,不是峰顶。 + +## 2. 四问:输入 → 方法 → 实测结果 → 验证 → 可写结论 + +### Q1 气象特征关联排序 + +- **输入**:附件 1 的 MET/SOIL/RADM 六小时表(9999.9 置缺失),事件 2026-08-26 10:00,对照为 2021–2025 年日序 ±20 天、同一钟点。 +- **方法**:14 个候选特征(1/3/24/72 h 降水、气温、2–10 m 温差、RH、10 m 风、1–20 m 切变、3 h 气压变、0.1 m 土壤含水、24 h 含水变、0.1 m 土温、净辐射),算事件值在同季对照中的百分位;用“偏离 50% 的距离”排序;按年有放回 bootstrap 500 次看位次稳定性。 +- **实测**:前五为 **净辐射(96.6 百分位)> 0.1 m 土壤含水 24 h 变化(4.9)> 气温(93.7)> 72 h 降水(10.7)> 3 h 气压变(15.9)**;bootstrap 下前三名的位次 95% 区间分别为 1–2、1–3、2–4,`precip_72h` 稳定在第 4–5。 +- **验证**:只有“排序对重采样年份是否稳定”这一项;没有事件标签,无法做显著性、命中率或因果。 +- **可写结论**:事件窗呈“**暖、干、晴、土壤失水**”组合,与冰岩崩前兆方向一致;降水类特征在事件窗**不突出**。可写成“候选关联排序 + 机理一致性”,不能写成“触发因子识别”。 + +### Q2 触发条件与评估模型 + +- **输入**:84 条灾点沟谷字段、DEM、冰川 nc、公开源区 AOI 与 ERA5。 +- **方法(本轮已做)**:源区降水核对、Melton 崎岖度、流域尺度因子可用性判断。 +- **实测**:源区 ERA5 在 2026-08-26 降水 **15.1 mm**(气候 7.1,距平 +8.0),气温距平 +1.35 °C;而**台站**(28.86°N, 85.29°E)当日 0 mm。两者的空间差 ~60 km、海拔差 ~1000 m。84 条沟谷 Melton 中位 0.48、48% >0.5。 +- **验证**:无。事件仅 1 个,负样本不存在。 +- **可写结论**:**“单站无雨”与“源区有雨”可以同时成立**,这正好支撑“链式触发 + 空间非均一”的叙事;但不能据此标定 I-D 阈值,只能给“机理式临界条件 + 文献曲线 + 虚警频次描述”。 + +### Q3 触发时间、置信区间、预警提前时间与空间范围 + +- **输入**:事件时刻链(公开报道与论文:08:19 / 09:05 / 10:34 / 10:52 北京时间;题面口径 10:30)、DEM 流程、公开流动范围多边形。 +- **方法(本轮已做)**:用 DEM 路径 + Voellmy 型一维运动给出**传播到达时间的情景区间**,量化参数不确定性对“到达时间”的影响。 +- **实测**:20.62 km 路径、落差 2746 m(真实 DEM 采样)、末端 1913 m,终点距受灾点位 **1.01 km**;但**前 7.15 km 内 0.5 km 半径无河网**,只有下游约 13 km 贴合河网(中位 0.03–0.17 km)。参数网格 18 组(μ=0.1/0.2,ξ=500/1000/2000 m/s²,h=10/25 m)给出总传播时间 **12 min 至 >300 min**(含停滞);代表情景 54 min、**最大速率 85 m/s**。报道的“约 50 m/s”是**平均/传播速度口径**,与最大速率不可直接比较,且该数值来自媒体转述,不作为验证。 +- **验证**:终点与受灾点相距 1.01 km,属“空间一致性”;**长度相近不能单独当验证**,因为上游段并不沿河网。总体是“单锚点 + 几何一致性”,不是独立验证。 +- **可写结论**(修正):18 组传播参数给出的到达时间落在 **12 min 至 >300 min** 的情景包络内,其中较长的一端**包含流动停滞**,因此不能称为置信区间。该包络只说明“传播参数足以让结果跨 1–2 个量级”;本轮**没有做气象驱动扰动对比**,不能断言参数比气象更主导。可写“情景区间 + 覆盖率检验方案”,不能写“实测 95% 覆盖”。 + +### Q4 仿真 + +- **输入**:DEM、源区 AOI、公开体积(110.80 Mm³ 总地形损失、0.716 km² 源区)、冰厚/坡度/剪应力栅格。 +- **方法**:120 m 选路网格(4×4 块平均 + 3×3 侵蚀填洼)D8 汇流 + 真实 DEM 高程剖面 + Voellmy 一维积分;18 组参数敏感性。 +- **实测**:路径 **20.62 km**、落差 **3210 m(粗网格)/2746 m(真实 DEM)**、末端 **1845/1913 m**;与公开报道“约 22 km、约 3400 m、口岸约 1800 m”同量级。30 m 单流向基线在 10.6 km 处卡洼地终止——**这条负结果必须写进论文**,它解释了为什么选路要降尺度。 +- **验证**:几何量(长度、落差、末端高程)与公开值一致;动力学无实测验证。 +- **可写结论**:可写“情景仿真 + 几何一致性检验 + 参数敏感性”;不能写“预测了口岸到达时间”。 + +## 3. 论文可写性评分(判断分,非客观成绩) + +权重按用户要求:论文 50%、求解与验证复现 35%、数据与成本 15%。 + +| 维度 | 分数 | 理由 | +|---|---|---| +| 完整性 | 8 | 四问都能落地:Q1 排序、Q2 条件+易发性、Q3 情景区间+不确定性分解、Q4 仿真;新增数据补上了源区降水与流动范围 | +| 证据强度 | 5 | Q1/Q4 有真实数值与几何一致性;Q2 无负样本;Q3 只有单锚点。整体是“机制可信、统计薄弱” | +| 叙事连贯 | 8 | “暖干前兆 → 源区降雨 → 高位冰岩崩 → 沿程增容 → 口岸致灾”一条链,四问天然串联 | +| 创新空间 | 6 | 亮点在“把不确定性来源分解为驱动 vs 传播参数”,以及“单站 vs 源区降水”的空间对照;不是新算法 | +| 成稿难度 | 5 | 数据杂、口径多(CC-BY-NC、TPDC 未到、DEM 范围不足),需要大量文字界定;但不需要重型计算 | +| **综合(加权)** | **6.6** | 论文好写、图好看;结论强度中等 | + +**“漂亮容易写” vs “结论有证据能写”**: +- 漂亮容易写:Q1 热力图/百分位条形图、Q4 淹没动画与到达时间等值线。风险是显得像演示。 +- 有证据能写:DEM 流程 20.6 km 与公开 22 km 的对照、源区 15.1 mm vs 台站 0 mm、参数敏感性导致 12–300 min。这三条是本轮真正的证据。 + +## 4. 选道建议(仅就 B 本身) + +若允许补数据并借用成熟求解器,B 值得做,但应把重心放在: +1. Q2 用“源区/沟谷尺度”而不是“台站尺度”构造触发条件(本轮已证明二者不同); +2. Q3 明确写成“参数不确定性主导的情景区间 + 可检验的覆盖率方案”,把“无法验证”变成“已量化不确定性”; +3. Q4 保留 30 m 卡洼地的负结果,作为方法选择依据。 + +不建议:把 TPCSM 模拟当观测、把 flow_extent 当中国侧真值、把 12–300 min 的包络叫 95% 置信区间。 + +## 5. 复现与文件 + +- `源码/solve_b_baseline.py`:Q1 排序 + bootstrap、nc/DEM/AOI 坐标核查、Q4 路径与 Voellmy 敏感性。 +- `结果/`:`q1_feature_percentiles.csv`、`q1_rank_stability.csv`、`q4_path_profile.csv`、`q4_voellmy_sensitivity.csv`、`q4_arrival_marks.csv`、`run_log.txt`。 +- `外部数据/`:见 `数据清单.md`(含 MD5、字节数、许可、覆盖)。 +- `tpdc_priority.md`:留给主线程登录后取数的清单。 + +## 6. 仍未解决 + +- 触发时间样本 n=1;无确认负样本;无历史预报—实况配对。 +- DEM 北界 28.564°N,62 个灾点在外;本文的 Q4 只用得到南部条带。 +- TPDC 图层未取得,Q2/Q3 的空间真值仍缺。 +- 未审计附件 2/3/5/8。 + +--- + +## 7. TPDC 增量审计(主线程登录取数后,本轮新增) + +主线程已把专题 19 个 ZIP(138 MB,CRC 全通过)放在 `../TPDC_补充数据/下载/`。本轮只抽样审计 4 项,脚本 `源码/audit_tpdc_increment.py`,输出 `结果/gfs_precip_source_port.csv`、`结果/q4_path_profile_with_river.csv`。 + +### 7.1 GFS 灾前预报(147456c9…) + +- 起报 **2026-08-25 00Z**,13 个时次 f000–f072(每 6 h),网格 0.25°,裁剪范围 84.50–86.25°E、28.25–29.25°N。 +- 单位:降水率 mm/h、6 h 累计 mm、起报以来累计 mm;时间轴为 `hours since 2026-08-25 00:00`,即 **UTC**。 +- 事件 8/26 10:30 BJT = **02:30 UTC**,对应预报 **lead time ≈ 26.5 h**。 +- 实测取值:源区与口岸**落在同一 0.25° 格点(28.25°N, 85.50°E)**——GFS 0.25°(约 28 km)无法区分二者。 + - 事件时次 f030(06 UTC):降水率 0.67 mm/h、6 h 累计 0.56 mm; + - 8/26 00–18 UTC 的 6h 累计之和 **14.6 mm**,其中 11.0 mm 出现在 **12–18 UTC(事件之后)**。 +- 与 ERA5 源区日值 **15.1 mm** 同量级;但 GFS 是预报、ERA5 是再分析,**两者都不是独立观测,不能互为验证**。 +- 注意:6 h 累计与“起报以来累计”是两个字段,**不能相加**;本文只对 6h 字段求和。 + +### 7.2 TPCSM 5 km 模拟(be1c4b80…) + +- 变量:`RAINNC`、`T2`;网格 210×180、DX=DY=**5558.9 m**;WRF V4.0,`SIMULATION_START_DATE 2026-08-21_06:00`,逐小时。 +- 关键:目录里是 `cdo -sub` 生成的**小时增量**(相邻 RAINNC 相减),文件名 `dpre_*` 已提示;**不能把逐时增量再当累积量重复累加**,也不要把两个时段的文件混加。 +- 实测(源区格 28.30°N/85.50°E,距 AOI 约 2.2 km):8/26 UTC 当日 **16.3 mm**,事件时刻 02–03 UTC 为 **0.0 mm**,降水从 08 UTC 起增强;口岸格(28.30/85.40)当日 **9.0 mm**。 +- 初始化与实况要分开:这是**从 8/21 06 UTC 起报的模拟**,不是实况分析;8/27 之后的另一个文件(`dpre_20260827-0901`)源区累计 98.0 mm,属事件后时段。 + +### 7.3 同类事件 SAC(65a266d2…,2021-03-22 色东普) + +- 21 条 SAC,7 台 × 3 分量,50 Hz,每条 180 000 点 = **1 小时**,起始 2021-03-22 23:00;台站位于 29.2–30.1°N、94.5–95.5°E。 +- 我做了简易 STA/LTA(1 s/20 s,差分代替带通):7 个台的峰值时刻分别为 0.8、2.6、16.7、22.1、27.1、29.1、36.6 min,**互不一致**,比值仅 2.3–5.7。 +- 结论边界:**这包数据不能直接给出第二个事件的准确时刻**。它只覆盖 1 小时窗口,且无震相拾取/台阵定位时看不到一致初动;若要用,必须补拾取器与台阵反投影,并先确认事件确实落在该小时内。 + +### 7.4 受灾点与河网核验 + +- 受灾点位 (85.3775, 28.2786);我们路径终点 (85.3842, 28.2855),高程 1913 m,**相距 1.01 km**。 +- 路径到河网距离:0–6 km 段为 2.0–4.9 km(**无河网**,属冰面/冰前沟),**7.15 km 起**才进入 0.5 km 内,8–22 km 段中位 0.03–0.17 km。 +- 因此:“20.6 km 与报道 22 km 同量级”只能说明**量级相符**,不能当作路径正确性的证明;真正支持路径的是“下游 13 km 贴河 + 终点距受灾点 1.01 km”。 + +### 7.5 修正后的评分(权重 论文 50% / 求解验证复现 35% / 数据成本 15%) + +| 维度 | 上轮 | 本轮 | 理由 | +|---|---|---|---| +| 完整性 | 8 | **9** | GFS 给了“灾前真实起报”的 lead time;TPCSM 给了独立模拟场;点位与河网补上了空间核验 | +| 证据强度 | 5 | **6** | 多了降水对照(站点 0 / GFS 14.6 / TPCSM 16.3 / ERA5 日量 15.1;其中两个预报显示事件后降水更强,ERA5 只有日量不能判日内时序)+ 终点 1.01 km;但仍无第二事件时刻、无负样本 | +| 叙事连贯 | 8 | **9** | “灾前预报 → 源区降雨 → 冰崩 → 沿程 → 口岸”可以完整讲通,且能说明各产品的时间分辨率差异 | +| 创新空间 | 6 | **6** | 增量在数据而非方法;可写的创新是“多产品时序对齐 + 传播参数情景包络” | +| 成稿难度 | 5 | **5** | 产品多、口径多(UTC/BJT、6h/逐时/累计、0.25°/5 km/30 m),文字界定成本高 | +| **加权** | **6.6** | **7.1** | 论文可写性实质提高,但**不是**因为 Q3 变得可验证 | + +**关键判断**:B **好写了不少**(数据链条完整、图好做),但 Q3 的触发时间**仍然只有 1 个事件**;不得用情景分位替代 95% 区间。分数提高来自“证据更全、叙事更顺”,不是“统计更强”。 + +--- + +## 8. 多事件编目审计(TPDC 3ecd6ef8,DOI 10.11888/Cryos.tpdc.272812) + +脚本 `源码/audit_catalog.py`(v2,2026-10-23 修正);输出 `结果/catalog_slope_failures_clean.csv`、`结果/catalog_glof_clean.csv`、`结果/catalog_audit.json`、`结果/runout_angle_stats.json`。v1 的 `.json/.csv` 备份在 `backups/20261023/`。 + +### 8.1 计数口径(raw / 候选唯一,分开报) + +| 项 | 元数据宣称 | 原始事件行 | 候选唯一 | 说明 | +|---|---|---|---|---| +| 坡体失败(6 表合计) | 737 | **852** | **781** | 含 102 条“GLOF 由崩塌/崩解触发”记录;精确重复删 32,仅到年的疑似重复 39 条**未删**、只标记 | +| 冰碛湖溃决 | 380 | **376** | 376 | 单表,无跨表重复判定 | + +- 分表原始事件行:Rock 469、Ice avalanche 163、Ice-rock 91、GLOF-by-avalanche 64、GLOF-by-calving 38、Glacier detachment 27。 +- 高亚洲(25–45°N, 60–105°E):原始 148 → 候选唯一 **120**;喜马拉雅 88 → **63**。 +- 时间精度(原始):日 377、区间 305、年 114、其它 54、月 2;候选唯一:日 345、区间 291、年 105、其它 38、月 2。**没有一条到小时。** +- 字段完整:体积 **561**(原始,见 `catalog_audit.json`);体积+水平距离 **440**(原始)/ **436**(候选唯一,其中 Rock 393);角 of reach **408**(原始)/ **404**(候选唯一)。 + +**v1 勘误(必读)**:v1 报的“Rock avalanches 235 条、有效 534”是**脚本 bug**——表头 `Time ` 带尾空格,代码按 `"Time "` 取值而表头已被 strip 成 `"Time"`,导致所有日期读成缺失、又被“时间非空”条件整行丢弃。**不是数据缺日期,也不是元数据 737 错误。** v2 已修正,Rock 表 470 行 = 1 行表头 + 469 条事件。 + +### 8.2 传播与摩擦参数(真实同类事件) + +- 同机制且体积+水平距离齐全:冰岩崩 21 + 冰川滑塌 8 = **n=29**(高亚洲更少)。 +- 固定 70/30 留出:log10H = 0.510 + 0.131·log10V,**留出 R² = −0.59,RMSE = 0.41 log10**。→ 体积—距离关系在本样本量下**不能迁移**,只作描述,不作 Q4 验证。 +- 角 of reach(候选唯一,n=404):p10 **10.5°**、中位 **19.4°**、p90 **27.5°**;等效 tan 值 p10 **0.185**、中位 **0.352**、p90 **0.521**。 +- 8·26 事件的 8.85° 是 **atan(3210 m / 20.62 km)**,其中落差与距离来自**我们的粗网格选路**,不是实测几何。它只能作为“模拟几何的外部量级对照”:说明模拟路径比编目中位事件更平缓(低于 p10),**不能**据此断言真实事件的分位,也**不能**用它反过来验证 μ 取值(会构成循环论证)。 + +### 8.3 Q3 的重新判断 + +- **不是“无事件”**:候选唯一里日精度 345 条、区间 291 条、年到年 105 条;高亚洲 120 条。 +- 真正缺口是**缺小时精度与配对预报**:日期只到日/年,无法与逐小时气象或预报对齐;8·26 本身也只有报道级小时。 +- 可做边界:**日尺度**可用离散时间风险/区间删失(年精度按区间删失)做外检验;**小时级 95% 区间、真实预警提前时间、实测覆盖率仍缺标签**。 +- 本轮只清洗编目与做参数对照,**没有训练日尺度风险模型**;“可做”不等于“已做”。 + +### 8.4 修正后的评分(论文 50% / 求解验证复现 35% / 数据成本 15%) + +| 维度 | 分 | 说明 | +|---|---|---| +| 论文可写性(50%) | **8** | 多事件编目 + 三源降水 + 空间核验;但 Q3 只到日尺度 | +| 求解与验证复现(35%) | **6** | 有真实参数对照与负结果;传播拟合留出失败、无小时标签 | +| 数据与成本(15%) | **7** | 数据到位、总量小;口径多(UTC/BJT、6h/逐时/累计、0.25°/5 km/30 m) | +| **加权** | **7.2** | 提升来自证据结构,不是统计强度 | + +**完整性按题目实际输出给 8,不给 9**:Q3 要求的“触发时间 95% 区间 / 预警提前时间 / 区间覆盖率”未按题意落地,只到日尺度与空间范围。 diff --git a/2026_初步评估/B_DeepSeek试解/tpdc_priority.md b/2026_初步评估/B_DeepSeek试解/tpdc_priority.md new file mode 100644 index 0000000..d49227e --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/tpdc_priority.md @@ -0,0 +1,33 @@ +# TPDC 优先下载清单(供主线程登录后浏览器取数) + +生成:2026-10-23,DeepSeek-V4.1-Flash。仅列已确认存在或题面直接给出的入口;**未确认 UUID 的不杜撰 URL**,写“站内检索词”。 +用途标记:Q1 气象关联 / Q2 触发与易发性 / Q3 时间与范围 / Q4 仿真。 + +## P0(直接补 B 题最硬缺口) + +| # | 数据集 | 入口 | 预计内容/体积 | 填补缺口 | 状态 | +|---|---|---|---|---|---| +| 1 | 日喀则市吉隆县泥石流灾害区 **TPCSM 5 km 分辨率模拟数据(2026-08-22 00 时—9 月)** | TPDC 站内检索“TPCSM 吉隆”;首页/应急专题可见 | 未知,5 km 网格,可能为多时次 NetCDF/GRIB,估计 10–100 MB | Q3 触发时间与空间范围的**第三方模型输出**,可作对照基线(不是观测) | 未获取 | +| 2 | ~~灾害论文配套数据 DOI 10.11888/SolidEar.tpdc.303620~~ **勘误:该 DOI 实为西藏地热水化学与关键矿产数据库(2021–2024),与本题无关,且需申请访问。已撤回,不再列为灾害资料。** | https://data.tpdc.ac.cn/en/data/82939055-9f6e-4ba1-a65a-fecf31a208e3 | — | — | 不适用 | +| 3 | 吉隆“8·26”应急专题:**灾前/灾后高分影像解译边界**(GF-1/GF-7/Planet) | TPDC 应急专题页(从首页“吉隆跨境山洪灾害应急专题”进入) | 矢量边界 + 影像,可能数百 MB | Q3 空间范围真值、Q4 淹没范围验证 | 未获取 | +| 4 | 同专题:**堰塞湖范围/漫溢状态** | 同上 | 矢量,估计 <10 MB | Q4 情景对照(堰塞湖位置) | 未获取 | +| 5 | 同专题:**冰川表面流速/高程变化(2024–2026)** | 同上;亦可能复用附件 3/4 | 栅格,10–100 MB | Q2 前兆指标、Q4 释放体积 | 未获取 | + +## P1(若 P0 拿不到再补) + +| # | 检索词(TPDC 站内) | 目的 | +|---|---|---| +| 6 | “冰湖溃决 编目 / GLOF inventory 喜马拉雅” | 建同机制多事件表(Q2 阈值、Q3 区间需要样本量) | +| 7 | “冰崩 冰岩崩 目录 青藏高原” | 同上,找 2016 阿汝、2018 色东普等同类事件 | +| 8 | “吉隆 气象 逐小时 2026” | 补 2026-08-27 之后的气象(本地附件止于 8/27 08:00) | +| 9 | “聂拉木/吉隆 降水 雷达 融合” | 站点在 28.86°N/85.29°E 高原面,沟谷降水需格点产品 | + +## 已本地可用(无需下载,勿重复) + +- 附件(1)24 个逐小时 CSV;(6)84 条灾点;(7)DEM;(4)冰川 nc。 +- 附件(2)(3)(5)(8)尚未审计,但本地已有,不需要走 TPDC。 + +## 取数后的使用约定 + +- 任何 TPDC 图层进入论文前必须记录:数据集名、DOI/URL、下载日期、单位与 CRS、时间覆盖。 +- TPCSM 是**模拟输出**,只能作为对照,不能当观测真值;不得用它反过来“验证”我们的模型而称独立验证。 diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/README.md b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/README.md new file mode 100644 index 0000000..af8fa86 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/README.md @@ -0,0 +1,65 @@ +# Langtang Lirung–Gyirong GRL open-research package (v1.2.1) + +Derived data, tables, Supporting Information, and figure scripts for: + +**Ming, J., and Du, Z. (2026). Optical and radar signals before the 2026 Gyirong cascade. *Geophysical Research Letters* (manuscript 2026GL126799).** + +Release **v1.2.1** adds the ASF HyP3 job manifest (`configs/hyp3_jobs.json`, +33 ASF job IDs; `configs/hyp3_job_status.csv`; `configs/hyp3_download_summary.json`), +so the ~67 GB interferogram archives referenced in the Availability Statement are +recoverable from ASF by job ID in addition to the parameterised reconstruction. +Release **v1.2.0** merged the frozen v1.1.0 package (commit `f57500a`; zip SHA-256 +`17677b8884d77a13d53699e780da03c6a3093dc4b013616c469026f62b856960`) with the +v1.1.1 InSAR/control-albedo quality-assurance increment and the AGU-compliant +Supporting Information (title page, table of contents, Tables S1–S4). No derived +data or scientific content changes relative to v1.2.0. + +## Contents + +- `si/` — Supporting Information (`Supporting_Information.md`: Text S1–S5, Tables S1–S4) plus machine-readable Tables S1–S4 (CSV) +- `data/` — area-of-interest (AOI) optical and SAR metrics, full Sentinel-1 RTC pair table, control-glacier albedo comparison, RGI 7.0 near-field glacier inventory and TSI ranks, detachment AOI polygons, topographic summaries, derived TPDC 30 m grids, provisional Shirzaei InSAR annotation metadata and AOI spatial checks + - `data/insar_qa/`, `data/optical_qa/` — dry-season HyP3–MintPy SBAS geometry/troposphere/reference-frame QA and glacier-level control-albedo uniqueness QA (the v1.1.1 increment) + - `data/precursors/topo_rasters/` — derived 30 m slope, ice thickness, and driving-stress GeoTIFFs +- `code/` — R and Python figure scripts +- `scripts/` — SBAS geometry QA, tropospheric comparison, and control-albedo uniqueness scripts +- `configs/` — ASF HyP3 job manifest (`hyp3_jobs.json`: 33 ASF job IDs; `hyp3_job_status.csv`; `hyp3_download_summary.json`), HyP3 submission parameters (`insar_hyp3.yml`), and MintPy configuration files +- `figures/` — publication figures (Figure1–Figure3, PDF and PNG) and development panels +- `notes/` — InSAR claim-level decision notes and the provider GeoTIFF request draft +- `MANIFEST.json`, `MANIFEST.sha256` — SHA-256 checksums for every file in this package + +## Provenance of upstream data + +- Sentinel-2 Level-2A and Sentinel-1 RTC: Microsoft Planetary Computer / ESA Copernicus / ASF DAAC (open access). +- Glacier outlines: RGI 7.0, NSIDC, https://doi.org/10.5067/F6JMOVY5NAVZ. +- Meteorological fields: ERA5-Land, Copernicus CDS, https://doi.org/10.24381/cds.e2161bac. +- 30 m DEM/slope/ice-thickness source grids: H. Zhao and T. Zhang, *Glacier topographic and dynamic drivers (Glacier-collapse and debris-flow disasters at Langtang Lirung, Nepal)*, National Tibetan Plateau Data Center (free registration), https://data.tpdc.ac.cn; velocity component ITS_LIVE v2.1. +- China administrative boundaries: RESDC, Chinese Academy of Sciences, https://doi.org/10.12078/2023010103. +- Provisional Shirzaei (2026) InSAR annotation: public post metadata only; no provider GeoTIFF is redistributed. +- Full HyP3 interferogram archives (~67 GB) and MintPy product cubes are not included; they are reproducible from ASF either by the 33 job IDs in `configs/hyp3_jobs.json` or by re-submitting `configs/insar_hyp3.yml` (seed 7341), together with the MintPy configuration files. + +## Reproducibility + +```bash +# publication figures +Rscript --vanilla code/fig_precursor_mechanism_panel.R + +# SBAS quality assurance (dry-season stacks) +uv run --with mintpy --with 'gdal==3.13.3' --with h5py --with numpy \ + --with pandas --with pyyaml --with pyproj --with scipy \ + python scripts/insar_sbas_geometry_qa.py + +uv run --with mintpy --with 'gdal==3.13.3' --with pyaps3 --with cdsapi \ + --with h5py --with numpy --with pandas --with pyyaml --with pyproj --with scipy \ + python scripts/insar_sbas_tropo_test.py + +# glacier-level control albedo uniqueness +uv run --with numpy --with pandas python scripts/control_albedo_uniqueness_qa.py +``` + +Random seed: **7341**. CRS for topographic products: **EPSG:32645** (30 m). + +## Licence + +Analysis code and scripts: MIT (see `LICENSE`). Derived data tables and rasters: +CC-BY-4.0. Upstream satellite and reanalysis products remain under their +provider terms (ESA/Copernicus, NSIDC, TPDC, RESDC). diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/detachment_aoi.geojson b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/detachment_aoi.geojson new file mode 100644 index 0000000..8b1f23a --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/detachment_aoi.geojson @@ -0,0 +1,27 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "Langtang Lirung North detachment source area", + "name_zh": "朗塘里峰北坡崩解源区", + "source": "Petley 2026-08-27; Planet/Shugar ~85.52°E 28.276°N; RGI G-15-05732 vicinity", + "event_date": "2026-08-26", + "note": "Corrected from earlier GeoLibre viewport (85.37°E); ~14 km east" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [85.505, 28.262], + [85.540, 28.262], + [85.540, 28.292], + [85.505, 28.292], + [85.505, 28.262] + ] + ] + } + } + ] +} diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_source_daily.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_source_daily.csv new file mode 100644 index 0000000..5d45798 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_source_daily.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_daily.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_daily.csv new file mode 100644 index 0000000..5f9ae10 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_daily.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_hourly.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_hourly.csv new file mode 100644 index 0000000..6534bba Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/era5_station_vs_source_hourly.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_timeseries.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_timeseries.csv new file mode 100644 index 0000000..53dee47 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_timeseries.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_v2_timeseries.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_v2_timeseries.csv new file mode 100644 index 0000000..8feacd5 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/gcsi_v2_timeseries.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_los_to_downslope.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_los_to_downslope.csv new file mode 100644 index 0000000..e19a90c Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_los_to_downslope.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites.csv new file mode 100644 index 0000000..5babb11 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites_validated.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites_validated.csv new file mode 100644 index 0000000..88e76e4 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/insar_reference_sites_validated.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/key_dates_comparison.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/key_dates_comparison.csv new file mode 100644 index 0000000..ef30c49 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/key_dates_comparison.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/landsat_lst_detachment.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/landsat_lst_detachment.csv new file mode 100644 index 0000000..ad74522 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/landsat_lst_detachment.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/map_susceptibility_legend_counts.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/map_susceptibility_legend_counts.csv new file mode 100644 index 0000000..e5921d7 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/map_susceptibility_legend_counts.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/satellite_pre_post_comparison.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/satellite_pre_post_comparison.csv new file mode 100644 index 0000000..bd39688 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/satellite_pre_post_comparison.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel1_velocity_pairs.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel1_velocity_pairs.csv new file mode 100644 index 0000000..c60dbc0 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel1_velocity_pairs.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_detachment_metrics.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_detachment_metrics.csv new file mode 100644 index 0000000..c3ecfb7 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_detachment_metrics.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_surrounding_glaciers.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_surrounding_glaciers.csv new file mode 100644 index 0000000..e520515 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_surrounding_glaciers.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_velocity_pairs.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_velocity_pairs.csv new file mode 100644 index 0000000..65c672f Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/sentinel2_velocity_pairs.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Supporting_Information.md b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Supporting_Information.md new file mode 100644 index 0000000..2fead21 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Supporting_Information.md @@ -0,0 +1,176 @@ +Geophysical Research Letters + +# Supporting Information for + +# Optical and radar signals before the 2026 Gyirong cascade + +**Jing Ming¹ and Zhencai Du²** + +¹ Beacon Science & Consulting, Tranmere, SA 5073, Australia + +² Institute of Atmospheric Physics, Chinese Academy of Sciences, Beijing 100029, China + +Corresponding authors: Jing Ming (mingjing@beaconscience.org); Zhencai Du (duzhc@mail.iap.ac.cn) + +**Contents of this file** + +- Text S1. Optical and SAR processing +- Text S2. GCSI and TSI definitions (descriptive only) +- Text S3. Topographic driving stress +- Text S4. Provisional InSAR LOS rates, open SBAS processing, and downslope projection +- Text S5. Seismic and precipitation metadata adopted from Guo et al. (2026) +- Table S1. Sentinel-2 AOI optical metrics for the eight evaluated dates +- Table S2. Full Sentinel-1 RTC amplitude-offset pair series +- Table S3. Fifteen highest-ranked near-field glaciers by Topographic Susceptibility Index +- Table S4. 15 June versus 12 August 2026 albedo for the detachment AOI, source glacier, and five non-failing controls + +Machine-readable copies of Tables S1–S4 and all other derived data, scripts, and configurations are archived in the Zenodo dataset accompanying this article (release v1.2.0; the dataset DOI is given in the Availability Statement of the main article). + +## Introduction + +This Supporting Information documents the processing rules, descriptive indices, and quality-assurance tests behind the main-text figures and tables. It contains (i) Sentinel-2 and Sentinel-1 processing details and the usability rules applied to each series (Text S1); (ii) exact definitions of the descriptive Glacier Collapse Susceptibility Index (GCSI) and Topographic Susceptibility Index (TSI) (Text S2); (iii) the shallow-ice driving-stress calculation and its limits (Text S3); (iv) the provisional third-party InSAR line-of-sight annotation, the open dry-season HyP3–MintPy SBAS reproducibility path, all tropospheric and reference-frame tests, and the line-of-sight to downslope projection (Text S4); and (v) the seismic and precipitation metadata adopted, without re-digitisation, from Guo et al. (2026) (Text S5). Tables S1–S4 embed the full tabular data cited in the main text. Known anomalies (cloud-contaminated optical dates, quantized amplitude offsets, same-sign ascending/descending SBAS velocities) are stated at the point of use. All spatial processing uses CRS EPSG:32645 and random seed 7341 unless otherwise stated. + +# Text S1. Optical and SAR processing + +## Sentinel-2 + +- Level-2A surface reflectance accessed through the Microsoft Planetary Computer STAC API (ESA Copernicus Sentinel-2, tile T45RUM). +- Broadband albedo: mean of the visible/NIR bands as implemented in the project figure and metric scripts (archived in `code/` of the Zenodo release). +- NDSI, NDWI, and SWIR (B11) texture standard deviation computed per AOI pixel as in `Table_S1_sentinel2_aoi_timeseries.csv` / `sentinel2_detachment_metrics.csv`. +- **Usable albedo-series rule:** scenes with at least 1000 valid AOI pixels. The 14 August scene is excluded (*n* = 110). The 23 June scene is excluded because the AOI-mean albedo exceeds 1 (1.076), which is physically impossible and indicates cloud or bright-snow contamination. +- Full date list, scene identifiers, cloud cover, and usability flags: Table S1 (eight evaluated dates; six retained for the albedo series). + +## Sentinel-1 + +- Radiometrically terrain-corrected (RTC) amplitude products (Microsoft Planetary Computer, sourced from ASF DAAC), matched on the same relative orbit; 12-day pairs preferred. +- Reported fields: mean offset velocity (m d⁻¹), `velocity_std`, number of matched pixels, and integer pixel shifts `dx_m`, `dy_m` (Table S2). +- **Interpretation limit:** every deposited pair has `velocity_std = 1.0`, indicating coarse, quantized amplitude matching rather than a high-precision velocity time series. Rates are intermittent offset anomalies near a practical detection floor. The full ascending and descending series is reported (Table S2; Fig. 2b), not only the largest late-season descending pair. + +# Text S2. GCSI and TSI definitions (descriptive only) + +## Glacier Collapse Susceptibility Index (GCSI) + +The GCSI is reported only in the archive and this Supporting Information; it is not used in the Abstract or Key Points and is not a calibrated probability. + +1. Standardise selected components (Δalbedo and/or albedo *z*, NDWI *z*, SWIR texture *z*, optional land-surface-temperature *z*, optional velocity *z*) across the June–August 2026 sample. +2. Composite = equal-weight mean of the available component *z*-scores on each date (implementation: `gcsi_timeseries.csv`, `gcsi_v2_timeseries.csv`). +3. The index is not cross-validated against any ice-avalanche inventory and is sensitive to which dates meet the usability rule in Text S1. + +## Topographic Susceptibility Index (TSI) + +For each RGI 7.0 glacier within 15 km of the scar centre: + +- Normalise mean slope and mean elevation to [0, 1] within the near-field set. +- TSI = 0.5 × slope_norm + 0.5 × elevation_norm (equal weights; ranking only). +- Hanging-ice flag: steep, high ice facing the valley (Boolean produced by the project inventory script; slope ≥ 30° and *z*max ≥ 6500 m for the summary in Fig. 3d). +- Eight flagged glaciers among 138 near-field glaciers quantify the false-positive load of the geometric screen (Table S3 lists the 15 highest TSI glaciers). + +# Text S3. Topographic driving stress + +Shallow-ice ranking stress τ ≈ ρ g H sin(α), with ρ_ice = 917 kg m⁻³ and an optional mixed-density case ρ_mix = 1500 kg m⁻³. Inputs are the 30 m TPDC DEM, slope, and ice-thickness grids described in Methods §2.5. **Caveat:** steep hanging ice violates the shallow-ice assumptions; the stress maps are spatial ranking fields, not failure criteria (seed 7341). DEM ice-mask pixels inside the AOI: *n* = 9426 at 30 m, distinct from the Sentinel-2 valid-pixel counts in Table S1. + +# Text S4. Provisional InSAR LOS rates, open SBAS processing, and downslope projection + +**Product (provisional rates used in Table 1).** Shirzaei (2026) annotated InSAR line-of-sight (LOS) rates for 8 January–19 August 2026 (ending 7 days before the 26 August cascade). Reported LOS: **−4 to −6 mm month⁻¹**. The peak annotation falls inside the corrected detachment AOI after an approximately 14 km westward viewport shift (`insar_aoi_validation.json`; `shirzaei_langtang_los_velocity.json`). + +**What is archived for the Shirzaei product.** Annotation JSON, JPEG-overlay metadata, and AOI spatial checks. No provider GeoTIFF is deposited; full track, incidence angle, multilook, and DEM metadata from the annotator remain pending. A citable provider product, if released, will be added to the archive. + +**Downslope projection (approximate; Shirzaei LOS).** Under a single descending-orbit geometry (heading 193°, incidence 36°), LOS is projected onto a local downslope unit vector from the AOI DEM ice mask (`insar_los_to_downslope.csv`). For median LOS = −5 mm month⁻¹ the projected rate is about 8 mm month⁻¹ (~0.10 m yr⁻¹). Ascending geometry yields a larger |downslope| because the LOS–slope dot product is smaller (less sensitive); the descending projection is quoted in the main text as the more conservative geometric case. + +**Open dry-season HyP3–MintPy SBAS (co-location only).** A dry-season Sentinel-1 network (January–April 2026; maximum temporal baseline 24 d) was submitted to ASF HyP3 `INSAR_GAMMA` (33 successful pairs; job manifest `configs/insar_hyp3.yml`) and processed with MintPy SBAS separately for ascending path 85 (11 interferograms after dropping one INT80 grid mismatch; `configs/mintpy_path85_asc_sens.cfg`) and descending path 19 (12 interferograms; `configs/mintpy_path19_des_sens.cfg`), with orbits kept separate. Baseline AOI median MintPy LOS (positive = toward satellite) is about +4.3 mm month⁻¹ (ASC; velocityStd ≈ 3.7) and +7.5 mm month⁻¹ (DESC; ≈ 3.3). Converting HyP3 incidence maps from radians and projecting LOS to local downslope yields same-sign projected rates within a factor of about 2, but ascending and descending MintPy LOS share the same sign, which is inconsistent with pure downslope creep, and ASC |LOS|/velocityStd ≲ 2. QA tables: `data/insar_qa/aoi_sbas_geometry_qa.json`, `aoi_sbas_downslope_qa.csv`, `aoi_sbas_velocity.csv`. + +**Tropospheric and reference-frame tests (did not raise the claim).** ERA5 delays via PyAPS and an empirical height–phase correlation were applied to both stacks (`scripts/insar_sbas_tropo_test.py`; `data/insar_qa/aoi_sbas_tropo_compare.*`). ERA5 reduces |LOS| but preserves the ASC/DESC sign and lowers SNR (ASC ~0.66; DESC ~0.95). Height correlation removes nearly all AOI signal. A pre-registered sensitivity with a shared bedrock reference pixel (YX = 241, 220; seed 7341), linear deramp, and minTempCoh = 0.5 (`aoi_sbas_refderamp_preregister.json`, `aoi_sbas_refderamp_compare.*`) raises both AOI SNRs above 2 but still yields same-sign ASC/DESC LOS. The claim level remains **open-SBAS co-location and reproducibility path only**; these rates do not replace the Shirzaei −4 to −6 mm month⁻¹ annotation. + +**Relation to Sentinel-1 RTC offsets.** InSAR LOS (annotation or SBAS mean) is a creep-scale, multi-month or seasonal mean (mm month⁻¹). Sentinel-1 RTC amplitude offsets are intermittent pair rates of order 0.1 m d⁻¹ with `velocity_std = 1.0` (Text S1). They are complementary observables, not interchangeable velocity series. + +**Use in the Letter.** The Shirzaei rates enter Results §3.3 and Table 1 only as provisional supporting co-location. The open SBAS path is cited at the same claim level and is not calibrated ice velocity, not a failure probability, and not required to reproduce the optical, Sentinel-1 RTC, control-glacier, or hanging-ice results. + +# Text S5. Seismic and precipitation metadata adopted from Guo et al. (2026) + +The following are adopted as event metadata from Guo et al. (2026) and are not recomputed here: Kakani (KKN) broadband timing; catalogue M ~5–5.7 read as mass-movement radiation rather than a tectonic trigger; about 8.3 mm of source-area precipitation in the final 72 h; and the approximately 0.72 km² detached ice–rock footprint. + +# Table S1. + +Sentinel-2 Level-2A area-of-interest (AOI) optical metrics for the eight evaluated dates (3 June–24 August 2026), with the usability flag applied to the albedo series. The 23 June scene (AOI-mean albedo 1.076) and the 14 August scene (*n* = 110 valid pixels) are excluded. Full-resolution machine-readable file: `si/Table_S1_sentinel2_aoi_timeseries.csv` in the Zenodo release. + +| Date | Sentinel-2 scene ID | Cloud (%) | n pixels | Albedo mean | Albedo SD | NDSI | NDWI | SWIR texture | Usable | +|---|---|---|---|---|---|---|---|---|---| +| 2026-06-03 | S2C_MSIL2A_20260603T045701_R119_T45RUM_20260603T100112 | 36.1 | 24844 | 0.842 | 0.239 | 0.606 | 0.036 | 0.021 | yes | +| 2026-06-05 | S2A_MSIL2A_20260605T050231_R119_T45RUM_20260605T100518 | 41.9 | 23923 | 0.869 | 0.215 | 0.580 | 0.041 | 0.024 | yes | +| 2026-06-15 | S2B_MSIL2A_20260615T044659_R076_T45RUM_20260615T083228 | 18.4 | 23668 | 0.887 | 0.231 | 0.632 | 0.027 | 0.018 | yes | +| 2026-06-23 | S2C_MSIL2A_20260623T045701_R119_T45RUM_20260623T100125 | 47.5 | 28735 | 1.076 | 0.251 | 0.395 | 0.064 | 0.041 | excluded: albedo > 1 | +| 2026-07-03 | S2C_MSIL2A_20260703T045701_R119_T45RUM_20260703T095511 | 44.4 | 18655 | 0.735 | 0.200 | 0.442 | 0.038 | 0.023 | yes | +| 2026-08-12 | S2C_MSIL2A_20260812T045701_R119_T45RUM_20260812T100317 | 18.7 | 16719 | 0.652 | 0.295 | 0.559 | 0.036 | 0.015 | yes | +| 2026-08-14 | S2B_MSIL2A_20260814T044659_R076_T45RUM_20260814T083413 | 49.0 | 110 | 0.388 | 0.054 | 0.274 | 0.057 | 0.018 | excluded: n < 1000 | +| 2026-08-24 | S2B_MSIL2A_20260824T044659_R076_T45RUM_20260824T083447 | 38.6 | 15538 | 0.722 | 0.359 | 0.528 | 0.047 | 0.029 | yes | + +# Table S2. + +Full Sentinel-1 radiometrically terrain-corrected (RTC) amplitude-offset pair series, ascending path 85 and descending path 19 (May–August 2026). All pairs have `velocity_std = 1.0`. Full-resolution machine-readable file: `si/Table_S2_sentinel1_velocity_pairs.csv`. + +| Start | End | Orbit | Rel. orbit | Velocity (m d⁻¹) | velocity std | Pair days | n pixels | dx (m) | dy (m) | +|---|---|---|---|---|---|---|---|---|---| +| 2026-05-05 | 2026-05-17 | ascending | 85 | 0.250 | 1.0 | 12 | 58196 | 0.0 | 3.0 | +| 2026-05-17 | 2026-05-29 | ascending | 85 | 0.083 | 1.0 | 12 | 62374 | −1.0 | 0.0 | +| 2026-05-29 | 2026-06-10 | ascending | 85 | 0.083 | 1.0 | 12 | 60399 | 1.0 | 0.0 | +| 2026-06-10 | 2026-06-22 | ascending | 85 | 0.083 | 1.0 | 12 | 58079 | 1.0 | 0.0 | +| 2026-06-22 | 2026-06-29 | ascending | 85 | 0.143 | 1.0 | 7 | 59779 | 0.0 | −1.0 | +| 2026-06-29 | 2026-07-11 | ascending | 85 | 0.083 | 1.0 | 12 | 65521 | 0.0 | 1.0 | +| 2026-07-11 | 2026-07-23 | ascending | 85 | 0.118 | 1.0 | 12 | 59097 | −1.0 | 1.0 | +| 2026-07-23 | 2026-08-04 | ascending | 85 | 0.083 | 1.0 | 12 | 63447 | 0.0 | −1.0 | +| 2026-08-04 | 2026-08-16 | ascending | 85 | 0.000 | 1.0 | 12 | 62071 | 0.0 | 0.0 | +| 2026-08-16 | 2026-08-28 | ascending | 85 | 0.000 | 1.0 | 12 | 59135 | 0.0 | 0.0 | +| 2026-05-01 | 2026-05-13 | descending | 19 | 0.083 | 1.0 | 12 | 60069 | 0.0 | −1.0 | +| 2026-05-13 | 2026-06-18 | descending | 19 | 0.028 | 1.0 | 36 | 54012 | 0.0 | 1.0 | +| 2026-06-18 | 2026-06-25 | descending | 19 | 0.143 | 1.0 | 7 | 59996 | 0.0 | −1.0 | +| 2026-06-25 | 2026-07-07 | descending | 19 | 0.118 | 1.0 | 12 | 59241 | −1.0 | −1.0 | +| 2026-07-07 | 2026-07-19 | descending | 19 | 0.083 | 1.0 | 12 | 65333 | 0.0 | 1.0 | +| 2026-07-19 | 2026-07-31 | descending | 19 | 0.118 | 1.0 | 12 | 61733 | 1.0 | 1.0 | +| 2026-07-31 | 2026-08-12 | descending | 19 | 0.186 | 1.0 | 12 | 62017 | −1.0 | 2.0 | +| 2026-08-12 | 2026-08-24 | descending | 19 | 0.083 | 1.0 | 12 | 62341 | −1.0 | 0.0 | + +# Table S3. + +Fifteen highest-ranked RGI 7.0 glaciers within 15 km of the scar centre by Topographic Susceptibility Index (TSI; Text S2), with mean slope, maximum elevation, and the hanging-ice flag. The failed source glacier G-15-05732 ranks fifth. Full RGI identifiers and fields: `si/Table_S3_surrounding_glacier_tsi_top15.csv`; the complete near-field inventory is `data/precursors/surrounding_glacier_inventory_tsi.csv` in the Zenodo release. + +| RGI label | Distance (km) | Mean slope (°) | z max (m) | TSI | Hanging ice | +|---|---|---|---|---|---| +| G-15-05733 | 2.25 | 46.81 | 6522.1 | 0.498 | yes | +| G-15-05746 | 3.00 | 43.58 | 7199.4 | 0.474 | yes | +| G-15-05747 | 3.21 | 52.16 | 6436.9 | 0.472 | no | +| G-15-05734 | 3.10 | 49.36 | 6402.9 | 0.458 | no | +| G-15-05732 | 1.40 | 32.45 | 7199.9 | 0.450 | yes | +| G-15-05745 | 3.46 | 43.94 | 6998.2 | 0.438 | yes | +| G-15-05736 | 3.63 | 54.19 | 6053.9 | 0.433 | no | +| G-15-05751 | 4.89 | 45.11 | 6696.7 | 0.358 | yes | +| G-15-05737 | 4.65 | 45.83 | 6140.3 | 0.342 | no | +| G-15-05760 | 5.35 | 52.55 | 5841.5 | 0.330 | no | +| G-15-05762 | 4.22 | 34.21 | 6920.2 | 0.319 | yes | +| G-15-05744 | 4.36 | 41.72 | 5934.5 | 0.318 | no | +| G-15-05739 | 4.24 | 32.49 | 7216.4 | 0.317 | yes | +| G-15-05731 | 2.91 | 34.75 | 5699.0 | 0.313 | no | +| G-15-05735 | 3.64 | 34.71 | 6211.6 | 0.312 | no | + +# Table S4. + +Sentinel-2 broadband albedo on 15 June and 12 August 2026 for the post-event consensus detachment AOI, the failed source glacier polygon (G-15-05732), and five non-failing control glaciers within about 3–12 km selected for steep ice and usable pixel counts on both dates. Glacier-level controls use RGI polygon means; the AOI row uses the scar AOI mask. Full fields (mean elevation, pixel counts, notes): `si/Table_S4_control_glacier_albedo.csv`. + +| Glacier / unit | Role | Distance (km) | Area (km²) | Slope (°) | Hanging | Albedo 15 Jun | n (15 Jun) | Albedo 12 Aug | n (12 Aug) | Δ albedo | +|---|---|---|---|---|---|---|---|---|---|---| +| detachment AOI | source AOI | 0.00 | 8.483 | 36.42 | yes | 0.887 | 23668 | 0.652 | 16719 | −0.235 | +| G-15-05732 | source, failed | 1.40 | 9.842 | 32.45 | yes | 0.873 | 54186 | 0.690 | 37178 | −0.183 | +| G-15-05745 | control, non-failing | 3.46 | 0.744 | 43.94 | yes | 0.841 | 6466 | 0.826 | 6242 | −0.015 | +| G-15-05757 | control, non-failing | 6.57 | 1.865 | 30.43 | yes | 0.837 | 6790 | 0.654 | 6298 | −0.183 | +| G-15-05907 | control, non-failing | 11.60 | 0.548 | 33.95 | no | 0.777 | 4859 | 0.822 | 4307 | +0.045 | +| G-15-05740 | control, non-failing | 3.55 | 0.900 | 29.16 | no | 0.706 | 4076 | 0.475 | 1106 | −0.231 | +| G-15-05762 | control, non-failing | 4.22 | 3.201 | 34.21 | yes | 0.824 | 13202 | 0.668 | 10683 | −0.156 | + +## References from the Supporting Information + +Alaska Satellite Facility (ASF) DAAC. *HyP3 (Hummynet Processing Pipeline v3), Sentinel-1 On-Demand InSAR (INSAR_GAMMA) and RTC products.* NASA ASF DAAC, Fairbanks, Alaska. https://hyp3.asf.alaska.edu/ (accessed June–August 2026). + +Muñoz Sabater, J. (2019), *ERA5-Land hourly data from 1950 to present*, Copernicus Climate Change Service (C3S) Climate Data Store, https://doi.org/10.24381/cds.e2161bac. + +Yunjun, Z., Fattahi, H., and Amelung, F. (2019), Small baseline InSAR time series analysis: Unwrapping error correction and noise reduction, *Computers & Geosciences*, 133, 104331, https://doi.org/10.1016/j.cageo.2019.104331. + +Zhao, H., and Zhang, T. (2026), *Glacier topographic and dynamic drivers (Glacier-collapse and debris-flow disasters at Langtang Lirung, Nepal): pre-event 30 m DEM, slope, ice thickness and surface velocity grids*, National Tibetan Plateau Data Center (TPDC), Beijing (free registration required), https://data.tpdc.ac.cn. Surface velocity component: ITS_LIVE v2.1 (NASA MEaSUREs). diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S1_sentinel2_aoi_timeseries.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S1_sentinel2_aoi_timeseries.csv new file mode 100644 index 0000000..c2ebf71 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S1_sentinel2_aoi_timeseries.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S2_sentinel1_velocity_pairs.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S2_sentinel1_velocity_pairs.csv new file mode 100644 index 0000000..300e2f9 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S2_sentinel1_velocity_pairs.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S3_surrounding_glacier_tsi_top15.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S3_surrounding_glacier_tsi_top15.csv new file mode 100644 index 0000000..ed68ecf Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S3_surrounding_glacier_tsi_top15.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S4_control_glacier_albedo.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S4_control_glacier_albedo.csv new file mode 100644 index 0000000..1aee7c2 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/si/Table_S4_control_glacier_albedo.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory.csv new file mode 100644 index 0000000..e707471 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory_tsi.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory_tsi.csv new file mode 100644 index 0000000..6e1e3b6 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_inventory_tsi.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_reference_comparison.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_reference_comparison.csv new file mode 100644 index 0000000..c3aa706 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_reference_comparison.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_snapshot_comparison.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_snapshot_comparison.csv new file mode 100644 index 0000000..97696e1 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_snapshot_comparison.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tier_summary.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tier_summary.csv new file mode 100644 index 0000000..2756b46 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tier_summary.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tsi_top15.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tsi_top15.csv new file mode 100644 index 0000000..ed68ecf Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/surrounding_glacier_tsi_top15.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_aoi_elev_bands.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_aoi_elev_bands.csv new file mode 100644 index 0000000..c8df5b4 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_aoi_elev_bands.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_detachment_pixels.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_detachment_pixels.csv new file mode 100644 index 0000000..145bf44 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_detachment_pixels.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_pixel_summary.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_pixel_summary.csv new file mode 100644 index 0000000..311af47 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_pixel_summary.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_slope_histogram.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_slope_histogram.csv new file mode 100644 index 0000000..722c66b Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/topo_slope_histogram.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_daily.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_daily.csv new file mode 100644 index 0000000..b29a855 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_daily.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_stats.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_stats.csv new file mode 100644 index 0000000..edf2329 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_era5_validation_stats.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_glacier_climatology_summary.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_glacier_climatology_summary.csv new file mode 100644 index 0000000..83147ae Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/tpdc_glacier_climatology_summary.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/vantor_cog_comparison.csv b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/vantor_cog_comparison.csv new file mode 100644 index 0000000..1224648 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22717809_gyirong_precursors/vantor_cog_comparison.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/LICENSE.txt b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/LICENSE.txt new file mode 100644 index 0000000..21fd060 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/LICENSE.txt @@ -0,0 +1,27 @@ +DIFFERENT LICENCE FROM THE REST OF THIS RECORD +============================================== + +Files in this folder: + + flow_extent.shp / .shx / .dbf / .prj / .cpg + +Content: the mapped debris-flow runout extent of the 26 August 2026 Bhote Koshi ice-rock +avalanche, Rasuwa District, Nepal. Digitised from post-event WorldView-3 imagery of 27 and +28 August 2026. + +Licence: Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) + https://creativecommons.org/licenses/by-nc/4.0/ + +Copyright: (c) Vantor 2026. Source imagery released through the Vantor Open Data Program + under CC BY-NC 4.0. + +The rest of this Zenodo record is licensed CC BY 4.0. That licence does NOT apply to these +files. Because the source imagery carries a non-commercial restriction, the outline digitised +from it carries the same restriction. + +Required attribution if you reuse these files: + + Debris-flow extent digitised from WorldView-3 imagery (c) Vantor 2026, released through + the Vantor Open Data Program under CC BY-NC 4.0. + +Geometry: EPSG:4326, 2 features, mapped area 13.21 km2. diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/README_upstream.md b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/README_upstream.md new file mode 100644 index 0000000..8702a68 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/README_upstream.md @@ -0,0 +1,127 @@ +# Bhote Koshi 2026 ice–rock avalanche: NISAR L2 GOFF site series and footprint-wide offset-tracking screen + +Data and code supporting the article: + +> Meena, S. R. *NISAR offsets measure pre-failure motion but do not single out the Bhote Koshi +> avalanche source.* + +Author: Sansar Raj Meena, Geophysics Department, SpatioAI Lab, National Institute of Oceanography +and Applied Geophysics – OGS, Borgo Grotta Gigante 42/C, 34010 Sgonico, Trieste, Italy +(, ORCID 0000-0001-6175-6491). + +DOI of this record: + +A preprint of the article is available at . + +--- + +## Licensing — read this first + +This record contains **two components under different licences**. + +| Component | Licence | +|---|---| +| Everything in this record **except** `extent_CC-BY-NC-4.0/` | **CC BY 4.0** | +| `extent_CC-BY-NC-4.0/` (mapped debris-flow runout outline) | **CC BY-NC 4.0, © Vantor 2026** | + +The debris-flow extent was digitised from WorldView-3 imagery released through the Vantor Open Data +Program under CC BY-NC 4.0. It is kept in its own folder, with its own `LICENSE.txt`, so the +non-commercial restriction travels with the file. It is **not** covered by the CC BY 4.0 licence +applied to the record as a whole. + +--- + +## What this is + +The 26 August 2026 ice–rock avalanche detached from the Bhote Koshi headwaters in Rasuwa District, +Nepal, and generated a debris flow down the Bhote Koshi–Trishuli valley. The failure fell inside the +first season of routine 12-day NISAR acquisitions, so the source was imaged five times before the +event and once in the interval spanning it. + +The article asks two questions and this record contains everything needed to reproduce both answers: + +1. **At the source** — is pre-failure motion resolvable against a calibrated null rather than against + a bare background, and does the series show acceleration? +2. **Across the footprint** — screening the full 345 × 339 km (116,707 km²) NISAR footprint blind, is + the source distinctive among coherently moving surfaces? + +The headline result is negative: motion at the source is measurable before failure, but it is not +diagnostic of failure. The blind screen recovers the source among **101 validated zones** of +downslope motion, 93 of them inventoried glaciers, and does not distinguish it by magnitude, +persistence or coherence. + +No custom SAR processing was performed. The analysis uses only the operational NISAR Level-2 GOFF +pixel-offset product, so every result can be regenerated from publicly archived granules. + +--- + +## Contents + +``` +code/ analysis and manuscript-build scripts (34 files) +fields/ per-pair offset fields over the 6 km source box (5 GeoTIFFs) +tables/ every statistic and null distribution quoted in the article, + plus the machine-readable Supplementary Tables S1–S7 +inventory/ the footprint-wide candidate inventory (GeoPackage, shapefile, CSV) + with attribution, controls and sensitivity results +rasters/ footprint screen rasters (EPSG:32645, 80 m) +terrain/ elevation, slope and downslope azimuth used by the screen +extent_CC-BY-NC-4.0/ mapped debris-flow runout outline — DIFFERENT LICENCE, see above +``` + +### `fields/` +`offsets_YYYYMMDD_YYYYMMDD.tif` — east, north, magnitude and directional-coherence bands over the +6 km box around the source, for all five pairs. EPSG:32645, 80 m posting. + +### `tables/` +`canonical_numbers.json` is the single source of truth: every number in the article is rendered from +it or from one of the other artefacts here, and `code/verify_cee.py` checks that claim against the +manuscript text. The remaining files hold the per-pair series, the size-matched null distributions, +the detector variants, the noise floor and percentiles, the interval-length and symmetry tests, and +the GAMMA cross-check. `exposure_verification.json` is the building/runout intersection behind the +exposure counts. `TableS1`–`TableS7` are the Supplementary Tables in CSV and JSON; +`TableS7_all_validated_zones` is Supplementary Data 1 of the article — all 101 validated zones with +their attributes. + +### `inventory/` +`candidates_attributed.*` is the blind screen output with glacier attribution against the Randolph +Glacier Inventory 6.0. `canonical_numbers.json` here is the live copy (14,277 bytes), re-staged for +this deposit; an earlier, shorter dump circulated in working copies and is superseded. + +### `terrain/` +`elev_m.tif`, `slope_deg.tif`, `downslope_az_deg.tif`, derived from the **Copernicus DEM GLO-90** +(90 m; © DLR e.V. 2010–2014 and © Airbus Defence and Space GmbH 2014–2018, provided under COPERNICUS +by the European Union and ESA). Redistribution of these derived layers is permitted; the source DEM +itself is not redistributed here and should be obtained from the Copernicus Data Space Ecosystem. + +--- + +## Deliberately not included + +- **Full-footprint per-pair offset rasters** (4230 × 4311 px). Regenerable from the public granules + with `code/wide_screen.py`; available from the author on request. +- **NISAR granules.** Public at the Alaska Satellite Facility DAAC; identifiers are listed in + `tables/TableS1_granules.csv` (track T098 ascending, L-SAR frequency A, HH). +- **Geopera v1.1 stereo DSM / elevation-change products.** Third-party, CC BY-NC; cite the Geopera + dataset directly. Only our own stable-ground statistics on it are reported, in the article's + Supplementary Fig. 1. +- **PlanetScope imagery.** Research licence, display only. +- **Copernicus GLO-90 source tiles.** See `terrain/` above. + +## Known gap + +`displacement_null.py` was listed in the deposit plan but does not exist as a separate script; its +output, `tables/displacement_null.json`, is included. The null-distribution machinery used elsewhere +in the analysis is in `code/polygon_null.py` and `code/sensitivity_and_controls.py`. + +--- + +## Citing + +Please cite the article. If you use this record directly, cite it as: + +> Meena, S. R. *Bhote Koshi 2026 ice–rock avalanche: NISAR L2 GOFF site series and footprint-wide +> offset-tracking screen — data and code* (Zenodo, 2026). https://doi.org/10.5281/zenodo.22730419 + +NISAR data are provided by NASA and ISRO and distributed by the Alaska Satellite Facility DAAC. +Glacier outlines from the Randolph Glacier Inventory 6.0. diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/flow_extent.cpg b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/flow_extent.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/zenodo_22730419_bhotekoshi_flowextent/flow_extent.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/2026_初步评估/B_DeepSeek试解/外部数据/数据清单.md b/2026_初步评估/B_DeepSeek试解/外部数据/数据清单.md new file mode 100644 index 0000000..73f3f80 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/外部数据/数据清单.md @@ -0,0 +1,63 @@ +# 外部数据清单(B 赛道初步评估) + +下载日期:2026-10-23。下载者:DeepSeek-V4.1-Flash(DeepSeek),经 OpenCode。 +总量:**47 个文件,3.5 MB**(限制 300 MB 内)。只含公开、无需登录、CC 许可的数据。 +TPDC 数据不在本清单内(需登录,主线程负责),见 `tpdc_priority.md`。 + +## 1. Zenodo 10.5281/zenodo.22717809(CC-BY-4.0) + +标题:Data and code for: Optical and radar signals before the 2026 Gyirong cascade (v1.2.1) +作者包:Ming J., Du Z. (2026), *Geophysical Research Letters*(投稿号 2026GL126799) +下载:https://zenodo.org/api/records/22717809/files/gyirong_grl_open_research_v1.2.1.zip/content +落盘:`外部数据/zenodo_22717809_gyirong_precursors/`(36 个文件,3.0 MB) + +| 关键文件 | 内容 | 用于哪问 | +|---|---|---| +| `detachment_aoi.geojson` | 崩解源区 AOI 多边形,bbox 85.505–85.540°E、28.262–28.292°N;属性含 `event_date=2026-08-26`、来源与“从 85.37°E 更正到 85.52°E”的说明 | Q2/Q4 源区定位 | +| `era5_source_daily.csv` | 源区 ERA5-Land 逐日:2026-08-26 降水 **15.1 mm**(气候值 7.1,距平 +8.0),气温距平 +1.35 °C | Q1/Q2 触发 | +| `era5_station_vs_source_hourly.csv` | 站点(**28.86°N, 85.29°E**)与源区逐小时 ERA5 对照 | Q1 站点代表性 | +| `key_dates_comparison.csv` | 影像实际日期与目标日期对照(8/26 目标用 8/24 影像,云量 38.6%) | Q2 影像时相 | +| `topo_rasters/tpdc_{slope_deg,thickness_m,tau_ice_kpa}.tif` | 源区 30 m 派生栅格(与附件 4 同源) | Q4 释放区 | +| `topo_pixel_summary.csv` | 源区像元统计:坡度中位 37.2°,冰厚中位 43 m,剪应力 p90 232 kPa | Q4 参数 | +| `sentinel1_velocity_pairs.csv`、`si/Table_S1–S4` | 事件前 SAR 速度对、S2 时序、周边冰川 TSI | Q2 前兆 | +| `surrounding_glacier_inventory.csv` | 周边冰川清单(RGI 7.0 + TSI 排序,689 KB) | Q2 空间易发性 | + +**已核对**:该包内 `topo_pixel_summary.csv` 的冰厚均值 49.587 m 与附件 4 的 nc 计算值一致 → 说明附件 4 与公开派生栅格同源。 + +## 2. Zenodo 10.5281/zenodo.22730419(数据 CC-BY-4.0;flow-extent 子集 CC-BY-**NC**-4.0) + +标题:Bhote Koshi 2026 ice–rock avalanche: NISAR L2 GOFF site series and footprint-wide offset-tracking screen +下载:`bhotekoshi2026_flow-extent_CC-BY-NC-4.0.zip`(109 KB)+ `README.md` +落盘:`外部数据/zenodo_22730419_bhotekoshi_flowextent/`(7 个文件,448 KB) + +- `flow_extent.shp/.dbf/.prj/.shx`:同一 8·26 事件在尼泊尔侧的**实测/解译流动范围多边形**,WGS84,bbox 85.147–85.448°E、27.923–28.337°N。多边形面积未在本文计算,可用于 Q3 空间范围与 Q4 淹没面积的**独立对照**。 +- 许可为 **NC**(非商业):竞赛学术用途可用,但论文与支撑材料中须注明许可,不要用于任何商业演示。 + +## 3. 只读取元数据、未下载的公开记录(不作为已获得数据) + +| DOI | 标题 | 为什么没下 | +|---|---|---| +| 10.5281/zenodo.23466792 | Cascading rock–ice avalanche and downstream flooding in the Nepal Himalaya | 记录无公开文件(仅元数据);描述给出关键量:源区 **0.716 km²**、总地形损失 **110.80 Mm³** | +| 10.5281/zenodo.22933601 | The 2026 Rasuwa–Trishuli mega rock–ice avalanche and cascading disaster | 文件为 196 MB GeoTIFF + 视频,超单文件预算且非必需 | +| 10.5281/zenodo.12752901 | Aksaut Rock Ice Avalanche simulation in r.avaflow | 无公开文件,仅记录 | + +## 4. 引用与合规 + +- 使用这些数据时按 DOI 引用;`flow_extent` 注意 CC-BY-NC。 +- 论文/支撑材料中不得声称“已获得 TPDC 登录数据”;TPDC 结果待主线程合并。 +- 数据仅用于本题分析,未上传至任何外部服务。 + +## 5. 主线程经 TPDC 登录取到的数据(本轮审计对象) + +位置:`../../TPDC_补充数据/下载/.zip`,19 个 ZIP,138 MB,CRC 校验通过。 +本轮只抽样读了 4 包,未改动任何 ZIP: + +| UUID | 内容 | 本轮用法 | +|---|---|---| +| 147456c9-f740-4259-a2ea-fd7423613510 | GFS 降水/云/水成物(0.25°,起报 2026-08-25 00Z,f000–f072) | 提取源区/口岸时序,得到 14.6 mm/日、lead time 26.5 h | +| be1c4b80-f26e-4f43-a54a-cedbfe06203b | TPCSM 5 km WRF(RAINNC、T2,逐小时增量) | 源区 8/26 16.3 mm;事件时刻 0 mm | +| 65a266d2-c9c8-4f49-803b-cbeff12ff450 | 2021-03-22 色东普冰崩 SAC(7 台×3 分量) | 结构核对 + STA/LTA;无一致初动 | +| 72aff770-2f75-459d-a5cc-77812f5b32be | 受灾点位 shp(28.2785°N, 85.3766°E) | 与路径终点相距 1.01 km | +| e7f8d50b-f647-4efe-8d15-a87173c13ab8 | 河网 shp | 路径 7.15 km 后才贴河 | + +**撤回**:`10.11888/SolidEar.tpdc.303620` 不是灾害数据(实为地热水化学数据库),已从清单与经验中删除。 diff --git a/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py b/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py new file mode 100644 index 0000000..956938d --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py @@ -0,0 +1,267 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +全球冰川灾害编目(TPDC 3ecd6ef8,DOI 10.11888/Cryos.tpdc.272812)审计与试算 —— 修正版 v2。 +AI 声明:DeepSeek-V4.1-Flash(DeepSeek),2026-10-23。需人工复核。 + +v2 修正(对应主线程审查意见): + 1 去重键含完整规范化日期/区间;仅到年的记录只标“疑似重复”,不删除;统一称“候选去重”。 + 2 时间解析顺序:区间 → 完整日期 → 年月 → 年份;非完整日期不记 day;保留原文。 + 3 有效事件行 = 有 ID 或 Site 的真实数据行;缺日期不丢,单独标 missing;合并单元格只在真实合并范围内还原,不做无条件 ffill。 + 4 audit 分 raw / candidate_unique 两套口径输出。 + 5 同时保留 Trigger 与 Triggers 两个字段。 + +输出(覆盖前已在 backups/YYYYMMDD 备份): + 结果/catalog_slope_failures_clean.csv + 结果/catalog_glof_clean.csv + 结果/catalog_audit.json + 结果/runout_angle_stats.json +""" +import os, io, re, json, zipfile, datetime as dt +import numpy as np +import pandas as pd +import openpyxl + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ZIP = os.path.abspath(os.path.join(ROOT, "..", "TPDC_补充数据", "下载", + "3ecd6ef8-fb24-44f0-b9f1-c8839fe83760.zip")) +RES = os.path.join(ROOT, "结果") +os.makedirs(RES, exist_ok=True) +RNG = np.random.default_rng(20261023) # 固定留出,保证可复现 + +z = zipfile.ZipFile(ZIP) +names = [n for n in z.namelist() if n.endswith(".xlsx")] +F_SF = [n for n in names if "slope failures" in n][0] +F_GL = [n for n in names if "Moraine" in n][0] + +def load_sheet(path, sheet): + """用 openpyxl 读;仅对真实 merged range 用左上角值回填,其余不 ffill。""" + wb = openpyxl.load_workbook(io.BytesIO(z.read(path)), data_only=True) + ws = wb[sheet] + merged = {} + for rng in ws.merged_cells.ranges: + v = ws.cell(rng.min_row, rng.min_col).value + for r in range(rng.min_row, rng.max_row + 1): + for c in range(rng.min_col, rng.max_col + 1): + merged[(r, c)] = v + rows = list(ws.iter_rows(values_only=False)) + header = [c.value for c in rows[0]] + recs, n_merged_filled = [], 0 + for r_i, row in enumerate(rows[1:], start=2): + vals = [] + for c_i, cell in enumerate(row, start=1): + v = cell.value + if (v is None or v == "") and (r_i, c_i) in merged: + v = merged[(r_i, c_i)]; n_merged_filled += 1 + vals.append(v) + recs.append(vals) + df = pd.DataFrame(recs, columns=[str(h).strip() if h is not None else f"col{i}" for i, h in enumerate(header)]) + df.attrs["merged_filled_cells"] = n_merged_filled + df.attrs["merged_ranges"] = len(ws.merged_cells.ranges) + return df + +DATE_RE = re.compile(r"^\d{4}[-/]\d{1,2}[-/]\d{1,2}([ T]\d{1,2}:\d{2}(:\d{2})?)?$") +YM_RE = re.compile(r"^\d{4}[-/]\d{1,2}$") +Y_RE = re.compile(r"^\d{4}$") + +def parse_time(v): + """返回 (原文, 精度, 起始年, 结束年, 规范化日期键)。 + 精度:hour / day / month / year / range / other / missing。""" + if v is None or (isinstance(v, float) and np.isnan(v)): + return None, "missing", None, None, None + if isinstance(v, (dt.datetime, pd.Timestamp)): + s = v.strftime("%Y-%m-%d %H:%M:%S") + prec = "hour" if (v.hour or v.minute or v.second) else "day" + return s, prec, v.year, v.year, s[:10] + s = str(v).strip() + if s in ("", "None", "nan", "NaN"): + return None, "missing", None, None, None + # 1) 区间:出现两个 4 位年份(2014/2-2015/4、2000-2001、2014/2—2015/4) + yrs = [int(t) for t in re.findall(r"(1[5-9]\d{2}|20\d{2})", s)] + if len(yrs) >= 2: + return s, "range", min(yrs), max(yrs), None + # 2) 完整日期(可带时间) + if DATE_RE.match(s): + d = s.replace("/", "-") + prec = "hour" if (" " in d or "T" in d) else "day" + try: + y = int(d[:4]) + except Exception: + return s, "other", None, None, None + return s, prec, y, y, d[:10] + # 3) 年月 + if YM_RE.match(s): + y = int(s[:4]) + return s, "month", y, y, None + # 4) 年份 + if Y_RE.match(s): + return s, "year", int(s), int(s), None + # 5) 其他(含中文、英文月份、约等) + return s, "other", (yrs[0] if yrs else None), (yrs[0] if yrs else None), None + +SHEETS = ["Glacier detachments", "Ice avalanches", "Ice-rock avalanches", + "Rock avalanches", "GLOF triggered by avalanches", "GLOF triggered by calving"] + +rows, sheet_diag = [], {} +for sh in SHEETS: + df = load_sheet(F_SF, sh) + n_raw = len(df) + n_evt = n_time_missing = 0 + for _, r in df.iterrows(): + eid = r.get("ID"); site = r.get("Site") + # 真实事件行:ID 或 Site 至少一个非空(整行空行不计) + if (pd.isna(eid) and pd.isna(site)): + continue + n_evt += 1 + t_raw = r.get("Time") + ts, prec, y0, y1, dkey = parse_time(t_raw) + if prec == "missing": + n_time_missing += 1 + try: + lon = float(r.get("Longitude")); lat = float(r.get("Latitude")) + except Exception: + lon = lat = np.nan + rows.append(dict( + sheet=sh, src_ID=eid, Site=str(site).strip() if not pd.isna(site) else None, + time_raw=ts, time_prec=prec, year_start=y0, year_end=y1, date_key=dkey, + mechanism=r.get("Type"), lon=lon, lat=lat, + angle_reach_deg=r.get("Angle of reach °"), + source_area_km2=r.get("Source area (km2)"), + volume_Mm3=r.get("Volume (106m3)"), + source_slope_deg=r.get("Source slope (°)") if "Source slope (°)" in df.columns else r.get("Source slope °"), + horizontal_km=r.get("Horizontal distance (km)"), + affected_km2=r.get("Affected area (km2)"), + cascade=r.get("Cascade hazards"), + trigger_plural=r.get("Triggers"), # 多数表用 Triggers + trigger_singular=r.get("Trigger"), # Ice-rock 表用 Trigger + refs=r.get("References"))) + sheet_diag[sh] = dict(raw_rows=n_raw, event_rows=n_evt, time_missing=n_time_missing, + merged_ranges=df.attrs["merged_ranges"], + merged_cells_filled=df.attrs["merged_filled_cells"]) + +sf = pd.DataFrame(rows) +for c in ["angle_reach_deg", "source_area_km2", "volume_Mm3", "source_slope_deg", + "horizontal_km", "affected_km2"]: + sf[c] = pd.to_numeric(sf[c], errors="coerce") +sf["trigger"] = sf.trigger_plural.where(sf.trigger_plural.notna(), sf.trigger_singular) + +def norm(s): + return re.sub(r"[\s\-_]+", "", str(s).lower()) + +# ---- 去重:日期精确的才作为候选重复;年份精度的只标疑似 +sf["dedupe_key_exact"] = np.where( + sf.date_key.notna(), + sf.Site.map(norm) + "|" + sf.lat.round(3).astype(str) + "|" + sf.lon.round(3).astype(str) + "|" + sf.date_key.fillna(""), + None) +sf["dedupe_key_year"] = np.where( + sf.date_key.isna() & sf.year_start.notna(), + sf.Site.map(norm) + "|" + sf.lat.round(3).astype(str) + "|" + sf.lon.round(3).astype(str) + "|Y" + sf.year_start.fillna(0).astype(int).astype(str), + None) +sf["is_dupe_exact"] = sf.dedupe_key_exact.notna() & sf.duplicated("dedupe_key_exact", keep="first") +sf["is_dupe_suspect"] = (~sf.is_dupe_exact) & sf.dedupe_key_year.notna() & sf.duplicated("dedupe_key_year", keep="first") +sf["candidate_unique"] = ~(sf.is_dupe_exact | sf.is_dupe_suspect) + +sf["is_hma"] = sf.lat.between(25, 45) & sf.lon.between(60, 105) +sf["is_himalaya"] = sf.lat.between(26, 31) & sf.lon.between(75, 95) + +# ---- GLOF 表 +gl_df = load_sheet(F_GL, "Sheet1") +gl_rows = [] +for _, r in gl_df.iterrows(): + lake, date = r.get("Glacial lake"), r.get("Date") + if pd.isna(lake) and pd.isna(date): + continue + ts, prec, y0, y1, dkey = parse_time(date) + try: + lon = float(r.get("Longitude")); lat = float(r.get("Latitude")) + except Exception: + lon = lat = np.nan + gl_rows.append(dict(src_ID=r.get("ID"), country=r.get("Country"), + lake=str(lake).strip() if not pd.isna(lake) else None, + time_raw=ts, time_prec=prec, year_start=y0, year_end=y1, date_key=dkey, + lake_type=r.get("Lake type"), lon=lon, lat=lat, triggers=r.get("Triggers"), + volume_Mm3=pd.to_numeric(r.get("Release volume/106m3"), errors="coerce"), + peak_discharge=r.get("Peak discharge/m3·s-1"), deaths=r.get("Deaths"), + refs=r.get("References"))) +gl = pd.DataFrame(gl_rows) +gl["is_hma"] = gl.lat.between(25, 45) & gl.lon.between(60, 105) +gl["is_himalaya"] = gl.lat.between(26, 31) & gl.lon.between(75, 95) + +def summarize(df, tag): + raw = df + uniq = df[df.candidate_unique] if "candidate_unique" in df else df + return dict( + raw=dict(n=int(len(raw)), by_sheet=raw.sheet.value_counts().to_dict() if "sheet" in raw else {}, + by_mechanism=raw.mechanism.astype(str).value_counts().to_dict() if "mechanism" in raw else {}, + by_precision=raw.time_prec.value_counts().to_dict(), + hma=int(raw.is_hma.sum()), himalaya=int(raw.is_himalaya.sum())), + candidate_unique=dict(n=int(len(uniq)), + by_sheet=uniq.sheet.value_counts().to_dict() if "sheet" in uniq else {}, + by_mechanism=uniq.mechanism.astype(str).value_counts().to_dict() if "mechanism" in uniq else {}, + by_precision=uniq.time_prec.value_counts().to_dict(), + hma=int(uniq.is_hma.sum()), himalaya=int(uniq.is_himalaya.sum())), + duplicates=dict(exact_removed=int(df.is_dupe_exact.sum()) if "is_dupe_exact" in df else 0, + suspect_year_only=int(df.is_dupe_suspect.sum()) if "is_dupe_suspect" in df else 0)) + +audit = dict( + script_version="v2 (2026-10-23 correction)", + source_zip=os.path.basename(ZIP), doi="10.11888/Cryos.tpdc.272812", + metadata_claim=dict(slope_failures=737, glof=380), + claim_note="737/380 是元数据描述;本表只报可复现的实际计数,不为对齐宣传数修改数据。", + sheet_diagnostics=sheet_diag, + slope_failures=summarize(sf, "slope"), + slope_fields=dict(volume=int(sf.volume_Mm3.notna().sum()), + volume_and_H=int((sf.volume_Mm3.notna() & sf.horizontal_km.notna()).sum()), + angle=int(sf.angle_reach_deg.notna().sum())), + glof=summarize(gl, "glof"), + glof_fields=dict(volume=int(gl.volume_Mm3.notna().sum())), +) + +sf.to_csv(os.path.join(RES, "catalog_slope_failures_clean.csv"), index=False, encoding="utf-8-sig") +gl.to_csv(os.path.join(RES, "catalog_glof_clean.csv"), index=False, encoding="utf-8-sig") +with open(os.path.join(RES, "catalog_audit.json"), "w", encoding="utf-8") as f: + json.dump(audit, f, ensure_ascii=False, indent=2) + +print("== sheet diagnostics") +for k, v in sheet_diag.items(): + print(f" {k:<34} raw={v['raw_rows']:>4} events={v['event_rows']:>4} no_time={v['time_missing']:>4} " + f"merged_ranges={v['merged_ranges']} merged_cells={v['merged_cells_filled']}") +print("\n== slope failures") +print(" raw:", audit["slope_failures"]["raw"]) +print(" cand-unique:", audit["slope_failures"]["candidate_unique"]) +print(" dup:", audit["slope_failures"]["duplicates"]) +print("\n== GLOF") +print(" raw:", audit["glof"]["raw"]) +print(" cand-unique:", audit["glof"]["candidate_unique"]) + +# ---------------- 传播/摩擦(样本因去重口径变化,重算一次) +print("\n" + "=" * 60) +sub = sf[sf.candidate_unique & sf.volume_Mm3.gt(0) & sf.horizontal_km.gt(0)] +print("体积+距离齐全(候选唯一):") +print(sub.groupby("sheet").size().to_string()) +ice = sub[sub.sheet.isin(["Ice-rock avalanches", "Glacier detachments"])].copy() +out = dict(script_version="v2", n_ice=len(ice), n_ice_hma=int(ice.is_hma.sum())) +if len(ice) >= 12: + x = np.log10(ice.volume_Mm3.values); y = np.log10(ice.horizontal_km.values) + idx = RNG.permutation(len(ice)); cut = int(0.7*len(ice)) + tr, te = idx[:cut], idx[cut:] + b, a = np.polyfit(x[tr], y[tr], 1) + pred = a + b*x[te] + rmse = float(np.sqrt(np.mean((pred - y[te])**2))) + r2 = float(1 - np.sum((y[te]-pred)**2)/np.sum((y[te]-y[te].mean())**2)) + out.update(dict(fit=(float(a), float(b)), holdout_rmse_log10=rmse, holdout_r2=r2, n_test=int(len(te)))) + print(f"留出:log10H={a:.3f}+{b:.3f}log10V,RMSE={rmse:.2f},R²={r2:.2f}(n_test={len(te)})") +else: + out["note"] = "n<12, no fit" + +ang = sf[sf.candidate_unique & sf.angle_reach_deg.between(0.5, 60)]["angle_reach_deg"] +mu = np.tan(np.deg2rad(ang)) +out["angle_reach_deg"] = dict(n=int(len(ang)), p10=float(ang.quantile(.1)), + median=float(ang.median()), p90=float(ang.quantile(.9))) +out["mu_eq_tan"] = dict(p10=float(mu.quantile(.1)), median=float(mu.median()), p90=float(mu.quantile(.9))) +out["note_2026"] = ("2026 事件的 8.85°(=atan(3210/20620))来自‘模拟/粗网格几何’," + "仅作外部量级对照,不能据此断言真实事件的分位或反推 μ 范围。") +print(f"角 of reach:n={len(ang)},p10={ang.quantile(.1):.1f}°,中位={ang.median():.1f}°,p90={ang.quantile(.9):.1f}°") +print("等效 tan:", {k: round(v, 3) for k, v in out["mu_eq_tan"].items()}) +with open(os.path.join(RES, "runout_angle_stats.json"), "w", encoding="utf-8") as f: + json.dump(out, f, ensure_ascii=False, indent=2) diff --git a/2026_初步评估/B_DeepSeek试解/源码/audit_tpdc_increment.py b/2026_初步评估/B_DeepSeek试解/源码/audit_tpdc_increment.py new file mode 100644 index 0000000..25ce7aa --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/源码/audit_tpdc_increment.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +TPDC 增量的最小审计(DeepSeek 子任务 B)。 +AI 声明:本脚本由 DeepSeek-V4.1-Flash(DeepSeek)于 2026-10-23 生成,需人工复核。 + +只做四件事,全部只读 TPDC_补充数据/下载/*.zip(嵌套包解到 /tmp/opencode 自建目录): + 1) GFS 灾前预报:源区/口岸逐时次降水率与 6h 累计,核对 lead time、UTC、单位; + 2) TPCSM:变量、初始化时刻、网格,若可用则取源区降雨; + 3) 受灾位置点 vs 我们 20.6 km 路径终点;河网 vs 路径; + 4) 输出 JSON/CSV 到 结果/。 +不重复下载、不登录、不修改原始 ZIP。 +""" +import os, sys, json, zipfile, shutil, struct +import numpy as np +import pandas as pd +import netCDF4 as nc + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +TPDC = os.path.abspath(os.path.join(ROOT, "..", "TPDC_补充数据", "下载")) +RES = os.path.join(ROOT, "结果") +TMP = "/tmp/opencode/tpdc_increment" +os.makedirs(RES, exist_ok=True) +os.makedirs(TMP, exist_ok=True) + +def unnest(zid, inner_ext): + """解外层 zip,再解出内层 zip 中含指定后缀的目录;返回目录路径。""" + dst = os.path.join(TMP, zid) + if os.path.isdir(dst) and any(f.endswith(inner_ext) for _, _, fs in os.walk(dst) for f in fs): + return dst + os.makedirs(dst, exist_ok=True) + with zipfile.ZipFile(os.path.join(TPDC, zid + ".zip")) as z: + z.extractall(dst) + for r, _d, fs in os.walk(dst): + for f in fs: + if f.endswith(".zip"): + with zipfile.ZipFile(os.path.join(r, f)) as z: + z.extractall(os.path.join(r, "inner")) + return dst + +def find(dst, ext): + for r, _d, fs in os.walk(dst): + for f in fs: + if f.endswith(ext): + yield os.path.join(r, f) + +# ---------------------------------------------------------------- 1) GFS +print("=" * 70); print("1) GFS 灾前预报(起报 2026-08-25 00Z)") +gdir = unnest("147456c9-f740-4259-a2ea-fd7423613510", ".nc") +gfile = sorted(find(gdir, ".nc"))[0] +ds = nc.Dataset(gfile) +lat = np.asarray(ds["latitude"][:]); lon = np.asarray(ds["longitude"][:]) +fh = np.asarray(ds["forecast_hour"][:]) +init = ds.getncattr("initialization_time") +print(f"nc={os.path.basename(gfile)}\n起报={init} 时次={list(map(int,fh))}\n" + f"网格 lat{lat.min():.3f}-{lat.max():.3f} lon{lon.min():.3f}-{lon.max():.3f}") + +def idx(la, lo): + return int(np.argmin(np.abs(lat - la))), int(np.argmin(np.abs(lon - lo))) + +SRC = (28.28, 85.52) # 源区(公开 AOI 中心) +PORT = (28.2785, 85.3766) # 受灾位置元数据 +rows = [] +for tag, (la, lo) in [("source", SRC), ("port", PORT)]: + i, j = idx(la, lo) + rate = np.asarray(ds["precipitation_rate"][:, i, j], float) + acc6 = np.asarray(ds["total_precipitation_6h"][:, i, j], float) + acci = np.asarray(ds["total_precipitation_since_initialization"][:, i, j], float) + cw = np.asarray(ds["cloud_water_path"][:, i, j], float) + pw = np.asarray(ds["precipitable_water"][:, i, j], float) + for k in range(len(fh)): + rows.append(dict(site=tag, grid_lat=float(lat[i]), grid_lon=float(lon[j]), + fh=int(fh[k]), + valid_utc=str(np.datetime64("2026-08-25T00:00") + np.timedelta64(int(fh[k]), "h")), + precip_rate_mm_h=float(rate[k]), precip_6h_mm=float(acc6[k]), + precip_cum_mm=float(acci[k]), cloud_water_path=float(cw[k]), + precipitable_water=float(pw[k]))) +g = pd.DataFrame(rows) +g.to_csv(os.path.join(RES, "gfs_precip_source_port.csv"), index=False, encoding="utf-8-sig") +print(g.to_string(index=False, float_format=lambda v: f"{v:.2f}")) + +# 事件窗:2026-08-26 10:30 BJT = 02:30 UTC,落在 f026-f032 之间 → 用 f030 最近 +ev = g[(g.valid_utc >= "2026-08-26T00:00") & (g.valid_utc <= "2026-08-26T12:00")] +print("\n事件当日 00-12 UTC 预报(源区/口岸):") +print(ev[["site", "fh", "valid_utc", "precip_rate_mm_h", "precip_6h_mm"]].to_string(index=False)) +for tag in ["source", "port"]: + sub = g[g.site == tag] + # 事件日 6h 累计之和(只加 6h 量,不再与 since-init 相加) + ev6 = sub[(sub.valid_utc >= "2026-08-26T00:00") & (sub.valid_utc <= "2026-08-26T18:00")]["precip_6h_mm"].sum() + print(f"{tag}: 2026-08-26 00-18UTC 的 6h 累计之和 = {ev6:.1f} mm(仅 6h 量求和)") +ds.close() + +# ---------------------------------------------------------------- 2) TPCSM +print("\n" + "=" * 70); print("2) TPCSM 5 km 模拟") +tdir = unnest("be1c4b80-f26e-4f43-a54a-cedbfe06203b", ".nc") +tfiles = sorted(find(tdir, ".nc")) + sorted(find(tdir, ".nc4")) +print("nc 文件数:", len(tfiles)) +if tfiles: + t = nc.Dataset(tfiles[0]) + print("file:", os.path.basename(tfiles[0])) + print("dims:", {k: len(v) for k, v in t.dimensions.items()}) + for n, v in t.variables.items(): + print(f" {n:<22}{v.dimensions} {v.shape} {v.dtype} {getattr(v,'units','')}") + print("attrs:", {k: t.getncattr(k) for k in t.ncattrs()}) + t.close() +else: + docx = list(find(tdir, ".docx")) + print("未找到 nc;docx:", docx) + +# ---------------------------------------------------------------- 3) 点位与河网 +print("\n" + "=" * 70); print("3) 受灾位置点 / 河网 vs 我们的路径") +def shp_points(path): + s = open(path, "rb").read() + st = struct.unpack("II", s[pos:pos+8]); clen *= 2 + body = s[pos+8:pos+8+clen] + typ = struct.unpack("II", s[pos:pos+8]); clen *= 2 + body = s[pos+8:pos+8+clen] + typ = struct.unpack("= 365 - win)) & (hh == hour)) + v = f[name][sel] + return v[np.isfinite(v)] + +def pct_rank(x, base): + base = base[np.isfinite(base)] + if not np.isfinite(x) or len(base) < 20: + return np.nan + return 100.0 * ((base < x).sum() + 0.5 * (base == x).sum()) / len(base) + +rows = [] +for name, unit in FEATS: + te, fe = data[2026] + i = int(np.argmin(np.abs(te - EV))) + x = fe[name][i] + base = np.concatenate([matched_values(y, name) for y in range(2021, 2026)]) + p = pct_rank(x, base) + rows.append(dict(feature=name, unit=unit, event_value=None if not np.isfinite(x) else float(x), + pctl_vs_season=p, n_control=int(len(base)), + extremeness=abs(p - 50) if np.isfinite(p) else np.nan)) +q1 = pd.DataFrame(rows).sort_values("extremeness", ascending=False) +q1.to_csv(os.path.join(RES, "q1_feature_percentiles.csv"), index=False, encoding="utf-8-sig") +print(q1.to_string(index=False, float_format=lambda v: f"{v:.3f}")) + +# 按年 bootstrap:5 个对照年有放回重抽,看排序位次稳定性 +rng = np.random.default_rng(20261023) +boot_rank = {f: [] for f, _ in FEATS} +for _ in range(500): + yrs = rng.choice([2021, 2022, 2023, 2024, 2025], size=5, replace=True) + vals = {} + for name, _unit in FEATS: + te, fe = data[2026] + i = int(np.argmin(np.abs(te - EV))) + base = np.concatenate([matched_values(y, name) for y in yrs]) + p = pct_rank(fe[name][i], base) + vals[name] = abs(p - 50) if np.isfinite(p) else -1 + order = sorted(vals, key=lambda k: -vals[k]) + for r, k in enumerate(order, 1): + boot_rank[k].append(r) +stab = pd.DataFrame([ + dict(feature=k, rank_mean=float(np.mean(v)), rank_p05=float(np.percentile(v, 5)), + rank_p95=float(np.percentile(v, 95)), top5_freq=float(np.mean(np.array(v) <= 5))) + for k, v in boot_rank.items()]).sort_values("rank_mean") +stab.to_csv(os.path.join(RES, "q1_rank_stability.csv"), index=False, encoding="utf-8-sig") +print("\n按年 bootstrap 排序稳定性(500 次,5 年有放回):") +print(stab.to_string(index=False, float_format=lambda v: f"{v:.2f}")) + +# ---------------------------------------------------------------- 数据核查 +print("\n" + "=" * 70) +print("数据核查:附件冰川 NetCDF 与本底 DEM / 公开 AOI 的坐标一致性") +print("=" * 70) +import zipfile as _zf +if not os.path.isdir(os.path.join(TMP, "dem")): + _dz = [f for f in os.listdir(ATT) if f.startswith("(7)") and f.endswith(".zip")][0] + with _zf.ZipFile(os.path.join(ATT, _dz)) as z: + z.extractall(os.path.join(TMP, "dem")) +dem = np.array(Image.open(os.path.join(TMP, "dem", "DEM.tif"))).astype(float) +dem[dem <= -32767] = np.nan +nx, ny = dem.shape[1], dem.shape[0] +px, py = 0.0002777467191455384, 0.00027774196409497727 +x0, y0 = 85.18975577464204, 28.564382284579324 + +import netCDF4 as nc +gz = [f for f in os.listdir(ATT) if f.startswith("(4)") and f.endswith(".zip")][0] +import zipfile +if not os.path.isdir(os.path.join(TMP, "glacier")): + with zipfile.ZipFile(os.path.join(ATT, gz)) as zf: + zf.extractall(os.path.join(TMP, "glacier")) +gfile = os.path.join(TMP, "glacier", [f for f in os.listdir(os.path.join(TMP, "glacier")) if f.endswith(".nc")][0]) +ds = nc.Dataset(gfile) +gx = np.asarray(ds["x"][:]); gy = np.asarray(ds["y"][:]); gdem = np.asarray(ds["dem"][:], float) +def utm_inv(E, N, lon0=87.0, k0=0.9996, E0=500000.0): + a = 6378137.0; f = 1/298.257223563; e2 = 2*f - f*f; ep2 = e2/(1-e2) + x = E - E0; M = N/k0 + mu = M/(a*(1 - e2/4 - 3*e2**2/64 - 5*e2**3/256)) + e1 = (1-np.sqrt(1-e2))/(1+np.sqrt(1-e2)) + p1 = (mu + (3*e1/2 - 27*e1**3/32)*np.sin(2*mu) + (21*e1**2/16 - 55*e1**4/32)*np.sin(4*mu) + + (151*e1**3/96)*np.sin(6*mu) + (1097*e1**4/512)*np.sin(8*mu)) + C1 = ep2*np.cos(p1)**2; T1 = np.tan(p1)**2 + N1 = a/np.sqrt(1-e2*np.sin(p1)**2); R1 = a*(1-e2)/(1-e2*np.sin(p1)**2)**1.5 + D = x/(N1*k0) + lat = p1 - (N1*np.tan(p1)/R1)*(D**2/2 - (5+3*T1+10*C1-4*C1**2-9*ep2)*D**4/24 + + (61+90*T1+298*C1+45*T1**2-252*ep2-3*C1**2)*D**6/720) + lon = np.radians(lon0) + (D - (1+2*T1+C1)*D**3/6 + + (5-2*C1+28*T1-3*C1**2+8*ep2+24*T1**2)*D**5/120)/np.cos(p1) + return np.degrees(lon), np.degrees(lat) +glo, gla = utm_inv(gx.mean(), gy.mean()) +aoi = json.load(open(os.path.join(EXT, "zenodo_22717809_gyirong_precursors", "detachment_aoi.geojson"))) +def flat(c): + if isinstance(c[0], (int, float)): + return [c] + out = [] + for z in c: + out += flat(z) + return out +pts = flat(aoi["features"][0]["geometry"]["coordinates"]) +alon = [p[0] for p in pts]; alat = [p[1] for p in pts] +print(f"nc 质心 lon={glo:.5f} lat={gla:.5f};公开 AOI bbox lon[{min(alon):.4f},{max(alon):.4f}] " + f"lat[{min(alat):.4f},{max(alat):.4f}];质心是否落在 AOI 内:" + f"{min(alon)<=glo<=max(alon) and min(alat)<=gla<=max(alat)}") +# nc dem 与本地 DEM 重叠格点比对 +lons = gx; lats = utm_inv(gx[:, None]*np.ones((1, len(gy))), (gy[None, :]*np.ones((len(gx), 1))).T)[1] \ + if False else None +# 逐格点反算(145x138=20010,可承受) +xx, yy = np.meshgrid(gx, gy) # shape (138,145) +llon, llat = utm_inv(xx, yy) +col = ((llon - x0)/px).astype(int); row = ((y0 - llat)/py).astype(int) +ok = (col >= 0) & (col < nx) & (row >= 0) & (row < ny) & np.isfinite(gdem) +d_local = dem[row[ok], col[ok]] +d_nc = gdem[ok] +diff = d_nc - d_local +print(f"重叠格点 {ok.sum()};本地 DEM 均值 {np.nanmean(d_local):.0f} m,nc 均值 {np.nanmean(d_nc):.0f} m;" + f"差值中位 {np.nanmedian(diff):+.1f} m,MAE {np.nanmean(np.abs(diff)):.1f} m") +ds.close() + +# ---------------------------------------------------------------- Q4 传播基线 +print("\n" + "=" * 70) +print("Q4 情景传播基线:真实 DEM 上 D8 路径 + Voellmy 型一维运动积分") +print("=" * 70) +from scipy.ndimage import minimum_filter +# 选路网格:4x4 块平均降到约 120 m 再 3x3 侵蚀填洼。 +# 30 m 单流向会卡在局部洼地(实测 10.6 km 处终止),120 m 网格可贯通到口岸河段。 +K = 4 +ny2, nx2 = ny//K, nx//K +dem_route = dem[:ny2*K, :nx2*K].reshape(ny2, K, nx2, K).mean(axis=(1, 3)) +dem_route = minimum_filter(dem_route, size=3) +dzdy, dzdx = np.gradient(dem, 30.7, 27.2) +slope = np.degrees(np.arctan(np.hypot(dzdx, dzdy))) + +src_lon, src_lat = float(np.mean(alon)), float(np.mean(alat)) +sc = int((src_lon - x0)/(px*K)); sr = int((y0 - src_lat)/(py*K)) +print(f"源区中心 (lon={src_lon:.4f}, lat={src_lat:.4f}) -> 行 {sr}, 列 {sc}, " + f"DEM 高程 {dem[sr, sc]:.0f} m, 坡度 {slope[sr, sc]:.1f}°") + +def lowest_neighbor(r, c, rad=3): + """D8 下沉;遇洼地在 rad 半径内找最低格点(简化 breach)。""" + best = None + for dr in range(-rad, rad+1): + for dc in range(-rad, rad+1): + if dr == 0 and dc == 0: + continue + rr, cc = r+dr, c+dc + if not (0 <= rr < ny2 and 0 <= cc < nx2): + continue + if not np.isfinite(dem[rr, cc]): + continue + if dem_route[rr, cc] < dem_route[r, c] - 0.01: + d = np.hypot(dr*30.7*K, dc*27.2*K) + key = (dem_route[rr, cc], d) + if best is None or key < best[0]: + best = (key, rr, cc) + return (best[1], best[2]) if best else (None, None) + +path = [(sr, sc)] +seen = {(sr, sc)} +while len(path) < 20000: + r, c = path[-1] + if dem_route[r, c] < 1850: # 到达口岸河段高程量级 + break + rr, cc = lowest_neighbor(r, c, rad=3) + if rr is None or (rr, cc) in seen: + # 允许一次半径外扩,仍失败则停 + rr, cc = lowest_neighbor(r, c, rad=6) + if rr is None or (rr, cc) in seen: + break + seen.add((rr, cc)) + path.append((rr, cc)) +path = np.array(path) +# 高程用真实 30 m DEM 采样(粗网格行/列映射回 30 m),沿路径 5 点中值平滑抑制 DEM 噪声 +zc = dem[path[:, 0]*K + K//2, path[:, 1]*K + K//2] +prof_z = pd.Series(zc).rolling(5, center=True, min_periods=1).median().to_numpy() +step = np.hypot(np.diff(path[:, 0])*30.7*K, np.diff(path[:, 1])*27.2*K) +dist = np.concatenate([[0], np.cumsum(step)])/1000.0 +print(f"路径格点 {len(path)},水平长度 {dist[-1]:.2f} km,落差 {prof_z[0]-prof_z[-1]:.0f} m," + f"末端高程 {prof_z[-1]:.0f} m") +pd.DataFrame(dict(km=dist, elev_m=prof_z, + lon=x0+path[:, 1]*px*K, lat=y0-path[:, 0]*py*K)).to_csv( + os.path.join(RES, "q4_path_profile.csv"), index=False, encoding="utf-8-sig") + +G = 9.81 +def voellmy(mu, xi, h, v0=0.0, z=None, s=None, dt=0.02): + """沿路径推进的 Voellmy 型一维运动(固定时间步 + 节点插值)。 + dv/dt = g sinθ - g μ cosθ - g v²/(ξ h),θ 取当前节点到下一点的坡角。 + 返回每个路径节点的到达时间 t 与速度 v。""" + z = prof_z if z is None else z + s = step if s is None else s + L = float(np.sum(s)) + SN = np.concatenate([[0.0], np.cumsum(s)]) # 节点累计里程 + vt = np.zeros(len(SN)); vt[0] = v0 + ar = np.zeros(len(SN)) + v = max(v0, 0.1); t = 0.0; pos = 0.0; i = 0 + while pos < L and t < 20000: + i = min(np.searchsorted(SN, pos, side="right") - 1, len(s)-1) + th = np.arctan2(max(z[i]-z[i+1], 1e-6), s[i]) + a = G*np.sin(th) - G*mu*np.cos(th) - G*v*v/(abs(xi)*h) + v = max(v + a*dt, 0.5) # 0.5 m/s 下限代表惯性,避免数值上“冻结” + pos += v*dt + t += dt + while i+1 < len(SN) and SN[i+1] <= pos: + vt[i+1] = v; ar[i+1] = t; i += 1 + arr = ar.copy() + arr[arr == 0] = t + return vt, arr + +scen = [] +for mu in [0.05, 0.10, 0.20]: + for xi in [500, 1000, 2000]: + for h in [10.0, 25.0]: + v, tt = voellmy(mu, xi, h) + scen.append(dict(mu=mu, xi_m_s2=xi, h_m=h, v_max_m_s=float(np.nanmax(v)), + t_total_s=float(tt[-1]), t_total_min=float(tt[-1]/60), + v_end_m_s=float(v[-1]), runout_km=float(dist[-1]))) +sc = pd.DataFrame(scen).sort_values("t_total_s") +sc.to_csv(os.path.join(RES, "q4_voellmy_sensitivity.csv"), index=False, encoding="utf-8-sig") +print(sc.to_string(index=False, float_format=lambda v: f"{v:.1f}")) + +# 中位参数的代表情景,逐段到达时间 +v_ref, t_ref = voellmy(0.10, 1000, 25.0) +marks = [] +for k in np.arange(0, dist[-1]+0.001, 2.0): + if k <= 0: + continue + j = int(np.argmin(np.abs(dist - k))) + marks.append(dict(km=float(dist[j]), t_min=float(t_ref[j]/60), v_m_s=float(v_ref[j]), elev=float(prof_z[j]))) +pd.DataFrame(marks).to_csv(os.path.join(RES, "q4_arrival_marks.csv"), index=False, encoding="utf-8-sig") +print("\n代表情景 (μ=0.10, ξ=1000, h=25 m) 每 2 km 到达时间:") +print(pd.DataFrame(marks).to_string(index=False, float_format=lambda v: f"{v:.1f}")) diff --git a/2026_初步评估/B_DeepSeek试解/结果/catalog_audit.json b/2026_初步评估/B_DeepSeek试解/结果/catalog_audit.json new file mode 100644 index 0000000..c9f7f63 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/结果/catalog_audit.json @@ -0,0 +1,157 @@ +{ + "script_version": "v2 (2026-10-23 correction)", + "source_zip": "3ecd6ef8-fb24-44f0-b9f1-c8839fe83760.zip", + "doi": "10.11888/Cryos.tpdc.272812", + "metadata_claim": { + "slope_failures": 737, + "glof": 380 + }, + "claim_note": "737/380 是元数据描述;本表只报可复现的实际计数,不为对齐宣传数修改数据。", + "sheet_diagnostics": { + "Glacier detachments": { + "raw_rows": 344, + "event_rows": 27, + "time_missing": 0, + "merged_ranges": 2, + "merged_cells_filled": 5 + }, + "Ice avalanches": { + "raw_rows": 164, + "event_rows": 163, + "time_missing": 0, + "merged_ranges": 0, + "merged_cells_filled": 0 + }, + "Ice-rock avalanches": { + "raw_rows": 91, + "event_rows": 91, + "time_missing": 0, + "merged_ranges": 0, + "merged_cells_filled": 0 + }, + "Rock avalanches": { + "raw_rows": 469, + "event_rows": 469, + "time_missing": 0, + "merged_ranges": 0, + "merged_cells_filled": 0 + }, + "GLOF triggered by avalanches": { + "raw_rows": 64, + "event_rows": 64, + "time_missing": 0, + "merged_ranges": 0, + "merged_cells_filled": 0 + }, + "GLOF triggered by calving": { + "raw_rows": 38, + "event_rows": 38, + "time_missing": 0, + "merged_ranges": 0, + "merged_cells_filled": 0 + } + }, + "slope_failures": { + "raw": { + "n": 852, + "by_sheet": { + "Rock avalanches": 469, + "Ice avalanches": 163, + "Ice-rock avalanches": 91, + "GLOF triggered by avalanches": 64, + "GLOF triggered by calving": 38, + "Glacier detachments": 27 + }, + "by_mechanism": { + "Rock avalanche": 469, + "Ice avalanche": 163, + "Ice-rock avalanche": 91, + "Ice avalanches": 50, + "Glacier terminal calving": 38, + "Glacier detachment": 27, + "Ice-rock avalanches": 14 + }, + "by_precision": { + "day": 377, + "range": 305, + "year": 114, + "other": 54, + "month": 2 + }, + "hma": 148, + "himalaya": 88 + }, + "candidate_unique": { + "n": 781, + "by_sheet": { + "Rock avalanches": 463, + "Ice avalanches": 162, + "Ice-rock avalanches": 91, + "GLOF triggered by calving": 38, + "Glacier detachments": 27 + }, + "by_mechanism": { + "Rock avalanche": 463, + "Ice avalanche": 162, + "Ice-rock avalanche": 91, + "Glacier terminal calving": 38, + "Glacier detachment": 27 + }, + "by_precision": { + "day": 345, + "range": 291, + "year": 105, + "other": 38, + "month": 2 + }, + "hma": 120, + "himalaya": 63 + }, + "duplicates": { + "exact_removed": 32, + "suspect_year_only": 39 + } + }, + "slope_fields": { + "volume": 561, + "volume_and_H": 440, + "angle": 408 + }, + "glof": { + "raw": { + "n": 376, + "by_sheet": {}, + "by_mechanism": {}, + "by_precision": { + "day": 151, + "other": 100, + "range": 98, + "year": 26, + "month": 1 + }, + "hma": 108, + "himalaya": 74 + }, + "candidate_unique": { + "n": 376, + "by_sheet": {}, + "by_mechanism": {}, + "by_precision": { + "day": 151, + "other": 100, + "range": 98, + "year": 26, + "month": 1 + }, + "hma": 108, + "himalaya": 74 + }, + "duplicates": { + "exact_removed": 0, + "suspect_year_only": 0 + } + }, + "glof_fields": { + "volume": 68 + } +} \ No newline at end of file diff --git a/2026_初步评估/B_DeepSeek试解/结果/catalog_glof_clean.csv b/2026_初步评估/B_DeepSeek试解/结果/catalog_glof_clean.csv new file mode 100644 index 0000000..e979990 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/catalog_glof_clean.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/catalog_log.txt b/2026_初步评估/B_DeepSeek试解/结果/catalog_log.txt new file mode 100644 index 0000000..5d5f8f6 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/结果/catalog_log.txt @@ -0,0 +1,148 @@ +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:145: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf[c] = pd.to_numeric(sf[c], errors="coerce") +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:146: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["trigger"] = sf.trigger_plural.where(sf.trigger_plural.notna(), sf.trigger_singular) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:152: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["dedupe_key_exact"] = np.where( +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:156: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["dedupe_key_year"] = np.where( +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:160: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_dupe_exact"] = sf.dedupe_key_exact.notna() & sf.duplicated("dedupe_key_exact", keep="first") +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:161: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_dupe_suspect"] = (~sf.is_dupe_exact) & sf.dedupe_key_year.notna() & sf.duplicated("dedupe_key_year", keep="first") +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:162: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["candidate_unique"] = ~(sf.is_dupe_exact | sf.is_dupe_suspect) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:164: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_hma"] = sf.lat.between(25, 45) & sf.lon.between(60, 105) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:165: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + sf["is_himalaya"] = sf.lat.between(26, 31) & sf.lon.between(75, 95) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:187: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + gl["is_hma"] = gl.lat.between(25, 45) & gl.lon.between(60, 105) +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_catalog.py:188: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + gl["is_himalaya"] = gl.lat.between(26, 31) & gl.lon.between(75, 95) +== sheet diagnostics + Glacier detachments raw= 344 events= 27 no_time= 0 merged_ranges=2 merged_cells=5 + Ice avalanches raw= 164 events= 163 no_time= 0 merged_ranges=0 merged_cells=0 + Ice-rock avalanches raw= 91 events= 91 no_time= 0 merged_ranges=0 merged_cells=0 + Rock avalanches raw= 469 events= 469 no_time= 0 merged_ranges=0 merged_cells=0 + GLOF triggered by avalanches raw= 64 events= 64 no_time= 0 merged_ranges=0 merged_cells=0 + GLOF triggered by calving raw= 38 events= 38 no_time= 0 merged_ranges=0 merged_cells=0 + +== slope failures + raw: {'n': 852, 'by_sheet': {'Rock avalanches': 469, 'Ice avalanches': 163, 'Ice-rock avalanches': 91, 'GLOF triggered by avalanches': 64, 'GLOF triggered by calving': 38, 'Glacier detachments': 27}, 'by_mechanism': {'Rock avalanche': 469, 'Ice avalanche': 163, 'Ice-rock avalanche': 91, 'Ice avalanches': 50, 'Glacier terminal calving': 38, 'Glacier detachment': 27, 'Ice-rock avalanches': 14}, 'by_precision': {'day': 377, 'range': 305, 'year': 114, 'other': 54, 'month': 2}, 'hma': 148, 'himalaya': 88} + cand-unique: {'n': 781, 'by_sheet': {'Rock avalanches': 463, 'Ice avalanches': 162, 'Ice-rock avalanches': 91, 'GLOF triggered by calving': 38, 'Glacier detachments': 27}, 'by_mechanism': {'Rock avalanche': 463, 'Ice avalanche': 162, 'Ice-rock avalanche': 91, 'Glacier terminal calving': 38, 'Glacier detachment': 27}, 'by_precision': {'day': 345, 'range': 291, 'year': 105, 'other': 38, 'month': 2}, 'hma': 120, 'himalaya': 63} + dup: {'exact_removed': 32, 'suspect_year_only': 39} + +== GLOF + raw: {'n': 376, 'by_sheet': {}, 'by_mechanism': {}, 'by_precision': {'day': 151, 'other': 100, 'range': 98, 'year': 26, 'month': 1}, 'hma': 108, 'himalaya': 74} + cand-unique: {'n': 376, 'by_sheet': {}, 'by_mechanism': {}, 'by_precision': {'day': 151, 'other': 100, 'range': 98, 'year': 26, 'month': 1}, 'hma': 108, 'himalaya': 74} + +============================================================ +体积+距离齐全(候选唯一): +sheet +Glacier detachments 8 +Ice avalanches 14 +Ice-rock avalanches 21 +Rock avalanches 393 +留出:log10H=0.510+0.131log10V,RMSE=0.41,R²=-0.59(n_test=9) +角 of reach:n=404,p10=10.5°,中位=19.4°,p90=27.5° +等效 tan: {'p10': 0.185, 'median': 0.352, 'p90': 0.521} diff --git a/2026_初步评估/B_DeepSeek试解/结果/catalog_slope_failures_clean.csv b/2026_初步评估/B_DeepSeek试解/结果/catalog_slope_failures_clean.csv new file mode 100644 index 0000000..754adb5 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/catalog_slope_failures_clean.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/gfs_precip_source_port.csv b/2026_初步评估/B_DeepSeek试解/结果/gfs_precip_source_port.csv new file mode 100644 index 0000000..2c6de15 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/gfs_precip_source_port.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q1_feature_percentiles.csv b/2026_初步评估/B_DeepSeek试解/结果/q1_feature_percentiles.csv new file mode 100644 index 0000000..d9a4c14 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q1_feature_percentiles.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q1_rank_stability.csv b/2026_初步评估/B_DeepSeek试解/结果/q1_rank_stability.csv new file mode 100644 index 0000000..38054c0 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q1_rank_stability.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q4_arrival_marks.csv b/2026_初步评估/B_DeepSeek试解/结果/q4_arrival_marks.csv new file mode 100644 index 0000000..4f77b3f Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q4_arrival_marks.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile.csv b/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile.csv new file mode 100644 index 0000000..a97c23e Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile_with_river.csv b/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile_with_river.csv new file mode 100644 index 0000000..e0405a6 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q4_path_profile_with_river.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/q4_voellmy_sensitivity.csv b/2026_初步评估/B_DeepSeek试解/结果/q4_voellmy_sensitivity.csv new file mode 100644 index 0000000..0b208b4 Binary files /dev/null and b/2026_初步评估/B_DeepSeek试解/结果/q4_voellmy_sensitivity.csv differ diff --git a/2026_初步评估/B_DeepSeek试解/结果/run_log.txt b/2026_初步评估/B_DeepSeek试解/结果/run_log.txt new file mode 100644 index 0000000..363ae38 --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/结果/run_log.txt @@ -0,0 +1,79 @@ +====================================================================== +Q1 候选特征百分位基线 +====================================================================== + feature unit event_value pctl_vs_season n_control extremeness + netrad W/m2 356.232 96.585 205 46.585 + dVWC_24h m3/m3/d -0.011 4.878 205 45.122 + Ta_2m degC 11.720 93.659 205 43.659 +precip_72h mm/72h 0.000 10.732 205 39.268 + dpres_3h hPa/3h 0.600 15.854 205 34.146 + RH_2m % 69.400 19.512 205 30.488 + soilT_0.1 degC 17.038 78.537 205 28.537 + dT_2_10 degC 0.340 76.341 205 26.341 +precip_24h mm/24h 0.000 27.073 205 22.927 +shear_1_20 1/s 0.013 29.268 205 20.732 + VWC_0.1 m3/m3 0.083 56.098 205 6.098 + precip_3h mm/3h 0.000 46.341 205 3.659 + precip_1h mm/h 0.000 48.293 205 1.707 + WS_10m m/s 0.785 48.293 205 1.707 + +按年 bootstrap 排序稳定性(500 次,5 年有放回): + feature rank_mean rank_p05 rank_p95 top5_freq + netrad 1.31 1.00 2.00 1.00 + dVWC_24h 2.09 1.00 3.00 1.00 + Ta_2m 2.74 2.00 4.00 1.00 +precip_72h 4.14 4.00 5.00 1.00 + dpres_3h 5.31 5.00 6.00 0.69 + RH_2m 6.53 6.00 8.00 0.00 + soilT_0.1 7.20 3.00 11.00 0.31 + dT_2_10 7.80 7.00 9.00 0.00 +precip_24h 8.86 7.00 10.00 0.00 +shear_1_20 9.65 9.00 11.00 0.00 + VWC_0.1 10.89 7.00 14.00 0.00 + precip_3h 12.18 11.00 13.00 0.00 + WS_10m 12.78 11.00 14.00 0.00 + precip_1h 13.51 13.00 14.00 0.00 + +====================================================================== +数据核查:附件冰川 NetCDF 与本底 DEM / 公开 AOI 的坐标一致性 +====================================================================== +nc 质心 lon=85.52770 lat=28.28802;公开 AOI bbox lon[85.5050,85.5400] lat[28.2620,28.2920];质心是否落在 AOI 内:True +重叠格点 20010;本地 DEM 均值 4977 m,nc 均值 4991 m;差值中位 +29.0 m,MAE 43.6 m + +====================================================================== +Q4 情景传播基线:真实 DEM 上 D8 路径 + Voellmy 型一维运动积分 +====================================================================== +源区中心 (lon=85.5190, lat=28.2740) -> 行 261, 列 296, DEM 高程 5017 m, 坡度 22.3° +路径格点 54,水平长度 20.62 km,落差 2746 m,末端高程 1913 m + mu xi_m_s2 h_m v_max_m_s t_total_s t_total_min v_end_m_s runout_km +0.1 2000 25.0 99.7 730.8 12.2 0.5 20.6 +0.1 1000 25.0 84.9 3259.6 54.3 0.5 20.6 +0.1 2000 10.0 79.0 4078.6 68.0 0.5 20.6 +0.1 500 25.0 69.4 5760.7 96.0 0.5 20.6 +0.1 1000 10.0 64.9 6571.7 109.5 0.5 20.6 +0.1 500 10.0 50.2 9137.1 152.3 0.5 20.6 +0.1 2000 25.0 93.0 9952.5 165.9 0.5 20.6 +0.1 1000 25.0 79.3 11473.4 191.2 0.5 20.6 +0.1 2000 10.0 73.8 11911.0 198.5 0.5 20.6 +0.1 500 25.0 65.9 13785.1 229.8 0.5 20.6 +0.1 1000 10.0 61.8 14617.0 243.6 0.5 20.6 +0.1 500 10.0 48.1 17978.8 299.6 0.5 20.6 +0.2 500 10.0 43.6 20000.0 333.3 0.0 20.6 +0.2 500 25.0 58.3 20000.0 333.3 0.0 20.6 +0.2 1000 10.0 55.0 20000.0 333.3 0.0 20.6 +0.2 1000 25.0 66.8 20000.0 333.3 0.0 20.6 +0.2 2000 10.0 64.4 20000.0 333.3 0.0 20.6 +0.2 2000 25.0 78.2 20000.0 333.3 0.0 20.6 + +代表情景 (μ=0.10, ξ=1000, h=25 m) 每 2 km 到达时间: + km t_min v_m_s elev + 2.1 0.8 79.3 3727.1 + 4.2 1.4 42.2 3450.7 + 6.0 2.5 49.2 3162.9 + 7.9 3.3 19.1 2932.2 +10.2 4.6 23.8 2603.4 +12.0 14.4 32.6 2366.2 +14.1 32.8 17.2 2213.3 +15.9 71.0 0.5 2139.3 +18.0 119.1 0.5 2003.4 +19.8 171.1 21.4 1916.6 diff --git a/2026_初步评估/B_DeepSeek试解/结果/runout_angle_stats.json b/2026_初步评估/B_DeepSeek试解/结果/runout_angle_stats.json new file mode 100644 index 0000000..03735af --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/结果/runout_angle_stats.json @@ -0,0 +1,24 @@ +{ + "script_version": "v2", + "n_ice": 29, + "n_ice_hma": 7, + "fit": [ + 0.5103912274801464, + 0.1305365071066225 + ], + "holdout_rmse_log10": 0.4098753489469039, + "holdout_r2": -0.5948355536248682, + "n_test": 9, + "angle_reach_deg": { + "n": 404, + "p10": 10.5, + "median": 19.4, + "p90": 27.5 + }, + "mu_eq_tan": { + "p10": 0.18533904493153439, + "median": 0.3521555902892187, + "p90": 0.5205670505517462 + }, + "note_2026": "2026 事件的 8.85°(=atan(3210/20620))来自‘模拟/粗网格几何’,仅作外部量级对照,不能据此断言真实事件的分位或反推 μ 范围。" +} \ No newline at end of file diff --git a/2026_初步评估/B_DeepSeek试解/结果/tpdc_increment_log.txt b/2026_初步评估/B_DeepSeek试解/结果/tpdc_increment_log.txt new file mode 100644 index 0000000..e6033fc --- /dev/null +++ b/2026_初步评估/B_DeepSeek试解/结果/tpdc_increment_log.txt @@ -0,0 +1,74 @@ +/home/ddwsgood/MathModelComp/MathorCup2026/2026_初步评估/B_DeepSeek试解/源码/audit_tpdc_increment.py:170: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0! +You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy. +A typical example is when you are setting values in a column of a DataFrame, like: + +df["col"][row_indexer] = value + +Use `df.loc[row_indexer, "col"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`. + +See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy + + path["dist_to_river_km"] = res +====================================================================== +1) GFS 灾前预报(起报 2026-08-25 00Z) +nc=吉隆县GFS_降水云与水成物_20260825T00Z_f000-f072.nc +起报=2026-08-25T00:00:00Z 时次=[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72] +网格 lat28.250-29.250 lon84.500-86.250 + site grid_lat grid_lon fh valid_utc precip_rate_mm_h precip_6h_mm precip_cum_mm cloud_water_path precipitable_water +source 28.25 85.50 0 2026-08-25T00:00 0.00 0.00 0.00 0.01 15.31 +source 28.25 85.50 6 2026-08-25T06:00 0.51 0.56 0.56 0.29 16.71 +source 28.25 85.50 12 2026-08-25T12:00 0.04 1.00 1.56 0.14 16.90 +source 28.25 85.50 18 2026-08-25T18:00 0.01 0.12 1.75 0.06 17.48 +source 28.25 85.50 24 2026-08-26T00:00 0.00 0.00 1.75 0.09 15.71 +source 28.25 85.50 30 2026-08-26T06:00 0.67 0.56 2.31 0.38 16.89 +source 28.25 85.50 36 2026-08-26T12:00 0.54 3.06 5.38 1.42 19.05 +source 28.25 85.50 42 2026-08-26T18:00 1.29 11.00 16.31 0.62 18.60 +source 28.25 85.50 48 2026-08-27T00:00 0.55 3.31 19.69 0.94 18.20 +source 28.25 85.50 54 2026-08-27T06:00 0.10 1.69 21.38 0.39 18.43 +source 28.25 85.50 60 2026-08-27T12:00 0.07 1.44 22.81 0.29 17.85 +source 28.25 85.50 66 2026-08-27T18:00 0.00 0.06 22.88 0.03 17.49 +source 28.25 85.50 72 2026-08-28T00:00 0.00 0.06 22.94 0.05 16.96 + port 28.25 85.50 0 2026-08-25T00:00 0.00 0.00 0.00 0.01 15.31 + port 28.25 85.50 6 2026-08-25T06:00 0.51 0.56 0.56 0.29 16.71 + port 28.25 85.50 12 2026-08-25T12:00 0.04 1.00 1.56 0.14 16.90 + port 28.25 85.50 18 2026-08-25T18:00 0.01 0.12 1.75 0.06 17.48 + port 28.25 85.50 24 2026-08-26T00:00 0.00 0.00 1.75 0.09 15.71 + port 28.25 85.50 30 2026-08-26T06:00 0.67 0.56 2.31 0.38 16.89 + port 28.25 85.50 36 2026-08-26T12:00 0.54 3.06 5.38 1.42 19.05 + port 28.25 85.50 42 2026-08-26T18:00 1.29 11.00 16.31 0.62 18.60 + port 28.25 85.50 48 2026-08-27T00:00 0.55 3.31 19.69 0.94 18.20 + port 28.25 85.50 54 2026-08-27T06:00 0.10 1.69 21.38 0.39 18.43 + port 28.25 85.50 60 2026-08-27T12:00 0.07 1.44 22.81 0.29 17.85 + port 28.25 85.50 66 2026-08-27T18:00 0.00 0.06 22.88 0.03 17.49 + port 28.25 85.50 72 2026-08-28T00:00 0.00 0.06 22.94 0.05 16.96 + +事件当日 00-12 UTC 预报(源区/口岸): + site fh valid_utc precip_rate_mm_h precip_6h_mm +source 24 2026-08-26T00:00 0.00288 0.0000 +source 30 2026-08-26T06:00 0.67392 0.5625 +source 36 2026-08-26T12:00 0.54144 3.0625 + port 24 2026-08-26T00:00 0.00288 0.0000 + port 30 2026-08-26T06:00 0.67392 0.5625 + port 36 2026-08-26T12:00 0.54144 3.0625 +source: 2026-08-26 00-18UTC 的 6h 累计之和 = 14.6 mm(仅 6h 量求和) +port: 2026-08-26 00-18UTC 的 6h 累计之和 = 14.6 mm(仅 6h 量求和) + +====================================================================== +2) TPCSM 5 km 模拟 +nc 文件数: 5 +file: dpre_20260822-0827.nc +dims: {'XTIME': 120, 'west_east': 210, 'south_north': 180} + XTIME ('XTIME',) (120,) float32 minutes since 2026-08-21 06:00:00 + XLONG ('south_north', 'west_east') (180, 210) float32 degree_east + XLAT ('south_north', 'west_east') (180, 210) float32 degree_north + RAINNC ('XTIME', 'south_north', 'west_east') (120, 180, 210) float32 mm +attrs: {'CDI': 'Climate Data Interface version 1.9.5 (http://mpimet.mpg.de/cdi)', 'history': 'Sat Aug 29 14:43:07 2026: cdo -cat dpre_2026-08-22_01.nc dpre_2026-08-22_02.nc dpre_2026-08-22_03.nc dpre_2026-08-22_04.nc dpre_2026-08-22_05.nc dpre_2026-08-22_06.nc dpre_2026-08-22_07.nc dpre_2026-08-22_08.nc dpre_2026-08-22_09.nc dpre_2026-08-22_10.nc dpre_2026-08-22_11.nc dpre_2026-08-22_12.nc dpre_2026-08-22_13.nc dpre_2026-08-22_14.nc dpre_2026-08-22_15.nc dpre_2026-08-22_16.nc dpre_2026-08-22_17.nc dpre_2026-08-22_18.nc dpre_2026-08-22_19.nc dpre_2026-08-22_20.nc dpre_2026-08-22_21.nc dpre_2026-08-22_22.nc dpre_2026-08-22_23.nc dpre_2026-08-23_00.nc dpre_2026-08-23_01.nc dpre_2026-08-23_02.nc dpre_2026-08-23_03.nc dpre_2026-08-23_04.nc dpre_2026-08-23_05.nc dpre_2026-08-23_06.nc dpre_2026-08-23_07.nc dpre_2026-08-23_08.nc dpre_2026-08-23_09.nc dpre_2026-08-23_10.nc dpre_2026-08-23_11.nc dpre_2026-08-23_12.nc dpre_2026-08-23_13.nc dpre_2026-08-23_14.nc dpre_2026-08-23_15.nc dpre_2026-08-23_16.nc dpre_2026-08-23_17.nc dpre_2026-08-23_18.nc dpre_2026-08-23_19.nc dpre_2026-08-23_20.nc dpre_2026-08-23_21.nc dpre_2026-08-23_22.nc dpre_2026-08-23_23.nc dpre_2026-08-24_00.nc dpre_2026-08-24_01.nc dpre_2026-08-24_02.nc dpre_2026-08-24_03.nc dpre_2026-08-24_04.nc dpre_2026-08-24_05.nc dpre_2026-08-24_06.nc dpre_2026-08-24_07.nc dpre_2026-08-24_08.nc dpre_2026-08-24_09.nc dpre_2026-08-24_10.nc dpre_2026-08-24_11.nc dpre_2026-08-24_12.nc dpre_2026-08-24_13.nc dpre_2026-08-24_14.nc dpre_2026-08-24_15.nc dpre_2026-08-24_16.nc dpre_2026-08-24_17.nc dpre_2026-08-24_18.nc dpre_2026-08-24_19.nc dpre_2026-08-24_20.nc dpre_2026-08-24_21.nc dpre_2026-08-24_22.nc dpre_2026-08-24_23.nc dpre_2026-08-25_00.nc dpre_2026-08-25_01.nc dpre_2026-08-25_02.nc dpre_2026-08-25_03.nc dpre_2026-08-25_04.nc dpre_2026-08-25_05.nc dpre_2026-08-25_06.nc dpre_2026-08-25_07.nc dpre_2026-08-25_08.nc dpre_2026-08-25_09.nc dpre_2026-08-25_10.nc dpre_2026-08-25_11.nc dpre_2026-08-25_12.nc dpre_2026-08-25_13.nc dpre_2026-08-25_14.nc dpre_2026-08-25_15.nc dpre_2026-08-25_16.nc dpre_2026-08-25_17.nc dpre_2026-08-25_18.nc dpre_2026-08-25_19.nc dpre_2026-08-25_20.nc dpre_2026-08-25_21.nc dpre_2026-08-25_22.nc dpre_2026-08-25_23.nc dpre_2026-08-26_00.nc dpre_2026-08-26_01.nc dpre_2026-08-26_02.nc dpre_2026-08-26_03.nc dpre_2026-08-26_04.nc dpre_2026-08-26_05.nc dpre_2026-08-26_06.nc dpre_2026-08-26_07.nc dpre_2026-08-26_08.nc dpre_2026-08-26_09.nc dpre_2026-08-26_10.nc dpre_2026-08-26_11.nc dpre_2026-08-26_12.nc dpre_2026-08-26_13.nc dpre_2026-08-26_14.nc dpre_2026-08-26_15.nc dpre_2026-08-26_16.nc dpre_2026-08-26_17.nc dpre_2026-08-26_18.nc dpre_2026-08-26_19.nc dpre_2026-08-26_20.nc dpre_2026-08-26_21.nc dpre_2026-08-26_22.nc dpre_2026-08-26_23.nc dpre_2026-08-27_00.nc dpre_20260826-0827.nc\nSat Aug 29 14:00:16 2026: cdo -sub prec_22-26/rainnc_2026-08-22_01.nc prec_22-26/rainnc_2026-08-22_00.nc dpre_2026-08-22_01.nc\nFri Aug 28 19:05:40 2026: cdo -selname,RAINNC data/wrfout_d02_2026-08-22_01:00:00 rainnc_2026-08-22_01.nc', 'Conventions': 'CF-1.6', 'TITLE': ' OUTPUT FROM WRF V4.0 MODEL', 'START_DATE': '2026-08-21_06:00:00', 'SIMULATION_START_DATE': '2026-08-21_06:00:00', 'WEST-EAST_GRID_DIMENSION': np.int32(211), 'SOUTH-NORTH_GRID_DIMENSION': np.int32(181), 'BOTTOM-TOP_GRID_DIMENSION': np.int32(50), 'DX': np.float32(5558.875), 'DY': np.float32(5558.875), 'AERCU_OPT': np.int32(0), 'AERCU_FCT': np.float32(1.0), 'IDEAL_CASE': np.int32(0), 'DIFF_6TH_SLOPEOPT': np.int32(0), 'AUTO_LEVELS_OPT': np.int32(2), 'DIFF_6TH_THRESH': np.float32(0.1), 'DZBOT': np.float32(50.0), 'DZSTRETCH_S': np.float32(1.3), 'DZSTRETCH_U': np.float32(1.1), 'SKEBS_ON': np.int32(0), 'SPEC_BDY_FINAL_MU': np.int32(1), 'USE_Q_DIABATIC': np.int32(0), 'GRIDTYPE': 'C', 'DIFF_OPT': np.int32(1), 'KM_OPT': np.int32(4), 'DAMP_OPT': np.int32(1), 'DAMPCOEF': np.float32(0.2), 'KHDIF': np.float32(0.0), 'KVDIF': np.float32(0.0), 'MP_PHYSICS': np.int32(8), 'RA_LW_PHYSICS': np.int32(3), 'RA_SW_PHYSICS': np.int32(3), 'SF_SFCLAY_PHYSICS': np.int32(1), 'SF_SURFACE_PHYSICS': np.int32(4), 'BL_PBL_PHYSICS': np.int32(9), 'CU_PHYSICS': np.int32(0), 'SF_LAKE_PHYSICS': np.int32(0), 'SURFACE_INPUT_SOURCE': np.int32(1), 'SST_UPDATE': np.int32(1), 'GRID_FDDA': np.int32(0), 'GFDDA_INTERVAL_M': np.int32(0), 'GFDDA_END_H': np.int32(0), 'GRID_SFDDA': np.int32(0), 'SGFDDA_INTERVAL_M': np.int32(0), 'SGFDDA_END_H': np.int32(0), 'HYPSOMETRIC_OPT': np.int32(2), 'USE_THETA_M': np.int32(1), 'GWD_OPT': np.int32(0), 'SF_URBAN_PHYSICS': np.int32(0), 'SF_SURFACE_MOSAIC': np.int32(0), 'SF_OCEAN_PHYSICS': np.int32(0), 'SHCU_PHYSICS': np.int32(2), 'MFSHCONV': np.int32(0), 'FEEDBACK': np.int32(0), 'SMOOTH_OPTION': np.int32(0), 'SWRAD_SCAT': np.float32(1.0), 'W_DAMPING': np.int32(1), 'RADT': np.float32(20.0), 'BLDT': np.float32(0.0), 'CUDT': np.float32(0.0), 'AER_OPT': np.int32(0), 'SWINT_OPT': np.int32(0), 'AER_TYPE': np.int32(1), 'AER_AOD550_OPT': np.int32(1), 'AER_ANGEXP_OPT': np.int32(1), 'AER_SSA_OPT': np.int32(1), 'AER_ASY_OPT': np.int32(1), 'AER_AOD550_VAL': np.float32(0.12), 'AER_ANGEXP_VAL': np.float32(1.3), 'AER_SSA_VAL': np.float32(0.85), 'AER_ASY_VAL': np.float32(0.9), 'MOIST_ADV_OPT': np.int32(1), 'SCALAR_ADV_OPT': np.int32(1), 'TKE_ADV_OPT': np.int32(1), 'DIFF_6TH_OPT': np.int32(1), 'DIFF_6TH_FACTOR': np.float32(0.12), 'OBS_NUDGE_OPT': np.int32(0), 'BUCKET_MM': np.float32(-1.0), 'BUCKET_J': np.float32(-1.0), 'PREC_ACC_DT': np.float32(0.0), 'ISFTCFLX': np.int32(0), 'ISHALLOW': np.int32(0), 'ISFFLX': np.int32(1), 'ICLOUD': np.int32(4), 'ICLOUD_CU': np.int32(0), 'TRACER_PBLMIX': np.int32(1), 'SCALAR_PBLMIX': np.int32(0), 'YSU_TOPDOWN_PBLMIX': np.int32(0), 'GRAV_SETTLING': np.int32(0), 'OPT_SFC': np.int32(3), 'DVEG': np.int32(8), 'OPT_CRS': np.int32(1), 'OPT_BTR': np.int32(1), 'OPT_RUN': np.int32(3), 'OPT_FRZ': np.int32(1), 'OPT_INF': np.int32(1), 'OPT_RAD': np.int32(3), 'OPT_ALB': np.int32(3), 'OPT_SNF': np.int32(4), 'OPT_TBOT': np.int32(2), 'OPT_STC': np.int32(1), 'OPT_GLA': np.int32(1), 'OPT_RSF': np.int32(1), 'OPT_SOIL': np.int32(5), 'OPT_PEDO': np.int32(1), 'OPT_CROP': np.int32(0), 'DFI_OPT': np.int32(0), 'SIMULATION_INITIALIZATION_TYPE': 'REAL-DATA CASE', 'WEST-EAST_PATCH_START_UNSTAG': np.int32(1), 'WEST-EAST_PATCH_END_UNSTAG': np.int32(210), 'WEST-EAST_PATCH_START_STAG': np.int32(1), 'WEST-EAST_PATCH_END_STAG': np.int32(211), 'SOUTH-NORTH_PATCH_START_UNSTAG': np.int32(1), 'SOUTH-NORTH_PATCH_END_UNSTAG': np.int32(180), 'SOUTH-NORTH_PATCH_START_STAG': np.int32(1), 'SOUTH-NORTH_PATCH_END_STAG': np.int32(181), 'BOTTOM-TOP_PATCH_START_UNSTAG': np.int32(1), 'BOTTOM-TOP_PATCH_END_UNSTAG': np.int32(49), 'BOTTOM-TOP_PATCH_START_STAG': np.int32(1), 'BOTTOM-TOP_PATCH_END_STAG': np.int32(50), 'GRID_ID': np.int32(2), 'PARENT_ID': np.int32(1), 'I_PARENT_START': np.int32(50), 'J_PARENT_START': np.int32(25), 'PARENT_GRID_RATIO': np.int32(3), 'DT': np.float32(20.0), 'CEN_LAT': np.float32(27.974998), 'CEN_LON': np.float32(84.67502), 'TRUELAT1': np.float32(1e+20), 'TRUELAT2': np.float32(1e+20), 'MOAD_CEN_LAT': np.float32(28.8), 'STAND_LON': np.float32(0.0), 'POLE_LAT': np.float32(90.0), 'POLE_LON': np.float32(0.0), 'GMT': np.float32(6.0), 'JULYR': np.int32(2026), 'JULDAY': np.int32(233), 'MAP_PROJ': np.int32(6), 'MAP_PROJ_CHAR': 'Cylindrical Equidistant', 'MMINLU': 'MODIFIED_IGBP_MODIS_NOAH', 'NUM_LAND_CAT': np.int32(21), 'ISWATER': np.int32(17), 'ISLAKE': np.int32(21), 'ISICE': np.int32(15), 'ISURBAN': np.int32(13), 'ISOILWATER': np.int32(14), 'HYBRID_OPT': np.int32(0), 'ETAC': np.float32(0.0), 'CDO': 'Climate Data Operators version 1.9.5 (http://mpimet.mpg.de/cdo)'} + +====================================================================== +3) 受灾位置点 / 河网 vs 我们的路径 +受灾点位 shp 类型 1 点数 1 坐标 [(85.37751083772079, 28.278553539886374)] +河网线 11 条,节点 2138,bbox 85.1898-85.6484E 28.2455-28.5481N +路径终点 (85.3842,28.2855) 高程 1913 m;受灾点 (85.3775,28.2786);距离 1.01 km +路径到最近河网节点:中位 0.163 km,p90 4.138 km,最大 5.205 km +前 6 个路径点的最近河距 (km): [5.205, 5.12, 4.879, 4.679, 4.5, 4.203] +后 6 个路径点的最近河距 (km): [0.152, 0.037, 0.06, 0.195, 0.124, 0.22] diff --git a/2026年MathorCup大数据挑战赛-赛道B初赛.pdf b/2026年MathorCup大数据挑战赛-赛道B初赛.pdf new file mode 100644 index 0000000..dd668a5 Binary files /dev/null and b/2026年MathorCup大数据挑战赛-赛道B初赛.pdf differ diff --git a/2026年MathorCup数学应用挑战赛—大数据挑战赛论文格式及提交规范.pdf b/2026年MathorCup数学应用挑战赛—大数据挑战赛论文格式及提交规范.pdf new file mode 100644 index 0000000..7e1714e Binary files /dev/null and b/2026年MathorCup数学应用挑战赛—大数据挑战赛论文格式及提交规范.pdf differ diff --git a/2026年MathorCup数学应用挑战赛—大数据竞赛参赛手册(1).pdf b/2026年MathorCup数学应用挑战赛—大数据竞赛参赛手册(1).pdf new file mode 100644 index 0000000..31154c1 Binary files /dev/null and b/2026年MathorCup数学应用挑战赛—大数据竞赛参赛手册(1).pdf differ diff --git a/2026年MathorCup数学应用挑战赛—大数据竞赛承诺书(手写或者电子签名后上传).docx b/2026年MathorCup数学应用挑战赛—大数据竞赛承诺书(手写或者电子签名后上传).docx new file mode 100644 index 0000000..c4995a2 Binary files /dev/null and b/2026年MathorCup数学应用挑战赛—大数据竞赛承诺书(手写或者电子签名后上传).docx differ diff --git a/2026年MathorCup数学应用挑战赛—大数据竞赛论文模板.docx b/2026年MathorCup数学应用挑战赛—大数据竞赛论文模板.docx new file mode 100644 index 0000000..3bd5193 Binary files /dev/null and b/2026年MathorCup数学应用挑战赛—大数据竞赛论文模板.docx differ diff --git a/COLLAB.md b/COLLAB.md new file mode 100644 index 0000000..87b84c5 --- /dev/null +++ b/COLLAB.md @@ -0,0 +1,78 @@ +# 协作说明(Gitea + copyparty) + +比赛期间(2026-10-23 → 10-30)的版本管理与大文件交换方案。三个服务都在这台腾讯云美国节点上,由 Caddy 统一提供 HTTPS。 + +| 用途 | 地址 | 说明 | +|---|---|---| +| 代码与文档(git) | https://git.ddwsgood.top/mathorcup/MathorCup2026-B | **公开仓库,clone 免登录**;推送需要 token | +| 大文件(网页/WebDAV) | https://files.ddwsgood.top/ | 可匿名读写;账号 `lyx`、`zzh` 另有管理权限 | +| 本仓库 | — | 只放代码、文档、论文、小体积结果 | + +## 一、账号 + +三个账号:`mathorcup`(管理员)、`lyx`、`zzh`。密码和 git token 不写入仓库,由队长私下分发(服务器上另存一份)。 + +## 二、git 用法 + +```bash +# 首次:匿名克隆,无需任何凭据 +git clone https://git.ddwsgood.top/mathorcup/MathorCup2026-B.git +cd MathorCup2026-B + +# 配置自己的推送凭据(把 TOKEN 换成私发的 token) +git remote set-url origin https://lyx:TOKEN@git.ddwsgood.top/mathorcup/MathorCup2026-B.git +git config user.name "lyx" +git config user.email "lyx@git.ddwsgood.top" + +# 日常:先拉再推,避免分叉 +git pull --rebase +git add -A && git commit -m "Q2: 危险性指标计算" +git push +``` + +- token 存在 `.git/config` 里,之后 `git push` 不再询问任何密码。 +- 若换机器或 token 泄露:网页 → 设置 → 应用 → 删除并重建 token。 +- 网页也能看代码、改文件、上传文件、看提交历史:`https://git.ddwsgood.top/mathorcup/MathorCup2026-B`。 + +## 三、大文件(附件、data/、中间结果) + +**不要往 git 里放数据**:仓库已用 `.gitignore` 排除 `data/`、`附件/` 和所有大二进制格式。数据统一走 `files.ddwsgood.top`。 + +### 网页 +打开 https://files.ddwsgood.top/ → 进入 `附件/` 或 `data/` → 下载。支持断点续传、目录打包下载。 + +### 命令行 +```bash +curl -O https://files.ddwsgood.top/附件/1.csv +``` + +### 映射成 Windows 盘符(免安装,WebDAV) +1. 资源管理器 → 右键「此电脑」→ 映射网络驱动器 +2. 文件夹填:`https://files.ddwsgood.top/` +3. 勾选「使用其他凭据」,账号 `lyx` / `zzh` + 私发密码(匿名也可读写,但带账号可删除和管理) + +之后就是拖拽复制,和本地磁盘一样。 + +## 四、目录约定 + +| 路径 | 内容 | 是否进 git | +|---|---|---| +| `附件/` | 赛题原始数据 8 项 | 否(仅 8 个 csv/xlsx 进 git) | +| `data/raw/` `data/processed/` `data/external/` | 解压与派生数据 | 否 | +| `2026_初步评估/` | 试解代码与结论 | 是 | +| 各题 `solve*.py`、`结果/` | 求解代码与小结果 | 是 | +| 论文(md/docx/pdf) | 论文与提交材料 | 是(PDF/docx 单文件 <20 MB) | + +## 五、提交约定 + +1. 每个子问题一个分支或至少一次独立提交:`git commit -m "Q1: 地形能量判据"`。 +2. 推之前先 `git pull --rebase`;冲突优先保留双方,不要强推(`--force`)。 +3. 不提交 `__pycache__`、临时可视化、几百 MB 的中间矩阵——那些放 copyparty。 +4. 论文最终稿单独打 tag:`git tag paper-final && git push --tags`。 + +## 六、服务限制(实测) + +- 服务器 2 vCPU / 1.9 GB 内存 / 40 GB 盘(可用约 26 GB),不要跑重型服务。 +- 带宽上限 200 Mbps;从国内上传实测约 3 MB/s,下载约 10 MB/s。 +- 首次拉全部数据约 1.2 GB:下载约 3–5 分钟。 +- 数据盘不是备份:重要产出请 `git push` 或另存一份到网盘。 diff --git a/MathorCup数学应用挑战赛——大数据竞赛报名通知(2).pdf b/MathorCup数学应用挑战赛——大数据竞赛报名通知(2).pdf new file mode 100644 index 0000000..80b89aa Binary files /dev/null and b/MathorCup数学应用挑战赛——大数据竞赛报名通知(2).pdf differ diff --git a/MathorCup数学应用挑战赛人工智能工具使用规定(试行).pdf b/MathorCup数学应用挑战赛人工智能工具使用规定(试行).pdf new file mode 100644 index 0000000..022cd19 Binary files /dev/null and b/MathorCup数学应用挑战赛人工智能工具使用规定(试行).pdf differ