bam格式转换为Fastq/Fasta格式
bam格式转换为Fastq/Fasta格式
- Samtools Fastq
- GATK SamToFastq
- Bedtools bamtofastq
举例说明,比如说我们现在有一个转录组比对文件D1_D1.sort.bam:
samtools view -H D1_D1.sort.bam | tail
@SQ SN:19 LN:58617616
@SQ SN:20 LN:64444167
@SQ SN:21 LN:46709983
@SQ SN:22 LN:50818468
@SQ SN:X LN:156040895
@SQ SN:Y LN:57227415
@SQ SN:MT LN:16569
@RG ID:D1_D1_D1 PL:illumina PU:D1 LB:D1 SM:D1 CN:BGI
@PG ID:bwa PN:bwa VN:0.7.10-r789 CL:/home/lixf/RNA_module_V1.0/Alignment/Alignment_BWA/bin/bwa mem -t 4 -a -R @RG\tID:D1_D1_D1\tPL:illumina\tPU:D1\tLB:D1\tSM:D1\tCN:BGI /data_center_11/Project/wenpp/RNA/01_RY20190826D002_RNAref/prepare/Homo_sapiens.GRCh38.dna.toplevel.fa /data_center_11/Project/wenpp/RNA/01_RY20190826D002_RNAref/01.deal_reads/process/Filter_SOAPnuke/D1/D1/D1_1.fq.gz /data_center_11/Project/wenpp/RNA/01_RY20190826D002_RNAref/01.deal_reads/process/Filter_SOAPnuke/D1/D1/D1_2.fq.gz
@PG ID:samtools PN:samtools PP:bwa VN:1.12 CL:samtools view -H D1_D1.sort.bam
从@PG可以看出来比对软件是BWA,这是一个与hg38 toplevel基因组序列比对后产生的,根据染色体上位置进行排序的BAM文件。那么如果我们要与不同的基因组序列进行比对,比如更换基因组序列的版本为hg19,就需要将BAM文件还原成原来的fastq文件,而从上述数据可以看出,原始测序应该是一个双端测序文件,那么我们应该转换后得到的是两个fastq文件。
Samtools Fastq
1. 重新根据read name进行排序
原本D1_D1.sort.bam文件的序列为:
samtools view D1_D1.sort.bam | head | cut -f 1,2
ST-E00600:147:HNTKYALXX:1:1144:13675:27524 337
ST-E00600:147:HNTKYALXX:1:2144:15700:30405 369
ST-E00600:147:HNTKYALXX:1:2124:6876:4977 321
ST-E00600:147:HNTKYALXX:1:2124:6876:4977 401
ST-E00600:147:HNTKYALXX:1:2361:24813:5415 337
ST-E00600:147:HNTKYALXX:1:2361:23267:4805 337
ST-E00600:147:HNTKYALXX:1:2240:12274:12759 97
ST-E00600:147:HNTKYALXX:1:2344:3260:11835 353
ST-E00600:147:HNTKYALXX:1:2375:15266:19476 417
ST-E00600:147:HNTKYALXX:1:1374:16694:4476 385
可以看到read name是没有规律的,因为这时BAM文件是按照reads在染色体上比对的位置排序的,这样就不方便转换,因为双端测序的reads应该是成对排列的。
因此,要先按照read name进行排序,根据定义,我们可以知道read name各部分的含义:
@ : 代表read name开头
ST-E00600 : 测序平台的编号
147 : Run的编号
HNTKYALXX : flow cell的编号
1 : lane的编号
1144 : Tile的编号
13675 : tile中所处cluster的x轴坐标
27524 : tile中所处cluster的x轴坐标
## 比对软件也可能在read name最后添加:1/:2代表来自哪一端的测序。
比如说bam中的这两条read:
ST-E00600:147:HNTKYALXX:1:2124:6876:4977 321
ST-E00600:147:HNTKYALXX:1:2124:6876:4977 401
第二列的数字代表bitwise flags,标记该read的比对情况。可以用samtools flags
进行换算。
samtools flags 321
0x141 321 PAIRED,READ1,SECONDARY
samtools flags 401
0x191 401 PAIRED,REVERSE,READ2,SECONDARY
这是什么意思呢?
代表第1条read是双端测序,属于R1端,而且不是primary alignment;
第2条read也是双端测序,Reverse表示比对到的是参考序列的负链,属于R2端,不是primary alignment。
回顾了以上的内容,我们就可以对bam文件进行重新排序:
samtools sort -n -@ $(nproc) -o D1.rn.sort.bam D1_D1.sort.bam
$(nproc)代表服务器可用的线程数,多线程处理会更快。
转换后的bam文件:
samtools view D1.rn.sort.bam| head | cut -f 1,2
ST-E00600:147:HNTKYALXX:1:1101:1036:18035 99
ST-E00600:147:HNTKYALXX:1:1101:1036:18035 147
ST-E00600:147:HNTKYALXX:1:1101:1036:18035 2195
ST-E00600:147:HNTKYALXX:1:1101:1036:18035 403
ST-E00600:147:HNTKYALXX:1:1101:1036:20948 83
ST-E00600:147:HNTKYALXX:1:1101:1036:20948 163
ST-E00600:147:HNTKYALXX:1:1101:1036:21042 83
ST-E00600:147:HNTKYALXX:1:1101:1036:21042 163
ST-E00600:147:HNTKYALXX:1:1101:1036:21637 83
ST-E00600:147:HNTKYALXX:1:1101:1036:21637 163
2. 转换为Fastq
samtools fastq -@ $(nproc) -1 D1_1.fq.gz -2 D1_2.fq.gz -s /dev/null -0 /dev/null D1.rn.sort.bam -c 9
-1 代表输出的R1端Fastq.gz文件名
-2 代表输出的R2端Fastq.gz文件名
-s singleton代表将无法找到mate pair的reads输出到文件,这里不需要,所以输出到/dev/null
-0 将bitwise flags中同时有READ1/READ2标记或缺乏任何READ1/READ2标记的reads输出到文件,这里不需要,所以输出到/dev/null
-c 如果输出的是fastq.gz,必须使用-c 选项,选择压缩级别,一般选择9,最高压缩
*比对软件某些情况下会将一端比对上,另一端无法比对上的reads保留到bam文件,这样的reads称为singleton。
3. 检查Fastq文件
最好检查转换来的Fastq文件是否格式正确,并且没有受到损坏
a. 是否有非@开头的identifier lines
zcat D1_1.fq.gz | awk 'NR%4==1 && $1!~/^@/ {print; print NR; exit}'
b. 压缩文件是否完整
gunzip -t D1_1.fq.gz
GATK SamToFastq
gatk SamToFastq --INPUT D1.rn.sort.bam --FASTQ D1_1.fq.gz --SECOND_END_FASTQ D1_2.fq.gz --TMP_DIR . --INCLUDE_NON_PRIMARY_ALIGNMENTS true --COMPRESSION_LEVEL 9
注意,GATK方法仅适用于无重复read name的bam文件,也就是说read name的后缀中必须要标明:1/:2,不然GATK会报错。也就是说D1.rn.sort.bam其实是不能用这个方法的。
bedtools bamtofastq
bedtools bamtofastq -i D1.rn.sort.bam -fq D1.1.fq -fq2 D1.2.fq 2>>bamtofastq.log
注意,bedtools方法在singleton的reads中会报错
*****WARNING: Query ST-E00600:147:HNTKYALXX:1:1272:31566:33771 is marked as paired, but its mate does not occur next to it in your BAM file. Skipping.
也就是说它只会保留paired的reads,因此生成的fastq文件可能会比应有的大小要小,而且R1端与R2端的大小也可能不一样。
bam格式转换为Fastq/Fasta格式相关推荐
- DateTime时间格式转换为Unix时间戳格式
// DateTime时间格式转换为Unix时间戳格式 public int ConvertDateTimeInt(System.DateTime time) { System.DateTime st ...
- 【ffmpeg】windows上用命令行批量将.flac格式转换为.wav等格式
windows上用命令行批量将.flac格式转换为.wav等格式 需先安装ffmpeg(用于音视频处理)和git(用于运行sh文件),然后执行脚本 参考资料如下: 1 windows安装ffmpeg并 ...
- Web后端servlet—使用servlet的Part接口实现单文件多文件上传、以及日期格式转换为sql日期格式的实现
JDBC工具类JdbcFileDateUtil上传文件和日期格式转换,包含单文件多文件上传最新最简单简便的办法 本文档介绍了文件上传的处理方法,包括当前端form表单的编码类型为enctype=&qu ...
- voc数据集格式转换为coco数据集格式+修改xml格式文件
voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...
- FBX格式转换为GLTF/GLB格式
有小伙伴说通过blende将fbx转glb/gltb格式的模型无法在web端加载,或glb模型无法打开,比如腾讯地图加载gltf. 这里个大家分享一个插件 可以将fbx格式转换为glb格式 windo ...
- 如何使用python将Java时间戳格式转换为python时间戳格式?
工作中问题描述: 一次代码测试结果生成后,发现工具生成的结果集记录中时间的格式是 "Wed Nov 02 08:24:18 CST 2022" 周 月 日 时:分: ...
- python视频转化_python实现m3u8格式转换为mp4视频格式
开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看, ...
- m3u8转换到mp4 python_python实现m3u8格式转换为mp4视频格式
开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看, ...
- 批量将.flac格式转换为.wav等格式
在声纹识别的研究中,不同数据集包含不同的音频格式(.flac/ .wav/ ...),但个别情况下,我们有想使用统一的格式来处理,因此就需要批量转换了. 这里需要使用ffmpeg进行格式转换,因此需要 ...
最新文章
- vuejs和html语言一样么,vue和vue.js有区别吗?
- mac bash 下使用vi 快捷方式——因为没有alt键 所以没有办法 用vi模式也非常方便的...
- go语言笔记——map map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序...
- 1.使用适配器模式设计一个仿生机器人:要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人发声方法talk(),机器人移动方法move()等。如果希望在不改变已有Bird类代码的基础上
- 推荐一个接口文档工具
- 服务器开放特定端口的方法
- opencv摄像头速度慢_c++ - 从OpenCV 3切换到OpenCV 4会导致网络摄像头以最高5帧的速度记录,而不是通常的30帧。 - SO中文参考 - www.soinside.com...
- 计算机安全的加密技术,计算机安全加密技术研究(4篇)(共14695字).doc
- Snowflake Snow Snowflakes--POJ 3349
- android 发送按键 0,android monitor tool (8.0 模拟发送按键及触摸屏事件实现)
- HFSS仿真软件完成微带天线设计
- 10个切片动作过渡PR预设
- 编写程序,提示用户输入一个数并显示该数,使用字符模拟7段显示器的效果:Enter a number:491-9014
- 数字电视标准5种规格720p、1080i和…
- 移动硬盘插到台式机,外接网卡无法连接wifi处理
- python+nodejs+php+springboot+vue 社区小区报修 -社区信息管理
- FPGA+DSP编码过程
- DELL PC服务器PowerEdge 管理工具OMSA的使用
- 断流测试软件,不用担心WiFi断流了!亲身测试:试了这个方法后,信号杠杠的...
- go get connectex: A connection attempt failed because the connected party did not properly respond
热门文章
- Leetcode 699. 掉落的方块 C++
- 数据分析学习之完整的数据挖掘项目流程
- 智能无人机课程里的 PX4+TX2+小觅 vins 实飞教程
- 陶洋的个人简历——自荐信
- 米家app扫描不到石头机器人_【石头扫地机器人T4使用总结】集尘盒|回充|扫地|APP_摘要频道_什么值得买...
- 命令模式(Command模式)详解
- 在Unity中用UGUI实现装备合成树
- jquery点击图片变大,再点击回复如初
- nginx白名单黑名单设置
- 【幻灯片动画制作软件】Focusky教程 | Focusky的幻灯片功能怎么用?