在对之前的ITS数据(454数据)做split时,发现有一些reads没有被匹配上,但是barcode能够完全匹配,虽然之后的primer在中间漏了一个碱基,导致后面的碱基全部误匹配,从而导致这条reads没有被匹配上的问题。

终于解决Qiime的问题后,使用 split_libraries.py 做切分,发现同样有这样的问题,Qiime并没有解决漏匹配的问题。

考虑如果用正常方法去做的话,对较小的异常数据需要花费N倍于正常数据的计算资源(包括硬件资源和运行时间),对于这个问题来说是非常不明智的。

由于primer长度在20左右,我的解决办法是,取末端6个碱基,在reads的这6个碱基相应位置左移1-2位,作为漏匹配1-2位的替代处理,这样既解决了漏匹配的问题,而且还能够使原正常的数据匹配速度进一步加快。

 #!/usr/bin/perl
use strict; my $usage = "usage:\nsplit.pl\tmapfile\t.fa_file\toutprefix\n";
die $usage unless @ARGV==; my $mapfile = shift @ARGV;
my $fafile = shift @ARGV;
my $outprefix = shift @ARGV; my %barcode;my $barcode_length = ;
my %primer;my $primer_length = ;
open MAP,$mapfile or die $!;
while(<MAP>){
chomp;
next if /^#/;
my @a = split /\s+/;
$barcode{$a[]} = $a[];
$barcode_length = length($a[]) unless $barcode_length;
die "barcode length do not match!" unless ($barcode_length == length($a[]));
$primer{$a[]} = $a[];
$primer_length = length($a[]) unless $primer_length;
die "primer length do not match!" unless ($primer_length == length($a[])); print "$barcode_length\t$primer_length\n";
}
close MAP; my %fa;
open FA,$fafile or die $!;
$/ = ">";
<FA>;
while(<FA>){
chomp;
my @a = split /\n/;
my $id = shift @a;
my $seq = join ("",@a);
@a = split (/\s+/,$id);
$id = shift @a;
$fa{$id} = $seq;
}
$/ = "\n";
close FA; open OUT,">$outprefix.fna" or die $!;
foreach my $id (sort keys %fa){
foreach my $sample (sort keys %barcode){
my $seq = substr($fa{$id},,$barcode_length);# print "$seq\n";
if ($barcode{$sample} eq $seq){
# print "barcode matched\n";
my $pri0 = substr($fa{$id},$barcode_length+$primer_length-,);
my $pri1 = substr($fa{$id},$barcode_length+$primer_length-,);
my $pri2 = substr($fa{$id},$barcode_length+$primer_length-,);
my $pri = substr($primer{$sample},$primer_length-,);
if ($pri0 eq $pri){
my $s = substr($fa{$id},$barcode_length+$primer_length,length($fa{$id})-$barcode_length-$primer_length);
print OUT ">$sample\t$id\n$s\n";
last;
}
if($pri1 eq $pri){ my $s = substr($fa{$id},$barcode_length+$primer_length-,length($fa{$id})-$barcode_length-$primer_length+);
print OUT ">$sample\t$id\n$s\n";
last;
}
if($pri2 eq $pri){
my $s = substr($fa{$id},$barcode_length+$primer_length-,length($fa{$id})-$barcode_length-$primer_length+);
print OUT ">$sample\t$id\n$s\n";
last;
}
}
}
}
close OUT;

primer漏配问题解决的更多相关文章

  1. 454ITS数据按barcode和primer分类程序v1.0

    不知道有什么好办法可以让primer允许漏配,现在仅仅是允许错配,还是有一些没有配上,454数据有些primer漏配了一些,下一步解决这个问题 #include <cstdio> #inc ...

  2. Batsing的网页编程规范(HTML/CSS/JS/PHP)

    特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...

  3. CCIE-交换路由复习笔记

    交换 考点: 1.trunk link(基础) 2.vtp 3.vlan 4.stp rstp mstp 5.hsrp vrrp glbp 6.ec Trunk link: 修改封装模式 802.1q ...

  4. 网络基础Cisco路由交换四

    NAT及静态转换 概述(NAT:网络地址转化) 作用: 通过将内部网络的私有ip地址翻译成全球唯一的公网ip地址, 使内部网络可以连接到互联网等外部网络上. NATA的特性 优点: 节省公有合法ip地 ...

  5. 【原创】微服务为什么一定要用docker

    引言 早在2013年的时候,docker就已经发行,然而那会还是很少人了解docker.一直到2014年,Martin Fowler提出了微服务的概念,两个不相干的技术终于走在了一起,创造了今天的辉煌 ...

  6. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  7. CDR话单主要字段介绍

    l  Time of call connection RRC连接时的时间,格式:yyyy年mm月dd日hh时mm分ss秒 l  Call Setup Time per sections 呼叫建立时长 ...

  8. 指针-AC自动机

    大家都不喜欢指针,但是这个AC自动机仿佛不用不行…… 先引用我最喜欢的话:“AC自动机,不是自动AC的机器.” 如果写不好还可能一直WA AC自动机是KMP与Trie树的完美结合,适用于多字符串匹配, ...

  9. 单点登录之 CAS SSO 从入门到精通(第一天)

    转自:http://blog.csdn.net/lifetragedy/article/details/43817903 啊......it's quite a long time. 好久没更新博客了 ...

随机推荐

  1. 速微共享链的使用步骤和源码分析(UI设计参考)

    一.速微共享链引言 速微共享链Service服务是Android四大组件之一,在Android中有着举足重轻的作用.Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处 ...

  2. QQ互联申请及配置

    今天要说的只是针对QQ互联的操作,其他的互联请参考相关网站. 第一步:需要申请API接口的两码 自行登录QQ互联https://connect.qq.com/index.html,然后按照要求申请就O ...

  3. 深入理解 Promise

    自从ES6流行起来,Promise 的使用变得更频繁更广泛了,比如异步请求一般返回一个 Promise 对象,Generator 中 yield 后面一般跟 Promise 对象,ES7中 Async ...

  4. Vboxmanage改动uuid报错的解决的方法

    我的环境: Virtualbox 4.3.10 r93012 操作系统:win7 问题:Virtualbox在使用拷贝的虚拟盘时会提示uuid冲突: Because a hard disk with ...

  5. jQuery遮罩层插件

    在网页上常常遇到须要等待非常久的操作,比方导出报表等.为了预防用户点击其它操作或者多次点击同个功能,须要用遮罩层把页面或者操作区盖住.防止用户进行下一步操作.同一时候能够提高界面友好度,让用户知道操作 ...

  6. 【quickhybrid】API多平台支撑的实现

    前言 在框架规划时,就有提到过这个框架的一些常用功能需要支持H5环境下的调用,也就是需要实现API的多平台支撑 为什么要多平台支撑?核心仍然是复用代码,比如在微信下,在钉钉下,在quick容器下, 如 ...

  7. windows下wamp多域名的配置

    前面的话 本文将详细介绍windows下wamp多域名的配置方法 修改hosts文件 hosts文件的位置:系统盘→“windows”→“System32”→“drivers”→“etc” 打开hos ...

  8. 腾讯云实力通过工信部测评,获全国范围CDN经营许可

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 近日,腾讯云提前完成了全国范围的CDN资质测评,顺利获得工信部颁发的CDN业务全国范围的经营许可证. 2017年1月份,工信部发布<关于 ...

  9. DB主从一致性架构优化4种方法

    需求缘起 大部分互联网的业务都是"读多写少"的场景,数据库层面,读性能往往成为瓶颈.如下图:业界通常采用"一主多从,读写分离,冗余多个读库"的数据库架构来提升数 ...

  10. Java web轻量级开发面试教程的前言

    本文来是从 java web轻量级开发面试教程从摘录的. 为什么要从诸多的Java书籍里选择这本?为什么在当前网络信息量如此大的情况下还要买这本书,而不是自己通过查阅网络资料学习?我已经会开发Java ...