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只给了一 ...
随机推荐
- mysql 各数据类型的 大小及长度
数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0, ...
- 【docker 一】入门实践、环境部署、基本操作指令、镜像库、数据卷
简述 `docker是如火如荼的容器技术,今后会陆续上传关于微服务技术的学习笔记,希望能和大家一起学习一起分享!` docker环境搭建 1.获取最新版的Docker安装包 $ wget -qO- h ...
- ROC和AUC的区别
ROC是一个曲线,AUC是曲线下面的面积值. ROC曲线是FPR和TPR的点连成的线. 可以从上面的图看到,横轴是FPR, 纵轴是TPR (TPR = TP / (TP + FN):FPR = F ...
- SpringMVC+Mybatis架构中的问题记录
2014/08/16 记录 今天遇到个问题.折腾了我大约4个小时,好坑啊由于之前没遇到过 我的包是这么分的:com.project名.模块名.service.impl 在spring 配置这个 ...
- 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
内容简单介绍 .第二部分第五课:用户和权限,有权就任性 2.第二部分第六课预告:Nano,刚開始学习的人的文本编辑器 用户和权限.有权就任性 今天的标题也挺任性的啊,虽说小编是一个非常本分的人(真的吗 ...
- 四.RabbitMQ之发布/订阅(Publish/Subscribe)
一.基础知识点 在上述章节中,我们理解的RabbitMQ是基于如下这种模式运作的. 而事实上,这只是我们简单化了的模型的结果,真正的模型应该是这样的. P:Producer 生产者,生产消息,把它放进 ...
- Centos7.4下用Docker-Compose部署WordPress
前言 最近在学习Docker相关知识,通过阅读第一本Docker书后,正想着手实战用一下这个技术,但又不太敢直接在项目环境下动手.考虑足足三秒钟之后决定买个阿里云ECS搭建一个属于自己的基于Docke ...
- win10 系统输入法与 idea的 ctr+shift+f 快捷键冲突,解决办法
我认为首先是输入法简繁热键的冲突,(当然也有人认为是qq的热键冲突,) 解决办法: 1.首先打开搜狗输入法的设置(当然有的可能不是搜狗输入法,其他的输入法设置步骤都是大同小异) 看到了吗,就是这个热键 ...
- eclipse 代码 editor 界面出现奇怪符号解决
Preferences->General->Editors->Text Editors->去掉 Show whitespace characters->apply
- 【JMeter】JMeter代码里若有外部自定义方法调用需要写进方法体里,否则报错