在对之前的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. bzoj4974 字符串大师

    4974: 字符串大师 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 310  Solved: 155[Submit][Status][Discuss] ...

  2. Python的集合

    1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...

  3. GDAL编译

    使用cmd命令行编译 1.首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示” ...

  4. SpringBoard 无法启动应用程序(错误:-3)

    临时不知道错误的细节原因,重新启动模拟器就好了. 先记录下.

  5. Selenium_WebDriver登录模拟鼠标移动切换窗体等操作练习(cssSelector初练手)_Java

    cssSelector 据说cssSelector比xpath快. 所以,有固定ID属性的页面元素用By.id或者By.cssSelector("#id属性值")来找,有class ...

  6. 剑指 offer代码解析——面试题39推断平衡二叉树

    题目:输入一颗二叉树的根结点.推断该树是不是平衡二叉树. 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树. 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度 ...

  7. 【特征匹配】BRISK原文翻译

    原文:Stefan Leutenegger, Margarita Chli et al.<BRISK: Binary Robust Invariant Scalable Keypoints> ...

  8. Java泛型深入理解

    泛型的优点: 泛型的主要优点就是让编译器保留參数的类型信息,执行类型检查,执行类型转换(casting)操作,编译器保证了这些类型转换(casting)的绝对无误. /******* 不使用泛型类型 ...

  9. Bandit Wargame Level12 Writeup

    Level Goal The password for the next level is stored in the file data.txt, which is a hexdump of a f ...

  10. Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/ServletRegistrationBean

    异常信息 2017-09-02 18:06:37.223 [main] ERROR o.s.boot.SpringApplication - Application startup failed ja ...