模組 11 · LongPhase core

LongPhase:核心 phasing 流程

介紹 phase graph、phase set 與 haplotagging,以及主要失效情境與診斷方法。

約 45 分鐘建議先修:Phasing

本模組學習目標

  • 說出 LongPhase 的輸入與輸出各是什麼
  • 說明四種變異為什麼放進同一張圖一起定相,而不是各自分開處理
  • 描述圖的節點與邊各自代表什麼,並用四個計數說明一條邊的方向與去留怎麼決定
  • 說明加權投票如何決定每個變異,以及 PS 為什麼會換號
  • 說出兩道信心門檻分別對應輸出裡的哪個現象
  • 跑一個最小的 LongPhase 範例並解讀輸出

為什麼重要

是本教材後續工具共用的基礎,處理的是一般(非腫瘤)樣本的 phasing。 開始分析腫瘤資料前,先掌握這個基本流程。

它值得看清楚內部機制,原因是:後面 LongPhase-S 與 LongPhase-TO 的腫瘤專用處理, 都是接在這張圖與這套投票之上。不知道圖長什麼樣,就看不出腫瘤版改了什麼。

概念與互動

輸入與輸出

子命令輸入輸出
phasegermline SNP VCF + BAM + reference;可另外加 SV VCF、甲基化 VCF含以 | 表示相位的 GT 的 phased VCF(每種變異各自一份)
haplotag已 phase 的 VCF + BAM + reference每條 read 帶 tag 的 BAM
modcall帶甲基化的 BAM + reference甲基化位點的 VCF,可再餵回 phase--mod-file

注意這個順序:先 call variant,再 phase,最後 haplotag。 LongPhase 本身不做 variant calling —— 它需要別人先給它 het 位點當錨點。

四種變異,一張圖

LongPhase 最關鍵的設計選擇,是把四種變異放進同一張圖一起定相, 官方文件稱為 co-phasing。理由來自長讀本身:一條 read 可能同時跨過一個 SNP、 一個甲基化位點、一個小的 indel 與一個 SV —— 這四件事被同一個分子綁在一起, 分開 phasing 就把這個證據丟掉了。

四種變異進同一張圖:LongPhase 的 co-phasing 圖模型 LongPhase 把四種輸入放進同一張圖:SNP(-s,必要)、小的 indel(--indels)、 結構變異(--sv-file)、以及甲基化位點(--mod-file,由 longphase modcall 產生)。 上半部是同一段基因體上的六個位置與五條 read;第二條 read 同時跨過 SNP、甲基化、 indel 與 SV 四種類型,所以它一條就能把四種變異連在一起 —— 這是長讀才做得到的事, 也是把它們放進同一張圖(而不是各自分開 phasing)的理由。 下半部是對應的圖:每個位置拆成兩個 sub-node(allele 0 與 allele 1), read 的證據變成 sub-node 之間的邊。邊只有兩種形狀 —— 平行(0 接 0、1 接 1) 或交叉(0 接 1、1 接 0);沒有 read 跨過時就沒有邊,phase block 在那裡斷開。 四種變異進同一張圖 —— 這是 co-phasing 的意思 節點的形狀代表變異類型,顏色一律中性;顏色留給後面的 haplotype 指派。 ① 四個輸入 SNP VCF -s(必要) small indel --indels SV VCF --sv-file methylation VCF --mod-file 四個都進同一張圖, 不是各自分開 phasing。 ② 一條 read 可以同時跨過不同類型的位置 SNP MOD INDEL SNP SV MOD 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 1 0 每格數字是這條 read 在該位置看到的 allele(0=ref、1=alt)。 第 2 條 read 一次跨過 SNP、MOD、INDEL、SNP、SV —— 四種類型被同一個分子綁在一起,這是長讀才給得到的證據。 ③ 對應的圖:每個位置拆成兩個 sub-node allele 0 allele 1 平行 平行 交叉 平行 沒有 read 跨過 邊只有兩種形狀:平行(0 接 0、1 接 1)或交叉(0 接 1、1 接 0)。 要選哪一種、以及這條邊該不該留下來,由下一張圖的四個計數決定。 最右邊沒有 read 跨過 → 沒有邊 → phase block 在這裡斷開。
上半部是同一段基因體上的六個位置與五條 read;第 2 條一次跨過 SNP、甲基化、indel 與 SV 四種類型。下半部是對應的圖:每個位置拆成兩個 sub-node(allele 0 與 allele 1),read 的證據變成 sub-node 之間的邊,而邊只有平行與交叉兩種形狀。上下兩排的 x 座標刻意對齊,方便對照同一個位置。

程式內部給每個節點記一個型別,原始碼裡的註解就寫著 0=SNP 1=SV 2=MOD 3=INDEL 4=tandem repeat INDEL。 型別不只是標籤,它會改變後面的判斷 —— 例如串聯重複區的 indel(型別 4)投票權重被降到 0.1, 因為那類位置的定序錯誤率特別高。

一條邊怎麼決定方向,又怎麼被丟掉

邊不是「有」或「沒有」,而是四個加權計數。跨過兩個位置的每一條 read, 依它在兩邊看到的 allele 落進 rr、ra、ar、aa 之一:

一條邊的方向與去留,由四個加權計數決定 兩個變異之間的一條邊,其實是四個加權計數。每條跨過兩個位置的 read 會落進 rr、ra、ar、aa 之一:rr 表示兩邊都看到 ref,aa 表示兩邊都看到 alt, 依此類推。程式把它們併成兩個數字 —— para = rr + aa(平行),cross = ra + ar(交叉), 再算 ESR = 兩者的小除以大。para 大就平行連接,cross 大就交叉連接。 ESR 越小代表兩種組合差得越開、證據越乾淨;ESR 大到超過 edgeThreshold(預設 0.7) 就代表兩種組合幾乎一樣多,這條邊會被整個丟掉,不參與後面的定相。 另外兩條規則:任一端的 base quality 低於 baseQuality(預設 12)時,該條 read 只算 edgeWeight(預設 0.1)而不是 1;SNP 與甲基化之間的邊門檻收緊到 0.3。 一條邊其實是四個計數 ① 每條跨過兩個位置的 read 投進一個格子 位置 i 位置 j 0 0 rr 1 1 aa 0 1 ra 1 0 ar rr/aa = 兩邊一致 → 支持平行 ra/ar = 兩邊相反 → 支持交叉 任一端 base quality < 12(-p)時, 這條 read 只算 0.1(-e),不算 1 ② 併成兩個數字,再看它們差多少 para = rr + aa 平行的證據量 cross = ra + ar 交叉的證據量 ESR = min / max ESR 小 = 兩種組合差得開 = 證據乾淨 ESR 大 = 兩種組合差不多 = 分不出來 ③ 三種證據強度,三種結果 證據乾淨 rr aa ra ar 9 8 0 1 para = 17 cross = 1 ESR = 0.06 平行連接 ESR ≤ 0.1 → 這一票的權重 拉到 20(正常是 1) 證據普通 rr aa ra ar 7 6 3 3 para = 13 cross = 6 ESR = 0.46 平行連接 ESR 沒有低到 0.1, 這一票權重就是 1 兩種組合差不多 rr aa ra ar 6 5 5 5 para = 11 cross = 10 ESR = 0.91 整條邊丟掉 ESR 超過門檻 0.7(-1)→ 分不出來,不參與定相 SNP 與甲基化之間的邊門檻另外收緊到 0.3 —— 甲基化訊號比較吵,要求更乾淨才採信。
四個計數併成 para(=rr+aa,平行的證據)與 cross(=ra+ar,交叉的證據),再算 ESR = 兩者的小除以大。para 大就平行連接、cross 大就交叉連接;ESR 大到超過 edgeThreshold(預設 0.7)就代表兩種組合幾乎一樣多,這條邊會被整個丟掉。反過來,ESR0.1 的乾淨邊,它那一票的權重會從 1 拉到 20。

兩個細節值得記住,因為它們解釋了很多「為什麼這裡沒接起來」:

  • 低品質的鹼基會被打折。邊的任一端 base quality 低於 --baseQuality(預設 12)時, 那條 read 對這條邊只貢獻 --edgeWeight(預設 0.1),而不是 1。
  • 甲基化的門檻更嚴。SNP 與甲基化位點之間的邊,門檻從 0.7 收緊到 0.3 —— 甲基化訊號比較吵,要求證據更乾淨才採信。

heuristic phasing:加權投票

圖建好之後,LongPhase 不求全域最佳解。它沿著座標從左往右掃, 一次決定一個變異:前面最多 --connectAdjacent(預設 35)個變異各投一票, 票的權重就是上面那個 20 / 1 / 0.1,兩邊加總大的一邊贏。

heuristic phasing:前面的變異加權投票,決定下一個變異接在哪一條上 LongPhase 不是求全域最佳解,而是從左往右逐一決定。決定第 k 個變異時, 前面最多 35 個變異(connectAdjacent)各投一票;每票的權重來自它那條邊有多乾淨 —— 乾淨的邊(ESR 很小)權重 20,普通的 1,串聯重複區的 indel 只有 0.1。 兩邊權重加總,大的一邊贏,這個變異就接到那條 haplotype 上。 如果兩邊加總剛好相等,程式無法決定方向,就在這裡開一個新的 phase block, PS 換號 —— 這正是 phase block 斷開的直接原因。 最下面是一個特別的保護機制:如果很多票其實都靠同一條長 read 撐著, 那條 read 一旦有系統性錯誤就會一路投錯票。程式偵測到超過三票各自只有一條 read 支持時,會改用只採信乾淨且非 indel 的票重新計算。 從左往右一個一個決定,不求全域最佳解 ① 決定第 k 個變異:前面最多 35 個變異各投一票 已經定好相位的變異 20 邊很乾淨 20 邊很乾淨 1 普通 1 普通 0.1 重複區 indel 待決定 HP1 得票 41 HP2 得票 1.1 每一票的權重來自那條邊有多乾淨:ESR ≤ 0.1 → 20;普通 → 1;串聯重複區的 indel → 0.1 41 > 1.1 → 這個變異接到 HP1。距離超過 300 kb(-d)的變異不投票。 ② 兩邊得票相等 → phase block 在這裡斷開 HP1 得票 3 HP2 得票 3 平手 → 無法決定方向 PS = 10521 PS = 88014 同一條染色體上出現很多 PS,多半就是一路平手出來的。 ③ 一條長 read 不能一路投錯票 一條很長的 read 同時跨過下面每一個位置: 每條邊都只有這一條 read 撐著(para + cross ≤ 1)。 它要是有系統性錯誤,就會一路投出一致但錯的票。 超過三票各自只有一條 read 支持時 → 只採信 ESR < 0.2 且非 indel 的票重算 這一整套都是 heuristic:沿著座標往前掃、用加權投票決定,沒有回頭修正也不求全域最佳解。 好處是快、而且在長讀上通常夠準;代價是它對「證據剛好平手」與「單一 read 主導」很敏感 —— 所以程式才需要 ③ 這種特例保護,以及下一張圖的兩道信心門檻。
① 加權投票決定當前變異接到哪一條 haplotype。② 兩邊得票剛好相等時程式無法決定方向,就在這裡開一個新的 phase block —— 這是 PS 換號最直接的原因。③ 一個特例保護:如果很多票其實都靠同一條長 read 撐著(每條邊只有一條 read,para+cross1),那條 read 一旦有系統性錯誤就會一路投錯票;程式偵測到超過三票是這種情況時,會改成只採信乾淨(ESR < 0.2)且非 indel 的票重算。

這是一個典型的 heuristic:快、在長讀上通常夠準,但代價是它對兩件事敏感 —— 證據剛好平手,以及單一 read 主導。③ 那個特例保護就是為了後者而存在的。 另外,距離超過 --distance(預設 300000,約一個 centromere 的長度)的兩個變異不互相投票。

最後兩道信心門檻

圖定好相之後還有一步,程式把結果反過來檢查一次:先用變異的相位決定每條 read 屬於哪條 haplotype,再用已標好的 read 回頭重算每個變異。兩步各有一道門檻:

最後兩道信心門檻:哪些 read 拿得到 HP,哪些變異留得住 PS 圖定好相之後還有一步:把結果反過來檢查一次。 左邊先決定每條 read 屬於哪一條 haplotype —— 數這條 read 上有多少 allele 站 HP1、 多少站 HP2,比例要超過 readConfidence(預設 0.65)而且總數大於 1,才寫 HP 標籤; 否則這條 read 的 HP 就是空的,這是 BAM 裡有些 read 沒有 HP 的直接原因。 indel 的 allele 在這裡只算 0.1,不算 1。 右邊再用「已經標好 HP 的 read」回頭重算每個變異:兩種指派的支持數比例要超過 snpConfidence(預設 0.75)才保留,否則這個變異的 PS 會被刪掉 —— 所以 VCF 裡有些 heterozygous 位點雖然 phasing 跑完了卻沒有 PS,並不是程式沒跑到, 而是它自己判斷證據不足而收回。 圖定好相之後,還要反過來檢查一次 ① 這條 read 屬於哪一條 haplotype? 數這條 read 上的 allele 各站哪一邊 站 HP1:7 個 站 HP2:1 個 7 ÷ 8 = 0.88 > 0.65 → 標上 HP → HP:i:1 站 HP1:4 個 站 HP2:3 個 4 ÷ 7 = 0.57 < 0.65 → 不標 → 沒有 HP indel 的 allele 在這一步只算 0.1,不算 1。 ② 用標好的 read 回頭重算每個變異 兩種指派各有多少 read 支持 看到 ref 看到 alt HP1 的 read HP2 的 read 12 1 2 11 指派 A:HP1=ref、HP2=alt → 12 + 11 = 23 指派 B:HP1=alt、HP2=ref → 1 + 2 = 3 23 ÷ 26 = 0.88 > 0.75 超過 snpConfidence → 這個變異保留 PS 與定相的 GT 若比例沒過 0.75 → 這個變異的 PS刪掉 VCF 裡有 het 位點沒有 PS,多半是這裡收回的 兩道門檻各自對應一個你會在輸出裡直接看到的現象: read 沒有 HP ← 0.65 那道;het 位點沒有 PS ← 0.75 那道。兩者都不是錯誤,是程式主動說「證據不足」。
① read 上的 allele 站 HP1 與 HP2 的比例要超過 --readConfidence(預設 0.65)且總數大於 1,才寫 HP 標籤;沒過的 read 就沒有 HP。② 再用標好的 read 重算每個變異,兩種指派的支持比例要超過 --snpConfidence(預設 0.75)才保留,沒過的話這個變異的 PS 會被刪掉

沒有 HP、沒有 PS,多半不是錯誤

這兩道門檻各自對應一個你會在輸出裡直接看到的現象: BAM 裡有 read 沒有 HP,來自 0.65 那道;VCF 裡有 heterozygous 位點沒有 PS, 來自 0.75 那道。兩者都不是程式漏跑,而是它主動判斷證據不足而收回。 所以看到這些空缺時,要問的是「證據為什麼不足」,而不是「程式是不是壞了」。

三種失敗模式

phasing 的三種失敗模式與各自的徵兆 第一種是分段破碎:read 太短或中間沒有可區分的位置,導致同一條染色體被切成多個小段。 第二種是方向對調:某處證據太弱,從那一點之後兩條被互換,後半段可能整體錯置。 第三種是大量 read 無法指派:可能是局部拷貝數狀態、覆蓋度不足、或比對品質太低。 每一種都有可以在資料上直接檢查的徵兆。 ① 分段破碎 示意 多個彼此不相連的小段 原因 read 太短,或中間 沒有可區分的位置 徵兆 同一條染色體上出現 很多不同的分段編號 腫瘤樣本裡最常見 ② 方向對調 示意 從該點之後可能整體錯置 原因 某處證據太薄弱, 兩條被互相對調 徵兆 與標準答案比對時, 錯誤從某一點開始 系統性地發生 需結合資料與版本設定確認 ③ 大量 read 無法指派 示意 灰色 read 未帶 HP 標籤 原因 整段失去一條染色體、 覆蓋度不足、 或比對品質太低 徵兆 標記率明顯偏低 (標記率偏低應進一步檢查)
三種失敗模式及其可觀測指標。① 分段破碎:檢查 phase set 的數量。② 方向對調:與 truth 比對時,錯誤從某點起系統性出現。③ 大量 read 無法指派:檢查 HP 標記率。
失敗對應到上面的哪一步徵兆
斷裂投票平手,或沒有 read 跨過(沒有邊)同一條染色體上出現很多不同的 PS
某條邊的 ESR 偏高卻仍勉強過關,方向選錯與 truth 比對時,錯誤從某一點之後系統性地發生
大量 read 未標記沒過 --readConfidence(0.65)haplotag 後很多 read 沒有 HP

第一項與第三項在腫瘤樣本上可能更明顯,因為 與 copy number 異常會減少可用的 phasing 錨點。 LongPhase-S 與 LongPhase-TO 都針對這些腫瘤資料情境提供額外處理。

真實證據

最小可跑範例

# 1. 準備輸入(見 M4)
samtools faidx reference.fasta
minimap2 --MD -ax map-ont -t 10 reference.fasta reads.fastq -o aln.sam
samtools sort -@ 10 aln.sam -o aln.bam && samtools index aln.bam

# 2. germline calling(Clair3 或 PEPPER-DeepVariant,見 M5)
#    產生 SNP.vcf

# 3. phasing
longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o phased \
  --ont

# 4. haplotagging
longphase-s haplotag \
  -r reference.fasta \
  -s phased.vcf \
  -b aln.bam \
  -t 8 \
  -o tagged

co-phasing:把其他三種變異一起帶進去

# 甲基化要先用 modcall 產生 VCF,才能餵給 phase
longphase-s modcall \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o modcall

# 四種一起 co-phase;每種變異會各自輸出一份 phased VCF
longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  --indels \
  --sv-file SV.vcf \
  --mod-file modcall.vcf \
  -t 8 \
  -o phased \
  --ont

注意modcall 的 help 顯示 -b, --bam-file, 但選項表註冊的長選項其實是 --methylbamfile;短選項 -b 兩者都通。 同理 phase 的 help 寫 --sv-window--sv-threshold, 選項表註冊的是 --svWindow--svThreshold

把圖直接印出來看

前面那三張圖不必只當示意圖 —— --dot 會為每一條染色體輸出一個 dot 檔,裡面就是實際建出來的邊:

longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont --dot -o phased

# 每一行是一條邊:<位置>.<allele> -> <位置>.<allele>
# allele 相同 = 平行連接,相反 = 交叉連接
head -20 phased.chr20.dot

如何驗證輸出

# 在已定相的 heterozygous records 檢查 | 與 PS
grep -v '^##' phased.vcf | head -5

# BAM 裡應該有 HP tag
samtools view tagged.bam | grep -o 'HP:i:[12]' | sort | uniq -c

# 有多少 read 沒被標到?
samtools view -c tagged.bam
samtools view tagged.bam | grep -c 'HP:i:'

最後兩行的差就是沒過 --readConfidence(0.65)那道門檻的 read。 請將差值除以總 read 數,再依資料品質與分析目標判讀;比例偏高時,回到 M6 的排查清單。

參數對應到哪一步

參數很多,但每一個都落在前面某一張圖上。按階段記比按字母記容易得多:

階段參數預設它在做什麼
讀 BAM-q, --mappingQuality1比對品質低於此值的 alignment 直接丟掉
-x, --mismatchRate3錯配率過高的 read 標為不可信
-L, --overlapThreshold0.2同一條 read 的多段比對若重疊超過此比例,只留較長的那段
建邊-d, --distance300000距離超過此值的兩個變異不連邊
-a, --connectAdjacent35每個變異往後連接幾個變異(也就是投票的範圍)
-p, --baseQuality12低於此值的鹼基,其 read 對這條邊只算 --edgeWeight
-e, --edgeWeight0.1打折後的權重
定邊方向-1, --edgeThreshold0.7ESR 超過此值 → 兩種組合太像,丟掉這條邊
收尾檢查-m, --readConfidence0.65read 要多一致才寫 HP
-n, --snpConfidence0.75變異要多一致才保留 PS
SV 專用-w, --svWindow20評估斷點周圍 CIGAR 的視窗大小
-h, --svThreshold0.10read 要多支持才算支持這個 SV
指令提醒:-h 不是 help

phasehaplotag 的選項表裡, -h 綁的是 --svThreshold(需要一個參數), 而 help 只有長選項 --help,沒有對應的短選項。 所以想看說明就要寫完整的 --help

想做的事寫法
看說明longphase-s phase --help
調 SV 支持門檻-h 0.15--svThreshold 0.15

同一張表裡 -1--edgeThreshold-L--overlapThreshold —— 短選項的字母跟參數名稱沒有明顯關聯, 所以指令寫長一點反而不容易記錯。

來源提醒:help 與實際參數不一致時

以上差異都是在原始碼裡核對過的:help 字串與 longopts 註冊表本來就不完全一致。 權威是原始碼裡的 longopts 表 —— 在 twolinin/longphase 的 repo 根目錄, phasePhasing.cpphaplotagHaplotag.cppmodcallModCall.cpp。使用新參數前先檢索該表確認名稱,並記錄版本。

判讀練習

你在一條染色體上完成 phasing,發現輸出的 VCF 裡有 將近 200 個不同的 PS

這正常嗎?該從哪裡查起?

展開答案

數量偏高,建議檢查。在 read 長度與 heterozygous 位點密度足夠時,長讀通常可形成較大的 phase blocks;實際數量仍取決於資料品質與參數設定。

回到投票那張圖:新的 PS 只在兩邊得票相等時產生。 所以問題一定是「為什麼投票投不出結果」,可能的來源有三個層次:

  1. 沒有票可投。先看 read 長度分布(samtools stats 的平均與 N50)。 如果 read 只有 2–3 kb,跨不過兩個 het 位點的邊本來就少,block 破碎可能是預期結果。
  2. 可投票的位點太稀疏。如果 VCF 裡的 het 位點本來就少(樣本雜合度低, 或這條染色體有大段 ),可用錨點就會減少。
  3. 票都被丟掉了。邊的 ESR 若普遍偏高(兩種組合都差不多), 就會大量觸發 --edgeThreshold 而整條邊被丟掉。這通常伴隨較高的錯配率 或比對問題,可用 --dot 把圖印出來直接看有多少邊真的存在。

再看斷點的位置分布:集中在特定區段多半是該區段有問題(LOH、重複序列、低 coverage); 均勻散布則是全域性的 read 長度或參數問題。-d(預設 300000)與 -a(預設 35)都會限制投票範圍,資料 read 特別長時可依版本文件評估是否調整。

腫瘤樣本中,LOH 是造成這種現象的常見可能性之一:該區域的兩條染色體變得難以區分, 可用錨點可能大幅減少。腫瘤專用工具因此需要額外處理 LOH 區域,否則 phase blocks 可能變得零碎。

實作練習

執行最小流程

# 僅執行小區域測試,以縮短重複測試時間
REGION="chr20:1000000-2000000"

longphase-s phase \
  -s SNP.vcf \
  -b aln.bam \
  -r reference.fasta \
  -t 8 \
  -o phased \
  --ont

longphase-s haplotag \
  -r reference.fasta \
  -s phased.vcf \
  -b aln.bam \
  --region "${REGION}" \
  -t 8 \
  -o tagged

把兩道門檻的效果量出來

這個練習把前面那張「兩道信心門檻」的圖變成實際數字。 調鬆 --readConfidence,看有多少 read 從沒有 HP 變成有:

# 預設 0.65
longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont -o strict
# 調鬆到 0.55
longphase-s phase -s SNP.vcf -b aln.bam -r reference.fasta --ont -m 0.55 -o loose

# 各自 haplotag 之後比較 HP 標記率
for p in strict loose; do
  total=$(samtools view -c ${p}.tagged.bam)
  tagged=$(samtools view ${p}.tagged.bam | grep -c 'HP:i:')
  echo "${p}: ${tagged} / ${total}"
done

標記率會上升 —— 但那不代表結果更好。放寬門檻是把不確定的 read 也貼上標籤, 標記率與正確率是兩件事,要用有 truth 的資料才分得出來(見 M10)。

確認參數名稱

# 看目前版本接受的長選項
longphase-s phase --help

# help 與實際行為不符時,以選項表為準(檔案在 repo 根目錄)
grep -A40 'static const struct option longopts' Phasing.cpp

學習檢核

原始文獻與程式碼

LongPhase:Lin JH、Chen LC、Yu SQ、Huang YT, LongPhase: an ultra-fast chromosome-scale phasing algorithm for small and large variants,Bioinformatics,2022。程式碼在 github.com/twolinin/LongPhase

本模組術語

HP tag
BAM 裡標示某條 read 屬於哪一條 haplotype 的 tag。LongPhase-S 的 germline haplotag 寫成整數 HP:i:1;somatic haplotag 與 LongPhase-TO 則寫成字串 HP:Z:1-1
LOH(異型合子性喪失)
原本 heterozygous 的區域變成只剩一種 allele。LOH 不等於缺失 —— 也可能是一條 haplotype 遺失後另一條被複製(copy-neutral LOH)。
LongPhase
實驗室開發的長 read phasing 工具,是後續所有工具的共同基礎。輸出 germline haplotype。
PS tag(phase set)
標示某群 variants 屬於同一 phase block 的編號。同一 PS 內的相位方向可相互比較;不同 PS 的 HP1/HP2 方向彼此獨立。
phase block
一段可建立連續相位關係的區域。read 長度不足、缺少 informative heterozygous 位點或證據不一致時,可能形成不同 phase blocks。
switch error
phasing 結果自某一位置起將兩條 haplotype 的方向對調,是常見的 phasing 錯誤類型。