minimap2 + samtools 比对参考序列,并提取un
一、minimap2
Manual Reference Pages - minimap2 (1)
- Long-read alignment with CIGAR:
minimap2 -a [-x preset] target.mmi query.fa > output.sam
minimap2 -c [-H] [-k kmer] [-w miniWinSize] [...] target.fa query.fa > output.paf
minimap2 将query序列比对到参考序列上,
-
${sample}_contig.fa
: target 参考序列,可以是Megahit组装后的contigs或者参考基因组 -
${sample}_R[12].fq
: query 查询序列,paired-end则要指定R1和R2 -
-t
: Number of threads [3]. -
-a
: 生成CIGAR, 并以SAM格式输出比对结果(minimap2默认输出PAF格式的文件) -
-x [STR]
: 预设选项。部分选项:-
-x map-ont
: 默认选项, 将noisy long reads(~10% error rate)比对到参考基因组 -
-x sr
: Short single-end reads without splicing.
-
-
-o FILE
Output alignments to FILE [stdout].
$minimap2 -ax sr \ # 短reads比对模式;以SAM格式输出比对结果
-t ${threads} \ # 设置CPU线程数(threads >= 3)
3_assembly/${sample}_contig.fa \ # target.fa
${sample}_R1.fq \ # query.R1.fq
${sample}_R2.fq \ # query.R2.fq
-o ${sample}_aln.sam # minimap2比对结果文件
二、samtools view
sam转bam格式
# 将sam文件转换成bam文件
${samtools} view -bS abc.sam > abc.bam
# 等价于
${samtools} view -b -S abc.sam -o abc.bam
-
-b
: output BAM。默认下输出是 SAM 格式文件,该参数设置输出 BAM 格式 -
-S
: input is SAM。默认下输入是 BAM 文件,若是输入是 SAM 文件,则最好加该参数,否则有时候会报错。 -
-o FILE
output file name [stdout]
1. 从bam中提取mapped/unmapped 的序列信息
- 从比对结果文件
${sample}_aln.bam
中提取匹配上的序列信息,并保存到${sample}_mapped.bam
文件
${samtools} view -bF 4 ${sample}_aln.bam > ${sample}_mapped.bam
- 从比对结果文件
${sample}_aln.bam
中提取没有匹配上的序列信息,并保存到${sample}_unmapped.bam
文件
${samtools} view -bf 4 ${sample}_aln.bam > ${sample}_unmapped.bam
- 从比对结果文件
${sample}_aln.bam
中提取没有read1
和read2
均匹配上的序列信息,并保存到${sample}_all.mapped.bam
文件
${samtools} view -bF 12 ${sample}_aln.bam > ${sample}_all.mapped.bam
2. 给予指定的reference文件,将sam转化为bam
sam是序列比对厚度输出格式,包括头部信息(以@开头)和比对信息两部分组成
- Header 信息
-
@HD VN:1.0 SO:unsorted
【排序类型】
头部区第一行:VN是格式版本;SO表示比对排序的类型,有unknown(default),unsorted,queryname和coordinate几种。samtools软件在进行行排序后不能自动更新bam文件的SO值,而picard却可以。 -
@SQ SN:contig1 LN:9401
【参考序列ID及其长度】
参考序列名,这些参考序列决定了比对结果sort的顺序,SN是参考序列名;LN是参考序列长度;每个参考序列为一行。
例如:@SQ SN:NC_000067.6 LN:195471971 -
@RG ID:sample01
【样品基本信息】
Read Group。1个sample的测序结果为1个Read Group;该sample可以有多个library的测序结果,可以利用bwa mem -R 加上去这些信息。
例如:@RG ID:ZX1_ID SM:ZX1 LB:PE400 PU:Illumina PL:Miseq
ID:样品的ID号 SM:样品名 LB:文库名 PU:测序以 PL:测序平台
这些信息可以在形成sam文件时加入,ID是必须要有的后面是否添加看分析要求 -
@PG ID:bowtie2 PN:bowtie2 VN:2.0.0-beta7
【比对所使用的软件及版本】
例如:@PG ID:bwa PN:bwa VN:0.7.12-r1039 CL:bwa sampe -a 400 -f ZX1.sam -r @RG ID:ZX1_ID SM:ZX1 LB:PE400 PU:Illumina PL:Miseq …/0_Reference/Reference_Sequence.fa ZX_HQ_clean_R1.fq.sai ZX_HQ_clean_R2.fq.sai …/2_HQData/ZX_HQ_clean_R1.fq …/2_HQData/ZX_HQ_clean_R2.fq
这里的ID是bwa,PN是bwa,VN是0.7.12-r1039版本。CL可以认为是运行程序@RG是上面RG表示的内容,后面是程序内容,这里的@GR内容是可以自己在运行程序是加入的
-
sam转bam
(1) sam文件的header包含@SQ
,即sam中包含了reference的信息。
${samtools} view -bS aln.sam > aln.bam
(2) sam文件不包含header或者header不包含@SQ
,即sam中不包含了reference的信息,此时需要提供生成sam文件时使用的reference文件。
${samtools} faidx ref.fa # 建索引
${samtools} view -bS -t ref.fa.fai aln.sam > aln.bam # 输出转换结果
# 或者
${samtools} view -bS -T ref.fa aln.sam > aln.bam # 自动建索引,并输出转换结果
ref: 1. 生信:2:sam格式文件解读
3. 从上面minimap2的比对输出文件${sample}_aln.sam
文件中,提取未匹配的文件,并保存为bam文件
${samtools} view -bS \
-T 3_assembly/${sample}_contig.fa \
-f 4 \
${sample}_aln.sam
> ${sample}_aln.bam
三、samtools fastq
samtools fastq [options] in.bam
将输入的bam文件转化为fastq文件,并将结果保存至指定的输出-1 -2 -o -0-s
中.
其对序列的分类依据是序列末尾的READ1 flag
和READ2 flag
, flag有3类:
- 1 : Only READ1 is set.
- 2 : Only READ2 is set.
- 0 : Either both READ1 and READ2 are set; or neither is set.
对于PE测序reads, 同时指定-1 R1.fq -2 R2.fq -s singleton.fq
时,samtools会将 flag1和flag2配对的序列分别输出到-1 -2
指定的文件,对于无法匹配的flag 1/2,全部的flag 0 都会保存到-s
指定的文件中。
refs: Manual page from samtools-1.15: samtools fastq
${samtools} fastq -n \
-1 3_assembly/${sample}_unmapped_R1.fq.gz \
-2 3_assembly/${sample}_unmapped_R2.fq.gz \
-s 3_assembly/${sample}_unmapped_singleton.fq.gz \
${sample}_aln.bam
四、samtools 给予管道(|
)的输入输出 -
samtools旨在处理数据流(stream),
它可以将-
作为管道中的标准输入文件(stdin
);
也可以将-
作为管道中的标准输出文件(stdout
).
全部代码
threads=12
sample=A01
minimap2=/software/miniconda2/envs/metadenovo/bin/minimap2
samtools=/software/samtools/samtools-1.8/bin/samtools
## mapping
$minimap2 -ax sr -t ${threads} \
3_assembly/${sample}_contig.fa \
${sample}_R1.fq \
${sample}_R2.fq | \
${samtools} view -bS -T 3_assembly/${sample}_contig.fa \
-f 4 - | \
${samtools} fastq -n \
-1 3_assembly/${sample}_unmapped_R1.fq.gz \
-2 3_assembly/${sample}_unmapped_R2.fq.gz \
-s 3_assembly/${sample}_unmapped_singleton.fq.gz -