去除测序reads中的接头:adaptor
之前用c写过一个程序,查找reads中是否包含了adaptor,如果检测到的话就过滤掉含有adaptor的reads,这次在过滤完数据之后发现接头序列比较多,为了提升组装效果,又不能很大地影响数据量,需要对接头进行截断处理,并过滤过短的reads,用python写了一个简短的程序,指定超过3个错配以内的匹配都认为匹配到,并且长度小于50bp的reads过滤,在以下程序基础上添加传入参数,可以适用比较多的情况(单端、双端、含有single等):
import sys
import re
from Bio import SeqIO def rmPE(read1,read2,adaptor1,adaptor2,min_length):
res_1 = rmSE(read1,adaptor1,min_length)
res_2 = rmSE(read2,adaptor2,min_length)
if res_1 and res_2:
return res_1,res_2
else:
return False def rmSE(read,adaptor,min_length):
seq = read.seq
seed_len = 6
a_len = len(adaptor)
seq_len = len(seq)
for i in range(a_len - seed_len):
seed = adaptor[i:i+seed_len]
pos = 0
while(pos < seq_len):
find_pos = seq.find(seed,pos)
if find_pos > 0:
mistaken_count = 0
_b = find_pos
_e = find_pos + seed_len
while(_b >= 0 and i >= find_pos - _b):
if adaptor[i - find_pos + _b] != seq[_b]:
mistaken_count += 1
if mistaken_count > 3:
break
_b -= 1
else :
while(_e < seq_len and i - find_pos + _e < a_len):
if adaptor[ i - find_pos + _e ] != seq[_e]:
mistaken_count += 1
if mistaken_count > 3:
break
_e += 1
else:
if find_pos - i > min_length:
return read[:find_pos-i]
else :
return False
pos = find_pos + 1
else:
break
return read def rmAdaptor(argv):
argv.pop(0)
type = argv.pop(0)
if type=='PE':
read1_file,read2_file,adaptor1,adaptor2,out_prefix,min_length = argv
read2_records = SeqIO.parse(open(read2_file),'fastq')
read1_out = open( '%s.1.fq'%out_prefix,'w' )
read2_out = open( '%s.2.fq'%out_prefix,'w' )
for read1 in SeqIO.parse(open(read1_file),'fastq'):
read2 = read2_records.next()
rmPE_res = rmPE(read1,read2,adaptor1,adaptor2,min_length)
if rmPE_res:
read1_out.write(rmPE_res[0].format('fastq'))
read2_out.write(rmPE_res[1].format('fastq'))
elif type=='SE':
reads_file,adaptor,out_prefix,min_length = argv
reads_out = open( '%s.single.fq'%out_prefix,'w' )
for reads in SeqIO.parse(open(reads_file),'fastq'):
rmSE_res = False
if re.search('[\s\/](\d)',reads.id).group(1) == '':
rmSE_res = rmSE(reads,adaptor1,min_length)
elif re.search('[\s\/](\d)',reads.id).group(1) == '':
rmSE_res = rmSE(reads,adaptor2,min_length)
if rmSE_res:
reads_out.write(rmSE_res.format('fastq')) if __name__ == '__main__':
rmAdaptor(sys.argv)
去除测序reads中的接头:adaptor的更多相关文章
- fastx_toolkit去除测序数据中的接头和低质量的reads
高通量测序数据下机后得到了fastq的raw_data,通常测序公司在将数据返还给客户之前会做"clean"处理,即得到clean_data.然而,这些clean_data是否真的 ...
- RNAseq测序reads定位
RNAseq测序reads定位 发表评论 3,210 A+ 所属分类:Transcriptomics 收 藏 获得RNA-seq的原始数据后,首先需要将所有测序读段通过序列映射(mapping) ...
- java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。
import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
- 去除List列表中反复值(稍作调整,也适合于List<T> 和 List<?>)
方法一 循环元素删除 [c-sharp] view plaincopy public static void removeDuplicate(List list) { for ( int i = 0 ...
- Java 去除 ArrayList 集合中的重复元素
// One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 Arr ...
- 去除vue项目中的#及其ie9兼容性
一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...
- 3.键盘输入10个数,放到数组中,(1)去除该数组中大于10的数 (2)将该数组中的数字写入到本地文件number.txt中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; ...
- 正则去除html字符串中的注释、标签、属性
var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...
随机推荐
- c++ 中 pair 的 使用方法
原转载地址:点击打开链接 pair的类型: pair 是 一种模版类型.每个pair 可以存储两个值.这两种值无限制.也可以将自己写的struct的对象放进去.. pair<string,int ...
- 移动GIS在企业各个行业中的应用解决方案
“移动GIS的设备厂商越来越多地关注行业用户的需求,所以移动GIS的市场前景是非常广阔的.当前国内移动GIS,已广泛应用于测绘.国土.环境.水利.农业.林业和矿产等传统资源管理领域和城市规划方面.在应 ...
- Spring之bean二生命周期
上一博客主要学习了下bean的配置.注入.自定义属性编辑器,今天来熟悉bean的生命周期.在开发中生命周期是一个很常见的名词,基本每种编程语言都能找到与它关联的.关于bean的生命周期我在网上也找了好 ...
- Natural Hazards 隐私政策
隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...
- 2017最新安装mysql教程及遇到的问题解决Windows下
今天因为换了个LINUX系统 把我的E盘不小心给卸载了 结果还是不能用 导致 我E盘里面的mysql也都被删除了 所以又要在次重新装一个MYSQL 了 花了很多时间 也看了很多教程.好 ...
- Android - shape圆形画法(oval)
shape圆形画法(oval) 本文地址: http://blog.csdn.net/caroline_wendy 1. 创建一个目录drawable, 用于存放xml类型的图片资源; 2. 在dra ...
- 通过ssh訪问NAT网络模式虚拟机里的Linux
进入 GuestOS : #/sbin/ifconfig 查看 inet addr : 10.0.2.15 然后到 HostOS 去, 看控制面板, 看网络和共享中心的VirtualBox Host- ...
- C - The C Answer (2nd Edition) - Exercise 1-7
/* Write a program to print the value of EOF. */ #include <stdio.h> main() { printf("EOF ...
- springboot+rabbitmq例子
demo目录 贴代码 1.ProducerConfig.java package com.test.config; import org.springframework.amqp.core.Bindi ...
- Android打赏功能:支付宝转账
适用于个人开发者开发的APP中,让用户打赏给作者,实质上进行支付宝转账到指定账号的功能. 一.打开'支付宝'APP ,点击'收款'功能 ,将收款码(二维码)图片保存到手机上(进一步移到电脑上). 二. ...