众说周知,最常用的比对软件 bwa 产生的结果文件是 sam 格式,具体格式可以参考 sam 。
其中文件的主体便是比对的结果,而头文件往往是我们最容易忽视的地方,尤其踩过太多的坑,特来解释和记录其 header。
header 中最常见的有3个:@SQ @RG @PG ,@SQ 用来记录参考序列的信息,@RG 用来记录样本的信息,@PG 用来记录 bwa 程序信息。
@SQ 和 @PG 在 bwa 比对之后就会在 sam 文件中存在。而 @RG 则需要自己在 bwa mem 比对的命令中使用 -R 参数来添加。@RG 这个信息对于我们后续对比对数据进行错误率分析和Mark duplicate时非常重要 。
如果在 bwa 比对期间没有选择 -R 参数,可以 picard 中 AddOrReplaceReadGroups 对 sam 或bam 文件进行加头处理。
1 | -R '@RG\tID:sample\tLB:sample\tSM:sample\tPL:ILLUMINA' #bwa mem @RG头格式 |
1 | bwa mem -t 4 genome.fa ./samples/A.fastq >A.sam #非常普通的SE数据bwa比对 |
上面提到在缺少头文件的前提下是无法将 sam 转为 bam 的,更加无进行 bam 文件排序。但是如果我们使用 picard 这个问题就可以解决了。
1 | java -Xmx5g -Djava.io.tmpdir=./tmp -jar ../picard-tools-1.117/SortSam.jar INPUT=A_sort.sam OUTPUT=A_sort.bam SORT_ORDER=coordinate VALIDATION_STRINGENCY=SILENT |
picard 的 SortSam.jar 可以直接对没有 header 的 sam 文件排序并转为 bam 文件。
另外,samtools 可以为sam或者bam文件加上 header 中的 @SQ:
1 | samtools view -Sb -T genome.fa sample_no_header.sam >sample_with_header.bam #使用 -T 参考序列加header(@SQ) |