761. HLA分型OptiType¶
一句话概述:从NGS数据中推断HLA基因型(如HLA-A*02:01),用于免疫治疗、器官移植匹配和新抗原预测——就像从基因序列中读出每个人的"免疫身份证号码"。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| HLA | 人类白细胞抗原,免疫系统的"身份标识" | OptiType, HLA-HD |
| MHC | 主要组织相容性复合体(=HLA系统) | 6号染色体 |
| Class I | HLA-A/B/C,呈递内源抗原 | CD8+ T细胞识别 |
| Class II | HLA-DR/DQ/DP,呈递外源抗原 | CD4+ T细胞识别 |
| 4位分辨率 | A*02:01形式(蛋白水平区分) | 临床最低要求 |
| 新抗原预测 | 肿瘤突变肽与HLA的结合预测 | netMHCpan |
一、原理(白话版)¶
1.1 为什么HLA分型重要?¶
HLA的作用:
HLA分子 = 细胞表面的"展示架"
把细胞内部的蛋白片段(肽段)展示给T细胞看
T细胞通过HLA上展示的肽段判断:这个细胞是正常的还是有问题的
HLA分型的应用:
1. 器官移植:供体和受体HLA匹配度决定排斥反应风险
2. 肿瘤免疫:预测哪些肿瘤突变能被免疫系统识别(新抗原)
3. 药物过敏:某些HLA型与药物超敏反应相关(如HLA-B*57:01与阿巴卡韦)
4. 自身免疫病:某些HLA型与疾病风险相关(如HLA-B*27与强直性脊柱炎)
5. 疫苗设计:个性化疫苗需要知道患者的HLA型
HLA的挑战:
- 全基因组最多态的区域(>30,000个等位基因)
- 基因间高度相似(假基因、同源基因)
- 传统方法(血清学、PCR-SSO)慢且贵
→ NGS计算分型成为主流
1.2 HLA命名法¶
HLA-A*02:01:01:01
│ │ │ │
│ │ │ └── 第4位:非编码区变异
│ │ └───── 第3位:同义突变(蛋白不变)
│ └──────── 第2位:蛋白级区分(最常用的"4位分辨率")
└─────────── 第1位:血清学分组
临床常用:HLA-A*02:01(4位/2-field分辨率)
研究常用:HLA-A*02:01:01(6位/3-field分辨率)
二、OptiType分析流程¶
2.1 安装¶
# ===== 安装OptiType =====
# 方法一:conda安装(推荐)
conda create -n hla python=3.8 # 创建环境
conda activate hla # 激活环境
conda install -c bioconda optitype # 安装OptiType
# 方法二:Docker
docker pull fred2/optitype # 拉取镜像
# 方法三:pip安装
pip install OptiType # pip安装
# 验证
OptiTypePipeline.py --help # 查看帮助
2.2 从WGS/WES数据分型¶
# ===== OptiType完整流程 =====
# Step 1: 提取HLA区域读段
# 方法一:用razers3预筛选(OptiType推荐)
razers3 \
--percent-identity 90 \ # 最低90%相似度
--max-hits 1 \ # 每条读段最多1个hit
--distance-range 0 \ # 距离范围
--output-format sam \ # 输出SAM格式
--thread-count 8 \ # 8线程
-o sample_hla_fished.sam \ # 输出文件
/path/to/optitype/data/hla_reference_dna.fasta \ # HLA参考序列
sample_R1.fastq.gz \ # 正向读段
sample_R2.fastq.gz # 反向读段
# 将SAM转为FASTQ
samtools fastq sample_hla_fished.sam \
> sample_hla_fished.fastq # 转为FASTQ
# 方法二:直接从BAM提取HLA区域
samtools view -b sample.bam \
chr6:28477797-33448354 \ # HLA区域坐标(GRCh38)
> sample_hla_region.bam # 提取HLA区域BAM
samtools fastq sample_hla_region.bam \
-1 sample_hla_R1.fastq \ # 正向
-2 sample_hla_R2.fastq \ # 反向
-0 /dev/null -s /dev/null # 丢弃单端
# Step 2: 运行OptiType
OptiTypePipeline.py \
-i sample_hla_R1.fastq sample_hla_R2.fastq \ # 输入配对FASTQ
--dna \ # DNA模式(WGS/WES用--dna, RNA-seq用--rna)
--outdir optitype_output/ \ # 输出目录
--prefix sample1 \ # 样本前缀
--verbose # 详细输出
# 输出文件:
# optitype_output/sample1_result.tsv → 分型结果
# optitype_output/sample1_coverage_plot.pdf → 覆盖度图
2.3 解读OptiType结果¶
# ===== 查看结果 =====
cat optitype_output/sample1_result.tsv
# A1 A2 B1 B2 C1 C2 Reads Objective
# 0 A*02:01 A*24:02 B*35:01 B*44:02 C*04:01 C*05:01 1234 1230.5
# 解读:
# A1, A2: HLA-A的两个等位基因 → A*02:01 / A*24:02
# B1, B2: HLA-B的两个等位基因 → B*35:01 / B*44:02
# C1, C2: HLA-C的两个等位基因 → C*04:01 / C*05:01
# Reads: 支持分型的读段数
# Objective: 目标函数值(越高越好)
# 注意:OptiType只分型HLA Class I (A, B, C)
# 需要Class II (DR, DQ, DP) → 用HLA-HD或HLA*LA
三、其他HLA分型工具¶
3.1 HLA*LA(Class I + Class II)¶
# ===== HLA*LA:全面的HLA分型 =====
# 支持Class I和Class II
# 安装:conda install -c bioconda hla-la
# 准备图参考
HLA-LA.pl \
--action prepareGraph \
--PRG_graph_dir /path/to/graphs/PRG_MHC_GRCh38_withIMGT # 图参考目录
# 运行分型
HLA-LA.pl \
--BAM sample.bam \ # 输入BAM(需要sorted+indexed)
--graph PRG_MHC_GRCh38_withIMGT \ # 图参考
--sampleID sample1 \ # 样本ID
--maxThreads 8 \ # 线程数
--workingDir hla_la_output/ # 工作目录
# 查看结果
cat hla_la_output/sample1/hla/R1_bestguess_G.txt
# A A*02:01 A*24:02
# B B*35:01 B*44:02
# C C*04:01 C*05:01
# DRB1 DRB1*07:01 DRB1*11:01 ← Class II也有了
# DQB1 DQB1*02:01 DQB1*03:01
3.2 arcasHLA(RNA-seq专用)¶
# ===== arcasHLA:RNA-seq数据分型 =====
# 安装:pip install arcasHLA
# 优势:RNA-seq数据准确率>96%
# Step 1: 提取HLA读段
arcasHLA extract \
sample_sorted.bam \ # 输入BAM
-o arcas_output/ \ # 输出目录
-t 8 # 线程
# Step 2: 分型
arcasHLA genotype \
arcas_output/sample.extracted.1.fq.gz \ # 提取的R1
arcas_output/sample.extracted.2.fq.gz \ # 提取的R2
-g A,B,C,DRB1,DQB1,DQA1 \ # 分型基因
-o arcas_output/ \ # 输出目录
-t 8 # 线程
# 查看结果
cat arcas_output/sample.genotype.json
# {"A": ["A*02:01:01", "A*24:02:01"],
# "B": ["B*35:01:01", "B*44:02:01"],
# "DRB1": ["DRB1*07:01:01", "DRB1*11:01:01"]}
四、下游应用:新抗原预测¶
# ===== 新抗原预测流程 =====
# 知道HLA型后,可以预测肿瘤突变产生的新抗原
# Step 1: 从体细胞突变生成突变肽段
# 输入:体细胞突变VCF + 参考基因组
# 工具:pvacseq, MuPeXI, 或手动生成
# Step 2: 预测HLA-肽段结合亲和力
# 使用netMHCpan(最常用)
netMHCpan \
-a HLA-A02:01,HLA-A24:02,HLA-B35:01 \ # 患者HLA型
-f mutant_peptides.fasta \ # 突变肽段序列
-l 8,9,10,11 \ # 肽段长度(8-11mer)
-BA \ # 输出结合亲和力
> neoantigen_predictions.txt # 预测结果
# 筛选强结合新抗原
# IC50 < 50nM → 强结合(高优先级)
# IC50 < 500nM → 弱结合(中优先级)
# %Rank < 0.5% → 强结合(推荐用%Rank)
# ===== Python解析新抗原预测结果 =====
import pandas as pd # 导入pandas
# 读取netMHCpan输出
results = pd.read_csv(
"neoantigen_predictions.txt",
sep=r"\s+", # 空格分隔
comment="#", # 跳过注释行
skiprows=1 # 跳过header
)
# 筛选强结合新抗原
strong_binders = results[results["%Rank_EL"] < 0.5] # EL rank < 0.5%
print(f"强结合新抗原数: {len(strong_binders)}")
# 输出候选新抗原
for _, row in strong_binders.iterrows():
print(f"HLA: {row['HLA']}, 肽段: {row['Peptide']}, "
f"IC50: {row['nM']:.1f}nM, Rank: {row['%Rank_EL']:.3f}%")
五、多工具交叉验证¶
# ===== 多工具交叉验证HLA分型结果 =====
import json # 导入json
# 读取各工具结果
optitype_result = {
"A": ["A*02:01", "A*24:02"],
"B": ["B*35:01", "B*44:02"],
"C": ["C*04:01", "C*05:01"]
}
hlala_result = {
"A": ["A*02:01", "A*24:02"],
"B": ["B*35:01", "B*44:02"],
"C": ["C*04:01", "C*05:01"]
}
# 比较一致性
for gene in ["A", "B", "C"]:
opt = set(optitype_result[gene]) # OptiType结果
hla = set(hlala_result[gene]) # HLA*LA结果
match = opt == hla # 是否一致
print(f"HLA-{gene}: OptiType={opt} | HLA*LA={hla} | 一致={match}")
# 最佳实践:
# 1. 至少用2个工具交叉验证
# 2. 不一致时,以覆盖度更高的结果为准
# 3. 临床应用需要PCR-SSO或SBT验证
六、常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
OptiType: no reads | HLA读段提取失败 | 检查razers3的参考文件路径 |
OptiType: only Class I | 需要Class II | 改用HLA*LA或HLA-HD |
Low read count | HLA区域覆盖度不够 | WES通常足够,WGS需>30x |
Ambiguous typing | 分辨率不够 | 增加测序深度或用专门的HLA测序 |
Glpk error | ILP求解器问题 | 安装glpk: conda install glpk |
HLA*LA: graph error | 图参考未准备 | 先运行--action prepareGraph |
七、面试高频问题¶
Q1: OptiType的原理是什么?¶
A: OptiType用整数线性规划(ILP)选择最优的HLA等位基因组合。先把读段比对到所有已知HLA等位基因的参考序列,构建二进制命中矩阵,然后用ILP优化选择最多2个等位基因使得能解释最多的读段。准确率在Class I上达到97-99%。
Q2: 如何选择HLA分型工具?¶
A: ①只需Class I + WGS/WES数据 → OptiType(最准,97-99%);②需要Class I+II → HLA*LA或HLA-HD;③RNA-seq数据 → arcasHLA或OptiType(--rna模式);④临床应用 → 多工具交叉验证,关键结果需PCR确认。2025年的consHLA流程整合多工具结果取共识。
Q3: HLA分型在肿瘤免疫治疗中的作用?¶
A: HLA决定了肿瘤细胞能展示哪些突变肽段(新抗原),从而决定免疫系统能否识别肿瘤。流程:①HLA分型(OptiType)→ ②体细胞突变检测(Mutect2)→ ③突变肽段生成 → ④HLA-肽段结合预测(netMHCpan)→ ⑤候选新抗原筛选。这是个性化疫苗和免疫检查点抑制剂疗效预测的基础。
八、速查表¶
# ===== HLA分型速查 =====
# OptiType(Class I,最准)
razers3 --percent-identity 90 -o fished.sam hla_ref.fa R1.fq R2.fq
OptiTypePipeline.py -i R1.fq R2.fq --dna --outdir out/
# HLA*LA(Class I+II)
HLA-LA.pl --BAM s.bam --graph PRG_MHC_GRCh38_withIMGT \
--sampleID s1 --maxThreads 8
# arcasHLA(RNA-seq)
arcasHLA extract s.bam -o out/
arcasHLA genotype out/s.1.fq.gz out/s.2.fq.gz -g A,B,C,DRB1
# 工具选择:
# Class I only + 高精度 → OptiType
# Class I+II → HLA*LA
# RNA-seq → arcasHLA
# 临床 → 多工具 + PCR验证
# 新抗原预测:
# HLA分型 → 突变肽段 → netMHCpan预测
# IC50 < 50nM 或 %Rank < 0.5% → 强结合新抗原