C++ 只吐檔案,把資料變成看得懂的圖與表的是這一層。 這也是實驗室同學實際上花最多時間的地方。 本頁挑出真正該用的入口,並誠實說明這層目前的碎片化問題。
計數命令:git ls-tree -r --name-only fbdf7c7 | rg '\.py$' | wc -l → 2,147;git ls-tree -r --name-only fbdf7c7 scripts | rg '\.py$' | wc -l → 291。後者包含 scripts/ 下所有 tracked .py,未排除 generated/test/helper 檔。
verify_pipeline_numbers.py 只驗證 2026-06 方法說明所用的 35,332-site pipeline;它不是全 repo、全研究流程或目前 exact-PS 流程的總驗證器。
# 將 placeholder 換成 release manifest 指定 commit 的 clone root
REPO_ROOT="<REPO_ROOT>"
cd "$REPO_ROOT"
python3 docs/methodology/_assets/20260627_subclone_4axis_teaching/scripts/verify_pipeline_numbers.py
它會做什麼:重算該歷史方法文件中 35,332 個 sSNV 的 TP/FP、共現連結、訊號不足與孤立分類,並比對該文件的宣稱值。它不涵蓋 2026-07-24 exact-PS 產物、LongLineage、儲存體稽核、repo 程式碼/測試計數或其他頁面的數字。實跑輸出摘要:
sSNV 總數 35,332(TP 30,490 / FP 4,842) ✓
共現連上 21,554 · 訊號不足 5,458 · 孤立 8,320 (加總 = 35,332 ✓)
實跑 exit 0 在這個明確範圍內,它是一份可執行的歷史收據:若 35,332-site 方法文件的受管數字對不上,腳本會報錯;它的 exit 0 不代表其他研究資產已驗證。
從 deploy fbdf7c7 的 2,147 個 Python 檔中挑出真正是「入口」的那幾支;此數字不是 production entry-point count。
| 腳本 | 產出什麼、回答什麼問題 |
|---|---|
verify_pipeline_numbers.py先跑這個 |
重算並驗證歷史 35,332-site 方法文件的受管數字;scope 僅限該文件,不涵蓋 exact-PS、LongLineage、storage 或 code/test counts。 |
sm_linkage_genomewide.py |
建立全基因組突變共現地圖 —— 這是整套方法的骨幹。
對每一對距離 50 kb 內的突變,統計有幾條 read 同時看到它們、四種等位組合各幾條、
判成巢狀/互斥/共連鎖/獨立哪一種關係。 實測產物 26.5 MB:53,094 對配對 + 35,332 筆位點帳本。 |
build_strict_ps_hp_regions.py |
用嚴格規則切出可建樹的區域:同一定相組、同一 germline 單倍型內、
至少 3 條分子同時確定兩端 —— 才連一條邊。 ● 距離只記錄、不參與連邊,這是刻意的方法學選擇(避免用幾何鄰近冒充分子連鎖)。 |
build_layered_per_sample.py |
產生 7 technical datasets/6 biological IDs 的分層工作站 HTML(呈現層主成品)。 |
build_exact_ps_layered_workstation.py |
4,741 行的完整工作站建構器。支援 --verify-only ——
只驗證上游契約還成立、不重建,適合用來確認資料沒漂移。 |
build_workstation.py通用 |
317 行的通用工作站生成器:吃一份宣告式 spec,吐互動判讀 HTML。見 §3。 |
| 檔案 | 內容 |
|---|---|
per_sSNV_census.tsv |
每個突變一列的帳本:來源、正常組織的支持數、是否確認為體細胞突變、變異頻率、 50 kb 內有幾個潛在夥伴、實際連上幾個、最高共讀深度、拷貝數狀態。 |
regions.tsv |
在 frozen recurrence-allowed revision 中,每個共現區域一列:座標、跨度、突變數、 local candidate graph/arborescence 的形狀摘要、節點與相容/矛盾計數。這不是 biological tree、 ancestry 或 clone truth,且尚未做 allele-specific CN/LOH correction。 |
funnel_census_HCC1395.json |
所有百分比的分母來源。六層漏斗,每層丟了多少、為什麼丟, 並自我檢查各層加總等於總數。要引用任何比例前先看這個檔。 |
產出的是零外部依賴、可離線開啟的單一 HTML 檔,可以直接寄給別人。
| 檔案 | 大小 | 備註 |
|---|---|---|
HCC1937.html | 14.6 MB | 示範給人看時先開這個 —— 最小、開得動 |
HCC1395.html | 35.5 MB | 主力樣本 |
COLO829.html | 41.5 MB | 有外部真值可對照 |
H1437.html | 72.3 MB | |
H2009.html | 188.2 MB | ● 瀏覽器開這個會很慢且吃大量記憶體 |
7 個工作站合計約 393 MB,不進 git(該目錄有自己的忽略規則)。 每個頁面的 HTML 標頭內嵌了上游各收據的 SHA-256 當作防漂移印記。
| 圖種 | 怎麼看 |
|---|---|
| 雙面板熱圖 | 左邊是 read × CpG 甲基化矩陣(藍=未甲基/紅=甲基/灰=無資料),
右邊是同一批 read 的兩兩距離矩陣(暗=相近/亮=相遠)。
左側固定側欄依序是 群 | 單倍型 | 突變型 | 腫瘤/正常 | 正反股。 要看的是:同一群 read 是不是同時在「甲基化型態」與「帶不帶突變」上都一致。 |
| 全基因組染色體圖 | 22 條染色體橫條,用紅色深淺表示突變密度,疊上著絲點位置。 用途:目視確認密集區是不是落在已知的假象好發區。 |
這是全系統目前最碎片化的一層,以下問題都是實測確認的。
python3 是 3.9.12,但部分腳本需要 3.10。
照著說明打 python3 scripts/build_strict_ps_hp_regions.py 會在 import 階段就崩,
而且錯誤訊息指向 dataclass 而不是版本問題 —— 極容易誤以為程式壞了。
/usr/bin/python3.10。
(run_layered_v4_strict.py 有自動偵測會幫你處理,但直接呼叫子腳本時沒有這層保護。)
scripts/ism_heatmap_std.py 看起來像可執行的入口,
但它沒有 main、沒有參數解析 —— 直接跑它什麼都不會發生(它只定義常數與函式)。
scripts/ 下 291 個 Python 檔(deploy fbdf7c7;含 generated/test helpers)中,117 個會讀 CSV/TSV,
其中 59 個原始碼裡沒有任何 schema 或欄位檢查;母體不同,不宣稱超過一半。
significance_summary.csv 欄數跨版本不一致」,
這代表拿舊資料餵新腳本時很可能靜默讀到錯的欄位。