454ITS数据按barcode和primer分类程序v1.0
不知道有什么好办法可以让primer允许漏配,现在仅仅是允许错配,还是有一些没有配上,454数据有些primer漏配了一些,下一步解决这个问题
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <getopt.h>
using namespace std; int max_mis = ;
int N = ;
string primer = "";
string* barcode = NULL;
string* barcodeName = NULL;
void usage ()
{
cout << "\nUsage: splitByBarcode [options] <read.fasta> <barcode.txt> <output prefix>\n"
<< " -m <int> allow the max mis num, default " << max_mis << "\n"
<< " -p <string> primer, required "<<endl
<< " -n <int> barcode num, required"<<endl;
exit();
}
struct COMPARE{
int ifCompared;
int posStart;
int posEnd;
};
COMPARE compare(string reads, string barcode, int maxmis,int b,int e);
int main(int argc, char *argv[])
{
if (argc < )
{
usage();
}
int c;
while ((c=getopt(argc,argv,"m:n:p:")) != -)
{
switch (c)
{
case 'm' : max_mis = atoi(optarg);break;
case 'n' : N = atoi(optarg); break;
case 'p' : primer = optarg;break;
default : cout<<"error:"<<(char)c<<endl;usage();
}
}
if(N<=){
cerr<<"please input the required barcode num\n";
exit();
}
if(primer == ""){
cerr<<"please input the required primer\n";
exit();
}
string seq_file = argv[optind++];
string barcode_file = argv[optind++];
string outPrefix = argv[optind++];
string out_file = outPrefix + ".list";
barcode = new string[N];
barcodeName = new string[N]; for(int i=;i<N;i++){
barcodeName[i] = "";
barcode[i] = "";
} ifstream reads;
reads.open(seq_file.c_str());
if(!reads){
cerr<<"fail to open input file"<<seq_file<<endl;
}
ifstream barcode_in;
barcode_in.open(barcode_file.c_str());
if(!barcode_in){
cerr<<"fail to open barcode file" <<barcode_file<<endl;
} string text;
int k=;
while( getline( barcode_in, text, '\n') )
{
int startPos = , endPos;
endPos = text.find("\t");
barcodeName[k] = text.substr(startPos, endPos-startPos+);
startPos = endPos + ;
endPos = text.find("\t",startPos);
barcode[k] = text.substr(startPos, endPos-startPos+);
//cout << barcodeName[k] <<"\t"<< barcodeForward[k] <<"\t"<< barcodeReverse[k] << endl;
k++;
} ofstream splitlist;
splitlist.open(out_file.c_str());
if(!splitlist){
cerr<<"fail to creat output file" << out_file <<endl;
}
int line_num = ;
splitlist<<"barcodeName\tid\tid_line\n";
while( getline( reads, text, '\n') )
{
string seq = "", id = "";
id = text;
getline( reads, text, '\n');
seq = text; COMPARE p1 ,p2;
p1.ifCompared = p2.ifCompared = ;
for(int k=;k<N;k++){
p1 = compare(seq,primer,max_mis,,seq.length()-primer.length()+);
if( p1.ifCompared )
{
p2 = compare(seq,barcode[k],,,p1.posStart);
if ( p2.ifCompared ){
//cout<<seq1<<"\t"<<barcodeForward[k]<<"\t"<<seq2<<"\t"<<barcodeReverse[k]<<endl;
splitlist<<barcodeName[k]<<"\t"<<id<<"\t"<<line_num<<endl;
break;
}
}
}
line_num = line_num + ;
}
delete[] barcode;
delete[] barcodeName;
splitlist.close();
barcode_in.close();
reads.close();
}
COMPARE compare(string reads, string barcode, int maxmis, int b, int e)
{
COMPARE p;
//cout<<b<<"\t"<<e<<endl;
// cout<<barcode<<"\t"<<barcode.length()<<endl;
for(int i=b;i<e;i++)
{
int mismatch = ;
int pos = ;
while(mismatch <= maxmis ){
if(reads[i+pos] != barcode[pos]) mismatch++;
pos++;
if(pos == barcode.length()){
p.posStart = i;
p.posEnd = i+pos;
// cout<<p.posStart<<"\t"<<p.posEnd<<endl;
p.ifCompared = ;
return p;
}
}
}
p.ifCompared = ;
return p;
}
454ITS数据按barcode和primer分类程序v1.0的更多相关文章
- 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...
- ASP.NET Boilerplate终于发布v1.0了
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ABP经过2年多的开发,终于发布第一个主要版本了,谨此提醒ABP的使用者. ASP.N ...
- 【JS】heatmap.js v1.0 到 v2.0,详细总结一下:)
前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这 ...
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...
- The P4 Language Specification v1.0.2 Header and Fields
前言 本文参考P4.org网站给出的<The P4 Language Specification v1.0.2>的第二部分首部及字段,仅供学习:). 欢迎交流! Header and Fi ...
- 高性能以太网芯片W5500 数据手册 V1.0(二)
继续给大家介绍W5500 数据手册. 2.4 固定数据长度模式(FDM) 在外设主机不能控制 SCSn 时,可以使用固定数据长度模式. 此时,SCSn 必须连接到低电平(保持接地).与此同 ...
- [Android应用]《花界》V1.0 正式版隆重发布!
http://www.cnblogs.com/qianxudetianxia/archive/2012/04/05/2433669.html 1. 软件说明(1). 花界是一款看花软件:“看花,议花, ...
- 【转】寻找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) (v1.0) (
原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b57.html 寻找最好的笔记软件:三强篇(EverNote.Mybase.Surfulater) ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
随机推荐
- Kotlin 一个好用的新功能:Parcelize
在开发中,如果有需要用到序列化和反序列化的操作,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不同的场景. Serializable 的优点是实现简单,你只需 ...
- 使用.Net Core+EF7 完成CodeFirst
emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...
- <算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...
- Python2/3中的urllib库
urllib库对照速查表 Python2.X Python3.X urllib urllib.request, urllib.error, urllib.parse urllib2 urllib.re ...
- ajax xmlhttp 局部显示另一个页面
function loadXMLDoc(url) { var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera ...
- Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行
Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...
- poj - 1185 炮兵阵地 状压DP 解题报告
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363 Description ...
- Maven依赖的是本地工程还是仓库jar包?
相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例子,其架构如 ...
- 关于windows phone 8.1系统手机对html5触摸事件的支持情况
近日购入一部微软Lumia 640手机,目的主要就是为了测试年中开发完成的响应式移动web项目,同时也为了将来升级win10 mobile系统.由于我们的项目目前只考虑支持IOS与Android系统, ...
- python中对象、类型和元类之间的关系
在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...