Skip to content

数据准备与输入要求

作者: SeekGene
时长: 6 分钟
字数: 1.3k 字
更新: 2026-03-05
阅读: 0 次

在开始分析之前,请根据您当前持有的数据类型,选择对应的处理流程。

场景一:已有 CopyKit 结果文件 (RDS)

如果您已经拥有经 CopyKit runVarbin 处理生成的 .rds 文件(如下所示),可直接跳过本章节,进入后续分析环节

tree
./
├── copykit_MDA_cs_1Mb.rds      # 1Mb 分辨率结果
├── copykit_MDA_cs_500kb.rds    # 500kb 分辨率结果
└── copykit_MDA_cs_200kb.rds    # 220kb 分辨率结果

场景二:已有单细胞 BAM 文件

如果您持有由 SeekSoulMethyl 流程生成的单细胞 BAM 文件(通常位于 xxx/xxx_methy/step3/split_bams/merged 目录),文件结构如下:

tree
./merged/
├── AAAGAAGAAGAGTTTAG.bam
├── AAAGAAGAAGGAGTGGT.bam
├── ...
└── TTTGGATATTTGTGAGG.bam

后续步骤:您需要执行 阶段二:BAM 文件预处理,进行 Flag 矫正和去重。

场景三:仅有 Bulk 水平 BAM 文件

如果您仅有未拆分的“Bulk”水平 BAM 文件(即包含所有细胞 reads 的合并文件),文件结构如下:

tree
./bismark/
├── MDA_cs_forward_AAAG_1_bismark_bt2_pe.bam
├── MDA_cs_forward_AAAT_1_bismark_bt2_pe.bam
├── ...
└── MDA_cs_reverse_TTTG_1_bismark_bt2_pe.bam

后续步骤:您需要先执行 阶段一:单细胞 BAM 拆分,再进行 阶段二:BAM 文件预处理


3. 数据处理流程

阶段一:单细胞 BAM 拆分 (仅适用于场景三)

我们需要将 Bulk BAM 文件按细胞 Barcode 拆分为独立的单细胞 BAM 文件。

拆分步骤包含三步:

  • 1)将每个 BAM 按照 read 名称进行排序(name-sort)
  • 2)从每个排序后的 BAM 文件中拆分出单细胞 BAM 文件
  • 3)合并单个细胞的 forward 和 reverse BAM 文件

工具准备

操作步骤: 使用 batch_single_cell_bam.py 脚本进行批量拆分。

shell
# 示例命令
python batch_single_cell_bam.py \
  --assay_type DD-MET5 \
  --bam_dir /path/to/bismark/ \
  --outdir /path/to/output/ \
  --gex_barcodes /path/to/filtered_feature_bc_matrix/barcodes.tsv.gz \
  --threads 4 \
  --parallel_jobs 8

# 参数说明:
# --assay_type      : 测序类型 (DD-MET5 或 DD-MET3)
# --bam_dir         : 输入的 Bulk BAM 文件目录
# --outdir          : 输出目录
# --gex_barcodes    : 对应的 RNA Barcode 文件
# --parallel_jobs   : 并行任务数 (建议设为 8-16,视服务器配置而定)
# --cbcsv           : (仅 DD-MET3) 指定白名单文件路径

执行完成后,单细胞 BAM 文件将生成于 /path/to/output/split_bam 目录下。

阶段二:BAM 文件预处理 (Flag 调整与去重)

CNV 分析对 Read 计数非常敏感,因此必须确保输入数据的准确性。本阶段包含两个关键步骤:Flag 矫正UMI 去重

工具准备

步骤 1:调整 Reads 的 Flag 值 (Flag Correction)

背景: Bismark 比对工具在处理 OT/OB(原始链)和 CTOT/CTOB(互补链)时,会自动调换 CTOT/CTOB reads 的 Flag 值。具体表现为 R1 被标记为 "second in pair",而 R2 被标记为 "first in pair"。 为了确保后续去重工具(如 umi_tools)能正确识别 R1 和 R2,我们需要将这些 Flag 恢复正常。

操作命令

shell
# 配置参数
outdir="./"
input_dir="/path/to/step3/split_bams/merged/"  # 单细胞 BAM 所在目录
workers=16                                      # 并行数

# 1. 生成文件列表
find -L "$input_dir" -name "*.bam" | sort > "$outdir/bam_list.txt"

# 2. 创建输出目录
mkdir -p $outdir/flag_reverse/

# 3. 执行 Flag 矫正
python step1_swap_flags_on_reverse.py \
  --bam_list $outdir/bam_list.txt \
  --out_dir $outdir/flag_reverse \
  --max_workers $workers

耗时参考 基于 24 核心服务器测试:处理 3,641 个单细胞 BAM 文件约需 30~40 分钟

步骤 2:UMI 去重 (UMI Deduplication)

背景: 单细胞甲基化文库构建过程中引入了随机打断和 PCR 扩增。为了消除 PCR 偏好性对 CNV 估计的影响,我们需要进行去重。 由于同一个文库片段末端是随机打断的,我们采用 R1 比对位置 + UMI 序列 作为去重的唯一标识(Unique Identifier)。

操作命令: 使用 umi_tools 进行去重,关键参数为 --extract-umi-method tag --umi-tag UR --paired --ignore-tlen

安装 umi_tools: 如果您的环境中尚未安装 umi_tools,可以使用pip/conda/micromamba进行安装:

shell
# micromamba 安装
micromamba install -c bioconda umi_tools
# conda 安装
# conda install -c bioconda umi_tools
# pip 安装
# pip install umi_tools
shell
# 1. 生成矫正后的 BAM 列表
find "$outdir/flag_reverse" -name "*.bam" | sort > "$outdir/swapflags_bam_list.txt"

# 2. 创建输出目录
mkdir -p $outdir/umi_tools_swapflags_dedup_bam/

# 3. 执行去重
python step2_umi_tools_dedup.py \
  --bam_list $outdir/swapflags_bam_list.txt \
  --out_dir $outdir/umi_tools_swapflags_dedup_bam/ \
  --max_workers $workers \
  --skip_existing

耗时参考 基于 24 核心服务器测试:处理 3,641 个单细胞 BAM 文件约需 4 小时

最终结果: 去重后的 BAM 文件将存储在 $outdir/umi_tools_swapflags_dedup_bam/ 目录下。这些文件即为 CopyKit 分析的最终输入文件。

0 条评论·0 条回复