跳转至

循环肿瘤细胞 CTC 分析


一句话说明

CTC(循环肿瘤细胞)是从肿瘤脱落进入血液的完整肿瘤细胞,通过特殊方法从血液中捕获后做单细胞测序,可以研究肿瘤转移机制和实时监控病情变化。


核心知识点

1. CTC vs ctDNA

特征CTCctDNA
本质完整的肿瘤细胞DNA 碎片
数量极少(1-10个/mL 血液)相对多
信息量基因组+转录组+蛋白仅基因组
捕获难度高(需专门设备)低(常规提取)
分析方法单细胞测序深度测序
优势活细胞功能研究灵敏度高

白话:ctDNA 是肿瘤细胞死后留下的"灰烬"(DNA碎片),CTC 是逃出肿瘤的"活兵"

2. CTC 捕获技术

  • CellSearch:FDA 批准的 CTC 计数系统(基于 EpCAM 抗体)
  • 微流控芯片:利用细胞大小/变形能力分选
  • 免疫磁珠法:抗体-磁珠捕获
  • DEPArray:单细胞分离到独立管中用于测序
  • FACS 分选:荧光标记后流式分选

3. CTC 测序分析

  • 单细胞全基因组扩增(WGA):MDA、MALBAC、PicoPLEX
  • 扩增偏差:WGA 不均匀扩增导致假 CNV 和等位基因 dropout
  • CNV 分析:最可靠的 CTC 分析类型(对扩增偏差相对不敏感)
  • SNV 检测:受 WGA 噪音影响大,需要谨慎过滤

4. 临床应用

  • 预后评估:CTC 计数 >= 5/7.5mL(乳腺癌、前列腺癌、结直肠癌预后差)
  • 疗效监测:治疗过程中 CTC 数量变化
  • 转移机制研究:分析转移相关基因表达
  • 耐药机制:检测 CTC 中的耐药突变

实战代码

# === CTC 单细胞 CNV 分析 ===
import numpy as np                     # 数值计算
import pandas as pd                    # 数据处理
import matplotlib.pyplot as plt        # 绑图

def ctc_cnv_analysis(bam_path, bin_size=500000):
    """
    CTC 单细胞 CNV 分析(简化版)
    基于固定窗口的读段计数方法
    """
    import pysam                       # BAM处理

    bam = pysam.AlignmentFile(bam_path, "rb")

    # 按固定窗口统计读段数
    bin_counts = {}                    # 存储每个bin的计数
    for read in bam:                   # 遍历读段
        if read.mapping_quality >= 20 and not read.is_duplicate:
            chrom = read.reference_name  # 染色体
            pos = read.reference_start   # 位置
            bin_id = (chrom, pos // bin_size * bin_size)  # bin标识
            bin_counts[bin_id] = bin_counts.get(bin_id, 0) + 1

    # 转为 DataFrame
    df = pd.DataFrame([
        {"chrom": k[0], "start": k[1], "count": v}
        for k, v in bin_counts.items()
    ])

    # GC 校正(简化版)
    median_count = df["count"].median()  # 中位数
    df["ratio"] = df["count"] / median_count  # 比值
    df["log2"] = np.log2(df["ratio"] + 0.01)  # log2变换

    return df

# 可视化 CTC 全基因组 CNV
def plot_ctc_cnv(cnv_df, title="CTC CNV Profile"):
    """绘制 CTC 单细胞 CNV 图"""
    # 按染色体排序
    chrom_order = [f"chr{i}" for i in range(1, 23)] + ["chrX"]
    cnv_df["chrom_idx"] = cnv_df["chrom"].map(
        {c: i for i, c in enumerate(chrom_order)})
    cnv_df = cnv_df.dropna(subset=["chrom_idx"])
    cnv_df = cnv_df.sort_values(["chrom_idx", "start"])

    # 绘图
    fig, ax = plt.subplots(figsize=(16, 4))
    x_pos = range(len(cnv_df))         # X坐标
    colors = ["steelblue" if i % 2 == 0 else "coral"
              for i in cnv_df["chrom_idx"].astype(int)]

    ax.scatter(x_pos, cnv_df["log2"],  # 散点图
               c=colors, s=1, alpha=0.5)
    ax.axhline(y=0, color="black", linewidth=0.5)     # 基线
    ax.axhline(y=0.58, color="red", linewidth=0.5, linestyle="--")  # 扩增
    ax.axhline(y=-1, color="blue", linewidth=0.5, linestyle="--")   # 缺失
    ax.set_ylabel("log2 ratio")
    ax.set_title(title)
    ax.set_ylim(-3, 3)                 # Y轴范围
    plt.tight_layout()
    plt.savefig("ctc_cnv.png", dpi=150)
# === CTC 单细胞 WGS 分析流程 ===

# 1. 单细胞扩增后的 FASTQ 质控
fastp -i CTC_R1.fq.gz -I CTC_R2.fq.gz \  # 输入
  -o clean_R1.fq.gz -O clean_R2.fq.gz \   # 输出
  --detect_adapter_for_pe                   # 自动检测接头

# 2. 比对到参考基因组
bwa mem -t 8 \                         # 8线程
  hg38.fa \                            # 参考基因组
  clean_R1.fq.gz clean_R2.fq.gz | \   # 输入
  samtools sort -o ctc.bam             # 排序输出

# 3. 去除 PCR 重复(WGA 产生大量重复)
picard MarkDuplicates \
  I=ctc.bam \                          # 输入
  O=ctc_dedup.bam \                    # 输出
  M=dup_metrics.txt \                  # 重复统计
  REMOVE_DUPLICATES=true               # 删除重复

# 4. 检查 WGA 覆盖均匀性
picard CollectWgsMetrics \
  I=ctc_dedup.bam \                    # 输入
  O=wgs_metrics.txt \                  # 输出
  R=hg38.fa                            # 参考基因组

# 5. 使用 Ginkgo 或 SCOPE 做单细胞 CNV
# Ginkgo 是专门为单细胞 CNV 设计的工具
# 在线版:http://qb.cshl.edu/ginkgo

# 6. 使用 CopywriteR 做 CNV 分析
# (R 脚本)
cat > run_cnv.R << 'RSCRIPT'
library(CopywriteR)                    # 单细胞CNV工具

# 运行 CopywriteR
CopywriteR(
  sample.control = data.frame(
    samples = "ctc_dedup.bam",         # CTC BAM
    controls = "bulk_normal.bam"       # 正常对照BAM
  ),
  destination.folder = "cnv_output/",  # 输出目录
  reference.folder = "ref_folder/",    # 参考文件夹
  bp.param = BiocParallel::MulticoreParam(workers = 4)
)
RSCRIPT

面试常问点

★ CTC 分析最大的技术挑战是什么?

参考答案:两大挑战:(1) 稀有性——每毫升血液中可能只有 1-10 个 CTC,混在几十亿个血细胞中(比"大海捞针"还难),需要非常高效的富集和分离技术;(2) 全基因组扩增(WGA)的偏差——单细胞的 DNA 量极少(~6 pg),必须扩增才能测序,但 WGA 会引入扩增偏差(某些区域过度扩增、某些区域丢失),导致 CNV 有噪音、SNV 有假阳性和等位基因丢失(allelic dropout)。所以 CTC 的 CNV 分析比 SNV 分析更可靠。

★ CTC 计数有什么临床意义?

参考答案:FDA 批准 CellSearch 系统用于转移性乳腺癌、前列腺癌和结直肠癌的 CTC 计数。以乳腺癌为例:治疗前 CTC >= 5 个/7.5mL 血液的患者预后显著差于 < 5 个的患者。治疗过程中 CTC 数量下降提示治疗有效,持续升高提示可能需要换方案。CTC 计数是独立的预后因素,和影像学评估互补。


速查卡片

问题答案
CTC 全称Circulating Tumor Cells
血液中数量极少(1-10个/mL)
捕获方法CellSearch, 微流控, FACS
WGA 方法MDA, MALBAC, PicoPLEX
最可靠分析CNV(对扩增偏差不敏感)
临床阈值>= 5 个/7.5mL(预后差)
vs ctDNA完整细胞 vs DNA碎片
CNV 工具Ginkgo, SCOPE, CopywriteR
主要挑战稀有性 + WGA偏差
FDA 设备CellSearch