跳转至

761. HLA分型OptiType

一句话概述:从NGS数据中推断HLA基因型(如HLA-A*02:01),用于免疫治疗、器官移植匹配和新抗原预测——就像从基因序列中读出每个人的"免疫身份证号码"。


核心知识点速查表

概念白话解释关键工具
HLA人类白细胞抗原,免疫系统的"身份标识"OptiType, HLA-HD
MHC主要组织相容性复合体(=HLA系统)6号染色体
Class IHLA-A/B/C,呈递内源抗原CD8+ T细胞识别
Class IIHLA-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 readsHLA读段提取失败检查razers3的参考文件路径
OptiType: only Class I需要Class II改用HLA*LA或HLA-HD
Low read countHLA区域覆盖度不够WES通常足够,WGS需>30x
Ambiguous typing分辨率不够增加测序深度或用专门的HLA测序
Glpk errorILP求解器问题安装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% → 强结合新抗原