10X bam文件按barcode分割
时间:2022-07-23
本文章向大家介绍10X bam文件按barcode分割,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近遇到一个需求是将10X单细胞测序数据按照barcode分割,一般分割文件我们首先想到bamtools split
,具体用法可以参考之前记录过的bamtools分割bam文件,但是由于bamtools同时打开并记录的文件数量有限制,所以用下面的分割方式会报memory error。
bamtools split -in tmp.bam -tag CB
因此,查了一下,有人提出了一种解决方案,即将bam文件按barcode排序,然后按相同的barcode将reads取出,代码(转自herrinca )如下: 原文链接:https://github.com/pezmaster31/bamtools/issues/135
samtools sort -t CB unsorted.bam > sorted_tags.bam
##### Code has not been tested on unsorted bam files, sort on barcode (CB):
##### samtools sort -t CB unsorted.bam > sorted_tags.bam
###
##### INPUT: .bam file to be sorted and output directory to place split BC
##### OUTPUT: .bam file for each unique barcode, best to make a new directory
### Python 3.6.8
import pysam
### Input varibles to set
# file to split on
unsplit_file = "/path/to/dir/of/data/sorted_tags.bam"
# where to place output files
out_dir = "/path/to/dir/of/out_data/"
# variable to hold barcode index
CB_hold = 'unset'
itr = 0
# read in upsplit file and loop reads by line
samfile = pysam.AlignmentFile( unsplit_file, "rb")
for read in samfile.fetch( until_eof=True):
# barcode itr for current read
CB_itr = read.get_tag( 'CB')
# if change in barcode or first line; open new file
if( CB_itr!=CB_hold or itr==0):
# close previous split file, only if not first read in file
if( itr!=0):
split_file.close()
CB_hold = CB_itr
itr+=1
split_file = pysam.AlignmentFile( out_dir + "CB_{}.bam".format( itr), "wb", template=samfile)
# write read with same barcode to file
split_file.write( read)
split_file.close()
samfile.close()
- IntPtr 转 string
- 微信开发中网页授权access_token与基础支持的access_token异同
- angularJS constant和value
- 让你的HTTPS更安全
- mybatis异常 :元素内容必须由格式正确的字符数据或标记组成。
- 剑指offer代码解析——面试题24二叉搜索树的后序遍历序列
- 剑指offer代码解析——面试题23从上往下打印二叉树
- Spring Boot 集成Shiro和CAS
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- 剑指offer代码解析——面试题21包含min函数的栈
- 剑指offer代码解析——面试题19二叉树的镜像
- mysql高可用架构设计,处理高并发,大流量!
- 零基础入门深度学习 | 第三章:神经网络和反向传播算法
- 微信企业付款到个人钱包引发的坑之反思~!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法