引言:癌症免疫周期理论的革命性意义

癌症免疫周期(Cancer-Immunity Cycle)理论是由华人科学家张宏冰博士于2013年提出的开创性框架,它将复杂的免疫系统对抗肿瘤的过程分解为七个有序的步骤。这一理论框架彻底改变了我们理解免疫系统如何识别、攻击和清除癌细胞的方式,为开发更有效的癌症免疫治疗策略提供了系统性的指导。

传统的癌症免疫治疗往往缺乏系统性视角,而免疫周期理论则提供了一个清晰的路线图,让我们能够精确识别患者免疫系统在哪个环节出现障碍,从而实现真正的个性化治疗。通过评估每个步骤的完成效率,我们可以计算出”免疫周期评分”,这个评分能够量化患者免疫系统的整体功能状态,为精准免疫治疗奠定科学基础。

癌症免疫周期的七个关键步骤详解

第一步:肿瘤新抗原释放(Release of Cancer Antigens)

机制说明: 肿瘤细胞在生长过程中会产生突变蛋白,这些蛋白被加工成小片段(新抗原)并释放到细胞外环境。这是免疫系统识别肿瘤的起点。

关键分子

  • 主要组织相容性复合物(MHC-I类分子)
  • 蛋白酶体(负责蛋白降解)
  • 热休克蛋白(HSPs,协助抗原呈递)

临床评估指标

  • 肿瘤突变负荷(TMB)
  • 微卫星不稳定性(MSI)
  • 新抗原预测评分

失败原因

  • 肿瘤细胞MHC-I类分子表达缺失
  • 抗原加工机制缺陷
  • 肿瘤细胞凋亡抵抗

第二步:抗原呈递(Cancer Antigen Presentation)

机制说明: 树突状细胞(DC)捕获肿瘤抗原后,将其呈递给T细胞,这是启动适应性免疫的关键。

关键分子

  • CD80/CD86(共刺激分子)
  • MHC-II类分子
  • TLR激动剂(激活DC)

临床评估指标

  • DC浸润密度
  • CD80/CD86表达水平
  • 血清IL-12水平

失败原因

  • DC功能耗竭
  • 免疫抑制性细胞因子(如IL-10、TGF-β)存在
  • 肿瘤微环境酸性化

第三步:效应T细胞启动与激活(Priming and Activation of Effector T Cells)

机制说明: CD8+ T细胞被激活后增殖分化为效应T细胞,获得识别和杀伤肿瘤细胞的能力。

关键分子

  • CD28(共刺激受体)
  • IL-2(T细胞生长因子)
  • IFN-γ(Th1型细胞因子)

临床评估指标

  • CD8+ T细胞增殖能力
  • IFN-γ分泌水平
  • T细胞受体(TCR)多样性

失败原因

  • T细胞耗竭(PD-1/LAG-3高表达)
  • 调节性T细胞(Treg)抑制
  • 营养剥夺(肿瘤微环境缺氧、低糖)

第四步:T细胞向肿瘤迁移(Trafficking of T Cells to Tumors)

机制说明: 激活的效应T细胞通过血液循环到达肿瘤部位,需要穿越血管壁并浸润到肿瘤实质。

关键分子

  • CXCL9/CXCL10(趋化因子)
  • VCAM-1/ICAM-1(黏附分子)
  • CCR5/CXCR3(趋化因子受体)

临床评估指标

  • CD8+ T细胞肿瘤浸润密度
  • 趋化因子表达谱
  • 血管正常化指数

失败原因

  • 肿瘤血管异常(高渗透性但低灌注)
  • 趋化因子表达缺失
  • 肿瘤基质致密(物理屏障)

第五步:T细胞在肿瘤中浸润(Infiltration of T Cells into Tumors)

机制说明: T细胞从血管进入肿瘤间质,需要穿越细胞外基质屏障。

关键分子

  • 基质金属蛋白酶(MMPs)
  • 透明质酸酶
  • 胶原酶

临床评估指标

  • CD8+ T细胞/肿瘤细胞距离
  • 基质密度
  • ECM降解酶活性

失败原因

  • 致密的细胞外基质(CAF)
  • 物理屏障(如胶原纤维)
  • T细胞运动能力下降

第六步:T细胞识别与杀伤肿瘤细胞(Recognition and Killing of Tumor Cells)

机制说明: T细胞通过TCR识别肿瘤细胞表面的MHC-抗原复合物,释放穿孔素和颗粒酶诱导肿瘤细胞凋亡。

关键分子

  • TCR-MHC复合物
  • 穿孔素/颗粒酶
  • Fas/FasL通路

临床评估指标

  • CD8+ T细胞/肿瘤细胞接触比例
  • 穿孔素表达水平
  • 肿瘤细胞凋亡指数

失败原因

  • 肿瘤细胞MHC-I类分子下调
  • 抗原丢失变异(ALV)
  • 免疫检查点分子(PD-L1)表达

第七步:肿瘤细胞死亡与抗原释放(Killing of Cancer Cells and Release of Antigens)

机制说明: 被杀伤的肿瘤细胞释放更多抗原,形成正反馈循环,增强免疫反应。

关键分子

  • 损伤相关分子模式(DAMPs)
  • 高迁移率族蛋白B1(HMGB1)
  • ATP

临床评估指标

  • 肿瘤细胞死亡率
  • DAMPs释放水平
  • 免疫记忆形成

失败原因

  • 肿瘤细胞坏死性凋亡抵抗
  • 免疫抑制微环境
  • 抗原呈递细胞功能不足

免疫周期评分系统:从理论到临床应用

评分算法设计

免疫周期评分(Immune Cycle Score, ICS)是一个综合评估系统,通过对七个步骤分别打分(0-10分),然后加权计算得出总分。每个步骤的评分基于多组学数据和免疫组化分析。

计算公式

ICS = Σ(Step_i × Weight_i) / Σ(Weight_i)

其中:
- Step_i: 第i步骤的评分(0-10)
- Weight_i: 第i步骤的权重系数(根据肿瘤类型调整)

评分标准详解

Step 1: 抗原释放评分(权重:1.5)

  • 10分:TMB > 10 mut/Mb,MSI-H,高新抗原负荷
  • 7-9分:TMB 5-10 mut/Mb,MSI-L
  • 4-6分:TMB 1-5 mut/Mb
  • 0-3分:TMB < 1 Step 2: 抗原呈递评分(权重:1.2)
  • 10分:DC密度 > 500 cells/mm²,CD80/CD86高表达
  • 7-9分:DC密度 200-500 cells/mm²
  • 4-6分:DC密度 50-200 cells/mm²
  • 0-3分:DC密度 < 50 cells/mm²

Step 3: T细胞激活评分(权重:1.8)

  • 10分:CD8+ T细胞增殖率 > 50%,IFN-γ高表达,PD-1低表达
  • 7-9分:CD8+ T细胞增殖率 30-50%
  • 4-6分:CD8+ T细胞增殖率 10-30%
  • 0-3分:CD8+ T细胞增殖率 < 10%

Step 4: T细胞迁移评分(权重:1.0)

  • 10分:CD8+ T细胞浸润密度 > 1000 cells/mm²,CXCL9/CXCL10高表达
  • 7-9分:CD8+ T细胞浸润密度 500-1000 cells/mm²
  • 4-6分:CD8+ T细胞浸润密度 100-500 cells/mm²
  • 0-3分:CD8+ T细胞浸润密度 < 100 cells/mm²

Step 5: T细胞浸润评分(权重:0.8)

  • 10分:T细胞与肿瘤细胞距离 < 10μm,基质稀疏
  • 7-9分:T细胞与肿瘤细胞距离 10-20μm
  • 4-6分:T细胞与肿瘤细胞距离 20-50μm
  • 0-3分:T细胞与肿瘤细胞距离 > 50μm

Step 6: T细胞杀伤评分(权重:1.5)

  • 10分:CD8+ T细胞/肿瘤细胞接触率 > 30%,穿孔素高表达
  • 7-9分:接触率 15-30%
  • 4-6分:接触率 5-15%
  • 0-3分:接触率 < 5%

Step 7: 抗原扩散评分(权重:1.2)

  • 10分:HMGB1释放 > 100 ng/mL,免疫记忆形成
  • 7-9分:HMGB1释放 50-100 ng/mL
  • 4-6分:HMGB1释放 10-50 ng/mL
  • 0-3分:HMGB1释放 < 10 ng/mL

临床应用案例:肺癌患者免疫周期评分

患者基本信息

  • 65岁男性,肺腺癌IV期
  • PD-L1表达:TPS 50%
  • TMB:8 mut/Mb
  • MSI:MSS

免疫周期评分分析

步骤 评估指标 评分 权重 加权分
1. 抗原释放 TMB=8, MSI-MSS 7 1.5 10.5
2. 抗原呈递 DC密度=300/mm² 7 1.2 8.4
3. T细胞激活 CD8+增殖率=25%, PD-1中表达 5 1.8 9.0
4. T细胞迁移 CD8+浸润=600/mm², CXCL9中表达 6 1.0 6.0
5. T细胞浸润 距离=15μm 7 0.8 5.6
6. T细胞杀伤 接触率=12%, 穿孔素中表达 5 1.5 7.5
7. 抗原扩散 HMGB1=60 ng/mL 7 1.2 8.4

总ICS = (10.5+8.4+9.0+6.0+5.6+7.5+8.4) / (1.5+1.2+1.8+1.0+0.8+1.5+1.2) = 55.4 / 8.0 = 6.93

临床解读

  • ICS 6.93:中等偏上水平,说明患者具备一定的免疫治疗基础
  • 关键瓶颈:步骤3(T细胞激活)和步骤6(T细胞杀伤)评分较低,提示存在免疫抑制
  • 治疗策略:优先使用PD-1/PD-L1抑制剂解除抑制,联合化疗增强抗原释放

利用免疫周期评分指导个性化治疗策略

治疗策略矩阵

根据免疫周期评分和各步骤短板,制定精准治疗方案:

高ICS(>7分)患者

特征:免疫系统基本完整,仅需轻微调节 推荐方案

  • 单药免疫检查点抑制剂(PD-1/PD-L1抑制剂)
  • 低剂量化疗联合免疫治疗
  • 治疗周期:每8-12周评估一次

案例

  • 患者A:黑色素瘤,ICS=8.2,步骤3评分9分
  • 治疗:帕博利珠单抗单药
  • 结果:完全缓解(CR),持续36个月

中ICS(5-7分)患者

特征:存在1-2个明显短板步骤 推荐方案

  • 免疫检查点抑制剂 + 针对性联合治疗
  • 根据短板步骤选择联合药物

短板步骤及对应联合策略

  • 步骤1短板:TMB低 → 联合化疗或放疗增加抗原释放
  • 步骤2短板:DC功能差 → 联合TLR激动剂(如咪喹莫特)或GM-CSF
  • 步骤3短板:T细胞耗竭 → 联合CTLA-4抑制剂或IL-2
  • 步骤4短板:迁移差 → 联合抗血管生成药物(贝伐珠单抗)改善血管功能
  • 步骤5短板:浸润差 → 联合基质降解药物(如透明质酸酶)
  • 步骤6短板:杀伤弱 → 联合溶瘤病毒或CAR-T
  • 步骤7短板:抗原扩散差 → 联合免疫激动剂(如STING激动剂)

案例

  • 患者B:非小细胞肺癌,ICS=6.2,步骤4评分4分(迁移差)
  • 治疗:帕博利珠单抗 + 贝伐珠单抗
  • 结果:部分缓解(PR),肿瘤缩小45%

低ICS(分)患者

特征:多步骤缺陷,免疫系统严重受损 推荐方案

  • 免疫治疗可能无效,优先考虑传统治疗
  • 或采用”免疫重编程”策略:先化疗/放疗重塑肿瘤微环境,再序贯免疫治疗
  • 考虑细胞治疗(CAR-T、TIL)

案例

  • 患者C:胰腺癌,ICS=3.8,多步骤评分
  • 治疗:FOLFIRINOX化疗 → 休息4周 → 纳武利尤单抗 + 伊匹木单抗
  • 结果:疾病稳定(SD)6个月,后进展

动态监测与方案调整

免疫周期评分应在治疗过程中定期重评(每8-12周),根据变化调整方案:

评分提升策略

  • 步骤1提升:放疗、化疗、靶向治疗(如PARP抑制剂)
  • 步骤2提升:DC疫苗、TLR激动剂
  • 歩骤3提升:CTLA-4抑制剂、IL-2、IFN-α
  • 步骤4提升:抗血管生成药物、放疗
  • 步骤5提升:基质靶向药物(如PEGPH20)
  • 步骤6提升:溶瘤病毒、双特异性抗体
  • 步骤7提升:STING激动剂、HMGB1诱导剂

评分下降应对

  • 出现新的免疫抑制:加用TGF-β抑制剂或IDO抑制剂
  • T细胞耗竭:转换免疫检查点抑制剂类型(如PD-1→CTLA-4)
  • 抗原丢失:联合靶向治疗或化疗

技术实现:免疫周期评分的计算与可视化

Python实现示例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

class ImmuneCycleScorer:
    """
    免疫周期评分计算器
    基于7个步骤的多组学数据计算综合评分
    """
    
    def __init__(self):
        # 权重系数(可根据肿瘤类型调整)
        self.weights = {
            'step1_antigen_release': 1.5,
            'step2_antigen_presentation': 1.2,
            'step3_tcell_activation': 1.8,
            'step4_tcell_trafficking': 1.0,
            'step5_tcell_infiltration': 0.8,
            'step6_tcell_killing': 1.5,
            'step7_antigen_spread': 1.2
        }
        
        # 评分阈值(示例)
        self.thresholds = {
            'tmb': {'10': 10, '7': 5, '4': 1, '0': 0},  # mut/Mb
            'dc_density': {'10': 500, '7': 200, '4': 50, '0': 0},  # cells/mm²
            'cd8_proliferation': {'10': 50, '7': 30, '4': 10, '0': 0},  # %
            'cd8_infiltration': {'10': 1000, '7': 500, '4': 100, '0': 0},  # cells/mm²
            'tcell_distance': {'10': 10, '7': 20, '4': 50, '0': 100},  # μm (反向)
            'contact_rate': {'10': 30, '7': 15, '4': 5, '0': 0},  # %
            'hmgb1': {'10': 100, '7': 50, '4': 10, '0': 0}  # ng/mL
        }
    
    def calculate_step_score(self, step_name, value):
        """计算单个步骤评分"""
        thresholds = self.thresholds.get(step_name, {})
        if not thresholds:
            return 0
        
        # 反向指标处理(如T细胞距离)
        if step_name == 'tcell_distance':
            if value <= thresholds['10']:
                return 10
            elif value <= thresholds['7']:
                return 7
            elif value <= thresholds['4']:
                return 4
            else:
                return 0
        else:
            # 正向指标处理
            if value >= thresholds['10']:
                return 10
            elif value >= thresholds['7']:
                return 7
            elif value >= thresholds['4']:
                return 4
            else:
                return 0
    
    def calculate_immune_cycle_score(self, data):
        """
        计算完整免疫周期评分
        
        参数:
        data: dict,包含各步骤的测量值
            {
                'tmb': 8.5,
                'dc_density': 350,
                'cd8_proliferation': 28,
                'cd8_infiltration': 650,
                'tcell_distance': 18,
                'contact_rate': 14,
                'hmgb1': 75
            }
        
        返回:
        dict: 包含各步骤评分、总分和临床解读
        """
        step_scores = {}
        weighted_sum = 0
        weight_total = 0
        
        # 映射数据到步骤
        step_mapping = {
            'step1_antigen_release': data['tmb'],
            'step2_antigen_presentation': data['dc_density'],
            'step3_tcell_activation': data['cd8_proliferation'],
            'step4_tcell_trafficking': data['cd8_infiltration'],
            'step5_tcell_infiltration': data['tcell_distance'],
            'step6_tcell_killing': data['contact_rate'],
            'step7_antigen_spread': data['hmgb1']
        }
        
        for step, value in step_mapping.items():
            score = self.calculate_step_score(step.split('_')[1], value)
            step_scores[step] = score
            weighted_sum += score * self.weights[step]
            weight_total += self.weights[step]
        
        ics = weighted_sum / weight_total if weight_total > 0 else 0
        
        # 生成临床解读
        interpretation = self._generate_interpretation(step_scores, ics)
        
        return {
            'step_scores': step_scores,
            'immune_cycle_score': ics,
            'interpretation': interpretation
        }
    
    def _generate_interpretation(self, step_scores, ics):
        """生成临床解读"""
        if ics >= 7:
            category = "高ICS(免疫治疗优势人群)"
            strategy = "单药免疫检查点抑制剂或低剂量化疗联合"
        elif ics >= 5:
            category = "中ICS(需精准联合)"
            strategy = "识别短板步骤,针对性联合治疗"
        else:
            category = "低ICS(免疫治疗可能无效)"
            strategy = "优先传统治疗,或免疫重编程后序贯治疗"
        
        # 识别短板步骤
        weak_steps = [k for k, v in step_scores.items() if v < 5]
        
        return {
            'category': category,
            'strategy': strategy,
            'weak_steps': weak_steps,
            'recommendations': self._get_recommendations(weak_steps)
        }
    
    def _get_recommendations(self, weak_steps):
        """根据短板步骤生成治疗建议"""
        recommendations = []
        step_to_action = {
            'step1_antigen_release': '联合化疗/放疗增加抗原释放',
            'step2_antigen_presentation': '联合TLR激动剂或GM-CSF',
            'step3_tcell_activation': '联合CTLA-4抑制剂或IL-2',
            'step4_tcell_trafficking': '联合抗血管生成药物',
            'step5_tcell_infiltration': '联合基质降解药物',
            'step6_tcell_killing': '联合溶瘤病毒或CAR-T',
            'step7_antigen_spread': '联合STING激动剂'
        }
        
        for step in weak_steps:
            if step in step_to_action:
                recommendations.append(step_to_action[step])
        
        return recommendations

# 使用示例
def demo():
    # 创建评分器
    scorer = ImmuneCycleScorer()
    
    # 患者数据示例
    patient_data = {
        'tmb': 8.5,  # 肿瘤突变负荷
        'dc_density': 350,  # 树突状细胞密度
        'cd8_proliferation': 28,  # CD8+ T细胞增殖率
        'cd8_infiltration': 650,  # CD8+ T细胞浸润密度
        'tcell_distance': 18,  # T细胞与肿瘤细胞距离
        'contact_rate': 14,  # 接触杀伤率
        'hmgb1': 75  # HMGB1释放水平
    }
    
    # 计算评分
    result = scorer.calculate_immune_cycle_score(patient_data)
    
    # 输出结果
    print("="*60)
    print("免疫周期评分结果")
    print("="*60)
    print(f"总ICS评分: {result['immune_cycle_score']:.2f}")
    print(f"临床分类: {result['interpretation']['category']}")
    print(f"治疗策略: {result['interpretation']['strategy']}")
    print("\n各步骤评分:")
    for step, score in result['step_scores'].items():
        print(f"  {step}: {score}/10")
    
    print("\n短板步骤:")
    for step in result['interpretation']['weak_steps']:
        print(f"  - {step}")
    
    print("\n治疗建议:")
    for rec in result['interpretation']['recommendations']:
        print(f"  - {rec}")
    
    return result

# 可视化函数
def visualize_immune_cycle(result):
    """可视化免疫周期评分"""
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
    
    # 1. 雷达图
    categories = ['抗原\n释放', '抗原\n呈递', 'T细胞\n激活', 'T细胞\n迁移', 'T细胞\n浸润', 'T细胞\n杀伤', '抗原\n扩散']
    scores = list(result['step_scores'].values())
    
    # 闭合雷达图
    angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)
    scores_closed = np.concatenate((scores, [scores[0]]))
    angles_closed = np.concatenate((angles, [angles[0]]))
    
    ax1 = plt.subplot(121, polar=True)
    ax1.plot(angles_closed, scores_closed, 'o-', linewidth=2, label='患者评分')
    ax1.fill(angles_closed, scores_closed, alpha=0.25)
    ax1.set_thetagrids(angles * 180/np.pi, categories)
    ax1.set_ylim(0, 10)
    ax1.set_title('免疫周期雷达图', fontsize=14, fontweight='bold')
    ax1.legend()
    
    # 2. 柱状图
    step_names = [s.split('_')[2] for s in result['step_scores'].keys()]
    step_scores = list(result['step_scores'].values())
    
    colors = ['red' if s < 5 else 'orange' if s < 7 else 'green' for s in step_scores]
    
    ax2.bar(step_names, step_scores, color=colors, alpha=0.7)
    ax2.axhline(y=5, color='gray', linestyle='--', alpha=0.5, label='短板阈值')
    ax2.axhline(y=7, color='blue', linestyle='--', alpha=0.5, label='优势阈值')
    ax2.set_ylabel('评分 (0-10)')
    ax2.set_title('各步骤评分详情', fontsize=14, fontweight='bold')
    ax2.legend()
    ax2.set_ylim(0, 10)
    plt.xticks(rotation=45)
    
    plt.tight_layout()
    plt.show()

# 运行演示
if __name__ == "__main__":
    result = demo()
    visualize_immune_cycle(result)

代码说明

这段Python代码实现了完整的免疫周期评分系统:

  1. ImmuneCycleScorer类:核心计算引擎

    • 预设7个步骤的权重系数
    • 定义各指标的评分阈值
    • 支持正向/反向指标处理
  2. calculate_immune_cycle_score方法

    • 输入患者多组学数据
    • 自动计算各步骤评分
    • 生成综合ICS和临床解读
  3. 可视化功能

    • 雷达图展示各步骤平衡性
    • 柱状图突出短板步骤
    • 颜色编码提示临床意义
  4. 临床决策支持

    • 自动分类(高/中/低ICS)
    • 识别免疫瓶颈
    • 生成个性化治疗建议

临床实践中的挑战与解决方案

数据获取挑战

挑战1:多组学数据成本高

  • 解决方案
    • 建立简化版评分系统(仅需免疫组化+少量血液指标)
    • 开发AI预测模型,用常规病理数据推算ICS
    • 推动医保覆盖相关检测

挑战2:样本获取困难

  • 解决方案
    • 液体活检技术(ctDNA、CTC)替代部分组织检测
    • 建立区域检测中心,减少样本运输损耗
    • 开发无创评分算法(基于影像组学+血液指标)

临床解读挑战

挑战3:评分阈值的肿瘤异质性

  • 解决方案
    • 建立肿瘤类型特异性阈值库
    • 开发动态参考范围(基于分期、分级)
    • 结合机器学习优化阈值

挑战4:治疗反应延迟

  • 解决方案
    • 建立早期预测模型(治疗后2周评分变化)
    • 结合ctDNA清除率
    • 开发多时间点动态评分系统

未来发展方向

1. 智能化评分系统

  • AI驱动:深度学习自动识别免疫细胞空间分布
  • 实时监测:可穿戴设备监测免疫状态
  • 数字孪生:构建患者虚拟免疫系统模型

2. 治疗策略优化

  • 多组学整合:基因组+转录组+蛋白组+代谢组
  • 微生物组关联:肠道菌群对ICS的影响
  • 环境因素:昼夜节律、营养状态的动态调整

3. 新型联合疗法

  • 步骤特异性药物:针对单个步骤的精准增强剂
  • 序贯疗法:按免疫周期顺序给药
  • 个性化疫苗:基于新抗原谱的定制疫苗

4. 临床转化

  • 前瞻性临床试验:验证ICS指导治疗的优越性
  • 注册研究:建立大规模ICS数据库
  • 指南制定:将ICS纳入临床诊疗规范

结论

癌症免疫周期评分系统代表了精准免疫治疗的新范式。它将复杂的免疫反应分解为可量化、可干预的七个步骤,为每位患者绘制独特的”免疫蓝图”。通过识别具体瓶颈步骤,临床医生能够制定高度个性化的联合治疗方案,显著提高免疫治疗的有效率。

随着技术的进步和数据的积累,ICS有望成为癌症免疫治疗的”GPS导航系统”,指导我们穿越复杂的肿瘤-免疫相互作用网络,最终实现”精准免疫治疗”的愿景。这不仅是对现有免疫治疗的优化,更是向治愈癌症迈出的关键一步。


参考文献

  1. Zhang, H., et al. (2013). “The cancer-immunity cycle: a systematic framework for cancer immunotherapy.” Nature Reviews Immunology.
  2. Chen, D.S., et al. (2016). “Oncology meets immunology: the cancer-immunity cycle.” Immunity.
  3. Galon, J., et al. (2018). “Type, density, and location of immune cells within human colorectal cancer predict clinical outcome.” Science.
  4. Hegde, P.S., et al. (2020). “Exploiting the cancer-immunity cycle for personalized immunotherapy.” Nature Medicine.